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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.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,24 @@ 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
- });
3635
-
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
- });
3601
+ const ArrayRenderer = ({ schema, column, prefix, }) => {
3602
+ const { gridRow, gridColumn = "1/span 12", required, items } = schema;
3603
+ const { translate } = useSchemaContext();
3604
+ const colLabel = `${prefix}${column}`;
3605
+ 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`) }))] }));
3618
+ };
3641
3619
 
3642
3620
  const Field = React__namespace.forwardRef(function Field(props, ref) {
3643
3621
  const { label, children, helperText, errorText, optionalText, ...rest } = props;
@@ -4350,16 +4328,21 @@ const NumberInputField = ({ schema, column, prefix, }) => {
4350
4328
  };
4351
4329
 
4352
4330
  const ObjectInput = ({ schema, column, prefix }) => {
4353
- const { properties } = schema;
4331
+ const { properties, gridRow, gridColumn = "1/span 12", required } = schema;
4332
+ const { translate } = useSchemaContext();
4333
+ const colLabel = `${prefix}${column}`;
4334
+ const isRequired = required?.some((columnId) => columnId === column);
4335
+ const { watch, formState: { errors }, setValue, control, } = reactHookForm.useFormContext();
4354
4336
  if (properties === undefined) {
4355
4337
  throw new Error(`properties is undefined when using ObjectInput`);
4356
4338
  }
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
- }) }));
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) => {
4340
+ return (
4341
+ // @ts-expect-error find suitable types
4342
+ jsxRuntime.jsx(ColumnRenderer, { column: `${key}`,
4343
+ prefix: `${prefix}${column}.`,
4344
+ properties }, `form-${column}`));
4345
+ }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
4363
4346
  };
4364
4347
 
4365
4348
  const RecordInput = ({ column, schema, prefix }) => {
@@ -4518,18 +4501,11 @@ const TagPicker = ({ column, schema, prefix }) => {
4518
4501
  }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4519
4502
  };
4520
4503
 
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;
4504
+ const SchemaRenderer = ({ schema, prefix, column, }) => {
4505
+ const colSchema = schema;
4506
+ const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
4531
4507
  if (type === "string") {
4532
- if ((properties[column].enum ?? []).length > 0) {
4508
+ if ((schema.enum ?? []).length > 0) {
4533
4509
  return jsxRuntime.jsx(EnumPicker, { schema: colSchema, prefix, column });
4534
4510
  }
4535
4511
  if (variant === "id-picker") {
@@ -4564,6 +4540,9 @@ const ColumnRenderer = ({ column, properties, prefix, }) => {
4564
4540
  if (variant === "file-picker") {
4565
4541
  return jsxRuntime.jsx(FilePicker, { schema: colSchema, prefix, column });
4566
4542
  }
4543
+ if (items) {
4544
+ return jsxRuntime.jsx(ArrayRenderer, { schema: colSchema, prefix, column });
4545
+ }
4567
4546
  return jsxRuntime.jsx(react.Text, { children: `array ${column}` });
4568
4547
  }
4569
4548
  if (type === "null") {
@@ -4572,6 +4551,18 @@ const ColumnRenderer = ({ column, properties, prefix, }) => {
4572
4551
  return jsxRuntime.jsx(react.Text, { children: "missing type" });
4573
4552
  };
4574
4553
 
4554
+ const ColumnRenderer = ({ column, properties, prefix, }) => {
4555
+ if (properties === undefined) {
4556
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
4557
+ }
4558
+ console.log(`${column} does not exist when using ColumnRenderer`, { properties, column, prefix }, "fdpok");
4559
+ const colSchema = properties[column];
4560
+ if (colSchema === undefined) {
4561
+ throw new Error(`${column} does not exist when using ColumnRenderer`);
4562
+ }
4563
+ return jsxRuntime.jsx(SchemaRenderer, { schema: colSchema, prefix, column });
4564
+ };
4565
+
4575
4566
  const idPickerSanityCheck = (column, foreign_key) => {
4576
4567
  if (!!foreign_key == false) {
4577
4568
  throw new Error(`The key foreign_key does not exist in properties of column ${column} when using id-picker.`);
@@ -4652,19 +4643,8 @@ const FormInternal = () => {
4652
4643
  return [...order, ...not_exist];
4653
4644
  };
4654
4645
  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
4646
  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: () => {
4647
+ 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
4648
  setIsError(false);
4669
4649
  setIsSubmiting(false);
4670
4650
  setIsSuccess(false);
@@ -4674,101 +4654,23 @@ const FormInternal = () => {
4674
4654
  }, formNoValidate: true, children: translate.t("submitAgain") }) })] }));
4675
4655
  }
4676
4656
  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}` });
