@bsol-oss/react-datatable5 11.0.0-beta.5 → 11.0.0-beta.7

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.
Files changed (35) hide show
  1. package/dist/index.d.ts +4 -3
  2. package/dist/index.js +472 -120
  3. package/dist/index.mjs +474 -122
  4. package/dist/types/components/DataTable/DataDisplay.d.ts +1 -1
  5. package/dist/types/components/DataTable/utils/getColumns.d.ts +2 -1
  6. package/dist/types/components/Form/Form.d.ts +1 -1
  7. package/dist/types/components/Form/components/fields/ArrayRenderer.d.ts +7 -0
  8. package/dist/types/components/Form/components/fields/BooleanPicker.d.ts +7 -0
  9. package/dist/types/components/Form/components/fields/ColumnRenderer.d.ts +7 -0
  10. package/dist/types/components/Form/components/fields/DatePicker.d.ts +7 -0
  11. package/dist/types/components/Form/components/fields/EnumPicker.d.ts +8 -0
  12. package/dist/types/components/Form/components/fields/FilePicker.d.ts +5 -0
  13. package/dist/types/components/Form/components/fields/IdPicker.d.ts +8 -0
  14. package/dist/types/components/Form/components/fields/NumberInputField.d.ts +7 -0
  15. package/dist/types/components/Form/components/fields/ObjectInput.d.ts +7 -0
  16. package/dist/types/components/Form/components/fields/RecordInput.d.ts +7 -0
  17. package/dist/types/components/Form/components/fields/SchemaRenderer.d.ts +7 -0
  18. package/dist/types/components/Form/components/fields/StringInputField.d.ts +12 -0
  19. package/dist/types/components/Form/components/fields/TagPicker.d.ts +25 -0
  20. package/dist/types/components/Form/components/types/CustomJSONSchema7.d.ts +15 -0
  21. package/dist/types/components/Form/components/viewers/ArrayViewer.d.ts +7 -0
  22. package/dist/types/components/Form/components/viewers/BooleanViewer.d.ts +7 -0
  23. package/dist/types/components/Form/components/viewers/ColumnViewer.d.ts +7 -0
  24. package/dist/types/components/Form/components/viewers/DateViewer.d.ts +7 -0
  25. package/dist/types/components/Form/components/viewers/EnumViewer.d.ts +8 -0
  26. package/dist/types/components/Form/components/viewers/FileViewer.d.ts +5 -0
  27. package/dist/types/components/Form/components/viewers/IdViewer.d.ts +8 -0
  28. package/dist/types/components/Form/components/viewers/NumberViewer.d.ts +7 -0
  29. package/dist/types/components/Form/components/viewers/ObjectViewer.d.ts +7 -0
  30. package/dist/types/components/Form/components/viewers/RecordViewer.d.ts +7 -0
  31. package/dist/types/components/Form/components/viewers/SchemaViewer.d.ts +7 -0
  32. package/dist/types/components/Form/components/viewers/StringViewer.d.ts +12 -0
  33. package/dist/types/components/Form/components/viewers/TagViewer.d.ts +30 -0
  34. package/dist/types/components/Form/utils/removeIndex.d.ts +1 -0
  35. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2625,8 +2625,8 @@ const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
2625
2625
  }) }));
2626
2626
  };
2627
2627
 
