@bsol-oss/react-datatable5 11.0.0-beta.4 → 11.0.0-beta.6

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 +1 -1
  2. package/dist/index.js +465 -197
  3. package/dist/index.mjs +467 -199
  4. package/dist/types/components/Form/Form.d.ts +1 -1
  5. package/dist/types/components/Form/components/ArrayRenderer.d.ts +7 -0
  6. package/dist/types/components/Form/components/SchemaRenderer.d.ts +7 -0
  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
@@ -28,8 +28,8 @@ var gr = require('react-icons/gr');
28
28
  var hi = require('react-icons/hi');
29
29
  var reactI18next = require('react-i18next');
30
30
  var axios = require('axios');
31
- var dayjs = require('dayjs');
32
31
  var reactHookForm = require('react-hook-form');
32
+ var dayjs = require('dayjs');
33
33
  var ti = require('react-icons/ti');
34
34
 
35
35
  function _interopNamespaceDefault(e) {
@@ -3567,16 +3567,6 @@ const SchemaFormContext = React.createContext({
3567
3567
  requestOptions: {},
3568
3568
  });
3569
3569
 
3570
- const HoverCardContent = React__namespace.forwardRef(function HoverCardContent(props, ref) {
3571
- const { portalled = true, portalRef, ...rest } = props;
3572
- return (jsxRuntime.jsx(react.Portal, { disabled: !portalled, container: portalRef, children: jsxRuntime.jsx(react.HoverCard.Positioner, { children: jsxRuntime.jsx(react.HoverCard.Content, { ref: ref, ...rest }) }) }));
3573
- });
3574
- const HoverCardArrow = React__namespace.forwardRef(function HoverCardArrow(props, ref) {
3575
- return (jsxRuntime.jsx(react.HoverCard.Arrow, { ref: ref, ...props, children: jsxRuntime.jsx(react.HoverCard.ArrowTip, {}) }));
3576
- });
3577
- const HoverCardRoot = react.HoverCard.Root;
3578
- const HoverCardTrigger = react.HoverCard.Trigger;
3579
-
3580
3570
  const useSchemaContext = () => {
3581
3571
  const { schema, serverUrl, requestUrl, order, ignore, onSubmit, rowNumber, idMap, setIdMap, translate, requestOptions, } = React.useContext(SchemaFormContext);
3582
3572
  return {
@@ -3594,22 +3584,6 @@ const useSchemaContext = () => {
3594
3584
  };
3595
3585
  };
3596
3586
 
3597
- const IdViewer = ({ value, column }) => {
3598
- const { schema, idMap, translate } = useSchemaContext();
3599
- if (schema.properties == undefined) {
3600
- throw new Error("schema properties when using DatePicker");
3601
- }
3602
- const { foreign_key } = schema.properties[column];
3603
- if (foreign_key === undefined) {
3604
- throw new Error("foreign_key when variant is id-picker");
3605
- }
3606
- const { display_column } = foreign_key;
3607
- if (value === undefined) {
3608
- return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", children: [jsxRuntime.jsx(react.Text, { children: translate.t(`${column}.fieldLabel`) }), jsxRuntime.jsx(react.Text, { children: translate.t(`empty`) })] }));
3609
- }
3610
- return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", children: [jsxRuntime.jsx(react.Text, { children: translate.t(`${column}.fieldLabel`) }), jsxRuntime.jsxs(HoverCardRoot, { children: [jsxRuntime.jsx(HoverCardTrigger, { asChild: true, children: jsxRuntime.jsx(react.Text, { cursor: 'pointer', children: idMap[value][display_column] }) }), jsxRuntime.jsxs(HoverCardContent, { children: [jsxRuntime.jsx(HoverCardArrow, {}), jsxRuntime.jsx(RecordDisplay, { object: idMap[value] })] })] })] }));
3611
- };
3612
-
3613
3587
  const clearEmptyString = (object) => {
3614
3588
  return Object.fromEntries(Object.entries(object).filter(([, value]) => value !== ""));
3615
3589
  };
@@ -3624,20 +3598,41 @@ const AccordionItemContent = React__namespace.forwardRef(function AccordionItemC
3624
3598
  const AccordionRoot = react.Accordion.Root;
3625
3599
  const AccordionItem = react.Accordion.Item;
3626
3600
 
3627
- const ToggleTip = React__namespace.forwardRef(function ToggleTip(props, ref) {
3628
- const { showArrow, children, portalled = true, content, portalRef, ...rest } = props;
3629
- return (jsxRuntime.jsxs(react.Popover.Root, { ...rest, positioning: { ...rest.positioning, gutter: 4 }, children: [jsxRuntime.jsx(react.Popover.Trigger, { asChild: true, children: children }), jsxRuntime.jsx(react.Portal, { disabled: !portalled, container: portalRef, children: jsxRuntime.jsx(react.Popover.Positioner, { children: jsxRuntime.jsxs(react.Popover.Content, { width: "auto", px: "2", py: "1", textStyle: "xs", rounded: "sm", ref: ref, children: [showArrow && (jsxRuntime.jsx(react.Popover.Arrow, { children: jsxRuntime.jsx(react.Popover.ArrowTip, {}) })), content] }) }) })] }));
3630
- });
3631
- const InfoTip = React__namespace.forwardRef(function InfoTip(props, ref) {
3632
- const { children, ...rest } = props;
3633
- return (jsxRuntime.jsx(ToggleTip, { content: children, ...rest, ref: ref, children: jsxRuntime.jsx(react.IconButton, { variant: "ghost", "aria-label": "info", size: "2xs", colorPalette: "gray", children: jsxRuntime.jsx(hi.HiOutlineInformationCircle, {}) }) }));
3634
- });
3601
+ function removeIndex(str) {
3602
+ return str.replace(/\.\d+\./g, '.');
3603
+ }
3635
3604
 
3636
- const DataListRoot = react.DataList.Root;
3637
- const DataListItem = React__namespace.forwardRef(function DataListItem(props, ref) {
3638
- const { label, info, value, children, grow, ...rest } = props;
3639
- 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] }));
3640
- });
3605
+ const ArrayRenderer = ({ schema, column, prefix, }) => {
3606
+ const { gridRow, gridColumn = "1/span 12", required, items } = schema;
3607
+ // @ts-expect-error TODO: find suitable types
3608
+ const { type } = items;
3609
+ const { translate } = useSchemaContext();
3610
+ const colLabel = `${prefix}${column}`;
3611
+ const isRequired = required?.some((columnId) => columnId === column);
3612
+ const { formState: { errors }, setValue, watch, } = reactHookForm.useFormContext();
3613
+ const fields = (watch(colLabel) ?? []);
3614
+ 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}`,
3615
+ prefix: `${colLabel}.`,
3616
+ schema: items }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(react.Button, { variant: "ghost", onClick: () => {
3617
+ setValue(colLabel, fields.filter((_, curIndex) => {
3618
+ return curIndex === index;
3619
+ }));
3620
+ }, children: translate.t(removeIndex(`${colLabel}.remove`)) }) })] }, `${colLabel}.${index}`))), jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(react.Button, { onClick: () => {
3621
+ if (type === "number") {
3622
+ setValue(colLabel, [...fields, 0]);
3623
+ return;
3624
+ }
3625
+ if (type === "string") {
3626
+ setValue(colLabel, [...fields, ""]);
3627
+ return;
3628
+ }
3629
+ if (type === "boolean") {
3630
+ setValue(colLabel, [...fields, false]);
3631
+ return;
3632
+ }
3633
+ setValue(colLabel, [...fields, {}]);
3634
+ }, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3635
+ };
3641
3636
 
3642
3637
  const Field = React__namespace.forwardRef(function Field(props, ref) {
3643
3638
  const { label, children, helperText, errorText, optionalText, ...rest } = props;
@@ -3651,10 +3646,10 @@ const BooleanPicker = ({ schema, column, prefix }) => {
3651
3646
  const isRequired = required?.some((columnId) => columnId === column);
3652
3647
  const colLabel = `${prefix}${column}`;
3653
3648
  const value = watch(colLabel);
3654
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
3655
- gridRow, children: [jsxRuntime.jsx(CheckboxCard, { checked: value, variant: "surface", onSelect: () => {
3649
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3650
+ gridRow, children: [jsxRuntime.jsx(CheckboxCard, { checked: value, variant: "surface", onChange: () => {
3656
3651
  setValue(colLabel, !value);
3657
- } }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
3652
+ } }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3658
3653
  };
3659
3654
 
3660
3655
  const monthNamesShort = [
@@ -3752,7 +3747,7 @@ const DatePicker = ({ column, schema, prefix }) => {
3752
3747
  const colLabel = `${prefix}${column}`;
3753
3748
  const [open, setOpen] = React.useState(false);
3754
3749
  const selectedDate = watch(colLabel);
3755
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
3750
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3756
3751
  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: () => {
3757
3752
  setOpen(true);
3758
3753
  }, children: selectedDate !== undefined ? selectedDate : "" }) }), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { children: [jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(DatePicker$1
@@ -3762,9 +3757,9 @@ const DatePicker = ({ column, schema, prefix }) => {
3762
3757
  selected: new Date(selectedDate),
3763
3758
  // @ts-expect-error TODO: find appropriate types
3764
3759
  onDateSelected: ({ date }) => {
3765
- setValue(column, dayjs(date).format("YYYY-MM-DD"));
3760
+ setValue(colLabel, dayjs(date).format("YYYY-MM-DD"));
3766
3761
  setOpen(false);
3767
- } })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
3762
+ } })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
3768
3763
  };
3769
3764
 
3770
3765
  function filterArray(array, searchTerm) {
@@ -3787,8 +3782,9 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3787
3782
  const [limit, setLimit] = React.useState(10);
3788
3783
  const [openSearchResult, setOpenSearchResult] = React.useState();
3789
3784
  const ref = React.useRef(null);
3790
- const watchEnum = watch(column);
3791
- const watchEnums = (watch(column) ?? []);
3785
+ const colLabel = `${prefix}${column}`;
3786
+ const watchEnum = watch(colLabel);
3787
+ const watchEnums = (watch(colLabel) ?? []);
3792
3788
  const dataList = schema.enum ?? [];
3793
3789
  const count = schema.enum?.length ?? 0;
3794
3790
  const isDirty = (searchText?.length ?? 0) > 0;
@@ -3796,8 +3792,7 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3796
3792
  setSearchText(event.target.value);
3797
3793
  setLimit(10);
3798
3794
  };
3799
- const col = `${prefix}${column}`;
3800
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
3795
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
3801
3796
  gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
3802
3797
  const item = enumValue;
3803
3798
  if (item === undefined) {
@@ -3806,12 +3801,16 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3806
3801
  return (jsxRuntime.jsx(Tag, { closable: true, onClick: () => {
3807
3802
  // setSelectedEnums((state) => state.filter((id) => id != item));
3808
3803
  setValue(column, watchEnums.filter((id) => id != item));
3809
- }, children: !!renderDisplay === true ? renderDisplay(item) : item }));
3804
+ }, children: !!renderDisplay === true
3805
+ ? renderDisplay(item)
3806
+ : translate.t(removeIndex(`${colLabel}.${item}`)) }));
3810
3807
  }), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
3811
3808
  setOpenSearchResult(true);
3812
- }, children: "Add" })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
3809
+ }, children: translate.t(removeIndex(`${colLabel}.addMore`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
3813
3810
  setOpenSearchResult(true);
3814
- }, 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) => {
3811
+ }, children: watchEnum === undefined
3812
+ ? ""
3813
+ : 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) => {
3815
3814
  onSearchChange(event);
3816
3815
  setOpenSearchResult(true);
3817
3816
  }, 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) => {
@@ -3821,15 +3820,15 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
3821
3820
  return (jsxRuntime.jsx(react.Box, { cursor: "pointer", onClick: () => {
3822
3821
  if (!isMultiple) {
3823
3822
  setOpenSearchResult(false);
3824
- setValue(column, item);
3823
+ setValue(colLabel, item);
3825
3824
  return;
3826
3825
  }
3827
3826
  const newSet = new Set([...(watchEnums ?? []), item]);
3828
- setValue(column, [...newSet]);
3827
+ setValue(colLabel, [...newSet]);
3829
3828
  }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
3830
3829
  ? renderDisplay(item)
3831
- : translate.t(`${col}.${item}`) }, `${column}-${item}`));
3832
- }) }), 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`) }))] }));
3830
+ : translate.t(removeIndex(`${colLabel}.${item}`)) }, `${colLabel}-${item}`));
3831
+ }) }), 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`)) }))] }));
3833
3832
  };
3834
3833
 
3835
3834
  function isEnteringWindow(_ref) {
@@ -4190,17 +4189,17 @@ const FilePicker = ({ column, schema, prefix }) => {
4190
4189
  const { required, gridColumn, gridRow } = schema;
4191
4190
  const isRequired = required?.some((columnId) => columnId === column);
4192
4191
  const currentFiles = (watch(column) ?? []);
4193
- const col = `${prefix}${column}`;
4194
- 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 }) => {
4192
+ const colLabel = `${prefix}${column}`;
4193
+ 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 }) => {
4195
4194
  const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
4196
- setValue(col, [...currentFiles, ...newFiles]);
4197
- }, placeholder: translate.t(`${col}.fileDropzone`) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4195
+ setValue(colLabel, [...currentFiles, ...newFiles]);
4196
+ }, placeholder: translate.t(removeIndex(`${colLabel}.fileDropzone`)) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4198
4197
  return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
4199
4198
  setValue(column, currentFiles.filter(({ name }) => {
4200
4199
  return name !== file.name;
4201
4200
  }));
4202
4201
  }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
4203
- }) }), errors[`${col}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${col}.fieldRequired`) }))] }));
4202
+ }) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4204
4203
  };
4205
4204
 
4206
4205
  const getTableData = async ({ serverUrl, in_table, searching = "", where = [], limit = 10, offset = 0, }) => {
@@ -4242,7 +4241,6 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4242
4241
  const [openSearchResult, setOpenSearchResult] = React.useState();
4243
4242
  const [page, setPage] = React.useState(0);
4244
4243
  const ref = React.useRef(null);
4245
- const selectedIds = watch(column) ?? [];
4246
4244
  const colLabel = `${prefix}${column}`;
4247
4245
  const query = reactQuery.useQuery({
4248
4246
  queryKey: [`idpicker`, { column, searchText, limit, page }],
@@ -4279,8 +4277,8 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4279
4277
  setPage(0);
4280
4278
  setLimit(10);
4281
4279
  };
4282
- const watchId = watch(column);
4283
- const watchIds = (watch(column) ?? []);
4280
+ const watchId = watch(colLabel);
4281
+ const watchIds = (watch(colLabel) ?? []);
4284
4282
  const getPickedValue = () => {
4285
4283
  if (Object.keys(idMap).length <= 0) {
4286
4284
  return "";
@@ -4291,11 +4289,11 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4291
4289
  }
4292
4290
  return record[display_column];
4293
4291
  };
4294
- return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
4295
- gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [selectedIds.map((id) => {
4292
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.fieldLabel`)))}`, required: isRequired, alignItems: "stretch", gridColumn,
4293
+ gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchIds.map((id) => {
4296
4294
  const item = idMap[id];
4297
4295
  if (item === undefined) {
4298
- return (jsxRuntime.jsxs(react.Text, { children: [" ", translate.t(`${colLabel}.undefined`)] }, id));
4296
+ return (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.undefined`)) }, id));
4299
4297
  }