4755
- }) }), jsxRuntime.jsxs(react.Flex, { justifyContent: "end", gap: "2", children: [jsxRuntime.jsx(Button, { onClick: () => {
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: () => {
4756
4658
  setIsConfirming(false);
4757
4659
  }, variant: "subtle", children: translate.t("cancel") }), jsxRuntime.jsx(Button, { onClick: () => {
4758
4660
  onFormSubmit(validatedData);
4759
4661
  }, 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
4662
  }
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
4663
+ 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) => {
4664
+ return (jsxRuntime.jsx(ColumnRenderer
4665
+ // @ts-expect-error find suitable types
4666
+ , {
4763
4667
  // @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}`] })] }))] }));
4668
+ properties: properties, prefix: ``, column }, `form-${column}`));
4669
+ }) }), jsxRuntime.jsxs(react.Flex, { justifyContent: "end", gap: "2", children: [jsxRuntime.jsx(Button, { onClick: () => {
4670
+ methods.reset();
4671
+ }, variant: "subtle", children: translate.t("reset") }), jsxRuntime.jsx(Button, { onClick: () => {
4672
+ methods.handleSubmit(onValid)();
4673
+ }, formNoValidate: true, children: translate.t("submit") })] })] }) }));
4772
4674
  };
4773
4675
  const Form = ({ schema, idMap, setIdMap, form, serverUrl, translate, order = [], ignore = [], onSubmit = undefined, rowNumber = undefined, requestOptions = {}, }) => {
4774
4676
  const { properties } = schema;
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Flex, Text, Tag as Tag$1, Input, useDisclosure, DialogBackdrop, CheckboxCard as CheckboxCard$1, Menu, createRecipeContext, createContext as createContext$1, Pagination as Pagination$1, usePaginationContext, Image, Card, DataList, Checkbox as Checkbox$1, Table as Table$1, Tooltip as Tooltip$1, Group, InputElement, Icon, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, EmptyState as EmptyState$2, VStack, List, Alert, HoverCard, Accordion, Popover, Field as Field$1, NumberInput, Show, RadioCard, CheckboxGroup, Heading, Center } from '@chakra-ui/react';
2
+ import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Flex, Text, Tag as Tag$1, Input, useDisclosure, DialogBackdrop, CheckboxCard as CheckboxCard$1, Menu, createRecipeContext, createContext as createContext$1, Pagination as Pagination$1, usePaginationContext, Image, Card, DataList, Checkbox as Checkbox$1, Table as Table$1, Tooltip as Tooltip$1, Group, InputElement, Icon, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, EmptyState as EmptyState$2, VStack, List, Alert, Accordion, Field as Field$1, Popover, NumberInput, Show, RadioCard, CheckboxGroup, Heading, Center } from '@chakra-ui/react';
3
3
  import { AiOutlineColumnWidth } from 'react-icons/ai';
4
4
  import * as React from 'react';
5
5
  import React__default, { createContext, useContext, useState, useEffect, useRef } from 'react';
@@ -24,11 +24,11 @@ import { useDebounce } from '@uidotdev/usehooks';
24
24
  import { useQueryClient, useQuery } from '@tanstack/react-query';
25
25
  import { IoReload } from 'react-icons/io5';
26
26
  import { GrAscend, GrDescend } from 'react-icons/gr';
27
- import { HiColorSwatch, HiOutlineInformationCircle } from 'react-icons/hi';
27
+ import { HiColorSwatch } from 'react-icons/hi';
28
28
  import { useTranslation } from 'react-i18next';
29
29
  import axios from 'axios';
30
+ import { useFormContext, useFieldArray, FormProvider, useForm as useForm$1 } from 'react-hook-form';
30
31
  import dayjs from 'dayjs';
