reactronic
Version:
Reactronic - Transactional Reactive State Management
67 lines (66 loc) • 2.62 kB
TypeScript
export type GetListItemKey<T = unknown> = (item: T) => string | undefined;
export type ReconciliationListReader<T> = {
readonly isStrict: boolean;
readonly count: number;
readonly countOfAdded: number;
readonly countOfRemoved: number;
readonly isReconciliationInProgress: boolean;
lookup(key: string): LinkedItem<T> | undefined;
firstItem(): LinkedItem<T> | undefined;
lastItem(): LinkedItem<T> | undefined;
items(onlyAfter?: LinkedItem<T>): Generator<LinkedItem<T>>;
itemsAdded(clear?: boolean): Generator<LinkedItem<T>>;
itemsRemoved(clear?: boolean): Generator<LinkedItem<T>>;
isAdded(item: LinkedItem<T>): boolean;
isMoved(item: LinkedItem<T>): boolean;
isRemoved(item: LinkedItem<T>): boolean;
isActual(item: LinkedItem<T>): boolean;
isExternal(item: LinkedItem<T>): boolean;
};
export type LinkedItem<T> = {
readonly instance: T;
readonly index: number;
readonly next?: LinkedItem<T>;
readonly prev?: LinkedItem<T>;
aux?: LinkedItem<T>;
};
export declare class ReconciliationList<T> implements ReconciliationListReader<T> {
readonly getKey: GetListItemKey<T>;
private strict;
private map;
private tag;
private actual;
private added;
private removed;
private lastNotFoundKey;
private strictNextItem?;
constructor(getKey: GetListItemKey<T>, strict?: boolean);
get isStrict(): boolean;
set isStrict(value: boolean);
get count(): number;
get countOfAdded(): number;
get countOfRemoved(): number;
get isReconciliationInProgress(): boolean;
lookup(key: string | undefined): LinkedItem<T> | undefined;
tryReuse(key: string, resolution?: {
isDuplicate: boolean;
}, error?: string): LinkedItem<T> | undefined;
add(instance: T): LinkedItem<T>;
remove(item: LinkedItem<T>): void;
move(item: LinkedItem<T>, after: LinkedItem<T>): void;
beginReconciliation(): void;
endReconciliation(error?: unknown): void;
clearAddedAndRemoved(): void;
firstItem(): LinkedItem<T> | undefined;
lastItem(): LinkedItem<T> | undefined;
items(onlyAfter?: LinkedItem<T>): Generator<LinkedItem<T>>;
itemsAdded(clear?: boolean): Generator<LinkedItem<T>>;
itemsRemoved(clear?: boolean): Generator<LinkedItem<T>>;
isAdded(item: LinkedItem<T>): boolean;
isMoved(item: LinkedItem<T>): boolean;
isRemoved(item: LinkedItem<T>): boolean;
isActual(item: LinkedItem<T>): boolean;
isExternal(item: LinkedItem<T>): boolean;
markAsMoved(item: LinkedItem<T>): void;
static createItem<T>(instance: T): LinkedItem<T>;
}