4300
4298
  return (jsxRuntime.jsx(Tag, { closable: true, onClick: () => {
4301
4299
  setValue(column, watchIds.filter((id) => id != item[column_ref]));
@@ -4304,12 +4302,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4304
4302
  : item[display_column] }, id));
4305
4303
  }), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
4306
4304
  setOpenSearchResult(true);
4307
- }, children: translate.t(`${colLabel}.addMore`) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
4305
+ }, children: translate.t(removeIndex(`${colLabel}.addMore`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
4308
4306
  setOpenSearchResult(true);
4309
- }, 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) => {
4307
+ }, 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) => {
4310
4308
  onSearchChange(event);
4311
4309
  setOpenSearchResult(true);
4312
- }, 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:
4310
+ }, 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:
4313
4311
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4314
4312
  dataList.map((item) => {
4315
4313
  const selected = isMultiple
@@ -4325,11 +4323,11 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
4325
4323
  ...(watchIds ?? []),
4326
4324
  item[column_ref],
4327
4325
  ]);
4328
- setValue(column, [...newSet]);
4326
+ setValue(colLabel, [...newSet]);
4329
4327
  }, opacity: 0.7, _hover: { opacity: 1 }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
4330
4328
  ? renderDisplay(item)
4331
4329
  : item[display_column] }, item[column_ref]));