31
- import { useFormContext, FormProvider, useForm as useForm$1 } from 'react-hook-form';
32
32
  import { TiDeleteOutline } from 'react-icons/ti';
33
33
 
34
34
  const DataTableContext = createContext({
@@ -3547,16 +3547,6 @@ const SchemaFormContext = createContext({
3547
3547
  requestOptions: {},
3548
3548
  });
3549
3549
 
3550
- const HoverCardContent = React.forwardRef(function HoverCardContent(props, ref) {
3551
- const { portalled = true, portalRef, ...rest } = props;
3552
- return (jsx(Portal, { disabled: !portalled, container: portalRef, children: jsx(HoverCard.Positioner, { children: jsx(HoverCard.Content, { ref: ref, ...rest }) }) }));
3553
- });
3554
- const HoverCardArrow = React.forwardRef(function HoverCardArrow(props, ref) {
3555
- return (jsx(HoverCard.Arrow, { ref: ref, ...props, children: jsx(HoverCard.ArrowTip, {}) }));
3556
- });
3557
- const HoverCardRoot = HoverCard.Root;
3558
- const HoverCardTrigger = HoverCard.Trigger;
3559
-
3560
3550
  const useSchemaContext = () => {
3561
3551
  const { schema, serverUrl, requestUrl, order, ignore, onSubmit, rowNumber, idMap, setIdMap, translate, requestOptions, } = useContext(SchemaFormContext);
3562
3552
  return {
@@ -3574,22 +3564,6 @@ const useSchemaContext = () => {
3574
3564
  };
3575
3565
  };
3576
3566
 
3577
- const IdViewer = ({ value, column }) => {
3578
- const { schema, idMap, translate } = useSchemaContext();
3579
- if (schema.properties == undefined) {
3580
- throw new Error("schema properties when using DatePicker");
3581
- }
3582
- const { foreign_key } = schema.properties[column];
3583
- if (foreign_key === undefined) {
3584
- throw new Error("foreign_key when variant is id-picker");
3585
- }
3586
- const { display_column } = foreign_key;
3587
- if (value === undefined) {
3588
- return (jsxs(Flex, { flexFlow: "column", children: [jsx(Text, { children: translate.t(`${column}.fieldLabel`) }), jsx(Text, { children: translate.t(`empty`) })] }));
3589
- }
3590
- return (jsxs(Flex, { flexFlow: "column", children: [jsx(Text, { children: translate.t(`${column}.fieldLabel`) }), jsxs(HoverCardRoot, { children: [jsx(HoverCardTrigger, { asChild: true, children: jsx(Text, { cursor: 'pointer', children: idMap[value][display_column] }) }), jsxs(HoverCardContent, { children: [jsx(HoverCardArrow, {}), jsx(RecordDisplay, { object: idMap[value] })] })] })] }));
3591
- };
3592
-
3593
3567
  const clearEmptyString = (object) => {
3594
3568
  return Object.fromEntries(Object.entries(object).filter(([, value]) => value !== ""));
3595
3569
  };
@@ -3604,20 +3578,24 @@ const AccordionItemContent = React.forwardRef(function AccordionItemContent(prop
3604
3578
  const AccordionRoot = Accordion.Root;
3605
3579
  const AccordionItem = Accordion.Item;
3606
3580
 
3607
- const ToggleTip = React.forwardRef(function ToggleTip(props, ref) {
3608
- const { showArrow, children, portalled = true, content, portalRef, ...rest } = props;
3609
- return (jsxs(Popover.Root, { ...rest, positioning: { ...rest.positioning, gutter: 4 }, children: [jsx(Popover.Trigger, { asChild: true, children: children }), jsx(Portal, { disabled: !portalled, container: portalRef, children: jsx(Popover.Positioner, { children: jsxs(Popover.Content, { width: "auto", px: "2", py: "1", textStyle: "xs", rounded: "sm", ref: ref, children: [showArrow && (jsx(Popover.Arrow, { children: jsx(Popover.ArrowTip, {}) })), content] }) }) })] }));
3610
- });
3611
- const InfoTip = React.forwardRef(function InfoTip(props, ref) {
3612
- const { children, ...rest } = props;
3613
- return (jsx(ToggleTip, { content: children, ...rest, ref: ref, children: jsx(IconButton, { variant: "ghost", "aria-label": "info", size: "2xs", colorPalette: "gray", children: jsx(HiOutlineInformationCircle, {}) }) }));
3614
- });
3615
-
3616
- const DataListRoot = DataList.Root;
3617
- const DataListItem = React.forwardRef(function DataListItem(props, ref) {
3618
- const { label, info, value, children, grow, ...rest } = props;
3619
- return (jsxs(DataList.Item, { ref: ref, ...rest, children: [jsxs(DataList.ItemLabel, { flex: grow ? "1" : undefined, children: [label, info && jsx(InfoTip, { children: info })] }), jsx(DataList.ItemValue, { flex: grow ? "1" : undefined, children: value }), children] }));
3620
- });
3581
+ const ArrayRenderer = ({ schema, column, prefix, }) => {
3582
+ const { gridRow, gridColumn = "1/span 12", required, items } = schema;
3583
+ const { translate } = useSchemaContext();
3584
+ const colLabel = `${prefix}${column}`;
3585
+ const isRequired = required?.some((columnId) => columnId === column);
3586
+ const { formState: { errors }, control, } = useFormContext();
3587
+ const { fields, append, prepend, remove, swap, move, insert } = useFieldArray({
3588
+ control, // control props comes from useForm (optional: if you are using FormContext)
3589
+ name: "test", // unique name for your Field Array
3590
+ });
3591
+ return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(`${colLabel}.fieldLabel`)}`, isRequired && jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxs(Flex, { flexFlow: "column", children: [jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsx(SchemaRenderer, { column: `${column}.${index}`,
3592
+ prefix: `${prefix}`,
3593
+ schema: items }, `form-${column}`) }), jsx(Flex, { justifyContent: "end", children: jsx(Button$1, { variant: "ghost", onClick: () => {
3594
+ remove(index);
3595
+ }, children: translate.t(`${colLabel}.remove`) }) })] }))), jsx(Flex, { children: jsx(Button$1, { onClick: () => {
3596
+ append({});
3597
+ }, children: translate.t(`${colLabel}.add`) }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
3598
+ };
3621
3599
 
3622
3600
  const Field = React.forwardRef(function Field(props, ref) {
3623
3601
  const { label, children, helperText, errorText, optionalText, ...rest } = props;
@@ -4330,16 +4308,21 @@ const NumberInputField = ({ schema, column, prefix, }) => {
4330
4308
  };
4331
4309
 
4332
4310
  const ObjectInput = ({ schema, column, prefix }) => {
4333
- const { properties } = schema;
4311
+ const { properties, gridRow, gridColumn = "1/span 12", required } = schema;
4312
+ const { translate } = useSchemaContext();
4313
+ const colLabel = `${prefix}${column}`;
4314
+ const isRequired = required?.some((columnId) => columnId === column);
4315
+ const { watch, formState: { errors }, setValue, control, } = useFormContext();
4334
4316
  if (properties === undefined) {
4335
4317
  throw new Error(`properties is undefined when using ObjectInput`);
4336
4318
  }
4337
- return (jsx(Fragment, { children: Object.keys(properties ?? {}).map((key) => {
4338
- console.log(properties, key, "gkor");
4339
- return (jsx(ColumnRenderer, { column: `${key}`,
4340
- prefix: `${prefix}${column}.`,
4341
- properties }, `form-${column}`));
4342
- }) }));
4319
+ return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(`${colLabel}.fieldLabel`)}`, isRequired && jsx("span", { children: "*" })] }), jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
4320
+ return (
4321
+ // @ts-expect-error find suitable types
4322
+ jsx(ColumnRenderer, { column: `${key}`,
4323
+ prefix: `${prefix}${column}.`,
4324
+ properties }, `form-${column}`));
4325
+ }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
4343
4326
  };
