UNPKG

@etsoo/shared

Version:

TypeScript shared utilities and functions

99 lines (98 loc) 2.4 kB
import { EventBase, EventClass } from "./EventClass"; interface EHistoryEventData { /** * Current index */ index: number; } interface EHistoryNavigateEventData extends EHistoryEventData { /** * Delta */ delta: number; } type EHistoryEventDef = { clear: EHistoryEventData; navigate: EHistoryNavigateEventData; push: EHistoryEventData; replace: EHistoryEventData; }; type EHistoryEventType = Exclude<keyof EHistoryEventDef, "navigate">; /** * ETSOO Extended history event */ export declare class EHistoryEvent extends EventBase<EHistoryEventType, EHistoryEventData> { } /** * ETSOO Extended history navigate event */ export declare class EHistoryNavigateEvent extends EventBase<"navigate", EHistoryNavigateEventData> { constructor(target: {}, data: EHistoryNavigateEventData); } /** * ETSOO Extended abstract history class */ export declare abstract class EHistory<T> extends EventClass<EHistoryEventDef> { readonly maxDepth: number; private _index; /** * States */ readonly states: T[]; /** * States length */ get length(): number; /** * Get current state index */ get index(): number; /** * Get current state */ get state(): T | undefined; /** * Constructor * @param maxDepth Max depth of the history */ constructor(maxDepth?: number); /** * Back to the previous state */ back(): void; /** * Clear all states but keep event listeners */ clear(): void; /** * Create event * @param type Type * @param index Current index */ protected createEvent<T extends EHistoryEventType>(type: T, index: number): EHistoryEvent; protected createNavigateEvent(index: number, delta: number): EHistoryNavigateEvent; /** * Forward to the next state */ forward(): void; /** * Get [undo, redo] status */ getStatus(): [boolean, boolean]; /** * Go to the specific state * @param delta A negative value moves backwards, a positive value moves forwards */ go(delta: number): undefined; /** * Adds an entry to the history stack * @param state State */ pushState(state: T): void; /** * Modifies the current history entry * @param state State */ replaceState(state: T): void; } export {};