@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 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(TextCell, { children: JSON.stringify(value) });
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, in_table, column_ref, display_column, isMultiple = false, }) => {
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.properties[column];
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, in_table, limit, page }],
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, in_table, column_ref, display_column, column, }) => {
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`, in_table, value],
3767
+ queryKey: [`idpicker`, table, value],
3741
3768
  queryFn: async () => {
3742
3769
  return await getTableData({
3743
3770
  serverUrl,
3744
- in_table: in_table,
3771
+ in_table: foreginKeyColumn ?? '',
3745
3772
  where: [
3746
3773
  {
3747
- id: column_ref,
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, in_table, column_ref, display_column) => {
4519
- if (!!in_table == false) {
4520
- throw new Error(`The key in_table does not exist in properties of column ${column}.`);
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
- if (!!column_ref == false) {
4523
- throw new Error(`The key column_ref does not exist in properties of column ${column}.`);
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, in_table, column_ref, display_column, gridColumn, gridRow, } = values;
4663
+ const { type, variant, gridColumn, gridRow, foreign_key } = values;
4633
4664
  if (type === "string") {
4634
4665
  if (variant === "id-picker") {
4635
- idPickerSanityCheck(column, in_table, column_ref, display_column);
4636
- return (jsxRuntime.jsx(IdViewer, { value: (validatedData ?? {})[column], in_table,
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, display_column } = values;
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, in_table, column_ref, display_column);
4712
- return (jsxRuntime.jsx(IdPicker, { column: key, in_table: in_table, column_ref: column_ref, display_column: display_column }, `form-${key}`));
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, in_table, column_ref, display_column);
4731
- return (jsxRuntime.jsx(IdPicker, { column: key, in_table: in_table, column_ref: column_ref, display_column: display_column, isMultiple: true }, `form-${key}`));
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(TextCell, { children: JSON.stringify(value) });
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, in_table, column_ref, display_column, isMultiple = false, }) => {
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.properties[column];
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, in_table, limit, page }],
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, in_table, column_ref, display_column, column, }) => {
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`, in_table, value],
3747
+ queryKey: [`idpicker`, table, value],
3721
3748
  queryFn: async () => {
3722
3749
  return await getTableData({
3723
3750
  serverUrl,
3724
- in_table: in_table,
3751
+ in_table: foreginKeyColumn ?? '',
3725
3752
  where: [
3726
3753
  {
3727
- id: column_ref,
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, in_table, column_ref, display_column) => {
4499
- if (!!in_table == false) {
4500
- throw new Error(`The key in_table does not exist in properties of column ${column}.`);
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
- if (!!column_ref == false) {
4503
- throw new Error(`The key column_ref does not exist in properties of column ${column}.`);
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, in_table, column_ref, display_column, gridColumn, gridRow, } = values;
4643
+ const { type, variant, gridColumn, gridRow, foreign_key } = values;
4613
4644
  if (type === "string") {
4614
4645
  if (variant === "id-picker") {
4615
- idPickerSanityCheck(column, in_table, column_ref, display_column);
4616
- return (jsx(IdViewer, { value: (validatedData ?? {})[column], in_table,
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, display_column } = values;
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, in_table, column_ref, display_column);
4692
- return (jsx(IdPicker, { column: key, in_table: in_table, column_ref: column_ref, display_column: display_column }, `form-${key}`));
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, in_table, column_ref, display_column);
4711
- return (jsx(IdPicker, { column: key, in_table: in_table, column_ref: column_ref, display_column: display_column, isMultiple: true }, `form-${key}`));
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, in_table, column_ref, display_column, isMultiple, }: IdPickerProps) => import("react/jsx-runtime").JSX.Element;
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, in_table, column_ref, display_column, column, }: IdViewerProps) => import("react/jsx-runtime").JSX.Element;
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "7.7.0",
3
+ "version": "8.0.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",