@pautena/react-design-system 0.20.2 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +100 -100
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +8873 -8332
- package/dist/index.es.js.map +1 -1
- package/dist/remote-data-table/index.d.ts +2 -0
- package/dist/remote-data-table/query-spec-utils.d.ts +8 -0
- package/dist/remote-data-table/remote-data-table-body.d.ts +13 -0
- package/dist/remote-data-table/remote-data-table-pagination.d.ts +9 -0
- package/dist/remote-data-table/remote-data-table-query-builder.d.ts +6 -0
- package/dist/remote-data-table/remote-data-table.d.ts +65 -0
- package/dist/remote-data-table/remote-data-table.mocks.d.ts +30 -0
- package/dist/remote-data-table/remote-data-table.types.d.ts +52 -0
- package/dist/remote-data-table/use-remote-data-table.d.ts +19 -0
- package/package.json +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { QuerySpecField, QuerySpecFilter, QuerySpecOp } from './remote-data-table.types';
|
|
2
|
+
export declare const querySpecOpLabels: Record<QuerySpecOp, string>;
|
|
3
|
+
export declare const createFilterId: () => string;
|
|
4
|
+
export declare const getFieldByName: (fields: QuerySpecField[], name: string) => QuerySpecField | undefined;
|
|
5
|
+
export declare const getOpsForField: (field?: QuerySpecField) => QuerySpecOp[];
|
|
6
|
+
export declare const coerceFilterValue: (field: QuerySpecField | undefined, op: QuerySpecOp, value?: string) => string;
|
|
7
|
+
export declare const formatFiltersSummary: (filters: QuerySpecFilter[], fields: QuerySpecField[]) => string;
|
|
8
|
+
export declare const buildQuerySpecParams: (filters: QuerySpecFilter[], fields: QuerySpecField[]) => Record<string, string | number | boolean>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RemoteDataTableColumn, SortingState } from './remote-data-table.types';
|
|
2
|
+
type RemoteDataTableBodyProps<TData> = {
|
|
3
|
+
data: TData[];
|
|
4
|
+
columns: RemoteDataTableColumn<TData>[];
|
|
5
|
+
loading: boolean;
|
|
6
|
+
emptyMessage: string;
|
|
7
|
+
sorting?: SortingState;
|
|
8
|
+
onSortingChange?: (sorting: SortingState) => void;
|
|
9
|
+
onRowClick?: (row: TData) => void;
|
|
10
|
+
getRowId?: (row: TData, index: number) => string;
|
|
11
|
+
};
|
|
12
|
+
export declare const RemoteDataTableBody: <TData>({ data, columns, loading, emptyMessage, sorting, onSortingChange, onRowClick, getRowId, }: RemoteDataTableBodyProps<TData>) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OnChangeFn, PaginationState } from './remote-data-table.types';
|
|
2
|
+
type RemoteDataTablePaginationProps = {
|
|
3
|
+
pagination: PaginationState;
|
|
4
|
+
onPaginationChange: OnChangeFn<PaginationState>;
|
|
5
|
+
rowCount: number;
|
|
6
|
+
pageSizeOptions: number[];
|
|
7
|
+
};
|
|
8
|
+
export declare const RemoteDataTablePagination: ({ pagination, onPaginationChange, rowCount, pageSizeOptions, }: RemoteDataTablePaginationProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RemoteDataTableQueryBuilderProps as RemoteDataTableQueryBuilderConfig } from './remote-data-table.types';
|
|
2
|
+
type RemoteDataTableQueryBuilderProps = {
|
|
3
|
+
queryBuilder: RemoteDataTableQueryBuilderConfig;
|
|
4
|
+
};
|
|
5
|
+
export declare const RemoteDataTableQueryBuilder: ({ queryBuilder, }: RemoteDataTableQueryBuilderProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { OnChangeFn, PaginationState, RemoteDataTableColumn, RemoteDataTableQueryBuilderProps, SortingState } from './remote-data-table.types';
|
|
2
|
+
export { buildQuerySpecParams } from './query-spec-utils';
|
|
3
|
+
export type { OnChangeFn, PaginationState, QuerySpecField, QuerySpecFieldOption, QuerySpecFieldType, QuerySpecFilter, QuerySpecOp, RemoteDataTableColumn, RemoteDataTableColumnMeta, RemoteDataTableQueryBuilderProps, SortingState, } from './remote-data-table.types';
|
|
4
|
+
/**
|
|
5
|
+
* Props for the RemoteDataTable component
|
|
6
|
+
*/
|
|
7
|
+
export type RemoteDataTableProps<TData> = {
|
|
8
|
+
/** Array of data items to display in the table */
|
|
9
|
+
data: TData[];
|
|
10
|
+
/** Column definitions for the table */
|
|
11
|
+
columns: RemoteDataTableColumn<TData>[];
|
|
12
|
+
/** Optional function to generate unique row IDs. If not provided, uses array index */
|
|
13
|
+
getRowId?: (row: TData, index: number) => string;
|
|
14
|
+
/** Current pagination state (pageIndex and pageSize) */
|
|
15
|
+
pagination: PaginationState;
|
|
16
|
+
/** Callback fired when pagination changes */
|
|
17
|
+
onPaginationChange: OnChangeFn<PaginationState>;
|
|
18
|
+
/** Current sorting state */
|
|
19
|
+
sorting?: SortingState;
|
|
20
|
+
/** Callback fired when sorting changes */
|
|
21
|
+
onSortingChange?: OnChangeFn<SortingState>;
|
|
22
|
+
/** Total number of rows available (for server-side pagination). If not provided, uses data.length */
|
|
23
|
+
rowCount?: number;
|
|
24
|
+
/** Whether data is currently loading */
|
|
25
|
+
loading?: boolean;
|
|
26
|
+
/** Message to display when there is no data
|
|
27
|
+
* @default "No data available"
|
|
28
|
+
*/
|
|
29
|
+
emptyMessage?: string;
|
|
30
|
+
/** Available page size options for the pagination dropdown
|
|
31
|
+
* @default [10, 25, 50]
|
|
32
|
+
*/
|
|
33
|
+
pageSizeOptions?: number[];
|
|
34
|
+
/** Callback fired when a row is clicked */
|
|
35
|
+
onRowClick?: (row: TData) => void;
|
|
36
|
+
/** Configuration for the query builder (filters) */
|
|
37
|
+
query?: RemoteDataTableQueryBuilderProps;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* A table component designed for displaying remote/server-side data with built-in
|
|
41
|
+
* pagination, sorting, and filtering capabilities.
|
|
42
|
+
*
|
|
43
|
+
* This component is fully controlled - all state (pagination, sorting, filters) must be
|
|
44
|
+
* managed by the parent component. For convenience, use the `useRemoteDataTable` hook
|
|
45
|
+
* to manage this state.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* const tableState = useRemoteDataTable({
|
|
50
|
+
* initialPagination: { pageSize: 25 }
|
|
51
|
+
* });
|
|
52
|
+
*
|
|
53
|
+
* <RemoteDataTable
|
|
54
|
+
* data={items}
|
|
55
|
+
* columns={columns}
|
|
56
|
+
* {...tableState}
|
|
57
|
+
* query={{
|
|
58
|
+
* fields: queryFields,
|
|
59
|
+
* filters: tableState.filters,
|
|
60
|
+
* onFiltersChange: tableState.onFiltersChange
|
|
61
|
+
* }}
|
|
62
|
+
* />
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare const RemoteDataTable: <TData>({ data, columns, getRowId, pagination, onPaginationChange, sorting, onSortingChange, rowCount, loading, emptyMessage, pageSizeOptions, onRowClick, query, }: RemoteDataTableProps<TData>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { QuerySpecField, RemoteDataTableColumn } from './remote-data-table';
|
|
2
|
+
/**
|
|
3
|
+
* Mock item type for testing and stories
|
|
4
|
+
*/
|
|
5
|
+
export type MockItem = {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
status: "Active" | "Inactive" | "Archived";
|
|
9
|
+
createdAt: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Basic columns for testing (no custom cell rendering)
|
|
13
|
+
*/
|
|
14
|
+
export declare const mockColumnsBasic: RemoteDataTableColumn<MockItem>[];
|
|
15
|
+
/**
|
|
16
|
+
* Full-featured columns for stories (with sorting, custom cells, and widths)
|
|
17
|
+
*/
|
|
18
|
+
export declare const mockColumnsFull: RemoteDataTableColumn<MockItem>[];
|
|
19
|
+
/**
|
|
20
|
+
* Query fields for filter builder
|
|
21
|
+
*/
|
|
22
|
+
export declare const mockQueryFields: QuerySpecField[];
|
|
23
|
+
/**
|
|
24
|
+
* Generates mock items for testing
|
|
25
|
+
*/
|
|
26
|
+
export declare const buildMockItems: (count: number) => MockItem[];
|
|
27
|
+
/**
|
|
28
|
+
* Default mock dataset (48 items)
|
|
29
|
+
*/
|
|
30
|
+
export declare const mockItems: MockItem[];
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { TableCellProps } from '@mui/material';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
export type RemoteDataTableColumnMeta = {
|
|
4
|
+
align?: TableCellProps["align"];
|
|
5
|
+
width?: number | string;
|
|
6
|
+
minWidth?: number | string;
|
|
7
|
+
maxWidth?: number | string;
|
|
8
|
+
};
|
|
9
|
+
export type RemoteDataTableColumn<TData> = {
|
|
10
|
+
id: string;
|
|
11
|
+
header: ReactNode;
|
|
12
|
+
accessorKey?: keyof TData;
|
|
13
|
+
cell?: (row: TData) => ReactNode;
|
|
14
|
+
enableSorting?: boolean;
|
|
15
|
+
meta?: RemoteDataTableColumnMeta;
|
|
16
|
+
};
|
|
17
|
+
export type PaginationState = {
|
|
18
|
+
pageIndex: number;
|
|
19
|
+
pageSize: number;
|
|
20
|
+
};
|
|
21
|
+
export type SortingState = Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
desc: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
export type OnChangeFn<T> = (updaterOrValue: T | ((old: T) => T)) => void;
|
|
26
|
+
export type QuerySpecOp = "eq" | "neq" | "lt" | "lte" | "gt" | "gte" | "ilike" | "in" | "isnull";
|
|
27
|
+
export type QuerySpecFieldType = "string" | "number" | "boolean" | "date" | "datetime";
|
|
28
|
+
export type QuerySpecFieldOption = {
|
|
29
|
+
label: string;
|
|
30
|
+
value: string;
|
|
31
|
+
};
|
|
32
|
+
export type QuerySpecField = {
|
|
33
|
+
name: string;
|
|
34
|
+
label: string;
|
|
35
|
+
type?: QuerySpecFieldType;
|
|
36
|
+
ops?: QuerySpecOp[];
|
|
37
|
+
placeholder?: string;
|
|
38
|
+
options?: QuerySpecFieldOption[];
|
|
39
|
+
};
|
|
40
|
+
export type QuerySpecFilter = {
|
|
41
|
+
id: string;
|
|
42
|
+
field: string;
|
|
43
|
+
op: QuerySpecOp;
|
|
44
|
+
value?: string;
|
|
45
|
+
};
|
|
46
|
+
export type RemoteDataTableQueryBuilderProps = {
|
|
47
|
+
fields: QuerySpecField[];
|
|
48
|
+
filters: QuerySpecFilter[];
|
|
49
|
+
onFiltersChange: (filters: QuerySpecFilter[]) => void;
|
|
50
|
+
placeholder?: string;
|
|
51
|
+
summaryFormatter?: (filters: QuerySpecFilter[], fields: QuerySpecField[]) => string;
|
|
52
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { OnChangeFn, PaginationState, QuerySpecFilter, SortingState } from './remote-data-table.types';
|
|
2
|
+
export type UseRemoteDataTableOptions = {
|
|
3
|
+
initialPagination?: Partial<PaginationState>;
|
|
4
|
+
initialSorting?: SortingState;
|
|
5
|
+
initialFilters?: QuerySpecFilter[];
|
|
6
|
+
};
|
|
7
|
+
export type UseRemoteDataTableResult = {
|
|
8
|
+
pagination: PaginationState;
|
|
9
|
+
onPaginationChange: OnChangeFn<PaginationState>;
|
|
10
|
+
sorting: SortingState;
|
|
11
|
+
onSortingChange: OnChangeFn<SortingState>;
|
|
12
|
+
filters: QuerySpecFilter[];
|
|
13
|
+
onFiltersChange: (filters: QuerySpecFilter[]) => void;
|
|
14
|
+
resetPagination: () => void;
|
|
15
|
+
resetSorting: () => void;
|
|
16
|
+
resetFilters: () => void;
|
|
17
|
+
resetAll: () => void;
|
|
18
|
+
};
|
|
19
|
+
export declare const useRemoteDataTable: (options?: UseRemoteDataTableOptions) => UseRemoteDataTableResult;
|