svelte-gantt
Version:
Interactive JavaScript Gantt chart/resource booking component
45 lines (44 loc) • 1.62 kB
TypeScript
/// <reference types="svelte" />
import type { Readable } from 'svelte/store';
import type { SvelteTask } from './task';
import type { SvelteRow } from './row';
import type { SvelteTimeRange } from './timeRange';
export interface EntityState<T, K = PropertyKey> {
ids: K[];
entities: {
[key: PropertyKey]: T;
};
}
interface EntityType<K = PropertyKey> {
model: {
id: K;
};
hidden?: boolean;
}
export type EntityKey = string | number | symbol;
export interface EntityStore<T extends EntityType, K extends EntityKey = EntityKey> extends Readable<EntityState<T>> {
_update(updater: (value: EntityState<T>) => EntityState<T>): void;
add(entity: T): void;
addAll(entities: T[]): void;
update(entity: T): void;
upsert(entity: T): void;
upsertAll(entities: T[]): void;
delete(id: K): void;
deleteAll(ids: K[]): void;
refresh(): void;
set(value: EntityState<T>): void;
entities?: Record<K, T>;
}
export declare function all<T extends EntityType>(store: EntityStore<T>): Readable<T[]>;
export declare function where<T extends EntityType>(store: EntityStore<T>, filterFn: (value: T) => boolean): Readable<T[]>;
export declare function createDataStore(): {
taskStore: EntityStore<SvelteTask, EntityKey>;
rowStore: EntityStore<SvelteRow, EntityKey>;
timeRangeStore: EntityStore<SvelteTimeRange, EntityKey>;
allTasks: Readable<SvelteTask[]>;
allRows: Readable<SvelteRow[]>;
allTimeRanges: Readable<SvelteTimeRange[]>;
rowTaskCache: Readable<{}>;
};
export type GanttDataStore = ReturnType<typeof createDataStore>;
export {};