4332
- }) }), 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`) }))] }));
4330
+ }) }), 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`)) }))] }));
4333
4331
  };
4334
4332
 
4335
4333
  const NumberInputRoot = React__namespace.forwardRef(function NumberInput(props, ref) {
@@ -4341,28 +4339,33 @@ react.NumberInput.Scrubber;
4341
4339
  react.NumberInput.Label;
4342
4340
 
4343
4341
  const NumberInputField = ({ schema, column, prefix, }) => {
4344
- const { register, formState: { errors }, } = reactHookForm.useFormContext();
4342
+ const { register, formState: { errors }, watch } = reactHookForm.useFormContext();
4345
4343
  const { translate } = useSchemaContext();
4346
4344
  const { required, gridColumn, gridRow } = schema;
4347
4345
  const isRequired = required?.some((columnId) => columnId === column);
4348
4346
  const colLabel = `${prefix}${column}`;
4349
- 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`) }))] }));
4347
+ 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`)) }))] }));
4350
4348
  };
4351
4349
 
4352
4350
  const ObjectInput = ({ schema, column, prefix }) => {
4353
- const { properties } = schema;
4351
+ const { properties, gridRow, gridColumn = "1/span 12", required } = schema;
4352
+ const { translate } = useSchemaContext();
4353
+ const colLabel = `${prefix}${column}`;
4354
+ const isRequired = required?.some((columnId) => columnId === column);
4355
+ const { formState: { errors }, } = reactHookForm.useFormContext();
4354
4356
  if (properties === undefined) {
4355
4357
  throw new Error(`properties is undefined when using ObjectInput`);
4356
4358
  }
4357
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: Object.keys(properties ?? {}).map((key) => {
4358
- console.log(properties, key, "gkor");
4359
- return (jsxRuntime.jsx(ColumnRenderer, { column: `${key}`,
4360
- prefix: `${prefix}${column}.`,
4361
- properties }, `form-${column}`));
4362
- }) }));
4359
+ 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) => {
4360
+ return (
4361
+ // @ts-expect-error find suitable types
4362
+ jsxRuntime.jsx(ColumnRenderer, { column: `${key}`,
4363
+ prefix: `${prefix}${column}.`,
4364
+ properties }, `form-${colLabel}-${key}`));
4365
+ }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4363
4366
  };
