@izumisy-tailor/tailor-data-viewer 0.2.16 → 0.2.18
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/package.json
CHANGED
|
@@ -54,10 +54,7 @@ type ResolveVariables<TQuery> =
|
|
|
54
54
|
* const [result] = useQuery({ ...collection.toQueryArgs() });
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
|
-
export function useCollection<
|
|
58
|
-
const TTable extends TableMetadata,
|
|
59
|
-
TQuery,
|
|
60
|
-
>(
|
|
57
|
+
export function useCollection<const TTable extends TableMetadata, TQuery>(
|
|
61
58
|
options: UseCollectionOptions<
|
|
62
59
|
TableFieldName<TTable>,
|
|
63
60
|
TableMetadataFilter<TTable>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useMemo, useState } from "react";
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
2
|
import type {
|
|
3
3
|
Column,
|
|
4
4
|
DataTableCellProps,
|
|
@@ -54,7 +54,7 @@ export function useDataTable<TRow extends Record<string, unknown>>(
|
|
|
54
54
|
const rows = optimisticRows ?? sourceRows;
|
|
55
55
|
|
|
56
56
|
// Reset optimistic state when source data changes
|
|
57
|
-
|
|
57
|
+
useEffect(() => {
|
|
58
58
|
setOptimisticRows(null);
|
|
59
59
|
}, [sourceRows]);
|
|
60
60
|
|
|
@@ -70,11 +70,11 @@ export function useDataTable<TRow extends Record<string, unknown>>(
|
|
|
70
70
|
}, [data]);
|
|
71
71
|
|
|
72
72
|
// Sync pageInfo to collection so hasPrevPage/hasNextPage are up-to-date
|
|
73
|
-
|
|
73
|
+
useEffect(() => {
|
|
74
74
|
if (data?.pageInfo) {
|
|
75
75
|
collection?.setPageInfo(data.pageInfo);
|
|
76
76
|
}
|
|
77
|
-
}, [data?.pageInfo, collection]);
|
|
77
|
+
}, [data?.pageInfo, collection?.setPageInfo]);
|
|
78
78
|
|
|
79
79
|
// ---------------------------------------------------------------------------
|
|
80
80
|
// Column visibility management
|
|
@@ -130,41 +130,49 @@ export function createColumnHelper<TRow extends Record<string, unknown>>(): {
|
|
|
130
130
|
* Automatically infers sort/filter configuration from field types,
|
|
131
131
|
* including enum options.
|
|
132
132
|
*
|
|
133
|
+
* @typeParam TRow - The row type for type-safe renderer access.
|
|
133
134
|
* @param tableMetadata - A single table metadata object from the generated map.
|
|
134
135
|
*
|
|
135
136
|
* @example
|
|
136
137
|
* ```tsx
|
|
137
138
|
* import { tableMetadata } from "./generated/data-viewer-metadata.generated";
|
|
138
139
|
*
|
|
139
|
-
*
|
|
140
|
+
* type Task = { id: string; title: string; status: string; dueDate: string };
|
|
141
|
+
*
|
|
142
|
+
* const { column, columns } = inferColumnHelper<Task>(tableMetadata.task);
|
|
140
143
|
*
|
|
141
144
|
* const taskColumns = [
|
|
142
145
|
* column("title"), // sort/filter auto-detected
|
|
143
146
|
* column("status"), // enum options auto-populated
|
|
144
147
|
* column("dueDate"), // date type auto-recognized
|
|
145
|
-
*
|
|
148
|
+
* column("title", {
|
|
149
|
+
* renderer: ({ row }) => <span>{row.title}</span>, // row: Task
|
|
150
|
+
* }),
|
|
146
151
|
* ];
|
|
147
152
|
* ```
|
|
148
153
|
*/
|
|
149
|
-
export function inferColumnHelper<
|
|
154
|
+
export function inferColumnHelper<
|
|
155
|
+
TRow extends Record<string, unknown>,
|
|
156
|
+
const TTable extends TableMetadata = TableMetadata,
|
|
157
|
+
>(
|
|
150
158
|
tableMetadata: TTable,
|
|
151
159
|
): {
|
|
152
160
|
column: (
|
|
153
161
|
dataKey: TableFieldName<TTable>,
|
|
154
|
-
options?: MetadataFieldOptions
|
|
155
|
-
) => FieldColumn<
|
|
162
|
+
options?: MetadataFieldOptions<TRow>,
|
|
163
|
+
) => FieldColumn<TRow>;
|
|
156
164
|
|
|
157
165
|
columns: (
|
|
158
166
|
dataKeys: TableFieldName<TTable>[],
|
|
159
167
|
options?: MetadataFieldsOptions,
|
|
160
|
-
) => FieldColumn<
|
|
168
|
+
) => FieldColumn<TRow>[];
|
|
161
169
|
} {
|
|
162
170
|
const fields = tableMetadata.fields;
|
|
163
171
|
|
|
164
172
|
const column = (
|
|
165
173
|
dataKey: TableFieldName<TTable>,
|
|
166
|
-
columnOptions?: MetadataFieldOptions
|
|
167
|
-
): FieldColumn<
|
|
174
|
+
columnOptions?: MetadataFieldOptions<TRow>,
|
|
175
|
+
): FieldColumn<TRow> => {
|
|
168
176
|
const fieldMeta = fields.find((f) => f.name === dataKey);
|
|
169
177
|
if (!fieldMeta) {
|
|
170
178
|
throw new Error(
|
|
@@ -197,20 +205,19 @@ export function inferColumnHelper<const TTable extends TableMetadata>(
|
|
|
197
205
|
width: columnOptions?.width,
|
|
198
206
|
sort,
|
|
199
207
|
filter,
|
|
200
|
-
renderer: columnOptions?.renderer as
|
|
201
|
-
| CellRenderer<Record<string, unknown>>
|
|
202
|
-
| undefined,
|
|
208
|
+
renderer: columnOptions?.renderer as CellRenderer<TRow> | undefined,
|
|
203
209
|
};
|
|
204
210
|
};
|
|
205
211
|
|
|
206
212
|
const columnsHelper = (
|
|
207
213
|
dataKeys: TableFieldName<TTable>[],
|
|
208
214
|
options?: MetadataFieldsOptions,
|
|
209
|
-
): FieldColumn<
|
|
215
|
+
): FieldColumn<TRow>[] => {
|
|
210
216
|
return dataKeys.map((dataKey) => {
|
|
211
217
|
const overrides = options?.overrides?.[dataKey as string];
|
|
212
218
|
return column(dataKey, {
|
|
213
|
-
|
|
219
|
+
label: overrides?.label,
|
|
220
|
+
width: overrides?.width,
|
|
214
221
|
sort: overrides?.sort ?? options?.sort,
|
|
215
222
|
filter: overrides?.filter ?? options?.filter,
|
|
216
223
|
});
|
package/src/component/types.ts
CHANGED
|
@@ -942,14 +942,18 @@ export type MatchingTableName<
|
|
|
942
942
|
|
|
943
943
|
/**
|
|
944
944
|
* Options for metadata-based single field definition.
|
|
945
|
+
*
|
|
946
|
+
* @typeParam TRow - The row type for type-safe renderer access.
|
|
945
947
|
*/
|
|
946
|
-
export interface MetadataFieldOptions
|
|
948
|
+
export interface MetadataFieldOptions<
|
|
949
|
+
TRow extends Record<string, unknown> = Record<string, unknown>,
|
|
950
|
+
> {
|
|
947
951
|
/** Label override (defaults to metadata description or field name) */
|
|
948
952
|
label?: string;
|
|
949
953
|
/** Column width */
|
|
950
954
|
width?: number;
|
|
951
|
-
/** Custom cell renderer */
|
|
952
|
-
renderer?: CellRenderer<
|
|
955
|
+
/** Custom cell renderer with typed row data */
|
|
956
|
+
renderer?: CellRenderer<TRow>;
|
|
953
957
|
/** Enable/disable sort (default: auto-detected from type) */
|
|
954
958
|
sort?: boolean;
|
|
955
959
|
/** Enable/disable filter (default: auto-detected from type) */
|