@bsol-oss/react-datatable5 7.7.0 → 8.0.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.d.ts +41 -0
- package/dist/index.js +54 -26
- package/dist/index.mjs +54 -26
- package/dist/types/components/DataTable/DataTable.d.ts +23 -0
- package/dist/types/components/DataTable/DataTableServer.d.ts +18 -0
- package/dist/types/components/Form/components/IdPicker.d.ts +1 -4
- package/dist/types/components/Form/components/IdViewer.d.ts +1 -4
- package/dist/types/components/Form/components/StringInputField.d.ts +5 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -119,7 +119,20 @@ declare module "@tanstack/react-table" {
|
|
|
119
119
|
}
|
|
120
120
|
interface DataTableProps<TData = unknown> {
|
|
121
121
|
children?: ReactNode | ReactNode[];
|
|
122
|
+
/**
|
|
123
|
+
* Data array for the table.
|
|
124
|
+
*
|
|
125
|
+
* It will pass into as the data in `@tanstack/react-table`
|
|
126
|
+
*
|
|
127
|
+
*/
|
|
122
128
|
data: TData[];
|
|
129
|
+
/**
|
|
130
|
+
* Column definitions for the table.
|
|
131
|
+
*
|
|
132
|
+
* It will pass into as the column definitions in `@tanstack/react-table`
|
|
133
|
+
*
|
|
134
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
135
|
+
*/
|
|
123
136
|
columns: ColumnDef<TData, unknown>[];
|
|
124
137
|
enableRowSelection?: boolean;
|
|
125
138
|
enableMultiRowSelection?: boolean;
|
|
@@ -142,6 +155,16 @@ interface DataTableProps<TData = unknown> {
|
|
|
142
155
|
setDensity: OnChangeFn<DensityState>;
|
|
143
156
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
144
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* DataTable will create a context to hold all values to
|
|
160
|
+
* help the render of the DataTable in serverside
|
|
161
|
+
*
|
|
162
|
+
*
|
|
163
|
+
* The query is required to be a GET request that can receive
|
|
164
|
+
* specified params and return a specified response
|
|
165
|
+
*
|
|
166
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
167
|
+
*/
|
|
145
168
|
declare function DataTable<TData = unknown>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, children, }: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
|
|
146
169
|
|
|
147
170
|
interface DataTableDefaultState {
|
|
@@ -205,6 +228,13 @@ declare const useDataTableServer: <TData>({ url, default: { sorting: defaultSort
|
|
|
205
228
|
|
|
206
229
|
interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown>> {
|
|
207
230
|
children: ReactNode | ReactNode[];
|
|
231
|
+
/**
|
|
232
|
+
* Column definitions for the table.
|
|
233
|
+
*
|
|
234
|
+
* It will pass into as the column definitions in `@tanstack/react-table`
|
|
235
|
+
*
|
|
236
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
237
|
+
*/
|
|
208
238
|
columns: ColumnDef<TData>[];
|
|
209
239
|
enableRowSelection?: boolean;
|
|
210
240
|
enableMultiRowSelection?: boolean;
|
|
@@ -228,6 +258,17 @@ interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown
|
|
|
228
258
|
query: UseQueryResult<TData>;
|
|
229
259
|
url: string;
|
|
230
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* DataTableServer will create a context to hold all values to
|
|
263
|
+
* help the render of the DataTable in serverside
|
|
264
|
+
*
|
|
265
|
+
* The query is required to be a GET request that can receive
|
|
266
|
+
* specified params and return a specified response
|
|
267
|
+
*
|
|
268
|
+
* The `useDataTableServer` can help to create the specified request and response
|
|
269
|
+
*
|
|
270
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
271
|
+
*/
|
|
231
272
|
declare function DataTableServer<TData extends DataResponse = DataResponse<unknown>>({ columns, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, children, url, }: DataTableServerProps<TData>): react_jsx_runtime.JSX.Element;
|
|
232
273
|
|
|
233
274
|
interface TableBodyProps {
|
package/dist/index.js
CHANGED
|
@@ -2778,6 +2778,16 @@ const fuzzyFilter = (row, columnId, value, addMeta) => {
|
|
|
2778
2778
|
// Return if the item should be filtered in/out
|
|
2779
2779
|
return itemRank.passed;
|
|
2780
2780
|
};
|
|
2781
|
+
/**
|
|
2782
|
+
* DataTable will create a context to hold all values to
|
|
2783
|
+
* help the render of the DataTable in serverside
|
|
2784
|
+
*
|
|
2785
|
+
*
|
|
2786
|
+
* The query is required to be a GET request that can receive
|
|
2787
|
+
* specified params and return a specified response
|
|
2788
|
+
*
|
|
2789
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2790
|
+
*/
|
|
2781
2791
|
function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, children, }) {
|
|
2782
2792
|
const table = reactTable.useReactTable({
|
|
2783
2793
|
_features: [DensityFeature],
|
|
@@ -2837,6 +2847,17 @@ const DataTableServerContext = React.createContext({
|
|
|
2837
2847
|
url: "",
|
|
2838
2848
|
});
|
|
2839
2849
|
|
|
2850
|
+
/**
|
|
2851
|
+
* DataTableServer will create a context to hold all values to
|
|
2852
|
+
* help the render of the DataTable in serverside
|
|
2853
|
+
*
|
|
2854
|
+
* The query is required to be a GET request that can receive
|
|
2855
|
+
* specified params and return a specified response
|
|
2856
|
+
*
|
|
2857
|
+
* The `useDataTableServer` can help to create the specified request and response
|
|
2858
|
+
*
|
|
2859
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2860
|
+
*/
|
|
2840
2861
|
function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, children, url, }) {
|
|
2841
2862
|
const table = reactTable.useReactTable({
|
|
2842
2863
|
_features: [DensityFeature],
|
|
@@ -3424,7 +3445,7 @@ const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth =
|
|
|
3424
3445
|
// @ts-expect-error find type for unknown
|
|
3425
3446
|
const value = props.row.original[column];
|
|
3426
3447
|
if (typeof value === "object") {
|
|
3427
|
-
return jsxRuntime.jsx(
|
|
3448
|
+
return (jsxRuntime.jsx(react.Grid, { overflow: "auto", children: jsxRuntime.jsx(RecordDisplay, { object: value }) }));
|
|
3428
3449
|
}
|
|
3429
3450
|
return jsxRuntime.jsx(TextCell, { children: value });
|
|
3430
3451
|
},
|
|
@@ -3584,7 +3605,7 @@ const getTableData = async ({ serverUrl, in_table, searching = "", where = [], l
|
|
|
3584
3605
|
}
|
|
3585
3606
|
};
|
|
3586
3607
|
|
|
3587
|
-
const IdPicker = ({ column,
|
|
3608
|
+
const IdPicker = ({ column, isMultiple = false }) => {
|
|
3588
3609
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
3589
3610
|
const { schema, serverUrl, displayText } = useSchemaContext();
|
|
3590
3611
|
const { fieldRequired } = displayText;
|
|
@@ -3594,7 +3615,9 @@ const IdPicker = ({ column, in_table, column_ref, display_column, isMultiple = f
|
|
|
3594
3615
|
throw new Error("schema properties when using DatePicker");
|
|
3595
3616
|
}
|
|
3596
3617
|
const { total, showing, typeToSearch } = displayText;
|
|
3597
|
-
const { gridColumn, gridRow, title, renderDisplay } = schema
|
|
3618
|
+
const { gridColumn, gridRow, title, renderDisplay, foreign_key } = schema
|
|
3619
|
+
.properties[column];
|
|
3620
|
+
const { table: in_table, column: column_ref, display_column } = foreign_key;
|
|
3598
3621
|
const [searchText, setSearchText] = React.useState();
|
|
3599
3622
|
const [limit, setLimit] = React.useState(10);
|
|
3600
3623
|
const [openSearchResult, setOpenSearchResult] = React.useState();
|
|
@@ -3603,7 +3626,7 @@ const IdPicker = ({ column, in_table, column_ref, display_column, isMultiple = f
|
|
|
3603
3626
|
const ref = React.useRef(null);
|
|
3604
3627
|
const selectedIds = watch(column) ?? [];
|
|
3605
3628
|
const query = reactQuery.useQuery({
|
|
3606
|
-
queryKey: [`idpicker`, { searchText,
|
|
3629
|
+
queryKey: [`idpicker`, { searchText, limit, page }],
|
|
3607
3630
|
queryFn: async () => {
|
|
3608
3631
|
const data = await getTableData({
|
|
3609
3632
|
serverUrl,
|
|
@@ -3730,21 +3753,25 @@ const DataListItem = React__namespace.forwardRef(function DataListItem(props, re
|
|
|
3730
3753
|
return (jsxRuntime.jsxs(react.DataList.Item, { ref: ref, ...rest, children: [jsxRuntime.jsxs(react.DataList.ItemLabel, { flex: grow ? "1" : undefined, children: [label, info && jsxRuntime.jsx(InfoTip, { children: info })] }), jsxRuntime.jsx(react.DataList.ItemValue, { flex: grow ? "1" : undefined, children: value }), children] }));
|
|
3731
3754
|
});
|
|
3732
3755
|
|
|
3733
|
-
const IdViewer = ({ value,
|
|
3756
|
+
const IdViewer = ({ value, column }) => {
|
|
3734
3757
|
const { schema, serverUrl } = useSchemaContext();
|
|
3735
3758
|
if (schema.properties == undefined) {
|
|
3736
3759
|
throw new Error("schema properties when using DatePicker");
|
|
3737
3760
|
}
|
|
3738
|
-
const { title } = schema.properties[column];
|
|
3761
|
+
const { title, foreign_key } = schema.properties[column];
|
|
3762
|
+
if (foreign_key === undefined) {
|
|
3763
|
+
throw new Error('foreign_key when variant is id-picker');
|
|
3764
|
+
}
|
|
3765
|
+
const { table, column: foreginKeyColumn, display_column } = foreign_key;
|
|
3739
3766
|
const query = reactQuery.useQuery({
|
|
3740
|
-
queryKey: [`idpicker`,
|
|
3767
|
+
queryKey: [`idpicker`, table, value],
|
|
3741
3768
|
queryFn: async () => {
|
|
3742
3769
|
return await getTableData({
|
|
3743
3770
|
serverUrl,
|
|
3744
|
-
in_table:
|
|
3771
|
+
in_table: foreginKeyColumn ?? '',
|
|
3745
3772
|
where: [
|
|
3746
3773
|
{
|
|
3747
|
-
id:
|
|
3774
|
+
id: column,
|
|
3748
3775
|
value: value,
|
|
3749
3776
|
},
|
|
3750
3777
|
],
|
|
@@ -4515,15 +4542,19 @@ const EnumPicker = ({ column, isMultiple = false }) => {
|
|
|
4515
4542
|
}) }), isDirty && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [dataList.length <= 0 && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Empty Search Result" }), " "] }))] })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: fieldRequired ?? "The field is requried" }))] }));
|
|
4516
4543
|
};
|
|
4517
4544
|
|
|
4518
|
-
const idPickerSanityCheck = (column,
|
|
4519
|
-
if (!!
|
|
4520
|
-
throw new Error(`The key
|
|
4545
|
+
const idPickerSanityCheck = (column, foreign_key) => {
|
|
4546
|
+
if (!!foreign_key == false) {
|
|
4547
|
+
throw new Error(`The key foreign_key does not exist in properties of column ${column} when using id-picker.`);
|
|
4521
4548
|
}
|
|
4522
|
-
|
|
4523
|
-
|
|
4549
|
+
const { table, column: foreignKeyColumn, display_column } = foreign_key;
|
|
4550
|
+
if (!!table == false) {
|
|
4551
|
+
throw new Error(`The key table does not exist in properties of column ${table} when using id-picker.`);
|
|
4524
4552
|
}
|
|
4525
4553
|
if (!!display_column == false) {
|
|
4526
|
-
throw new Error(`The key display_column does not exist in properties of column ${column}.`);
|
|
4554
|
+
throw new Error(`The key display_column does not exist in properties of column ${column} when using id-picker.`);
|
|
4555
|
+
}
|
|
4556
|
+
if (!!foreignKeyColumn == false) {
|
|
4557
|
+
throw new Error(`The key column does not exist in properties of column ${column} when using id-picker.`);
|
|
4527
4558
|
}
|
|
4528
4559
|
};
|
|
4529
4560
|
const FormInternal = () => {
|
|
@@ -4629,14 +4660,11 @@ const FormInternal = () => {
|
|
|
4629
4660
|
if (shouldIgnore) {
|
|
4630
4661
|
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
4631
4662
|
}
|
|
4632
|
-
const { type, variant,
|
|
4663
|
+
const { type, variant, gridColumn, gridRow, foreign_key } = values;
|
|
4633
4664
|
if (type === "string") {
|
|
4634
4665
|
if (variant === "id-picker") {
|
|
4635
|
-
idPickerSanityCheck(column,
|
|
4636
|
-
return (jsxRuntime.jsx(IdViewer, { value: (validatedData ?? {})[column],
|
|
4637
|
-
column_ref,
|
|
4638
|
-
display_column,
|
|
4639
|
-
column,
|
|
4666
|
+
idPickerSanityCheck(column, foreign_key);
|
|
4667
|
+
return (jsxRuntime.jsx(IdViewer, { value: (validatedData ?? {})[column], column,
|
|
4640
4668
|
gridColumn,
|
|
4641
4669
|
gridRow }, `form-${key}`));
|
|
4642
4670
|
}
|
|
@@ -4702,14 +4730,14 @@ const FormInternal = () => {
|
|
|
4702
4730
|
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
4703
4731
|
}
|
|
4704
4732
|
//@ts-expect-error TODO: add more fields to support form-creation
|
|
4705
|
-
const { type, variant, in_table, column_ref,
|
|
4733
|
+
const { type, variant, in_table, column_ref, foreign_key } = values;
|
|
4706
4734
|
if (type === "string") {
|
|
4707
4735
|
if ((values.enum ?? []).length > 0) {
|
|
4708
4736
|
return jsxRuntime.jsx(EnumPicker, { column: key }, `form-${key}`);
|
|
4709
4737
|
}
|
|
4710
4738
|
if (variant === "id-picker") {
|
|
4711
|
-
idPickerSanityCheck(column,
|
|
4712
|
-
return
|
|
4739
|
+
idPickerSanityCheck(column, foreign_key);
|
|
4740
|
+
return jsxRuntime.jsx(IdPicker, { column: key }, `form-${key}`);
|
|
4713
4741
|
}
|
|
4714
4742
|
if (variant === "date-picker") {
|
|
4715
4743
|
return jsxRuntime.jsx(DatePicker, { column: key }, `form-${key}`);
|
|
@@ -4727,8 +4755,8 @@ const FormInternal = () => {
|
|
|
4727
4755
|
}
|
|
4728
4756
|
if (type === "array") {
|
|
4729
4757
|
if (variant === "id-picker") {
|
|
4730
|
-
idPickerSanityCheck(column,
|
|
4731
|
-
return
|
|
4758
|
+
idPickerSanityCheck(column, foreign_key);
|
|
4759
|
+
return jsxRuntime.jsx(IdPicker, { column: key, isMultiple: true }, `form-${key}`);
|
|
4732
4760
|
}
|
|
4733
4761
|
if (variant === "tag-picker") {
|
|
4734
4762
|
return jsxRuntime.jsx(TagPicker, { column: key }, `form-${key}`);
|
package/dist/index.mjs
CHANGED
|
@@ -2758,6 +2758,16 @@ const fuzzyFilter = (row, columnId, value, addMeta) => {
|
|
|
2758
2758
|
// Return if the item should be filtered in/out
|
|
2759
2759
|
return itemRank.passed;
|
|
2760
2760
|
};
|
|
2761
|
+
/**
|
|
2762
|
+
* DataTable will create a context to hold all values to
|
|
2763
|
+
* help the render of the DataTable in serverside
|
|
2764
|
+
*
|
|
2765
|
+
*
|
|
2766
|
+
* The query is required to be a GET request that can receive
|
|
2767
|
+
* specified params and return a specified response
|
|
2768
|
+
*
|
|
2769
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2770
|
+
*/
|
|
2761
2771
|
function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, children, }) {
|
|
2762
2772
|
const table = useReactTable({
|
|
2763
2773
|
_features: [DensityFeature],
|
|
@@ -2817,6 +2827,17 @@ const DataTableServerContext = createContext({
|
|
|
2817
2827
|
url: "",
|
|
2818
2828
|
});
|
|
2819
2829
|
|
|
2830
|
+
/**
|
|
2831
|
+
* DataTableServer will create a context to hold all values to
|
|
2832
|
+
* help the render of the DataTable in serverside
|
|
2833
|
+
*
|
|
2834
|
+
* The query is required to be a GET request that can receive
|
|
2835
|
+
* specified params and return a specified response
|
|
2836
|
+
*
|
|
2837
|
+
* The `useDataTableServer` can help to create the specified request and response
|
|
2838
|
+
*
|
|
2839
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2840
|
+
*/
|
|
2820
2841
|
function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, children, url, }) {
|
|
2821
2842
|
const table = useReactTable({
|
|
2822
2843
|
_features: [DensityFeature],
|
|
@@ -3404,7 +3425,7 @@ const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth =
|
|
|
3404
3425
|
// @ts-expect-error find type for unknown
|
|
3405
3426
|
const value = props.row.original[column];
|
|
3406
3427
|
if (typeof value === "object") {
|
|
3407
|
-
return jsx(
|
|
3428
|
+
return (jsx(Grid, { overflow: "auto", children: jsx(RecordDisplay, { object: value }) }));
|
|
3408
3429
|
}
|
|
3409
3430
|
return jsx(TextCell, { children: value });
|
|
3410
3431
|
},
|
|
@@ -3564,7 +3585,7 @@ const getTableData = async ({ serverUrl, in_table, searching = "", where = [], l
|
|
|
3564
3585
|
}
|
|
3565
3586
|
};
|
|
3566
3587
|
|
|
3567
|
-
const IdPicker = ({ column,
|
|
3588
|
+
const IdPicker = ({ column, isMultiple = false }) => {
|
|
3568
3589
|
const { watch, formState: { errors }, setValue, } = useFormContext();
|
|
3569
3590
|
const { schema, serverUrl, displayText } = useSchemaContext();
|
|
3570
3591
|
const { fieldRequired } = displayText;
|
|
@@ -3574,7 +3595,9 @@ const IdPicker = ({ column, in_table, column_ref, display_column, isMultiple = f
|
|
|
3574
3595
|
throw new Error("schema properties when using DatePicker");
|
|
3575
3596
|
}
|
|
3576
3597
|
const { total, showing, typeToSearch } = displayText;
|
|
3577
|
-
const { gridColumn, gridRow, title, renderDisplay } = schema
|
|
3598
|
+
const { gridColumn, gridRow, title, renderDisplay, foreign_key } = schema
|
|
3599
|
+
.properties[column];
|
|
3600
|
+
const { table: in_table, column: column_ref, display_column } = foreign_key;
|
|
3578
3601
|
const [searchText, setSearchText] = useState();
|
|
3579
3602
|
const [limit, setLimit] = useState(10);
|
|
3580
3603
|
const [openSearchResult, setOpenSearchResult] = useState();
|
|
@@ -3583,7 +3606,7 @@ const IdPicker = ({ column, in_table, column_ref, display_column, isMultiple = f
|
|
|
3583
3606
|
const ref = useRef(null);
|
|
3584
3607
|
const selectedIds = watch(column) ?? [];
|
|
3585
3608
|
const query = useQuery({
|
|
3586
|
-
queryKey: [`idpicker`, { searchText,
|
|
3609
|
+
queryKey: [`idpicker`, { searchText, limit, page }],
|
|
3587
3610
|
queryFn: async () => {
|
|
3588
3611
|
const data = await getTableData({
|
|
3589
3612
|
serverUrl,
|
|
@@ -3710,21 +3733,25 @@ const DataListItem = React.forwardRef(function DataListItem(props, ref) {
|
|
|
3710
3733
|
return (jsxs(DataList.Item, { ref: ref, ...rest, children: [jsxs(DataList.ItemLabel, { flex: grow ? "1" : undefined, children: [label, info && jsx(InfoTip, { children: info })] }), jsx(DataList.ItemValue, { flex: grow ? "1" : undefined, children: value }), children] }));
|
|
3711
3734
|
});
|
|
3712
3735
|
|
|
3713
|
-
const IdViewer = ({ value,
|
|
3736
|
+
const IdViewer = ({ value, column }) => {
|
|
3714
3737
|
const { schema, serverUrl } = useSchemaContext();
|
|
3715
3738
|
if (schema.properties == undefined) {
|
|
3716
3739
|
throw new Error("schema properties when using DatePicker");
|
|
3717
3740
|
}
|
|
3718
|
-
const { title } = schema.properties[column];
|
|
3741
|
+
const { title, foreign_key } = schema.properties[column];
|
|
3742
|
+
if (foreign_key === undefined) {
|
|
3743
|
+
throw new Error('foreign_key when variant is id-picker');
|
|
3744
|
+
}
|
|
3745
|
+
const { table, column: foreginKeyColumn, display_column } = foreign_key;
|
|
3719
3746
|
const query = useQuery({
|
|
3720
|
-
queryKey: [`idpicker`,
|
|
3747
|
+
queryKey: [`idpicker`, table, value],
|
|
3721
3748
|
queryFn: async () => {
|
|
3722
3749
|
return await getTableData({
|
|
3723
3750
|
serverUrl,
|
|
3724
|
-
in_table:
|
|
3751
|
+
in_table: foreginKeyColumn ?? '',
|
|
3725
3752
|
where: [
|
|
3726
3753
|
{
|
|
3727
|
-
id:
|
|
3754
|
+
id: column,
|
|
3728
3755
|
value: value,
|
|
3729
3756
|
},
|
|
3730
3757
|
],
|
|
@@ -4495,15 +4522,19 @@ const EnumPicker = ({ column, isMultiple = false }) => {
|
|
|
4495
4522
|
}) }), isDirty && (jsxs(Fragment, { children: [dataList.length <= 0 && jsx(Fragment, { children: "Empty Search Result" }), " "] }))] })] }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: fieldRequired ?? "The field is requried" }))] }));
|
|
4496
4523
|
};
|
|
4497
4524
|
|
|
4498
|
-
const idPickerSanityCheck = (column,
|
|
4499
|
-
if (!!
|
|
4500
|
-
throw new Error(`The key
|
|
4525
|
+
const idPickerSanityCheck = (column, foreign_key) => {
|
|
4526
|
+
if (!!foreign_key == false) {
|
|
4527
|
+
throw new Error(`The key foreign_key does not exist in properties of column ${column} when using id-picker.`);
|
|
4501
4528
|
}
|
|
4502
|
-
|
|
4503
|
-
|
|
4529
|
+
const { table, column: foreignKeyColumn, display_column } = foreign_key;
|
|
4530
|
+
if (!!table == false) {
|
|
4531
|
+
throw new Error(`The key table does not exist in properties of column ${table} when using id-picker.`);
|
|
4504
4532
|
}
|
|
4505
4533
|
if (!!display_column == false) {
|
|
4506
|
-
throw new Error(`The key display_column does not exist in properties of column ${column}.`);
|
|
4534
|
+
throw new Error(`The key display_column does not exist in properties of column ${column} when using id-picker.`);
|
|
4535
|
+
}
|
|
4536
|
+
if (!!foreignKeyColumn == false) {
|
|
4537
|
+
throw new Error(`The key column does not exist in properties of column ${column} when using id-picker.`);
|
|
4507
4538
|
}
|
|
4508
4539
|
};
|
|
4509
4540
|
const FormInternal = () => {
|
|
@@ -4609,14 +4640,11 @@ const FormInternal = () => {
|
|
|
4609
4640
|
if (shouldIgnore) {
|
|
4610
4641
|
return jsx(Fragment, {});
|
|
4611
4642
|
}
|
|
4612
|
-
const { type, variant,
|
|
4643
|
+
const { type, variant, gridColumn, gridRow, foreign_key } = values;
|
|
4613
4644
|
if (type === "string") {
|
|
4614
4645
|
if (variant === "id-picker") {
|
|
4615
|
-
idPickerSanityCheck(column,
|
|
4616
|
-
return (jsx(IdViewer, { value: (validatedData ?? {})[column],
|
|
4617
|
-
column_ref,
|
|
4618
|
-
display_column,
|
|
4619
|
-
column,
|
|
4646
|
+
idPickerSanityCheck(column, foreign_key);
|
|
4647
|
+
return (jsx(IdViewer, { value: (validatedData ?? {})[column], column,
|
|
4620
4648
|
gridColumn,
|
|
4621
4649
|
gridRow }, `form-${key}`));
|
|
4622
4650
|
}
|
|
@@ -4682,14 +4710,14 @@ const FormInternal = () => {
|
|
|
4682
4710
|
return jsx(Fragment, {});
|
|
4683
4711
|
}
|
|
4684
4712
|
//@ts-expect-error TODO: add more fields to support form-creation
|
|
4685
|
-
const { type, variant, in_table, column_ref,
|
|
4713
|
+
const { type, variant, in_table, column_ref, foreign_key } = values;
|
|
4686
4714
|
if (type === "string") {
|
|
4687
4715
|
if ((values.enum ?? []).length > 0) {
|
|
4688
4716
|
return jsx(EnumPicker, { column: key }, `form-${key}`);
|
|
4689
4717
|
}
|
|
4690
4718
|
if (variant === "id-picker") {
|
|
4691
|
-
idPickerSanityCheck(column,
|
|
4692
|
-
return
|
|
4719
|
+
idPickerSanityCheck(column, foreign_key);
|
|
4720
|
+
return jsx(IdPicker, { column: key }, `form-${key}`);
|
|
4693
4721
|
}
|
|
4694
4722
|
if (variant === "date-picker") {
|
|
4695
4723
|
return jsx(DatePicker, { column: key }, `form-${key}`);
|
|
@@ -4707,8 +4735,8 @@ const FormInternal = () => {
|
|
|
4707
4735
|
}
|
|
4708
4736
|
if (type === "array") {
|
|
4709
4737
|
if (variant === "id-picker") {
|
|
4710
|
-
idPickerSanityCheck(column,
|
|
4711
|
-
return
|
|
4738
|
+
idPickerSanityCheck(column, foreign_key);
|
|
4739
|
+
return jsx(IdPicker, { column: key, isMultiple: true }, `form-${key}`);
|
|
4712
4740
|
}
|
|
4713
4741
|
if (variant === "tag-picker") {
|
|
4714
4742
|
return jsx(TagPicker, { column: key }, `form-${key}`);
|
|
@@ -12,7 +12,20 @@ declare module "@tanstack/react-table" {
|
|
|
12
12
|
}
|
|
13
13
|
export interface DataTableProps<TData = unknown> {
|
|
14
14
|
children?: ReactNode | ReactNode[];
|
|
15
|
+
/**
|
|
16
|
+
* Data array for the table.
|
|
17
|
+
*
|
|
18
|
+
* It will pass into as the data in `@tanstack/react-table`
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
15
21
|
data: TData[];
|
|
22
|
+
/**
|
|
23
|
+
* Column definitions for the table.
|
|
24
|
+
*
|
|
25
|
+
* It will pass into as the column definitions in `@tanstack/react-table`
|
|
26
|
+
*
|
|
27
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
28
|
+
*/
|
|
16
29
|
columns: ColumnDef<TData, unknown>[];
|
|
17
30
|
enableRowSelection?: boolean;
|
|
18
31
|
enableMultiRowSelection?: boolean;
|
|
@@ -35,4 +48,14 @@ export interface DataTableProps<TData = unknown> {
|
|
|
35
48
|
setDensity: OnChangeFn<DensityState>;
|
|
36
49
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
37
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* DataTable will create a context to hold all values to
|
|
53
|
+
* help the render of the DataTable in serverside
|
|
54
|
+
*
|
|
55
|
+
*
|
|
56
|
+
* The query is required to be a GET request that can receive
|
|
57
|
+
* specified params and return a specified response
|
|
58
|
+
*
|
|
59
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
60
|
+
*/
|
|
38
61
|
export declare function DataTable<TData = unknown>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, children, }: DataTableProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -5,6 +5,13 @@ import { DensityState } from "../Controls/DensityFeature";
|
|
|
5
5
|
import { DataResponse } from "./useDataTableServer";
|
|
6
6
|
export interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown>> {
|
|
7
7
|
children: ReactNode | ReactNode[];
|
|
8
|
+
/**
|
|
9
|
+
* Column definitions for the table.
|
|
10
|
+
*
|
|
11
|
+
* It will pass into as the column definitions in `@tanstack/react-table`
|
|
12
|
+
*
|
|
13
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
14
|
+
*/
|
|
8
15
|
columns: ColumnDef<TData>[];
|
|
9
16
|
enableRowSelection?: boolean;
|
|
10
17
|
enableMultiRowSelection?: boolean;
|
|
@@ -28,4 +35,15 @@ export interface DataTableServerProps<TData extends DataResponse = DataResponse<
|
|
|
28
35
|
query: UseQueryResult<TData>;
|
|
29
36
|
url: string;
|
|
30
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* DataTableServer will create a context to hold all values to
|
|
40
|
+
* help the render of the DataTable in serverside
|
|
41
|
+
*
|
|
42
|
+
* The query is required to be a GET request that can receive
|
|
43
|
+
* specified params and return a specified response
|
|
44
|
+
*
|
|
45
|
+
* The `useDataTableServer` can help to create the specified request and response
|
|
46
|
+
*
|
|
47
|
+
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
48
|
+
*/
|
|
31
49
|
export declare function DataTableServer<TData extends DataResponse = DataResponse<unknown>>({ columns, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, children, url, }: DataTableServerProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
export interface IdPickerProps {
|
|
2
2
|
column: string;
|
|
3
|
-
in_table: string;
|
|
4
|
-
column_ref: string;
|
|
5
|
-
display_column: string;
|
|
6
3
|
isMultiple?: boolean;
|
|
7
4
|
}
|
|
8
|
-
export declare const IdPicker: ({ column,
|
|
5
|
+
export declare const IdPicker: ({ column, isMultiple }: IdPickerProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
export interface IdViewerProps {
|
|
2
2
|
value: string | undefined;
|
|
3
|
-
in_table: string;
|
|
4
|
-
column_ref: string;
|
|
5
|
-
display_column: string;
|
|
6
3
|
column: string;
|
|
7
4
|
}
|
|
8
|
-
export declare const IdViewer: ({ value,
|
|
5
|
+
export declare const IdViewer: ({ value, column }: IdViewerProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -8,5 +8,10 @@ export interface CustomJSONSchema7 extends JSONSchema7 {
|
|
|
8
8
|
title?: string;
|
|
9
9
|
in_table?: string;
|
|
10
10
|
object_id_column?: string;
|
|
11
|
+
foreign_key?: {
|
|
12
|
+
column?: string;
|
|
13
|
+
table?: string;
|
|
14
|
+
display_column: string;
|
|
15
|
+
};
|
|
11
16
|
}
|
|
12
17
|
export declare const StringInputField: ({ column }: StringInputFieldProps) => import("react/jsx-runtime").JSX.Element;
|