4364
4367
 
4365
- const RecordInput = ({ column, schema, prefix }) => {
4368
+ const RecordInput$1 = ({ column, schema, prefix }) => {
4366
4369
  const { formState: { errors }, setValue, getValues, } = reactHookForm.useFormContext();
4367
4370
  const { translate } = useSchemaContext();
4368
4371
  const { required, gridColumn, gridRow } = schema;
@@ -4420,7 +4423,7 @@ const StringInputField = ({ column, schema, prefix, }) => {
4420
4423
  const { required, gridColumn, gridRow } = schema;
4421
4424
  const isRequired = required?.some((columnId) => columnId === column);
4422
4425
  const colLabel = `${prefix}${column}`;
4423
- 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`) }))] }) }));
4426
+ 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`)) }))] }) }));
4424
4427
  };
4425
4428
 
4426
4429
  const RadioCardItem = React__namespace.forwardRef(function RadioCardItem(props, ref) {
@@ -4518,18 +4521,11 @@ const TagPicker = ({ column, schema, prefix }) => {
4518
4521
  }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4519
4522
  };
4520
4523
 
4521
- const ColumnRenderer = ({ column, properties, prefix, }) => {
4522
- if (properties === undefined) {
4523
- return jsxRuntime.jsx(jsxRuntime.Fragment, {});
4524
- }
4525
- console.log(`${column} does not exist when using ColumnRenderer`, { properties, column, prefix }, "fdpok");
4526
- const colSchema = properties[column];
4527
- if (colSchema === undefined) {
4528
- throw new Error(`${column} does not exist when using ColumnRenderer`);
4529
- }
4530
- const { type, variant, foreign_key, properties: innerProperties } = colSchema;
4524
+ const SchemaRenderer = ({ schema, prefix, column, }) => {
4525
+ const colSchema = schema;
4526
+ const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
4531
4527
  if (type === "string") {
4532
- if ((properties[column].enum ?? []).length > 0) {
4528
+ if ((schema.enum ?? []).length > 0) {
4533
4529
  return jsxRuntime.jsx(EnumPicker, { schema: colSchema, prefix, column });
4534
4530
  }
4535
4531
  if (variant === "id-picker") {
@@ -4551,7 +4547,7 @@ const ColumnRenderer = ({ column, properties, prefix, }) => {
4551
4547
  if (innerProperties) {
4552
4548
  return jsxRuntime.jsx(ObjectInput, { schema: colSchema, prefix, column });
4553
4549
  }
4554
- return jsxRuntime.jsx(RecordInput, { schema: colSchema, prefix, column });
4550
+ return jsxRuntime.jsx(RecordInput$1, { schema: colSchema, prefix, column });
4555
4551
  }
4556
4552
  if (type === "array") {
4557
4553
  if (variant === "id-picker") {
@@ -4564,6 +4560,9 @@ const ColumnRenderer = ({ column, properties, prefix, }) => {
4564
4560
  if (variant === "file-picker") {
4565
4561
  return jsxRuntime.jsx(FilePicker, { schema: colSchema, prefix, column });
4566
4562
  }
4563
+ if (items) {
4564
+ return jsxRuntime.jsx(ArrayRenderer, { schema: colSchema, prefix, column });
4565
+ }
4567
4566
  return jsxRuntime.jsx(react.Text, { children: `array ${column}` });
4568
4567
  }
4569
4568
  if (type === "null") {
@@ -4572,6 +4571,358 @@ const ColumnRenderer = ({ column, properties, prefix, }) => {
4572
4571
  return jsxRuntime.jsx(react.Text, { children: "missing type" });
4573
4572
  };
4574
4573
 
4574
+ const ColumnRenderer = ({ column, properties, prefix, }) => {
4575
+ const colSchema = properties[column];
4576
+ const colLabel = `${prefix}${column}`;
4577
+ if (colSchema === undefined) {
4578
+ throw new Error(`${colLabel} does not exist when using ColumnRenderer`);
4579
+ }
4580
+ return jsxRuntime.jsx(SchemaRenderer, { schema: colSchema, prefix, column });
4581
+ };
4582
+
4583
+ const ArrayViewer = ({ schema, column, prefix }) => {
4584
+ const { gridRow, gridColumn = "1/span 12", required, items } = schema;
4585
+ const { translate } = useSchemaContext();
4586
+ const colLabel = `${prefix}${column}`;
4587
+ const isRequired = required?.some((columnId) => columnId === column);
4588
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4589
+ const values = watch(colLabel) ?? [];
4590
+ 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}`,
4591
+ prefix: `${colLabel}.`,
4592
+ schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4593
+ };
4594
+
4595
+ const BooleanViewer = ({ schema, column, prefix, }) => {
4596
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4597
+ const { translate } = useSchemaContext();
4598
+ const { required, gridColumn, gridRow } = schema;
4599
+ const isRequired = required?.some((columnId) => columnId === column);
4600
+ const colLabel = `${prefix}${column}`;
4601
+ const value = watch(colLabel);
4602
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4603
+ gridRow, children: [jsxRuntime.jsx(react.Text, { children: value
4604
+ ? translate.t(removeIndex(`${colLabel}.true`))
4605
+ : translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4606
+ };
4607
+
4608
+ const DateViewer = ({ column, schema, prefix }) => {
4609
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4610
+ const { translate } = useSchemaContext();
4611
+ const { required, gridColumn, gridRow } = schema;
4612
+ const isRequired = required?.some((columnId) => columnId === column);
4613
+ const colLabel = `${prefix}${column}`;
4614
+ const selectedDate = watch(colLabel);
4615
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4616
+ gridRow, children: [jsxRuntime.jsxs(react.Text, { children: [" ", selectedDate !== undefined ? selectedDate : ""] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
4617
+ };
4618
+
4619
+ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
4620
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4621
+ const { translate } = useSchemaContext();
4622
+ const { required } = schema;
4623
+ const isRequired = required?.some((columnId) => columnId === column);
4624
+ const { gridColumn, gridRow, renderDisplay } = schema;
4625
+ const colLabel = `${prefix}${column}`;
4626
+ const watchEnum = watch(colLabel);
4627
+ const watchEnums = (watch(colLabel) ?? []);
4628
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4629
+ gridRow, children: [isMultiple && (jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 1, children: watchEnums.map((enumValue) => {
4630
+ const item = enumValue;
4631
+ if (item === undefined) {
4632
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "undefined" });
4633
+ }
4634
+ return (jsxRuntime.jsx(Tag, { closable: true, children: !!renderDisplay === true
4635
+ ? renderDisplay(item)
4636
+ : translate.t(removeIndex(`${colLabel}.${item}`)) }));
4637
+ }) })), !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`)) }))] }));
4638
+ };
4639
+
4640
+ const FileViewer = ({ column, schema, prefix }) => {
4641
+ const { setValue, formState: { errors }, watch, } = reactHookForm.useFormContext();
4642
+ const { translate } = useSchemaContext();
4643
+ const { required, gridColumn, gridRow } = schema;
4644
+ const isRequired = required?.some((columnId) => columnId === column);
4645
+ const currentFiles = (watch(column) ?? []);
4646
+ const colLabel = `${prefix}${column}`;
4647
+ 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 }) => {
4648
+ const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
4649
+ setValue(colLabel, [...currentFiles, ...newFiles]);
4650
+ }, placeholder: translate.t(`${colLabel}.fileDropzone`) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
4651
+ return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
4652
+ setValue(column, currentFiles.filter(({ name }) => {
4653
+ return name !== file.name;
4654
+ }));
4655
+ }, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
4656
+ }) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4657
+ };
4658
+
4659
+ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
4660
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4661
+ const { idMap, translate } = useSchemaContext();
4662
+ const { required, gridColumn, gridRow, renderDisplay, foreign_key } = schema;
4663
+ const isRequired = required?.some((columnId) => columnId === column);
4664
+ const { display_column } = foreign_key;
4665
+ const colLabel = `${prefix}${column}`;
4666
+ const watchId = watch(colLabel);
4667
+ const watchIds = (watch(colLabel) ?? []);
4668
+ const getPickedValue = () => {
4669
+ if (Object.keys(idMap).length <= 0) {
4670
+ return "";
4671
+ }
4672
+ const record = idMap[watchId];
4673
+ if (record === undefined) {
4674
+ return "";
4675
+ }
4676
+ return record[display_column];
4677
+ };
4678
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.fieldLabel`))}`, required: isRequired, alignItems: "stretch", gridColumn,
4679
+ gridRow, children: [isMultiple && (jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 1, children: watchIds.map((id) => {
4680
+ const item = idMap[id];
4681
+ if (item === undefined) {
4682
+ return (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.undefined`)) }, id));
4683
+ }
4684
+ return (jsxRuntime.jsx(Tag, { closable: true, children: !!renderDisplay === true
4685
+ ? renderDisplay(item)
4686
+ : item[display_column] }, id));
4687
+ }) })), !isMultiple && jsxRuntime.jsx(react.Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4688
+ };
4689
+
4690
+ const NumberViewer = ({ schema, column, prefix, }) => {
4691
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4692
+ const { translate } = useSchemaContext();
4693
+ const { required, gridColumn, gridRow } = schema;
4694
+ const isRequired = required?.some((columnId) => columnId === column);
4695
+ const colLabel = `${prefix}${column}`;
4696
+ const value = watch(colLabel);
4697
+ 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`)) }))] }));
4698
+ };
4699
+
4700
+ const ObjectViewer = ({ schema, column, prefix }) => {
4701
+ const { properties, gridRow, gridColumn = "1/span 12", required } = schema;
4702
+ const { translate } = useSchemaContext();
4703
+ const colLabel = `${prefix}${column}`;
4704
+ const isRequired = required?.some((columnId) => columnId === column);
4705
+ const { formState: { errors }, } = reactHookForm.useFormContext();
4706
+ if (properties === undefined) {
4707
+ throw new Error(`properties is undefined when using ObjectInput`);
4708
+ }
4709
+ 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) => {
4710
+ return (
4711
+ // @ts-expect-error find suitable types
4712
+ jsxRuntime.jsx(ColumnViewer, { column: `${key}`,
4713
+ prefix: `${prefix}${column}.`,
4714
+ properties }, `form-objectviewer-${colLabel}-${key}`));
4715
+ }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
4716
+ };
4717
+
4718
+ const RecordInput = ({ column, schema, prefix }) => {
4719
+ const { formState: { errors }, setValue, getValues, } = reactHookForm.useFormContext();
4720
+ const { translate } = useSchemaContext();
4721
+ const { required, gridColumn, gridRow } = schema;
4722
+ const isRequired = required?.some((columnId) => columnId === column);
4723
+ const entries = Object.entries(getValues(column) ?? {});
4724
+ const [showNewEntries, setShowNewEntries] = React.useState(false);
4725
+ const [newKey, setNewKey] = React.useState();
4726
+ const [newValue, setNewValue] = React.useState();
4727
+ return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
4728
+ return (jsxRuntime.jsxs(react.Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsxRuntime.jsx(react.Input, { value: key, onChange: (e) => {
4729
+ const filtered = entries.filter(([target]) => {
4730
+ return target !== key;
4731
+ });
4732
+ setValue(column, Object.fromEntries([...filtered, [e.target.value, value]]));
4733
+ }, autoComplete: "off" }), jsxRuntime.jsx(react.Input, { value: value, onChange: (e) => {
4734
+ setValue(column, {
4735
+ ...getValues(column),
4736
+ [key]: e.target.value,
4737
+ });
4738
+ }, autoComplete: "off" }), jsxRuntime.jsx(react.IconButton, { variant: "ghost", onClick: () => {
4739
+ const filtered = entries.filter(([target]) => {
4740
+ return target !== key;
4741
+ });
4742
+ setValue(column, Object.fromEntries([...filtered]));
4743
+ }, children: jsxRuntime.jsx(cg.CgClose, {}) })] }));
4744
+ }), 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) => {
4745
+ setNewKey(e.target.value);
4746
+ }, autoComplete: "off" }), jsxRuntime.jsx(react.Input, { value: newValue, onChange: (e) => {
4747
+ setNewValue(e.target.value);
4748
+ }, autoComplete: "off" })] }) }), jsxRuntime.jsxs(react.Card.Footer, { justifyContent: "flex-end", children: [jsxRuntime.jsx(react.IconButton, { variant: "subtle", onClick: () => {
4749
+ setShowNewEntries(false);
4750
+ setNewKey(undefined);
4751
+ setNewValue(undefined);
4752
+ }, children: jsxRuntime.jsx(cg.CgClose, {}) }), jsxRuntime.jsx(Button, { onClick: () => {
4753
+ if (!!newKey === false) {
4754
+ setShowNewEntries(false);
4755
+ setNewKey(undefined);
4756
+ setNewValue(undefined);
4757
+ return;
4758
+ }
4759
+ setValue(column, Object.fromEntries([...entries, [newKey, newValue]]));
4760
+ setShowNewEntries(false);
4761
+ setNewKey(undefined);
4762
+ setNewValue(undefined);
4763
+ }, children: translate.t(`${column}.save`) })] })] }) }), jsxRuntime.jsx(Button, { onClick: () => {
4764
+ setShowNewEntries(true);
4765
+ setNewKey(undefined);
4766
+ setNewValue(undefined);
4767
+ }, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
4768
+ };
4769
+
4770
+ const TagViewer = ({ column, schema, prefix }) => {
4771
+ const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
4772
+ const { serverUrl } = useSchemaContext();
4773
+ if (schema.properties == undefined) {
4774
+ throw new Error("schema properties undefined when using DatePicker");
4775
+ }
4776
+ const { gridColumn, gridRow, in_table, object_id_column } = schema;
4777
+ if (in_table === undefined) {
4778
+ throw new Error("in_table is undefined when using TagPicker");
4779
+ }
4780
+ if (object_id_column === undefined) {
4781
+ throw new Error("object_id_column is undefined when using TagPicker");
4782
+ }
4783
+ const query = reactQuery.useQuery({
4784
+ queryKey: [`tagpicker`, in_table],
4785
+ queryFn: async () => {
4786
+ return await getTableData({
4787
+ serverUrl,
4788
+ in_table: "tables_tags_view",
4789
+ where: [
4790
+ {
4791
+ id: "table_name",
4792
+ value: [in_table],
4793
+ },
4794
+ ],
4795
+ limit: 100,
4796
+ });
4797
+ },
4798
+ staleTime: 10000,
4799
+ });
4800
+ const object_id = watch(object_id_column);
4801
+ const existingTagsQuery = reactQuery.useQuery({
4802
+ queryKey: [`existing`, { in_table, object_id_column }, object_id],
4803
+ queryFn: async () => {
4804
+ return await getTableData({
4805
+ serverUrl,
4806
+ in_table: in_table,
4807
+ where: [
4808
+ {
4809
+ id: object_id_column,
4810
+ value: object_id[0],
4811
+ },
4812
+ ],
4813
+ limit: 100,
4814
+ });
4815
+ },
4816
+ enabled: object_id != undefined,
4817
+ staleTime: 10000,
4818
+ });
4819
+ const { isLoading, isFetching, data, isPending, isError } = query;
4820
+ const dataList = data?.data ?? [];
4821
+ const existingTagList = existingTagsQuery.data?.data ?? [];
4822
+ if (!!object_id === false) {
4823
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
4824
+ }
4825
+ return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 4, gridColumn,
4826
+ 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 }) => {
4827
+ 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) => {
4828
+ const existedTags = Object.values(all_tags)
4829
+ .filter(({ id }) => {
4830
+ return existingTagList.some(({ tag_id }) => tag_id === id);
4831
+ })
4832
+ .map(({ id }) => {
4833
+ return id;
4834
+ });
4835
+ setValue(`${column}.${parent_tag_name}.current`, [
4836
+ tagIds.value,
4837
+ ]);
4838
+ setValue(`${column}.${parent_tag_name}.old`, existedTags);
4839
+ }, children: jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 2, children: Object.entries(all_tags).map(([tagName, { id }]) => {
4840
+ if (existingTagList.some(({ tag_id }) => tag_id === id)) {
4841
+ return (jsxRuntime.jsx(RadioCardItem, { label: tagName, value: id, flex: "0 0 0%", disabled: true }, `${tagName}-${id}`));
4842
+ }
4843
+ return (jsxRuntime.jsx(RadioCardItem, { label: tagName, value: id, flex: "0 0 0%", colorPalette: "blue" }, `${tagName}-${id}`));
4844
+ }) }) })), !is_mutually_exclusive && (jsxRuntime.jsx(react.CheckboxGroup, { onValueChange: (tagIds) => {
4845
+ setValue(`${column}.${parent_tag_name}.current`, tagIds);
4846
+ }, children: jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 2, children: Object.entries(all_tags).map(([tagName, { id }]) => {
4847
+ if (existingTagList.some(({ tag_id }) => tag_id === id)) {
4848
+ return (jsxRuntime.jsx(CheckboxCard, { label: tagName, value: id, flex: "0 0 0%", disabled: true, colorPalette: "blue" }, `${tagName}-${id}`));
4849
+ }
4850
+ return (jsxRuntime.jsx(CheckboxCard, { label: tagName, value: id, flex: "0 0 0%" }, `${tagName}-${id}`));
4851
+ }) }) }))] }, `tag-${parent_tag_name}`));
4852
+ }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4853
+ };
4854
+
4855
+ const StringViewer = ({ column, schema, prefix, }) => {
4856
+ const { watch, formState: { errors }, } = reactHookForm.useFormContext();
4857
+ const { translate } = useSchemaContext();
4858
+ const { required, gridColumn, gridRow } = schema;
4859
+ const isRequired = required?.some((columnId) => columnId === column);
4860
+ const colLabel = `${prefix}${column}`;
4861
+ const value = watch(colLabel);
4862
+ 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`)) }))] }) }));
4863
+ };
4864
+
4865
+ const SchemaViewer = ({ schema, prefix, column, }) => {
4866
+ const colSchema = schema;
4867
+ const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
4868
+ if (type === "string") {
4869
+ if ((schema.enum ?? []).length > 0) {
4870
+ return jsxRuntime.jsx(EnumViewer, { schema: colSchema, prefix, column });
4871
+ }
4872
+ if (variant === "id-picker") {
4873
+ idPickerSanityCheck(column, foreign_key);
4874
+ return jsxRuntime.jsx(IdViewer, { schema: colSchema, prefix, column });
4875
+ }
4876
+ if (variant === "date-picker") {
4877
+ return jsxRuntime.jsx(DateViewer, { schema: colSchema, prefix, column });
4878
+ }
4879
+ return jsxRuntime.jsx(StringViewer, { schema: colSchema, prefix, column });
4880
+ }
4881
+ if (type === "number" || type === "integer") {
4882
+ return jsxRuntime.jsx(NumberViewer, { schema: colSchema, prefix, column });
4883
+ }
4884
+ if (type === "boolean") {
4885
+ return jsxRuntime.jsx(BooleanViewer, { schema: colSchema, prefix, column });
4886
+ }
4887
+ if (type === "object") {
4888
+ if (innerProperties) {
4889
+ return jsxRuntime.jsx(ObjectViewer, { schema: colSchema, prefix, column });
4890
+ }
4891
+ return jsxRuntime.jsx(RecordInput, { schema: colSchema, prefix, column });
4892
+ }
4893
+ if (type === "array") {
4894
+ if (variant === "id-picker") {
4895
+ idPickerSanityCheck(column, foreign_key);
4896
+ return (jsxRuntime.jsx(IdViewer, { schema: colSchema, prefix, column, isMultiple: true }));
4897
+ }
4898
+ if (variant === "tag-picker") {
4899
+ return jsxRuntime.jsx(TagViewer, { schema: colSchema, prefix, column });
4900
+ }
4901
+ if (variant === "file-picker") {
4902
+ return jsxRuntime.jsx(FileViewer, { schema: colSchema, prefix, column });
4903
+ }
4904
+ if (items) {
4905
+ return jsxRuntime.jsx(ArrayViewer, { schema: colSchema, prefix, column });
4906
+ }
4907
+ return jsxRuntime.jsx(react.Text, { children: `array ${column}` });
4908
+ }
4909
+ if (type === "null") {
4910
+ return jsxRuntime.jsx(react.Text, { children: `null ${column}` });
4911
+ }
4912
+ return jsxRuntime.jsx(react.Text, { children: "missing type" });
4913
+ };
4914
+
4915
+ const ColumnViewer = ({ column, properties, prefix, }) => {
4916
+ if (properties === undefined) {
4917
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
4918
+ }
4919
+ const colSchema = properties[column];
4920
+ if (colSchema === undefined) {
4921
+ throw new Error(`${column} does not exist when using ColumnRenderer`);
4922
+ }
4923
+ return jsxRuntime.jsx(SchemaViewer, { schema: colSchema, prefix, column });
4924
+ };
4925
+
4575
4926
  const idPickerSanityCheck = (column, foreign_key) => {
4576
4927
  if (!!foreign_key == false) {
4577
4928
  throw new Error(`The key foreign_key does not exist in properties of column ${column} when using id-picker.`);
@@ -4588,7 +4939,7 @@ const idPickerSanityCheck = (column, foreign_key) => {
4588
4939
  }
4589
4940
  };
4590
4941
  const FormInternal = () => {
4591
- const { schema, requestUrl, order, ignore, onSubmit, rowNumber, idMap, translate, requestOptions, } = useSchemaContext();
4942
+ const { schema, requestUrl, order, onSubmit, rowNumber, translate, requestOptions, } = useSchemaContext();
4592
4943
  const methods = reactHookForm.useFormContext();
4593
4944
  const [isSuccess, setIsSuccess] = React.useState(false);
4594
4945
  const [isError, setIsError] = React.useState(false);
@@ -4652,19 +5003,8 @@ const FormInternal = () => {
4652
5003
  return [...order, ...not_exist];
4653
5004
  };
4654
5005
  const ordered = renderOrder(order, Object.keys(properties));
4655
- const getDataListProps = (value) => {
4656
- if (value == undefined || value.length <= 0) {
4657
- return {
4658
- value: `<${translate.t("empty") ?? "Empty"}>`,
4659
- color: "gray.400",
4660
- };
4661
- }
4662
- return {
4663
- value: value,
4664
- };
4665
- };
4666
5006
  if (isSuccess) {
4667
- return (jsxRuntime.jsxs(react.Grid, { gap: 2, children: [jsxRuntime.jsx(react.Heading, { children: translate.t("title") }), jsxRuntime.jsxs(react.Alert.Root, { status: "success", children: [jsxRuntime.jsx(react.Alert.Indicator, {}), jsxRuntime.jsx(react.Alert.Title, { children: translate.t("submitSuccess") })] }), jsxRuntime.jsx(react.Flex, { justifyContent: 'end', children: jsxRuntime.jsx(Button, { onClick: () => {
5007
+ return (jsxRuntime.jsxs(react.Grid, { gap: 2, children: [jsxRuntime.jsx(react.Heading, { children: translate.t("title") }), jsxRuntime.jsxs(react.Alert.Root, { status: "success", children: [jsxRuntime.jsx(react.Alert.Indicator, {}), jsxRuntime.jsx(react.Alert.Title, { children: translate.t("submitSuccess") })] }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(Button, { onClick: () => {
4668
5008
  setIsError(false);
4669
5009
  setIsSubmiting(false);
4670
5010
  setIsSuccess(false);
@@ -4674,101 +5014,29 @@ const FormInternal = () => {
4674
5014
  }, formNoValidate: true, children: translate.t("submitAgain") }) })] }));
4675
5015
  }
4676
5016
  if (isConfirming) {
4677
- return (jsxRuntime.jsxs(react.Grid, { gap: 2, children: [jsxRuntime.jsxs(react.Heading, { children: [" ", translate.t("title")] }), jsxRuntime.jsx(DataListRoot, { orientation: "horizontal", gap: 4, display: "grid", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
4678
- if (properties === undefined) {
4679
- return jsxRuntime.jsx(jsxRuntime.Fragment, {});
4680
- }
4681
- const key = column;
4682
- const values = properties[column];
4683
- const shouldIgnore = ignore.some((column) => {
4684
- return column == key;
4685
- });
4686
- if (shouldIgnore) {
4687
- return jsxRuntime.jsx(jsxRuntime.Fragment, {});
4688
- }
4689
- const { type, variant, gridColumn, gridRow, foreign_key } = values;
4690
- if (type === "string") {
4691
- if (variant === "id-picker") {
4692
- idPickerSanityCheck(column, foreign_key);
4693
- return (jsxRuntime.jsx(IdViewer, { value: (validatedData ?? {})[column], column,
4694
- dataListItemProps: { gridColumn, gridRow } }, `form-${key}`));
4695
- }
4696
- if (variant === "date-picker") {
4697
- const value = (validatedData ?? {})[column];
4698
- if (!!value === false) {
4699
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(undefined) }, `form-${key}`));
4700
- }
4701
- const date = dayjs(value).format("YYYY-MM-DD");
4702
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(date) }, `form-${key}`));
4703
- }
4704
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps((validatedData ?? {})[column]) }, `form-${key}`));
4705
- }
4706
- if (type === "object") {
4707
- const value = (validatedData ?? {})[column];
4708
- if (!!value === false) {
4709
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(undefined) }, `form-${key}`));
4710
- }
4711
- return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Text, { children: translate.t(`input.${column}`) }), jsxRuntime.jsx(DataListRoot, { orientation: "horizontal", padding: 4, borderColor: "gray.200", borderWidth: 1, borderRadius: 4, children: Object.entries(value).map(([key, value]) => {
4712
- return (jsxRuntime.jsx(DataListItem, { label: `${key}`, ...getDataListProps(value) }, `form-${column}-${key}`));
4713
- }) })] }, `form-${key}`));
4714
- }
4715
- if (type === "boolean") {
4716
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps((validatedData ?? {})[column]) }, `form-${key}`));
4717
- }
4718
- if (type === "number" || type === "integer") {
4719
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps((validatedData ?? {})[column]) }, `form-${key}`));
4720
- }
4721
- if (type === "array") {
4722
- if (variant === "tag-picker") {
4723
- const value = (validatedData ?? {})[column];
4724
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(JSON.stringify(value)) }, `form-${key}`));
4725
- }
4726
- if (variant === "file-picker") {
4727
- const fileNames = ((validatedData ?? {})[column] ?? []).map((file) => {
4728
- return file.name;
4729
- });
4730
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(JSON.stringify(fileNames)) }, `form-${key}`));
4731
- }
4732
- if (variant === "id-picker") {
4733
- const value = (validatedData ?? {})[column];
4734
- if (schema.properties == undefined) {
4735
- throw new Error("schema properties when using DatePicker");
4736
- }
4737
- const { foreign_key } = schema.properties[column];
4738
- if (foreign_key === undefined) {
4739
- throw new Error("foreign_key when variant is id-picker");
4740
- }
4741
- const { display_column } = foreign_key;
4742
- const mapped = value.map((item) => {
4743
- return idMap[item][display_column];
4744
- });
4745
- return (jsxRuntime.jsxs(react.Grid, { flexFlow: "column", gridColumn,
4746
- gridRow, children: [jsxRuntime.jsx(react.Text, { children: translate.t(`input.${column}`) }), jsxRuntime.jsx(RecordDisplay, { object: mapped })] }, `form-${key}`));
4747
- }
4748
- const objectString = JSON.stringify((validatedData ?? {})[column]);
4749
- return (jsxRuntime.jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(objectString) }, `form-${key}`));
4750
- }
4751
- if (type === "null") {
4752
- return jsxRuntime.jsx(jsxRuntime.Fragment, { children: `null ${column}` });
4753
- }
4754
- return jsxRuntime.jsx(jsxRuntime.Fragment, { children: `unknown type ${column}` });
5017
+ 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) => {
5018
+ return (jsxRuntime.jsx(ColumnViewer
5019
+ // @ts-expect-error find suitable types
5020
+ , {
5021
+ // @ts-expect-error find suitable types
5022
+ properties: properties, prefix: ``, column }, `form-viewer-${column}`));
4755
5023
  }) }), jsxRuntime.jsxs(react.Flex, { justifyContent: "end", gap: "2", children: [jsxRuntime.jsx(Button, { onClick: () => {
4756
5024
  setIsConfirming(false);
4757
5025
  }, variant: "subtle", children: translate.t("cancel") }), jsxRuntime.jsx(Button, { onClick: () => {
4758
5026
  onFormSubmit(validatedData);
4759
5027
  }, children: translate.t("confirm") })] }), isSubmiting && (jsxRuntime.jsx(react.Box, { pos: "absolute", inset: "0", bg: "bg/80", children: jsxRuntime.jsx(react.Center, { h: "full", children: jsxRuntime.jsx(react.Spinner, { color: "teal.500" }) }) })), isError && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(react.Alert.Root, { status: "error", children: jsxRuntime.jsx(react.Alert.Title, { children: jsxRuntime.jsx(AccordionRoot, { collapsible: true, defaultValue: ["b"], children: jsxRuntime.jsxs(AccordionItem, { value: "b", children: [jsxRuntime.jsxs(AccordionItemTrigger, { children: [jsxRuntime.jsx(react.Alert.Indicator, {}), `${error}`] }), jsxRuntime.jsx(AccordionItemContent, { children: `${JSON.stringify(error)}` })] }) }) }) }) }))] }));
4760
5028
  }
4761
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [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) => {
4762
- return (jsxRuntime.jsx(ColumnRenderer
5029
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: 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) => {
5030
+ return (jsxRuntime.jsx(ColumnRenderer
5031
+ // @ts-expect-error find suitable types
5032
+ , {
4763
5033
  // @ts-expect-error find suitable types
4764
- , {
4765
- // @ts-expect-error find suitable types
4766
- properties: properties, prefix: ``, column }, `form-${column}`));
4767
- }) }), jsxRuntime.jsxs(react.Flex, { justifyContent: "end", gap: "2", children: [jsxRuntime.jsx(Button, { onClick: () => {
4768
- methods.reset();
4769
- }, variant: "subtle", children: translate.t("reset") }), jsxRuntime.jsx(Button, { onClick: () => {
4770
- methods.handleSubmit(onValid)();
4771
- }, formNoValidate: true, children: translate.t("submit") })] })] }), isError && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: ["isError", jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" ", `${error}`] })] }))] }));
5034
+ properties: properties, prefix: ``, column }, `form-input-${column}`));
5035
+ }) }), jsxRuntime.jsxs(react.Flex, { justifyContent: "end", gap: "2", children: [jsxRuntime.jsx(Button, { onClick: () => {
5036
+ methods.reset();
5037
+ }, variant: "subtle", children: translate.t("reset") }), jsxRuntime.jsx(Button, { onClick: () => {
5038
+ methods.handleSubmit(onValid)();
5039
+ }, formNoValidate: true, children: translate.t("submit") })] })] }) }));
4772
5040
  };
4773
5041
  const Form = ({ schema, idMap, setIdMap, form, serverUrl, translate, order = [], ignore = [], onSubmit = undefined, rowNumber = undefined, requestOptions = {}, }) => {
4774
5042
  const { properties } = schema;