tablor-core
Version:
Core features for data tables, grids, and advanced search, pagination, and sorting in Angular.
109 lines (108 loc) • 3.35 kB
TypeScript
/**
* Defines primitive types used in data items.
*/
export type PrimitiveTypes = string | number | boolean | null | undefined | Date;
/**
* Defines primitive types used in data items as strings for type checking.
*/
export type PrimitiveTypesAsString = 'string' | 'number' | 'boolean' | 'null' | 'undefined' | 'date';
/**
* Defines primitive types used in data items as strings for type checking.
*/
export type PrimitiveTypesAsStringExcludeString = 'number' | 'boolean' | 'null' | 'undefined' | 'date';
/**
* A regular data item.
*/
export type Item<T extends Record<string, PrimitiveTypes>> = {
[K in keyof T]: T[K];
};
/**
* A partially defined regular item.
*/
export type PartialItem<T extends Item<T>> = Partial<T>;
/**
* A read-only version of a regular item.
*/
export type ImmutableRegularItem<T extends Item<T>> = Readonly<Item<T>>;
/**
* A read-only version of a partially defined item.
*/
export type ImmutablePartialRegularItem<T extends Item<T>> = Readonly<PartialItem<T>>;
/**
* A partially defined version of an augmented partial item.
*/
export type AugmentedHalfItem<T extends Item<T>> = Partial<T> & {
tablorMeta: AugItemMetaData;
};
/**
* A read-only version of an augmented partial item.
*/
export type ImmutableAugmentedPartialRegularItem<T extends Item<T>> = Readonly<AugmentedHalfItem<T>>;
/**
* An augmented data item with metadata for internal use.
*/
export type AugmentedItem<T extends Item<T>> = T & {
tablorMeta: AugItemMetaData;
};
/**
* A read-only version of an augmented item.
*/
export type ImmutableAugmentedItem<T extends Item<T>> = Readonly<T & {
tablorMeta: Readonly<AugItemMetaData>;
}>;
/**
* A flexible, read-only version of an augmented item.
*/
export type DynamicImmutableAugmentedItem = Readonly<{
[key: string]: any;
tablorMeta: Readonly<AugItemMetaData>;
}>;
/**
* Metadata for tracking item state.
*
* @property uuid - Unique identifier for the item.
* @property isSelected - Whether the item is selected.
* @property isLoaded - Always true after loading.
*/
export type AugItemMetaData = {
uuid: number;
isSelected: boolean;
isLoaded: true;
};
/******************** Event Payloads ********************/
/**
* Represents the payload for the `loadingStateChanged` event.
*
* @property state - The new loading state.
*/
export type StoreLoadingStateChangedPayload<T extends Item<T>> = {
state: boolean;
};
/**
* Represents the payload for the `itemsAdded` event.
*
* @property addedItems - The added items.
*/
export type ItemsAddedPayload<T extends Item<T>> = {
addedItems: ImmutableAugmentedItem<T>[];
};
/**
* Represents the payload for the `itemsRemoved` event.
*
* @property removedItems - The removed items.
*/
export type ItemsRemovedPayload<T extends Item<T>> = {
removedItems: ImmutableAugmentedItem<T>[];
};
/**
* Represents the payload for the `itemsUpdated` event.
*
* @property updatedItems - The updated items.
* @property prevUpdatedItems - The previously updated items.
* @property updatedItemsDifference - The difference between the updated and previously updated items.
*/
export type ItemsUpdatedPayload<T extends Item<T>> = {
updatedItems: ImmutableAugmentedItem<T>[];
prevUpdatedItems: ImmutableAugmentedItem<T>[];
updatedItemsDifference: Partial<AugmentedItem<T>>[];
};