@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
|
|
3628
|
-
const {
|
|
3629
|
-
|
|
3630
|
-
}
|
|
3631
|
-
const
|
|
3632
|
-
const {
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
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.
|
|
4358
|
-
|
|
4359
|
-
|
|
4360
|
-
|
|
4361
|
-
|
|
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
|
|
4522
|
-
|
|
4523
|
-
|
|
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 ((
|
|
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:
|
|
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(
|
|
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.
|
|
4762
|
-
|
|
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
|
-
|
|
4766
|
-
|
|
4767
|
-
|
|
4768
|
-
|
|
4769
|
-
|
|
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,
|
|
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
|
|
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
|
|
3608
|
-
const {
|
|
3609
|
-
|
|
3610
|
-
}
|
|
3611
|
-
const
|
|
3612
|
-
const {
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
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(
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
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
|
|
4502
|
-
|
|
4503
|
-
|
|
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 ((
|
|
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:
|
|
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(
|
|
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 (
|
|
4742
|
-
|
|
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
|
-
|
|
4746
|
-
|
|
4747
|
-
|
|
4748
|
-
|
|
4749
|
-
|
|
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;
|