Store Undo Redo para Angular | ng-hub-ui-history
Store de undo y redo para Angular con APIs compatibles con Signals, transacciones, límites y soporte para formularios reactivos.
Referencia API
Aquí tienes el contrato completo de history: todo lo que puedes enlazar, escuchar, proyectar y personalizar, reunido en un solo sitio. Enlaza lo que necesites y dale el estilo que quieras — es standalone y reactivo con signals.
Inputs
Ajusta history a tu gusto con 4 inputs. Se enlazan como cualquier @Input de Angular.
| Nombre | Tipo | Por defecto | Descripción |
|---|---|---|---|
createHistoryStore(config) | HistoryStoreConfig<T, K> | — | Crea un almacén basado en Signals con límites opcionales y funciones diff/patch personalizadas. |
registerObject(id, initialState)Obligatorio | (id: K, initialState: T) => void | — | Registra el estado base del objeto e inicia un historial lineal para esa clave. |
commit(id, newState, options?)Obligatorio | (id: K, state: T, options?: { label?: string }) => boolean | — | Almacena el parche diff e invalida la rama de redo si el puntero no estaba al final. |
watchForm(id, form, options?) | (id: K, form: FormGroup, options?: WatchFormOptions) => () => void | — | Confirma automáticamente los cambios de valor del formulario y devuelve un callback de cancelación de suscripción. |
Outputs
Reacciona a lo que hace history: 1 eventos a los que enganchar tu lógica.
| Nombre | Tipo | Descripción |
|---|---|---|
states | Signal<Map<K, T>> | Mapa reactivo de signals con snapshots inmutables actuales por id de objeto. |
Métodos
Controla history desde el código — 16 métodos en su superficie programática.
| Nombre | Firma | Devuelve | Descripción |
|---|---|---|---|
createHistoryStore | createHistoryStore<T, K>(config?: HistoryStoreConfig<T, K>): HistoryStore<T, K> | HistoryStore<T, K> | Factoría que crea un store de historial basado en signals que rastrea múltiples objetos por id. Acepta límites de retención opcionales (maxEntries, por defecto 100; maxBytes, por defecto 512000), un keySelector y estrategias de diff/patch personalizadas. |
HistoryStore.states | states: Signal<Map<K, T>> | Signal<Map<K, T>> | Signal computada que expone un mapa de las instantáneas de estado inmutables actuales indexadas por id de objeto. |
HistoryStore.registerObject | registerObject(id: K, initialState: T): void | — | Registra un objeto rastreado con su estado inicial e inicia una línea de tiempo de historial nueva y vacía para ese id. |
HistoryStore.registerFromObject | registerFromObject(initialState: T): K | K | Registra un objeto rastreado derivando su id del keySelector configurado y devuelve ese id. Lanza un error cuando no se configuró ningún keySelector. |
HistoryStore.commit | commit(id: K, newState: T, options?: HistoryCommitOptions): boolean | boolean | Confirma una nueva instantánea de estado para un id registrado, almacenando los patches hacia delante y hacia atrás y descartando cualquier entrada de redo por delante del puntero. Devuelve false cuando el nuevo estado no produce cambios. Dentro de una transacción abierta solo actualiza el estado actual sin crear una entrada. |
HistoryStore.commitFromObject | commitFromObject(newState: T, options?: HistoryCommitOptions): boolean | boolean | Confirma un nuevo estado derivando el id del keySelector configurado. Lanza un error cuando no se configuró ningún keySelector. |
HistoryStore.undo | undo(id: K): boolean | boolean | Revierte un paso del historial aplicando el patch hacia atrás de la entrada. Devuelve false cuando no hay nada que deshacer. |
HistoryStore.redo | redo(id: K): boolean | boolean | Reaplica un paso del historial aplicando el patch hacia delante de la entrada. Devuelve false cuando no hay nada que rehacer. |
HistoryStore.canUndo | canUndo(id: K): boolean | boolean | Devuelve si undo es posible en este momento para el id de objeto dado. |
HistoryStore.canRedo | canRedo(id: K): boolean | boolean | Devuelve si redo es posible en este momento para el id de objeto dado. |
HistoryStore.getState | getState(id: K): T | undefined | T | undefined | Devuelve un clon profundo del estado actual para el id dado, o undefined cuando el id no está registrado. |
HistoryStore.history | history(id: K): HistoryMetadata | HistoryMetadata | Devuelve metadatos de solo lectura del historial del objeto: el puntero, el número de entradas, los bytes retenidos aproximados y, por entrada, la etiqueta, la marca de tiempo y los bytes. |
HistoryStore.beginTransaction | beginTransaction(id: K, label?: string): void | — | Inicia una transacción para que los commits siguientes se colapsen en una única entrada de historial consolidada. Lanza un error cuando ya hay una transacción abierta para el id. |
HistoryStore.endTransaction | endTransaction(id: K): boolean | boolean | Finaliza la transacción abierta, confirmando una entrada consolidada desde el estado inicial de la transacción hasta el estado actual. Devuelve false cuando no había ninguna transacción abierta o no se hicieron cambios. |
HistoryStore.watchForm | watchForm(id: K, form: FormGroup, options?: WatchFormOptions): () => void | () => void | Se suscribe al valueChanges de un FormGroup y confirma automáticamente cada emisión, omitiendo opcionalmente la inicial. Devuelve un callback de desuscripción. |
HistoryStore.clearHistory | clearHistory(id: K): void | — | Limpia todas las entradas de historial del id dado, conservando el estado actual como nueva instantánea base y descartando cualquier transacción abierta. |
Templates
Todavía no hay templates documentados.