import { WritableSignal } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { BaseModel, QueryParams } from 'verben-workflow-ui/src/lib/models'; import { CardData, ColumnDefinition, FilterCondition, SortCondition } from 'verben-ng-ui'; /** * Abstract state management for base data pages. * Tracks items, loading state, query params, filters, sorts, search, and * visible columns. Card data is held in signals for cheap change detection. */ export declare abstract class BaseDataPageState { protected updating$: BehaviorSubject; protected items$: BehaviorSubject; protected totalCount$: BehaviorSubject; protected queryParams$: BehaviorSubject>; protected searchTerm$: BehaviorSubject; protected filters$: BehaviorSubject; protected sorts$: BehaviorSubject; protected visibleColumns$: BehaviorSubject[]>; protected isTableView$: BehaviorSubject; protected cardData: WritableSignal; protected currentCardData: WritableSignal; protected cardDataMapper?: (item: T) => CardData; /** * Stable identity for a record. `Code` comes first: it is what every page in * this library matches on, and what the backend assigns on persist. `Id` is * frequently the empty string on records that came back from a save, and the * lowercase `id` is a client-generated UUID that exists only on unsaved rows. */ protected getItemKey(item: T): string; protected updateCardDataFromItems(items: T[]): void; isUpdating$(): Observable; setUpdating(isUpdating: boolean): void; getItems$(): Observable; getItemsValue(): T[]; setItems(items: T[]): void; appendItems(newItems: T[]): void; addItem(item: T): void; updateItem(updatedItem: T): void; /** Update the item when its key already exists, otherwise prepend it. */ upsertItem(item: T): void; removeItem(itemKey: string): void; clearItems(): void; getTotalCount$(): Observable; setTotalCount(count: number): void; getQueryParams$(): Observable>; getQueryParamsValue(): QueryParams; updateQueryParams(params: Partial>): void; resetPagination(): void; incrementPagination(): void; getSearchTerm$(): Observable; getSearchTermValue(): string; setSearchTerm(term: string): void; getFilters$(): Observable; getFiltersValue(): FilterCondition[]; setFilters(filters: FilterCondition[]): void; clearFilters(): void; getSorts$(): Observable; getSortsValue(): SortCondition[]; setSorts(sorts: SortCondition[]): void; clearSorts(): void; getVisibleColumns$(): Observable[]>; getVisibleColumnsValue(): ColumnDefinition[]; setVisibleColumns(columns: ColumnDefinition[]): void; getIsTableView$(): Observable; getIsTableViewValue(): boolean; setIsTableView(isTableView: boolean): void; setCardDataMapper(mapper: (item: T) => CardData): void; getCardData(): WritableSignal; setCardData(data: CardData[]): void; getCurrentCardData(): WritableSignal; setCurrentCardData(data: CardData | null): void; reset(): void; }