UNPKG

ngxsmk-datatable

Version:

A powerful, feature-rich Angular datatable component with virtual scrolling, built for Angular 17+

114 lines (113 loc) 2.98 kB
import { Observable } from 'rxjs'; import { SortState } from '../../interfaces/sorting.interface'; import { Filter } from '../../interfaces/filtering.interface'; /** * Data request configuration */ export interface DataRequest { /** Pagination */ pagination: { page: number; pageSize: number; cursor?: string; }; /** Sorting (can be multiple for multi-column sort) */ sorting?: SortState[]; /** Filtering */ filtering?: Filter[]; /** Search term (global search) */ search?: string; /** Additional parameters */ params?: Record<string, any>; } /** * Data response */ export interface DataResponse<T> { /** Row data */ data: T[]; /** Total count (for pagination) */ total: number; /** Next page cursor (for cursor-based pagination) */ nextCursor?: string; /** Previous page cursor */ prevCursor?: string; /** Has next page */ hasNextPage?: boolean; /** Has previous page */ hasPrevPage?: boolean; /** Additional metadata */ metadata?: Record<string, any>; } /** * Base data provider interface * Implement this to create custom data sources */ export interface DataProvider<T> { /** * Fetch data from the source */ fetch(request: DataRequest): Observable<DataResponse<T>>; /** * Create a new item (optional) */ create?(item: T): Observable<T>; /** * Update an existing item (optional) */ update?(id: string | number, item: Partial<T>): Observable<T>; /** * Delete an item (optional) */ delete?(id: string | number): Observable<void>; /** * Batch update (optional) */ batchUpdate?(updates: Array<{ id: string | number; data: Partial<T>; }>): Observable<T[]>; /** * Batch delete (optional) */ batchDelete?(ids: (string | number)[]): Observable<void>; } /** * Data provider configuration */ export interface DataProviderConfig { /** Mode: client-side or server-side */ mode: 'client' | 'server'; /** Debounce time for search/filter (ms) */ debounceTime?: number; /** Enable retry on error */ retry?: boolean; /** Max retry attempts */ maxRetries?: number; /** Enable caching */ cache?: boolean; /** Cache duration (ms) */ cacheDuration?: number; } /** * Client-side data provider configuration */ export interface ClientDataProviderConfig extends DataProviderConfig { mode: 'client'; /** Initial data */ data: any[]; } /** * Server-side data provider configuration */ export interface ServerDataProviderConfig extends DataProviderConfig { mode: 'server'; /** API endpoint URL */ url: string; /** HTTP headers */ headers?: Record<string, string>; /** Request transform function */ transformRequest?: (request: DataRequest) => any; /** Response transform function */ transformResponse?: (response: any) => DataResponse<any>; }