/** * Essa classe representa uma interpretação do padrão de projetos Flux. * No padrão Flux os dados da aplicação são chamados de "estado" e existem * algumas regras para gerenciamento/manipulação desse estado: * * 1 - O estado é imutável. * 2 - Toda modificação de estado é representada por uma "ação". * 3 - Quando "ações" acontecem a "store" cria um novo estado e notifica a todos interessados. * * Nessa interpretação desse design pattern, o StateManager faz o papel da store, * notificando os manipuladores de estado (handlers), que são responsáveis por pedaços * do estado (slices). * * O StateManager mantém dois tipos de estados: "Histórico" e "Não Histórico". No estado * "Histórico", sempre que uma alteração de estado acontece, o estado anterior é guardado em * uma pilha, o que permite que possamos voltar no tempo, desfazendo algumas ações */ export default class StateManager { private _reducers; private _past; private _future; private _present; private _nonHist; private _histClean; constructor(reducers: Array); process(action: StateAction): void; select(sliceName: string, selector: (state: any) => any): any; private isHistoric; private updateSlice; private getSlice; canUndo(): boolean; canRedo(): boolean; undo(): void; redo(): void; clearUndo(): void; persist(): void; } /** * Baseado no padrão Flux, qualquer alteração de estado parte de uma ação. * Essa ação pode conter um payload ou não. */ export interface StateAction { /** * O tipo da ação representa o que aconteceu. Com base nesse tipo * os manipuladores de estado agem criando um novo estado. */ type: string; /** * Muitas ações contém informações importantes para compor o novo estado. * Isso é chamado de payload. */ payload?: any; } export interface ActionReducer { sliceName: string; reduce(stateManager: StateManager, state: any, action: StateAction): any; }