2628
- const DataDisplay = ({ variant = "", translate }) => {
2629
- const { table } = useDataTableContext();
2628
+ const CellRenderer = ({ cell }) => {
2629
+ const { translate } = useDataTableContext();
2630
2630
  const getLabel = ({ columnId }) => {
2631
2631
  if (translate !== undefined) {
2632
2632
  return translate.t(`${columnId}`);
@@ -2651,66 +2651,51 @@ const DataDisplay = ({ variant = "", translate }) => {
2651
2651
  }
2652
2652
  throw new Error(`value is unknown, ${typeof value}`);
2653
2653
  };
2654
- if (variant == "horizontal") {
2655
- return (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "1", children: table.getRowModel().rows.map((row) => {
2656
- return (jsxRuntime.jsx(react.Card.Root, { children: jsxRuntime.jsx(react.Card.Body, { children: jsxRuntime.jsx(react.DataList.Root, { gap: 4, padding: 4, display: "grid", variant: "subtle", orientation: "horizontal", overflow: "auto", children: row.getVisibleCells().map((cell) => {
2657
- const showCustomDataDisplay = cell.column.columnDef.meta?.showCustomDisplay ?? false;
2658
- if (showCustomDataDisplay) {
2659
- return (jsxRuntime.jsx(react.Flex, { children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id));
2660
- }
2661
- const value = cell.getValue();
2662
- if (typeof value === "object") {
2663
- return (jsxRuntime.jsxs(react.DataList.Item, { children: [jsxRuntime.jsx(react.DataList.ItemLabel, { children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(RecordDisplay, { boxProps: {
2664
- borderWidth: 1,
2665
- borderRadius: 4,
2666
- borderColor: "gray.400",
2667
- paddingX: 4,
2668
- paddingY: 2,
2669
- }, object: value })] }, cell.id));
2670
- }
2671
- return (jsxRuntime.jsxs(react.DataList.Item, { children: [jsxRuntime.jsx(react.DataList.ItemLabel, { children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(react.DataList.ItemValue, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
2672
- }) }) }) }, `chakra-table-card-${row.id}`));
2673
- }) }));
2654
+ const showCustomDataDisplay = cell.column.columnDef.meta?.showCustomDisplay ?? false;
2655
+ const gridColumn = cell.column.columnDef.meta?.gridColumn ?? [
2656
+ "span 12",
2657
+ "span 6",
2658
+ "span 3",
2659
+ ];
2660
+ const gridRow = cell.column.columnDef.meta?.gridRow ?? {};
2661
+ if (showCustomDataDisplay) {
2662
+ return (jsxRuntime.jsx(react.Flex, { gridColumn, gridRow, children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id));
2674
2663
  }
2675
- if (variant == "stats") {
2676
- return (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "1", children: table.getRowModel().rows.map((row) => {
2677
- return (jsxRuntime.jsx(react.Card.Root, { children: jsxRuntime.jsx(react.Card.Body, { children: jsxRuntime.jsx(react.DataList.Root, { gap: 4, padding: 4, display: "flex", flexFlow: "row", variant: "subtle", overflow: "auto", children: row.getVisibleCells().map((cell) => {
2678
- const showCustomDataDisplay = cell.column.columnDef.meta?.showCustomDisplay ?? false;
2679
- if (showCustomDataDisplay) {
2680
- return (jsxRuntime.jsx(react.Flex, { children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id));
2681
- }
2682
- const value = cell.getValue();
2683
- if (typeof value === "object") {
2684
- return (jsxRuntime.jsxs(react.DataList.Item, { display: "inline-flex", flexFlow: "column", justifyContent: "center", alignItems: "center", flex: "1 0 0%", children: [jsxRuntime.jsx(react.DataList.ItemLabel, { children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(RecordDisplay, { boxProps: {
2685
- borderWidth: 1,
2686
- borderRadius: 4,
2687
- borderColor: "gray.400",
2688
- paddingX: 4,
2689
- paddingY: 2,
2690
- }, object: value })] }));
2691
- }
2692
- return (jsxRuntime.jsxs(react.DataList.Item, { display: "flex", justifyContent: "center", alignItems: "center", flex: "1 0 0%", children: [jsxRuntime.jsx(react.DataList.ItemLabel, { children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(react.DataList.ItemValue, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
2693
- }) }) }) }, `chakra-table-card-${row.id}`));
2694
- }) }));
2664
+ const value = cell.getValue();
2665
+ if (typeof value === "object") {
2666
+ return (jsxRuntime.jsxs(react.Box, { gridColumn, gridRow, children: [jsxRuntime.jsx(react.Box, { children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(RecordDisplay, { boxProps: {
2667
+ borderWidth: 1,
2668
+ borderRadius: 4,
2669
+ borderColor: "gray.400",
2670
+ paddingX: 4,
2671
+ paddingY: 2,
2672
+ }, object: value })] }, cell.id));
2695
2673
  }
2674
+ return (jsxRuntime.jsxs(react.Box, { gridColumn, gridRow, children: [jsxRuntime.jsx(react.Box, { color: 'gray.400', children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(react.Box, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
2675
+ };
2676
+ const DataDisplay = ({ variant = "" }) => {
2677
+ const { table, translate } = useDataTableContext();
2696
2678
  return (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "1", children: table.getRowModel().rows.map((row) => {
2697
- return (jsxRuntime.jsx(react.Card.Root, { children: jsxRuntime.jsx(react.Card.Body, { children: jsxRuntime.jsx(react.DataList.Root, { gap: 4, padding: 4, display: "grid", variant: "subtle", gridTemplateColumns: "repeat(auto-fit, minmax(20rem, 1fr))", children: row.getVisibleCells().map((cell) => {
2698
- const showCustomDataDisplay = cell.column.columnDef.meta?.showCustomDisplay ?? false;
2699
- if (showCustomDataDisplay) {
2700
- return (jsxRuntime.jsx(react.Flex, { children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id));
2701
- }
2702
- const value = cell.getValue();
2703
- if (typeof value === "object") {
2704
- return (jsxRuntime.jsxs(react.DataList.Item, { children: [jsxRuntime.jsx(react.DataList.ItemLabel, { children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(RecordDisplay, { boxProps: {
2705
- borderWidth: 1,
2706
- borderRadius: 4,
2707
- borderColor: "gray.400",
2708
- paddingX: 4,
2709
- paddingY: 2,
2710
- }, object: value })] }, cell.id));
2711
- }
2712
- return (jsxRuntime.jsxs(react.DataList.Item, { children: [jsxRuntime.jsx(react.DataList.ItemLabel, { children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(react.DataList.ItemValue, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
2713
- }) }) }) }, `chakra-table-card-${row.id}`));
2679
+ const rowId = row.id;
2680
+ return (jsxRuntime.jsx(react.Card.Root, { children: jsxRuntime.jsx(react.Card.Body, { display: "grid", gap: 4, padding: 4, gridTemplateColumns: "repeat(12, 1fr)", children: table.getAllColumns().map((column) => {
2681
+ const childCell = row.getAllCells().find((cell) => {
2682
+ return cell.id === `${rowId}_${column.id}`;
2683
+ });
2684
+ if (column.columns.length > 0) {
2685
+ return (jsxRuntime.jsxs(react.Card.Root, { margin: "1", gridColumn: "span 12", children: [jsxRuntime.jsx(react.Card.Header, { color: "gray.400", children: translate.t(column.id) }), jsxRuntime.jsx(react.Card.Body, { display: "grid", gap: "4", gridTemplateColumns: "repeat(12, 1fr)", children: column.columns.map((column) => {
2686
+ if (!column.getIsVisible()) {
2687
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
2688
+ }
2689
+ const foundCell = row
2690
+ .getVisibleCells()
2691
+ .find((cell) => {
2692
+ return cell.id === `${rowId}_${column.id}`;
2693
+ });
2694
+ return jsxRuntime.jsx(CellRenderer, { cell: foundCell });
2695
+ }) })] }, `chakra-table-card-${childCell?.id}`));
2696
+ }
2697
+ return jsxRuntime.jsx(CellRenderer, { cell: childCell });
2698
+ }) }) }, `chakra-table-card-${rowId}`));
2714
2699
  }) }));
2715
2700
  };
2716
2701
 
@@ -3498,7 +3483,7 @@ const widthSanityCheck = (widthList, ignoreList, properties) => {
3498
3483
  throw new Error(`The width list is too long given from the number of remaining properties after ignore some.`);
3499
3484
  }
3500
3485
  };
3501
- const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth = 400, translate, }) => {
3486
+ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {}, defaultWidth = 400, translate, }) => {
3502
3487
  const { properties } = schema;
3503
3488
  idListSanityCheck("ignore", ignore, properties);
3504
3489
  widthSanityCheck(width, ignore, properties);
@@ -3510,7 +3495,8 @@ const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth =
3510
3495
  return snakeToLabel(column);
3511
3496
  };
3512
3497
  const keys = Object.keys(properties);
3513
- const ignored = keys.filter((key) => {
3498
+ const included = include.length > 0 ? include : keys;
3499
+ const ignored = included.filter((key) => {
3514
3500
  return !ignore.some((shouldIgnoreKey) => key === shouldIgnoreKey);
3515
3501
  });
3516
3502
  const columnHelper = reactTable.createColumnHelper();
@@ -3598,23 +3584,40 @@ const AccordionItemContent = React__namespace.forwardRef(function AccordionItemC
3598
3584
  const AccordionRoot = react.Accordion.Root;
3599
3585
  const AccordionItem = react.Accordion.Item;
3600
3586
 
3587
+ function removeIndex(str) {
3588
+ return str.replace(/\.\d+\./g, '.');
3589
+ }
3590
+
3601
3591
  const ArrayRenderer = ({ schema, column, prefix, }) => {
3602
3592
  const { gridRow, gridColumn = "1/span 12", required, items } = schema;
3593
+ // @ts-expect-error TODO: find suitable types
3594
+ const { type } = items;
3603
3595
  const { translate } = useSchemaContext();
3604
3596
  const colLabel = `${prefix}${column}`;
3605
3597
  const isRequired = required?.some((columnId) => columnId === column);
3606
- const { formState: { errors }, control, } = reactHookForm.useFormContext();
3607
- const { fields, append, prepend, remove, swap, move, insert } = reactHookForm.useFieldArray({
3608
- control, // control props comes from useForm (optional: if you are using FormContext)
3609
- name: "test", // unique name for your Field Array
3610
- });
3611
- return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(`${colLabel}.fieldLabel`)}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", children: [jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaRenderer, { column: `${column}.${index}`,
3612
- prefix: `${prefix}`,
3613
- schema: items }, `form-${column}`) }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(react.Button, { variant: "ghost", onClick: () => {
3614
- remove(index);
3615
- }, children: translate.t(`${colLabel}.remove`) }) })] }))), jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(react.Button, { onClick: () => {
3616
- append({});
3617
- }, children: translate.t(`${colLabel}.add`) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
3598
+ const { formState: { errors }, setValue, watch, } = reactHookForm.useFormContext();
3599
+ const fields = (watch(colLabel) ?? []);
3600
+ return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", children: [jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaRenderer, { column: `${index}`,
3601
+ prefix: `${colLabel}.`,
3602
+ schema: items }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(react.Button, { variant: "ghost", onClick: () => {
3603
+ setValue(colLabel, fields.filter((_, curIndex) => {
3604
+ return curIndex === index;
3605
+ }));
3606
+ }, children: translate.t(removeIndex(`${colLabel}.remove`)) }) })] }, `${colLabel}.${index}`))), jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(react.Button, { onClick: () => {
3607
+ if (type === "number") {
3608
+ setValue(colLabel, [...fields, 0]);
3609
+ return;
3610
+ }
3611
+ if (type === "string") {
3612
+ setValue(colLabel, [...fields, ""]);
3613
+ return;
3614
+ }
3615
+ if (type === "boolean") {
3616
+ setValue(colLabel, [...fields, false]);
3617
+ return;
3618
+ }
3619
+ setValue(colLabel, [...fields, {}]);
3620
+ }, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3618
3621
  };
3619
3622
 
3620
3623
  const Field = React__namespace.forwardRef(function Field(props, ref) {
@@ -3629,10 +3632,10 @@ const BooleanPicker = ({ schema, column, prefix }) => {
3629
3632
  const isRequired = required?.some((columnId) => columnId === column);
3630
3633
  const colLabel = `${prefix}${column}`;
3631
3634
  const value = watch(colLabel);
3632
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
3633
- gridRow, children: [jsxRuntime.jsx(CheckboxCard, { checked: value, variant: "surface", onSelect: () => {
3635
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3636
+ gridRow, children: [jsxRuntime.jsx(CheckboxCard, { checked: value, variant: "surface", onChange: () => {
3634
3637
  setValue(colLabel, !value);
3635
- } }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
3638
+ } }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3636
3639
  };
3637
3640
 
3638
3641
  const monthNamesShort = [
@@ -3730,7 +3733,7 @@ const DatePicker = ({ column, schema, prefix }) => {
3730
3733
  const colLabel = `${prefix}${column}`;
3731
3734
  const [open, setOpen] = React.useState(false);
3732
3735
  const selectedDate = watch(colLabel);
3733
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
3736
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3734
3737
  gridRow, children: [jsxRuntime.jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: jsxRuntime.jsx(Button, { size: "sm", variant: "outline", onClick: () => {
3735
3738
  setOpen(true);
3736
3739
  }, children: selectedDate !== undefined ? selectedDate : "" }) }), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { children: [jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(DatePicker$1
@@ -3740,9 +3743,9 @@ const DatePicker = ({ column, schema, prefix }) => {
3740
3743
  selected: new Date(selectedDate),
3741
3744
  // @ts-expect-error TODO: find appropriate types
3742
3745
  onDateSelected: ({ date }) => {
3743
- setValue(column, dayjs(date).format("YYYY-MM-DD"));
3746
+ setValue(colLabel, dayjs(date).format("YYYY-MM-DD"));
3744
3747
  setOpen(false);
3745
- } })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
3748
+ } })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3746
3749
  };
3747
3750
 
3748
3751
  function filterArray(array, searchTerm) {
@@ -3765,8 +3768,9 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3765
3768
  const [limit, setLimit] = React.useState(10);
3766
3769
  const [openSearchResult, setOpenSearchResult] = React.useState();
3767
3770
  const ref = React.useRef(null);
3768
- const watchEnum = watch(column);
3769
- const watchEnums = (watch(column) ?? []);
3771
+ const colLabel = `${prefix}${column}`;
3772
+ const watchEnum = watch(colLabel);
3773
+ const watchEnums = (watch(colLabel) ?? []);
3770
3774
  const dataList = schema.enum ?? [];
3771
3775
  const count = schema.enum?.length ?? 0;
3772
3776
  const isDirty = (searchText?.length ?? 0) > 0;
@@ -3774,8 +3778,7 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3774
3778
  setSearchText(event.target.value);
3775
3779
  setLimit(10);
3776
3780
  };
3777
- const col = `${prefix}${column}`;
3778
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
3781
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3779
3782
  gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
3780
3783
  const item = enumValue;
3781
3784
  if (item === undefined) {
@@ -3784,12 +3787,16 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3784
3787
  return (jsxRuntime.jsx(Tag, { closable: true, onClick: () => {
3785
3788
  // setSelectedEnums((state) => state.filter((id) => id != item));
3786
3789
  setValue(column, watchEnums.filter((id) => id != item));
3787
- }, children: !!renderDisplay === true ? renderDisplay(item) : item }));
3790
+ }, children: !!renderDisplay === true
3791
+ ? renderDisplay(item)
3792
+ : translate.t(removeIndex(`${colLabel}.${item}`)) }));
3788
3793
  }), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
3789
3794
  setOpenSearchResult(true);
3790
- }, children: "Add" })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
3795
+ }, children: translate.t(removeIndex(`${colLabel}.addMore`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
3791
3796
  setOpenSearchResult(true);
3792
- }, children: watchEnum })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${column}.typeToSearch`), onChange: (event) => {
3797
+ }, children: watchEnum === undefined
3798
+ ? ""
3799
+ : translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${column}.typeToSearch`), onChange: (event) => {
3793
3800
  onSearchChange(event);
3794
3801
  setOpenSearchResult(true);
3795
3802
  }, autoComplete: "off", ref: ref }), jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(react.Text, { children: `${translate.t(`${column}.total`)}: ${count}, ${translate.t(`${column}.showing`)} ${limit}` }), jsxRuntime.jsxs(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children: filterArray(dataList, searchText ?? "").map((item) => {
@@ -3799,15 +3806,15 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3799
3806
  return (jsxRuntime.jsx(react.Box, { cursor: "pointer", onClick: () => {
3800
3807
  if (!isMultiple) {
3801
3808
  setOpenSearchResult(false);
3802
- setValue(column, item);
3809
+ setValue(colLabel, item);
3803
3810
  return;
3804
3811
  }
3805
3812
  const newSet = new Set([...(watchEnums ?? []), item]);
3806
- setValue(column, [...newSet]);
3813
+ setValue(colLabel, [...newSet]);
3807
3814
  }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
3808
3815
  ? renderDisplay(item)
3809
- : translate.t(`${col}.${item}`) }, `${column}-${item}`));
3810
- }) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: translate.t(`${col}.emptySearchResult`) })) }))] })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${col}.fieldRequired`) }))] }));
3816
+ : translate.t(removeIndex(`${colLabel}.${item}`)) }, `${colLabel}-${item}`));
3817
+ }) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: translate.t(removeIndex(`${colLabel}.emptySearchResult`)) })) }))] })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3811
3818
  };
3812
3819
 
3813
3820
  function isEnteringWindow(_ref) {
@@ -4168,17 +4175,17 @@ const FilePicker = ({ column, schema, prefix }) => {
4168
4175
  const { required, gridColumn, gridRow } = schema;
4169
4176
  const isRequired = required?.some((columnId) => columnId === column);
4170
4177
  const currentFiles = (watch(column) ?? []);
4171
- const col = `${prefix}${column}`;
4172
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${col}.fieldLabel`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: [jsxRuntime.jsx(FileDropzone, { onDrop: ({ files }) => {
4178
+ const colLabel = `${prefix}${column}`;
4179
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: [jsxRuntime.jsx(FileDropzone, { onDrop: ({ files }) => {
4173
4180
  const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
4174
- setValue(col, [...currentFiles, ...newFiles]);
4175
- }, placeholder: translate.t(`${col}.fileDropzone`) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4181
+ setValue(colLabel, [...currentFiles, ...newFiles]);
4182
+ }, placeholder: translate.t(removeIndex(`${colLabel}.fileDropzone`)) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4176
4183
  return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
4177
4184
  setValue(column, currentFiles.filter(({ name }) => {
4178
4185
  return name !== file.name;
4179
4186
  }));
4180
4187
  }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
4181
- }) }), errors[`${col}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${col}.fieldRequired`) }))] }));
4188
+ }) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4182
4189
  };
