47 lines
1012 B
TypeScript
47 lines
1012 B
TypeScript
import { isArray } from "../helpers";
|
|
import type { IHistory } from "./interface";
|
|
|
|
/**
|
|
* History stack
|
|
*/
|
|
export default class XHistory implements IHistory {
|
|
private store;
|
|
private ptr;
|
|
|
|
constructor(initialState: string[] = []) {
|
|
this.store = isArray(initialState) ? initialState : [];
|
|
this.ptr = -1;
|
|
}
|
|
|
|
private get size(): number {
|
|
return this.store.length;
|
|
}
|
|
|
|
public get list(): string[] {
|
|
return [].slice.call(this.store).reverse();
|
|
}
|
|
|
|
add(input: string): void {
|
|
if (input && input !== this.store[0]) {
|
|
this.store.unshift(input);
|
|
}
|
|
this.ptr = -1;
|
|
}
|
|
|
|
previous(): string {
|
|
this.ptr++;
|
|
if (this.ptr >= this.size) this.ptr = this.size - 1;
|
|
return this.store[this.ptr] || "";
|
|
}
|
|
|
|
next(): string {
|
|
this.ptr--;
|
|
if (this.ptr <= -1) this.ptr = -1;
|
|
return this.store[this.ptr] || "";
|
|
}
|
|
|
|
clear(): void {
|
|
this.store.splice(0);
|
|
}
|
|
}
|