4344
4327
 
4345
4328
  const RecordInput = ({ column, schema, prefix }) => {
@@ -4498,18 +4481,11 @@ const TagPicker = ({ column, schema, prefix }) => {
4498
4481
  }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
4499
4482
  };
4500
4483
 
4501
- const ColumnRenderer = ({ column, properties, prefix, }) => {
4502
- if (properties === undefined) {
4503
- return jsx(Fragment, {});
4504
- }
4505
- console.log(`${column} does not exist when using ColumnRenderer`, { properties, column, prefix }, "fdpok");
4506
- const colSchema = properties[column];
4507
- if (colSchema === undefined) {
4508
- throw new Error(`${column} does not exist when using ColumnRenderer`);
4509
- }
4510
- const { type, variant, foreign_key, properties: innerProperties } = colSchema;
4484
+ const SchemaRenderer = ({ schema, prefix, column, }) => {
4485
+ const colSchema = schema;
4486
+ const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
4511
4487
  if (type === "string") {
4512
- if ((properties[column].enum ?? []).length > 0) {
4488
+ if ((schema.enum ?? []).length > 0) {
4513
4489
  return jsx(EnumPicker, { schema: colSchema, prefix, column });
4514
4490
  }
4515
4491
  if (variant === "id-picker") {
@@ -4544,6 +4520,9 @@ const ColumnRenderer = ({ column, properties, prefix, }) => {
4544
4520
  if (variant === "file-picker") {
4545
4521
  return jsx(FilePicker, { schema: colSchema, prefix, column });
4546
4522
  }
4523
+ if (items) {
4524
+ return jsx(ArrayRenderer, { schema: colSchema, prefix, column });
4525
+ }
4547
4526
  return jsx(Text, { children: `array ${column}` });
4548
4527
  }
4549
4528
  if (type === "null") {
@@ -4552,6 +4531,18 @@ const ColumnRenderer = ({ column, properties, prefix, }) => {
4552
4531
  return jsx(Text, { children: "missing type" });
4553
4532
  };
4554
4533
 
4534
+ const ColumnRenderer = ({ column, properties, prefix, }) => {
4535
+ if (properties === undefined) {
4536
+ return jsx(Fragment, {});
4537
+ }
4538
+ console.log(`${column} does not exist when using ColumnRenderer`, { properties, column, prefix }, "fdpok");
4539
+ const colSchema = properties[column];
4540
+ if (colSchema === undefined) {
4541
+ throw new Error(`${column} does not exist when using ColumnRenderer`);
4542
+ }
4543
+ return jsx(SchemaRenderer, { schema: colSchema, prefix, column });
4544
+ };
4545
+
4555
4546
  const idPickerSanityCheck = (column, foreign_key) => {
4556
4547
  if (!!foreign_key == false) {
4557
4548
  throw new Error(`The key foreign_key does not exist in properties of column ${column} when using id-picker.`);
@@ -4632,19 +4623,8 @@ const FormInternal = () => {
4632
4623
  return [...order, ...not_exist];
4633
4624
  };
4634
4625
  const ordered = renderOrder(order, Object.keys(properties));
4635
- const getDataListProps = (value) => {
4636
- if (value == undefined || value.length <= 0) {
4637
- return {
4638
- value: `<${translate.t("empty") ?? "Empty"}>`,
4639
- color: "gray.400",
4640
- };
4641
- }
4642
- return {
4643
- value: value,
4644
- };
4645
- };
4646
4626
  if (isSuccess) {
4647
- return (jsxs(Grid, { gap: 2, children: [jsx(Heading, { children: translate.t("title") }), jsxs(Alert.Root, { status: "success", children: [jsx(Alert.Indicator, {}), jsx(Alert.Title, { children: translate.t("submitSuccess") })] }), jsx(Flex, { justifyContent: 'end', children: jsx(Button, { onClick: () => {
4627
+ return (jsxs(Grid, { gap: 2, children: [jsx(Heading, { children: translate.t("title") }), jsxs(Alert.Root, { status: "success", children: [jsx(Alert.Indicator, {}), jsx(Alert.Title, { children: translate.t("submitSuccess") })] }), jsx(Flex, { justifyContent: "end", children: jsx(Button, { onClick: () => {
4648
4628
  setIsError(false);
4649
4629
  setIsSubmiting(false);
4650
4630
  setIsSuccess(false);
@@ -4654,101 +4634,23 @@ const FormInternal = () => {
4654
4634
  }, formNoValidate: true, children: translate.t("submitAgain") }) })] }));
4655
4635
  }
4656
4636
  if (isConfirming) {
4657
- return (jsxs(Grid, { gap: 2, children: [jsxs(Heading, { children: [" ", translate.t("title")] }), jsx(DataListRoot, { orientation: "horizontal", gap: 4, display: "grid", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
4658
- if (properties === undefined) {
4659
- return jsx(Fragment, {});
4660
- }
4661
- const key = column;
4662
- const values = properties[column];
4663
- const shouldIgnore = ignore.some((column) => {
4664
- return column == key;
4665
- });
4666
- if (shouldIgnore) {
4667
- return jsx(Fragment, {});
4668
- }
4669
- const { type, variant, gridColumn, gridRow, foreign_key } = values;
4670
- if (type === "string") {
4671
- if (variant === "id-picker") {
4672
- idPickerSanityCheck(column, foreign_key);
4673
- return (jsx(IdViewer, { value: (validatedData ?? {})[column], column,
4674
- dataListItemProps: { gridColumn, gridRow } }, `form-${key}`));
4675
- }
4676
- if (variant === "date-picker") {
4677
- const value = (validatedData ?? {})[column];
4678
- if (!!value === false) {
4679
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(undefined) }, `form-${key}`));
4680
- }
4681
- const date = dayjs(value).format("YYYY-MM-DD");
4682
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(date) }, `form-${key}`));
4683
- }
4684
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps((validatedData ?? {})[column]) }, `form-${key}`));
4685
- }
4686
- if (type === "object") {
4687
- const value = (validatedData ?? {})[column];
4688
- if (!!value === false) {
4689
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(undefined) }, `form-${key}`));
4690
- }
4691
- return (jsxs(Flex, { flexFlow: "column", gap: 2, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Text, { children: translate.t(`input.${column}`) }), jsx(DataListRoot, { orientation: "horizontal", padding: 4, borderColor: "gray.200", borderWidth: 1, borderRadius: 4, children: Object.entries(value).map(([key, value]) => {
4692
- return (jsx(DataListItem, { label: `${key}`, ...getDataListProps(value) }, `form-${column}-${key}`));
4693
- }) })] }, `form-${key}`));
4694
- }
4695
- if (type === "boolean") {
4696
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps((validatedData ?? {})[column]) }, `form-${key}`));
4697
- }
4698
- if (type === "number" || type === "integer") {
4699
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps((validatedData ?? {})[column]) }, `form-${key}`));
4700
- }
4701
- if (type === "array") {
4702
- if (variant === "tag-picker") {
4703
- const value = (validatedData ?? {})[column];
4704
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(JSON.stringify(value)) }, `form-${key}`));
4705
- }
4706
- if (variant === "file-picker") {
4707
- const fileNames = ((validatedData ?? {})[column] ?? []).map((file) => {
4708
- return file.name;
4709
- });
4710
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(JSON.stringify(fileNames)) }, `form-${key}`));
4711
- }
4712
- if (variant === "id-picker") {
4713
- const value = (validatedData ?? {})[column];
4714
- if (schema.properties == undefined) {
4715
- throw new Error("schema properties when using DatePicker");
4716
- }
4717
- const { foreign_key } = schema.properties[column];
4718
- if (foreign_key === undefined) {
4719
- throw new Error("foreign_key when variant is id-picker");
4720
- }
4721
- const { display_column } = foreign_key;
4722
- const mapped = value.map((item) => {
4723
- return idMap[item][display_column];
4724
- });
4725
- return (jsxs(Grid, { flexFlow: "column", gridColumn,
4726
- gridRow, children: [jsx(Text, { children: translate.t(`input.${column}`) }), jsx(RecordDisplay, { object: mapped })] }, `form-${key}`));
4727
- }
4728
- const objectString = JSON.stringify((validatedData ?? {})[column]);
4729
- return (jsx(DataListItem, { gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 4", label: `${translate.t(`${column}.fieldLabel`)}`, ...getDataListProps(objectString) }, `form-${key}`));
4730
- }
4731
- if (type === "null") {
4732
- return jsx(Fragment, { children: `null ${column}` });
4733
- }
4734
- return jsx(Fragment, { children: `unknown type ${column}` });
4735
- }) }), jsxs(Flex, { justifyContent: "end", gap: "2", children: [jsx(Button, { onClick: () => {
4637
+ return (jsxs(Grid, { gap: 2, children: [jsxs(Heading, { children: [" ", translate.t("title")] }), jsx(Grid, { gap: 4, gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: jsx(RecordDisplay, { object: validatedData ?? {}, boxProps: { gridColumn: "1/span12" } }) }), jsxs(Flex, { justifyContent: "end", gap: "2", children: [jsx(Button, { onClick: () => {
4736
4638
  setIsConfirming(false);
4737
4639
  }, variant: "subtle", children: translate.t("cancel") }), jsx(Button, { onClick: () => {
4738
4640
  onFormSubmit(validatedData);
4739
4641
  }, children: translate.t("confirm") })] }), isSubmiting && (jsx(Box, { pos: "absolute", inset: "0", bg: "bg/80", children: jsx(Center, { h: "full", children: jsx(Spinner, { color: "teal.500" }) }) })), isError && (jsx(Fragment, { children: jsx(Alert.Root, { status: "error", children: jsx(Alert.Title, { children: jsx(AccordionRoot, { collapsible: true, defaultValue: ["b"], children: jsxs(AccordionItem, { value: "b", children: [jsxs(AccordionItemTrigger, { children: [jsx(Alert.Indicator, {}), `${error}`] }), jsx(AccordionItemContent, { children: `${JSON.stringify(error)}` })] }) }) }) }) }))] }));
4740
4642
  }
4741
- return (jsxs(Fragment, { children: [jsxs(Grid, { gap: 2, children: [jsxs(Heading, { children: [" ", translate.t("title")] }), jsx(Grid, { gap: 4, gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
4742
- return (jsx(ColumnRenderer
4643
+ return (jsx(Fragment, { children: jsxs(Grid, { gap: "2", children: [jsxs(Heading, { children: [" ", translate.t("title")] }), jsx(Grid, { gap: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
4644
+ return (jsx(ColumnRenderer
4645
+ // @ts-expect-error find suitable types
4646
+ , {
4743
4647
  // @ts-expect-error find suitable types
4744
- , {
4745
- // @ts-expect-error find suitable types
4746
- properties: properties, prefix: ``, column }, `form-${column}`));
4747
- }) }), jsxs(Flex, { justifyContent: "end", gap: "2", children: [jsx(Button, { onClick: () => {
4748
- methods.reset();
4749
- }, variant: "subtle", children: translate.t("reset") }), jsx(Button, { onClick: () => {
4750
- methods.handleSubmit(onValid)();
4751
- }, formNoValidate: true, children: translate.t("submit") })] })] }), isError && (jsxs(Fragment, { children: ["isError", jsxs(Fragment, { children: [" ", `${error}`] })] }))] }));
4648
+ properties: properties, prefix: ``, column }, `form-${column}`));
4649
+ }) }), jsxs(Flex, { justifyContent: "end", gap: "2", children: [jsx(Button, { onClick: () => {
4650
+ methods.reset();
4651
+ }, variant: "subtle", children: translate.t("reset") }), jsx(Button, { onClick: () => {
4652
+ methods.handleSubmit(onValid)();
4653
+ }, formNoValidate: true, children: translate.t("submit") })] })] }) }));
4752
4654
  };
4753
4655
  const Form = ({ schema, idMap, setIdMap, form, serverUrl, translate, order = [], ignore = [], onSubmit = undefined, rowNumber = undefined, requestOptions = {}, }) => {
4754
4656
  const { properties } = schema;
@@ -0,0 +1,7 @@
1
+ import { CustomJSONSchema7 } from "./StringInputField";
2
+ export interface ArrayRendererProps {
3
+ column: string;
4
+ schema: CustomJSONSchema7;
5
+ prefix: string;
6
+ }
7
+ export declare const ArrayRenderer: ({ schema, column, prefix, }: ArrayRendererProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { CustomJSONSchema7 } from "./StringInputField";
2
+ export interface SchemaRendererProps {
3
+ column: string;
4
+ schema: CustomJSONSchema7;
5
+ prefix: string;
6
+ }
7
+ export declare const SchemaRenderer: ({ schema, prefix, column, }: SchemaRendererProps) => import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "11.0.0-beta.4",
3
+ "version": "11.0.0-beta.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",