4183
4190
 
4184
4191
  const getTableData = async ({ serverUrl, in_table, searching = "", where = [], limit = 10, offset = 0, }) => {
@@ -4220,7 +4227,6 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4220
4227
  const [openSearchResult, setOpenSearchResult] = React.useState();
4221
4228
  const [page, setPage] = React.useState(0);
4222
4229
  const ref = React.useRef(null);
4223
- const selectedIds = watch(column) ?? [];
4224
4230
  const colLabel = `${prefix}${column}`;
4225
4231
  const query = reactQuery.useQuery({
4226
4232
  queryKey: [`idpicker`, { column, searchText, limit, page }],
@@ -4257,8 +4263,8 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4257
4263
  setPage(0);
4258
4264
  setLimit(10);
4259
4265
  };
4260
- const watchId = watch(column);
4261
- const watchIds = (watch(column) ?? []);
4266
+ const watchId = watch(colLabel);
4267
+ const watchIds = (watch(colLabel) ?? []);
4262
4268
  const getPickedValue = () => {
4263
4269
  if (Object.keys(idMap).length <= 0) {
4264
4270
  return "";
@@ -4269,11 +4275,11 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4269
4275
  }
4270
4276
  return record[display_column];
4271
4277
  };
4272
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
4273
- gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [selectedIds.map((id) => {
4278
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.fieldLabel`)))}`, required: isRequired, alignItems: "stretch", gridColumn,
4279
+ gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchIds.map((id) => {
4274
4280
  const item = idMap[id];
4275
4281
  if (item === undefined) {
4276
- return (jsxRuntime.jsxs(react.Text, { children: [" ", translate.t(`${colLabel}.undefined`)] }, id));
4282
+ return (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.undefined`)) }, id));
4277
4283
  }
4278
4284
  return (jsxRuntime.jsx(Tag, { closable: true, onClick: () => {
4279
4285
  setValue(column, watchIds.filter((id) => id != item[column_ref]));
@@ -4282,12 +4288,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4282
4288
  : item[display_column] }, id));
4283
4289
  }), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
4284
4290
  setOpenSearchResult(true);
4285
- }, children: translate.t(`${colLabel}.addMore`) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
4291
+ }, children: translate.t(removeIndex(`${colLabel}.addMore`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
4286
4292
  setOpenSearchResult(true);
4287
- }, children: getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${colLabel}.typeToSearch`), onChange: (event) => {
4293
+ }, children: getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.typeToSearch`)), onChange: (event) => {
4288
4294
  onSearchChange(event);
4289
4295
  setOpenSearchResult(true);
4290
- }, autoComplete: "off", ref: ref }), jsxRuntime.jsx(PopoverTitle, {}), (searchText?.length ?? 0) > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isFetching && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isFetching" }), isLoading && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isLoading" }), isPending && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isPending" }), isError && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isError" }), jsxRuntime.jsx(react.Text, { justifySelf: "center", children: `${translate.t(`${colLabel}.total`)} ${count}, ${translate.t(`${colLabel}.showing`)} ${limit}` }), jsxRuntime.jsxs(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children:
4296
+ }, autoComplete: "off", ref: ref }), jsxRuntime.jsx(PopoverTitle, {}), (searchText?.length ?? 0) > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isFetching && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isFetching" }), isLoading && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isLoading" }), isPending && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isPending" }), isError && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isError" }), jsxRuntime.jsx(react.Text, { justifySelf: "center", children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit}` }), jsxRuntime.jsxs(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children:
4291
4297
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4292
4298
  dataList.map((item) => {
4293
4299
  const selected = isMultiple
@@ -4303,11 +4309,11 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4303
4309
  ...(watchIds ?? []),
4304
4310
  item[column_ref],
4305
4311
  ]);
4306
- setValue(column, [...newSet]);
4312
+ setValue(colLabel, [...newSet]);
4307
4313
  }, opacity: 0.7, _hover: { opacity: 1 }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
4308
4314
  ? renderDisplay(item)
4309
4315
  : item[display_column] }, item[column_ref]));
4310
- }) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(react.Text, { children: translate.t(`${colLabel}.emptySearchResult`) })) }))] }), jsxRuntime.jsx(PaginationRoot, { justifySelf: "center", count: query?.data?.count ?? 0, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxRuntime.jsxs(react.HStack, { gap: "4", children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), jsxRuntime.jsx(PaginationPageText, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
4316
+ }) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.emptySearchResult`)) })) }))] }), jsxRuntime.jsx(PaginationRoot, { justifySelf: "center", count: query?.data?.count ?? 0, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxRuntime.jsxs(react.HStack, { gap: "4", children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), jsxRuntime.jsx(PaginationPageText, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4311
4317
  };
4312
4318
 
4313
4319
  const NumberInputRoot = React__namespace.forwardRef(function NumberInput(props, ref) {
@@ -4319,12 +4325,12 @@ react.NumberInput.Scrubber;
4319
4325
  react.NumberInput.Label;
4320
4326
 
4321
4327
  const NumberInputField = ({ schema, column, prefix, }) => {
4322
- const { register, formState: { errors }, } = reactHookForm.useFormContext();
4328
+ const { register, formState: { errors }, watch } = reactHookForm.useFormContext();
4323
4329
  const { translate } = useSchemaContext();
4324
4330
  const { required, gridColumn, gridRow } = schema;
4325
4331
  const isRequired = required?.some((columnId) => columnId === column);
4326
4332
  const colLabel = `${prefix}${column}`;
4327
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(NumberInputRoot, { children: jsxRuntime.jsx(NumberInputField$1, { ...register(`${colLabel}`, { required: isRequired }) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
4333
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(NumberInputRoot, { children: jsxRuntime.jsx(NumberInputField$1, { ...register(`${colLabel}`, { required: isRequired }) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4328
4334
  };
4329
4335
 
4330
4336
  const ObjectInput = ({ schema, column, prefix }) => {
@@ -4332,20 +4338,20 @@ const ObjectInput = ({ schema, column, prefix }) => {
4332
4338
  const { translate } = useSchemaContext();
4333
4339
  const colLabel = `${prefix}${column}`;
4334
4340
  const isRequired = required?.some((columnId) => columnId === column);
4335
- const { watch, formState: { errors }, setValue, control, } = reactHookForm.useFormContext();
4341
+ const { formState: { errors }, } = reactHookForm.useFormContext();
4336
4342
  if (properties === undefined) {
4337
4343
  throw new Error(`properties is undefined when using ObjectInput`);
4338
4344
  }
4339
- return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(`${colLabel}.fieldLabel`)}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4345
+ return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4340
4346
  return (
4341
4347
  // @ts-expect-error find suitable types
4342
4348
  jsxRuntime.jsx(ColumnRenderer, { column: `${key}`,
4343
4349
  prefix: `${prefix}${column}.`,
4344
- properties }, `form-${column}`));
4345
- }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
4350
+ properties }, `form-${colLabel}-${key}`));
4351
+ }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4346
4352
  };
4347
4353
 
4348
- const RecordInput = ({ column, schema, prefix }) => {
4354
+ const RecordInput$1 = ({ column, schema, prefix }) => {
4349
4355
  const { formState: { errors }, setValue, getValues, } = reactHookForm.useFormContext();
4350
4356
  const { translate } = useSchemaContext();
4351
4357
  const { required, gridColumn, gridRow } = schema;
@@ -4403,7 +4409,7 @@ const StringInputField = ({ column, schema, prefix, }) => {
4403
4409
  const { required, gridColumn, gridRow } = schema;
4404
4410
  const isRequired = required?.some((columnId) => columnId === column);
4405
4411
  const colLabel = `${prefix}${column}`;
4406
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Input, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }) }));
4412
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Input, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }) }));
4407
4413
  };
4408
4414
 
4409
4415
  const RadioCardItem = React__namespace.forwardRef(function RadioCardItem(props, ref) {
@@ -4527,7 +4533,7 @@ const SchemaRenderer = ({ schema, prefix, column, }) => {
4527
4533
  if (innerProperties) {
4528
4534
  return jsxRuntime.jsx(ObjectInput, { schema: colSchema, prefix, column });
4529
4535
  }
4530
- return jsxRuntime.jsx(RecordInput, { schema: colSchema, prefix, column });
4536
+ return jsxRuntime.jsx(RecordInput$1, { schema: colSchema, prefix, column });
4531
4537
  }
4532
4538
  if (type === "array") {
4533
4539
  if (variant === "id-picker") {
@@ -4552,15 +4558,355 @@ const SchemaRenderer = ({ schema, prefix, column, }) => {
4552
4558
  };
4553
4559
 
4554
4560
  const ColumnRenderer = ({ column, properties, prefix, }) => {
4561
+ const colSchema = properties[column];
4562
+ const colLabel = `${prefix}${column}`;
4563
+ if (colSchema === undefined) {
4564
+ throw new Error(`${colLabel} does not exist when using ColumnRenderer`);
4565
+ }
4566
+ return jsxRuntime.jsx(SchemaRenderer, { schema: colSchema, prefix, column });
4567
+ };
4568
+
4569
+ const ArrayViewer = ({ schema, column, prefix }) => {
4570
+ const { gridRow, gridColumn = "1/span 12", required, items } = schema;
4571
+ const { translate } = useSchemaContext();
4572
+ const colLabel = `${prefix}${column}`;
4573
+ const isRequired = required?.some((columnId) => columnId === column);
4574
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4575
+ const values = watch(colLabel) ?? [];
4576
+ return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), values.map((field, index) => (jsxRuntime.jsx(react.Flex, { flexFlow: "column", children: jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaViewer, { column: `${index}`,
4577
+ prefix: `${colLabel}.`,
4578
+ schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4579
+ };
4580
+
4581
+ const BooleanViewer = ({ schema, column, prefix, }) => {
4582
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4583
+ const { translate } = useSchemaContext();
4584
+ const { required, gridColumn, gridRow } = schema;
4585
+ const isRequired = required?.some((columnId) => columnId === column);
4586
+ const colLabel = `${prefix}${column}`;
4587
+ const value = watch(colLabel);
4588
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4589
+ gridRow, children: [jsxRuntime.jsx(react.Text, { children: value
4590
+ ? translate.t(removeIndex(`${colLabel}.true`))
4591
+ : translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4592
+ };
4593
+
4594
+ const DateViewer = ({ column, schema, prefix }) => {
4595
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4596
+ const { translate } = useSchemaContext();
4597
+ const { required, gridColumn, gridRow } = schema;
4598
+ const isRequired = required?.some((columnId) => columnId === column);
4599
+ const colLabel = `${prefix}${column}`;
4600
+ const selectedDate = watch(colLabel);
4601
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4602
+ gridRow, children: [jsxRuntime.jsxs(react.Text, { children: [" ", selectedDate !== undefined ? selectedDate : ""] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
4603
+ };
4604
+
4605
+ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
4606
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4607
+ const { translate } = useSchemaContext();
4608
+ const { required } = schema;
4609
+ const isRequired = required?.some((columnId) => columnId === column);
4610
+ const { gridColumn, gridRow, renderDisplay } = schema;
4611
+ const colLabel = `${prefix}${column}`;
4612
+ const watchEnum = watch(colLabel);
4613
+ const watchEnums = (watch(colLabel) ?? []);
4614
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4615
+ gridRow, children: [isMultiple && (jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 1, children: watchEnums.map((enumValue) => {
4616
+ const item = enumValue;
4617
+ if (item === undefined) {
4618
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "undefined" });
4619
+ }
4620
+ return (jsxRuntime.jsx(Tag, { closable: true, children: !!renderDisplay === true
4621
+ ? renderDisplay(item)
4622
+ : translate.t(removeIndex(`${colLabel}.${item}`)) }));
4623
+ }) })), !isMultiple && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4624
+ };
4625
+
4626
+ const FileViewer = ({ column, schema, prefix }) => {
4627
+ const { setValue, formState: { errors }, watch, } = reactHookForm.useFormContext();
4628
+ const { translate } = useSchemaContext();
4629
+ const { required, gridColumn, gridRow } = schema;
4630
+ const isRequired = required?.some((columnId) => columnId === column);
4631
+ const currentFiles = (watch(column) ?? []);
4632
+ const colLabel = `${prefix}${column}`;
4633
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: [jsxRuntime.jsx(FileDropzone, { onDrop: ({ files }) => {
4634
+ const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
4635
+ setValue(colLabel, [...currentFiles, ...newFiles]);
4636
+ }, placeholder: translate.t(`${colLabel}.fileDropzone`) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4637
+ return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
4638
+ setValue(column, currentFiles.filter(({ name }) => {
4639
+ return name !== file.name;
4640
+ }));
4641
+ }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
4642
+ }) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4643
+ };
4644
+
4645
+ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
4646
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4647
+ const { idMap, translate } = useSchemaContext();
4648
+ const { required, gridColumn, gridRow, renderDisplay, foreign_key } = schema;
4649
+ const isRequired = required?.some((columnId) => columnId === column);
4650
+ const { display_column } = foreign_key;
4651
+ const colLabel = `${prefix}${column}`;
4652
+ const watchId = watch(colLabel);
4653
+ const watchIds = (watch(colLabel) ?? []);
4654
+ const getPickedValue = () => {
4655
+ if (Object.keys(idMap).length <= 0) {
4656
+ return "";
4657
+ }
4658
+ const record = idMap[watchId];
4659
+ if (record === undefined) {
4660
+ return "";
4661
+ }
4662
+ return record[display_column];
4663
+ };
4664
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4665
+ gridRow, children: [isMultiple && (jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 1, children: watchIds.map((id) => {
4666
+ const item = idMap[id];
4667
+ if (item === undefined) {
4668
+ return (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.undefined`)) }, id));
4669
+ }
4670
+ return (jsxRuntime.jsx(Tag, { closable: true, children: !!renderDisplay === true
4671
+ ? renderDisplay(item)
4672
+ : item[display_column] }, id));
4673
+ }) })), !isMultiple && jsxRuntime.jsx(react.Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4674
+ };
4675
+
4676
+ const NumberViewer = ({ schema, column, prefix, }) => {
4677
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4678
+ const { translate } = useSchemaContext();
4679
+ const { required, gridColumn, gridRow } = schema;
4680
+ const isRequired = required?.some((columnId) => columnId === column);
4681
+ const colLabel = `${prefix}${column}`;
4682
+ const value = watch(colLabel);
4683
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(react.Text, { children: value }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4684
+ };
4685
+
4686
+ const ObjectViewer = ({ schema, column, prefix }) => {
4687
+ const { properties, gridRow, gridColumn = "1/span 12", required } = schema;
4688
+ const { translate } = useSchemaContext();
4689
+ const colLabel = `${prefix}${column}`;
4690
+ const isRequired = required?.some((columnId) => columnId === column);
4691
+ const { formState: { errors }, } = reactHookForm.useFormContext();
4692
+ if (properties === undefined) {
4693
+ throw new Error(`properties is undefined when using ObjectInput`);
4694
+ }
4695
+ return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4696
+ return (
4697
+ // @ts-expect-error find suitable types
4698
+ jsxRuntime.jsx(ColumnViewer, { column: `${key}`,
4699
+ prefix: `${prefix}${column}.`,
4700
+ properties }, `form-objectviewer-${colLabel}-${key}`));
4701
+ }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4702
+ };
4703
+
4704
+ const RecordInput = ({ column, schema, prefix }) => {
4705
+ const { formState: { errors }, setValue, getValues, } = reactHookForm.useFormContext();
4706
+ const { translate } = useSchemaContext();
4707
+ const { required, gridColumn, gridRow } = schema;
4708
+ const isRequired = required?.some((columnId) => columnId === column);
4709
+ const entries = Object.entries(getValues(column) ?? {});
4710
+ const [showNewEntries, setShowNewEntries] = React.useState(false);
4711
+ const [newKey, setNewKey] = React.useState();
4712
+ const [newValue, setNewValue] = React.useState();
4713
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4714
+ return (jsxRuntime.jsxs(react.Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsxRuntime.jsx(react.Input, { value: key, onChange: (e) => {
4715
+ const filtered = entries.filter(([target]) => {
4716
+ return target !== key;
4717
+ });
4718
+ setValue(column, Object.fromEntries([...filtered, [e.target.value, value]]));
4719
+ }, autoComplete: "off" }), jsxRuntime.jsx(react.Input, { value: value, onChange: (e) => {
4720
+ setValue(column, {
4721
+ ...getValues(column),
4722
+ [key]: e.target.value,
4723
+ });
4724
+ }, autoComplete: "off" }), jsxRuntime.jsx(react.IconButton, { variant: "ghost", onClick: () => {
4725
+ const filtered = entries.filter(([target]) => {
4726
+ return target !== key;
4727
+ });
4728
+ setValue(column, Object.fromEntries([...filtered]));
4729
+ }, children: jsxRuntime.jsx(cg.CgClose, {}) })] }));
4730
+ }), jsxRuntime.jsx(react.Show, { when: showNewEntries, children: jsxRuntime.jsxs(react.Card.Root, { children: [jsxRuntime.jsx(react.Card.Body, { gap: "2", children: jsxRuntime.jsxs(react.Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsxRuntime.jsx(react.Input, { value: newKey, onChange: (e) => {
4731
+ setNewKey(e.target.value);
4732
+ }, autoComplete: "off" }), jsxRuntime.jsx(react.Input, { value: newValue, onChange: (e) => {
4733
+ setNewValue(e.target.value);
4734
+ }, autoComplete: "off" })] }) }), jsxRuntime.jsxs(react.Card.Footer, { justifyContent: "flex-end", children: [jsxRuntime.jsx(react.IconButton, { variant: "subtle", onClick: () => {
4735
+ setShowNewEntries(false);
4736
+ setNewKey(undefined);
4737
+ setNewValue(undefined);
4738
+ }, children: jsxRuntime.jsx(cg.CgClose, {}) }), jsxRuntime.jsx(Button, { onClick: () => {
4739
+ if (!!newKey === false) {
4740
+ setShowNewEntries(false);
4741
+ setNewKey(undefined);
4742
+ setNewValue(undefined);
4743
+ return;
4744
+ }
4745
+ setValue(column, Object.fromEntries([...entries, [newKey, newValue]]));
4746
+ setShowNewEntries(false);
4747
+ setNewKey(undefined);
4748
+ setNewValue(undefined);
4749
+ }, children: translate.t(`${column}.save`) })] })] }) }), jsxRuntime.jsx(Button, { onClick: () => {
4750
+ setShowNewEntries(true);
4751
+ setNewKey(undefined);
4752
+ setNewValue(undefined);
4753
+ }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
4754
+ };
4755
+
4756
+ const TagViewer = ({ column, schema, prefix }) => {
4757
+ const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
4758
+ const { serverUrl } = useSchemaContext();
4759
+ if (schema.properties == undefined) {
4760
+ throw new Error("schema properties undefined when using DatePicker");
4761
+ }
4762
+ const { gridColumn, gridRow, in_table, object_id_column } = schema;
4763
+ if (in_table === undefined) {
4764
+ throw new Error("in_table is undefined when using TagPicker");
4765
+ }
4766
+ if (object_id_column === undefined) {
4767
+ throw new Error("object_id_column is undefined when using TagPicker");
4768
+ }
4769
+ const query = reactQuery.useQuery({
4770
+ queryKey: [`tagpicker`, in_table],
4771
+ queryFn: async () => {
4772
+ return await getTableData({
4773
+ serverUrl,
4774
+ in_table: "tables_tags_view",
4775
+ where: [
4776
+ {
4777
+ id: "table_name",
4778
+ value: [in_table],
4779
+ },
4780
+ ],
4781
+ limit: 100,
4782
+ });
4783
+ },
4784
+ staleTime: 10000,
4785
+ });
4786
+ const object_id = watch(object_id_column);
4787
+ const existingTagsQuery = reactQuery.useQuery({
4788
+ queryKey: [`existing`, { in_table, object_id_column }, object_id],
4789
+ queryFn: async () => {
4790
+ return await getTableData({
4791
+ serverUrl,
4792
+ in_table: in_table,
4793
+ where: [
4794
+ {
4795
+ id: object_id_column,
4796
+ value: object_id[0],
4797
+ },
4798
+ ],
4799
+ limit: 100,
4800
+ });
4801
+ },
4802
+ enabled: object_id != undefined,
4803
+ staleTime: 10000,
4804
+ });
4805
+ const { isLoading, isFetching, data, isPending, isError } = query;
4806
+ const dataList = data?.data ?? [];
4807
+ const existingTagList = existingTagsQuery.data?.data ?? [];
4808
+ if (!!object_id === false) {
4809
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
4810
+ }
4811
+ return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 4, gridColumn,
4812
+ gridRow, children: [isFetching && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isFetching" }), isLoading && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isLoading" }), isPending && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isPending" }), isError && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isError" }), dataList.map(({ parent_tag_name, all_tags, is_mutually_exclusive }) => {
4813
+ return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsx(react.Text, { children: parent_tag_name }), is_mutually_exclusive && (jsxRuntime.jsx(RadioCardRoot, { defaultValue: "next", variant: "surface", onValueChange: (tagIds) => {
4814
+ const existedTags = Object.values(all_tags)
4815
+ .filter(({ id }) => {
4816
+ return existingTagList.some(({ tag_id }) => tag_id === id);
4817
+ })
4818
+ .map(({ id }) => {
4819
+ return id;
4820
+ });
4821
+ setValue(`${column}.${parent_tag_name}.current`, [
4822
+ tagIds.value,
4823
+ ]);
4824
+ setValue(`${column}.${parent_tag_name}.old`, existedTags);
4825
+ }, children: jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 2, children: Object.entries(all_tags).map(([tagName, { id }]) => {
4826
+ if (existingTagList.some(({ tag_id }) => tag_id === id)) {
4827
+ return (jsxRuntime.jsx(RadioCardItem, { label: tagName, value: id, flex: "0 0 0%", disabled: true }, `${tagName}-${id}`));
4828
+ }
4829
+ return (jsxRuntime.jsx(RadioCardItem, { label: tagName, value: id, flex: "0 0 0%", colorPalette: "blue" }, `${tagName}-${id}`));
4830
+ }) }) })), !is_mutually_exclusive && (jsxRuntime.jsx(react.CheckboxGroup, { onValueChange: (tagIds) => {
4831
+ setValue(`${column}.${parent_tag_name}.current`, tagIds);
4832
+ }, children: jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 2, children: Object.entries(all_tags).map(([tagName, { id }]) => {
4833
+ if (existingTagList.some(({ tag_id }) => tag_id === id)) {
4834
+ return (jsxRuntime.jsx(CheckboxCard, { label: tagName, value: id, flex: "0 0 0%", disabled: true, colorPalette: "blue" }, `${tagName}-${id}`));
4835
+ }
4836
+ return (jsxRuntime.jsx(CheckboxCard, { label: tagName, value: id, flex: "0 0 0%" }, `${tagName}-${id}`));
4837
+ }) }) }))] }, `tag-${parent_tag_name}`));
4838
+ }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4839
+ };
4840
+
4841
+ const StringViewer = ({ column, schema, prefix, }) => {
4842
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4843
+ const { translate } = useSchemaContext();
4844
+ const { required, gridColumn, gridRow } = schema;
4845
+ const isRequired = required?.some((columnId) => columnId === column);
4846
+ const colLabel = `${prefix}${column}`;
4847
+ const value = watch(colLabel);
4848
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Text, { children: value }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }) }));
4849
+ };
4850
+
4851
+ const SchemaViewer = ({ schema, prefix, column, }) => {
4852
+ const colSchema = schema;
4853
+ const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
4854
+ if (type === "string") {
4855
+ if ((schema.enum ?? []).length > 0) {
4856
+ return jsxRuntime.jsx(EnumViewer, { schema: colSchema, prefix, column });
4857
+ }
4858
+ if (variant === "id-picker") {
4859
+ idPickerSanityCheck(column, foreign_key);
4860
+ return jsxRuntime.jsx(IdViewer, { schema: colSchema, prefix, column });
4861
+ }
4862
+ if (variant === "date-picker") {
4863
+ return jsxRuntime.jsx(DateViewer, { schema: colSchema, prefix, column });
4864
+ }
4865
+ return jsxRuntime.jsx(StringViewer, { schema: colSchema, prefix, column });
4866
+ }
4867
+ if (type === "number" || type === "integer") {
4868
+ return jsxRuntime.jsx(NumberViewer, { schema: colSchema, prefix, column });
4869
+ }
4870
+ if (type === "boolean") {
4871
+ return jsxRuntime.jsx(BooleanViewer, { schema: colSchema, prefix, column });
4872
+ }
4873
+ if (type === "object") {
4874
+ if (innerProperties) {
4875
+ return jsxRuntime.jsx(ObjectViewer, { schema: colSchema, prefix, column });
4876
+ }
4877
+ return jsxRuntime.jsx(RecordInput, { schema: colSchema, prefix, column });
4878
+ }
4879
+ if (type === "array") {
4880
+ if (variant === "id-picker") {
4881
+ idPickerSanityCheck(column, foreign_key);
4882
+ return (jsxRuntime.jsx(IdViewer, { schema: colSchema, prefix, column, isMultiple: true }));
4883
+ }
4884
+ if (variant === "tag-picker") {
4885
+ return jsxRuntime.jsx(TagViewer, { schema: colSchema, prefix, column });
4886
+ }
4887
+ if (variant === "file-picker") {
4888
+ return jsxRuntime.jsx(FileViewer, { schema: colSchema, prefix, column });
4889
+ }
4890
+ if (items) {
4891
+ return jsxRuntime.jsx(ArrayViewer, { schema: colSchema, prefix, column });
4892
+ }
4893
+ return jsxRuntime.jsx(react.Text, { children: `array ${column}` });
4894
+ }
4895
+ if (type === "null") {
4896
+ return jsxRuntime.jsx(react.Text, { children: `null ${column}` });
4897
+ }
4898
+ return jsxRuntime.jsx(react.Text, { children: "missing type" });
4899
+ };
4900
+
4901
+ const ColumnViewer = ({ column, properties, prefix, }) => {
4555
4902
  if (properties === undefined) {
4556
4903
  return jsxRuntime.jsx(jsxRuntime.Fragment, {});
4557
4904
  }
4558
- console.log(`${column} does not exist when using ColumnRenderer`, { properties, column, prefix }, "fdpok");
4559
4905
  const colSchema = properties[column];
4560
4906
  if (colSchema === undefined) {
4561
4907
  throw new Error(`${column} does not exist when using ColumnRenderer`);
4562
4908
  }
4563
- return jsxRuntime.jsx(SchemaRenderer, { schema: colSchema, prefix, column });
4909
+ return jsxRuntime.jsx(SchemaViewer, { schema: colSchema, prefix, column });
4564
4910
  };
