@etsoo/shared
Version:
TypeScript shared utilities and functions
99 lines (98 loc) • 2.4 kB
TypeScript
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 {};