4565
4911
 
4566
4912
  const idPickerSanityCheck = (column, foreign_key) => {
@@ -4579,7 +4925,7 @@ const idPickerSanityCheck = (column, foreign_key) => {
4579
4925
  }
4580
4926
  };
4581
4927
  const FormInternal = () => {
4582
- const { schema, requestUrl, order, ignore, onSubmit, rowNumber, idMap, translate, requestOptions, } = useSchemaContext();
4928
+ const { schema, requestUrl, order, onSubmit, rowNumber, translate, requestOptions, } = useSchemaContext();
4583
4929
  const methods = reactHookForm.useFormContext();
4584
4930
  const [isSuccess, setIsSuccess] = React.useState(false);
4585
4931
  const [isError, setIsError] = React.useState(false);
@@ -4654,7 +5000,13 @@ const FormInternal = () => {
4654
5000
  }, formNoValidate: true, children: translate.t("submitAgain") }) })] }));
4655
5001
  }
4656
5002
  if (isConfirming) {
4657
- return (jsxRuntime.jsxs(react.Grid, { gap: 2, children: [jsxRuntime.jsxs(react.Heading, { children: [" ", translate.t("title")] }), jsxRuntime.jsx(react.Grid, { gap: 4, gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: jsxRuntime.jsx(RecordDisplay, { object: validatedData ?? {}, boxProps: { gridColumn: "1/span12" } }) }), jsxRuntime.jsxs(react.Flex, { justifyContent: "end", gap: "2", children: [jsxRuntime.jsx(Button, { onClick: () => {
5003
+ return (jsxRuntime.jsxs(react.Grid, { gap: 2, children: [jsxRuntime.jsxs(react.Heading, { children: [" ", translate.t("title")] }), jsxRuntime.jsx(react.Grid, { gap: 4, gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
5004
+ return (jsxRuntime.jsx(ColumnViewer
5005
+ // @ts-expect-error find suitable types
5006
+ , {
5007
+ // @ts-expect-error find suitable types
5008
+ properties: properties, prefix: ``, column }, `form-viewer-${column}`));
5009
+ }) }), jsxRuntime.jsxs(react.Flex, { justifyContent: "end", gap: "2", children: [jsxRuntime.jsx(Button, { onClick: () => {
4658
5010
  setIsConfirming(false);
4659
5011
  }, variant: "subtle", children: translate.t("cancel") }), jsxRuntime.jsx(Button, { onClick: () => {
4660
5012
  onFormSubmit(validatedData);
@@ -4665,7 +5017,7 @@ const FormInternal = () => {
4665
5017
  // @ts-expect-error find suitable types
4666
5018
  , {
4667
5019
  // @ts-expect-error find suitable types
4668
- properties: properties, prefix: ``, column }, `form-${column}`));
5020
+ properties: properties, prefix: ``, column }, `form-input-${column}`));
4669
5021
  }) }), jsxRuntime.jsxs(react.Flex, { justifyContent: "end", gap: "2", children: [jsxRuntime.jsx(Button, { onClick: () => {
4670
5022
  methods.reset();
4671
5023
  }, variant: "subtle", children: translate.t("reset") }), jsxRuntime.jsx(Button, { onClick: () => {