@bsol-oss/react-datatable5 11.0.0-beta.2 → 11.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +6 -1
- package/dist/index.js +297 -298
- package/dist/index.mjs +298 -300
- package/dist/types/components/Form/Form.d.ts +5 -0
- package/dist/types/components/Form/components/BooleanPicker.d.ts +4 -1
- package/dist/types/components/Form/components/ColumnRenderer.d.ts +7 -0
- package/dist/types/components/Form/components/DatePicker.d.ts +4 -1
- package/dist/types/components/Form/components/EnumPicker.d.ts +4 -1
- package/dist/types/components/Form/components/FilePicker.d.ts +3 -1
- package/dist/types/components/Form/components/IdPicker.d.ts +4 -1
- package/dist/types/components/Form/components/NumberInputField.d.ts +4 -1
- package/dist/types/components/Form/components/ObjectInput.d.ts +5 -2
- package/dist/types/components/Form/components/RecordInput.d.ts +7 -0
- package/dist/types/components/Form/components/StringInputField.d.ts +4 -4
- 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 reactHookForm = require('react-hook-form');
|
|
32
31
|
var dayjs = require('dayjs');
|
|
32
|
+
var reactHookForm = require('react-hook-form');
|
|
33
33
|
var ti = require('react-icons/ti');
|
|
34
34
|
|
|
35
35
|
function _interopNamespaceDefault(e) {
|
|
@@ -3567,28 +3567,15 @@ const SchemaFormContext = React.createContext({
|
|
|
3567
3567
|
requestOptions: {},
|
|
3568
3568
|
});
|
|
3569
3569
|
|
|
3570
|
-
const
|
|
3570
|
+
const HoverCardContent = React__namespace.forwardRef(function HoverCardContent(props, ref) {
|
|
3571
3571
|
const { portalled = true, portalRef, ...rest } = props;
|
|
3572
|
-
return (jsxRuntime.jsx(react.Portal, { disabled: !portalled, container: portalRef, children: jsxRuntime.jsx(react.
|
|
3573
|
-
});
|
|
3574
|
-
React__namespace.forwardRef(function PopoverArrow(props, ref) {
|
|
3575
|
-
return (jsxRuntime.jsx(react.Popover.Arrow, { ...props, ref: ref, children: jsxRuntime.jsx(react.Popover.ArrowTip, {}) }));
|
|
3576
|
-
});
|
|
3577
|
-
React__namespace.forwardRef(function PopoverCloseTrigger(props, ref) {
|
|
3578
|
-
return (jsxRuntime.jsx(react.Popover.CloseTrigger, { position: "absolute", top: "1", insetEnd: "1", ...props, asChild: true, ref: ref, children: jsxRuntime.jsx(CloseButton, { size: "sm" }) }));
|
|
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 }) }) }));
|
|
3579
3573
|
});
|
|
3580
|
-
const
|
|
3581
|
-
react.
|
|
3582
|
-
react.Popover.Footer;
|
|
3583
|
-
react.Popover.Header;
|
|
3584
|
-
const PopoverRoot = react.Popover.Root;
|
|
3585
|
-
const PopoverBody = react.Popover.Body;
|
|
3586
|
-
const PopoverTrigger = react.Popover.Trigger;
|
|
3587
|
-
|
|
3588
|
-
const Field = React__namespace.forwardRef(function Field(props, ref) {
|
|
3589
|
-
const { label, children, helperText, errorText, optionalText, ...rest } = props;
|
|
3590
|
-
return (jsxRuntime.jsxs(react.Field.Root, { ref: ref, ...rest, children: [label && (jsxRuntime.jsxs(react.Field.Label, { children: [label, jsxRuntime.jsx(react.Field.RequiredIndicator, { fallback: optionalText })] })), children, helperText && (jsxRuntime.jsx(react.Field.HelperText, { children: helperText })), errorText && (jsxRuntime.jsx(react.Field.ErrorText, { children: errorText }))] }));
|
|
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, {}) }));
|
|
3591
3576
|
});
|
|
3577
|
+
const HoverCardRoot = react.HoverCard.Root;
|
|
3578
|
+
const HoverCardTrigger = react.HoverCard.Trigger;
|
|
3592
3579
|
|
|
3593
3580
|
const useSchemaContext = () => {
|
|
3594
3581
|
const { schema, serverUrl, requestUrl, order, ignore, onSubmit, rowNumber, idMap, setIdMap, translate, requestOptions, } = React.useContext(SchemaFormContext);
|
|
@@ -3607,148 +3594,6 @@ const useSchemaContext = () => {
|
|
|
3607
3594
|
};
|
|
3608
3595
|
};
|
|
3609
3596
|
|
|
3610
|
-
const getTableData = async ({ serverUrl, in_table, searching = "", where = [], limit = 10, offset = 0, }) => {
|
|
3611
|
-
if (serverUrl === undefined || serverUrl.length == 0) {
|
|
3612
|
-
throw new Error("The serverUrl is missing");
|
|
3613
|
-
}
|
|
3614
|
-
if (in_table === undefined || in_table.length == 0) {
|
|
3615
|
-
throw new Error("The in_table is missing");
|
|
3616
|
-
}
|
|
3617
|
-
const options = {
|
|
3618
|
-
method: "GET",
|
|
3619
|
-
url: `${serverUrl}/api/g/${in_table}`,
|
|
3620
|
-
params: {
|
|
3621
|
-
searching,
|
|
3622
|
-
where,
|
|
3623
|
-
limit,
|
|
3624
|
-
offset
|
|
3625
|
-
},
|
|
3626
|
-
};
|
|
3627
|
-
try {
|
|
3628
|
-
const { data } = await axios.request(options);
|
|
3629
|
-
console.log(data);
|
|
3630
|
-
return data;
|
|
3631
|
-
}
|
|
3632
|
-
catch (error) {
|
|
3633
|
-
console.error(error);
|
|
3634
|
-
throw error;
|
|
3635
|
-
}
|
|
3636
|
-
};
|
|
3637
|
-
|
|
3638
|
-
const IdPicker = ({ column, isMultiple = false }) => {
|
|
3639
|
-
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
3640
|
-
const { schema, serverUrl, idMap, setIdMap, translate } = useSchemaContext();
|
|
3641
|
-
const { required } = schema;
|
|
3642
|
-
const isRequired = required?.some((columnId) => columnId === column);
|
|
3643
|
-
if (schema.properties == undefined) {
|
|
3644
|
-
throw new Error("schema properties is undefined when using DatePicker");
|
|
3645
|
-
}
|
|
3646
|
-
const { gridColumn, gridRow, renderDisplay, foreign_key } = schema.properties[column];
|
|
3647
|
-
const { table, column: column_ref, display_column, } = foreign_key;
|
|
3648
|
-
const [searchText, setSearchText] = React.useState();
|
|
3649
|
-
const [limit, setLimit] = React.useState(10);
|
|
3650
|
-
const [openSearchResult, setOpenSearchResult] = React.useState();
|
|
3651
|
-
const [page, setPage] = React.useState(0);
|
|
3652
|
-
const ref = React.useRef(null);
|
|
3653
|
-
const selectedIds = watch(column) ?? [];
|
|
3654
|
-
const query = reactQuery.useQuery({
|
|
3655
|
-
queryKey: [`idpicker`, { column, searchText, limit, page }],
|
|
3656
|
-
queryFn: async () => {
|
|
3657
|
-
const data = await getTableData({
|
|
3658
|
-
serverUrl,
|
|
3659
|
-
searching: searchText ?? "",
|
|
3660
|
-
in_table: table,
|
|
3661
|
-
limit: limit,
|
|
3662
|
-
offset: page * 10,
|
|
3663
|
-
});
|
|
3664
|
-
const newMap = Object.fromEntries((data ?? { data: [] }).data.map((item) => {
|
|
3665
|
-
return [
|
|
3666
|
-
item[column_ref],
|
|
3667
|
-
{
|
|
3668
|
-
...item,
|
|
3669
|
-
},
|
|
3670
|
-
];
|
|
3671
|
-
}));
|
|
3672
|
-
setIdMap((state) => {
|
|
3673
|
-
return { ...state, ...newMap };
|
|
3674
|
-
});
|
|
3675
|
-
return data;
|
|
3676
|
-
},
|
|
3677
|
-
enabled: (searchText ?? "")?.length > 0,
|
|
3678
|
-
staleTime: 300000,
|
|
3679
|
-
});
|
|
3680
|
-
const { isLoading, isFetching, data, isPending, isError } = query;
|
|
3681
|
-
const dataList = data?.data ?? [];
|
|
3682
|
-
const count = data?.count ?? 0;
|
|
3683
|
-
const isDirty = (searchText?.length ?? 0) > 0;
|
|
3684
|
-
const onSearchChange = async (event) => {
|
|
3685
|
-
setSearchText(event.target.value);
|
|
3686
|
-
setPage(0);
|
|
3687
|
-
setLimit(10);
|
|
3688
|
-
};
|
|
3689
|
-
const watchId = watch(column);
|
|
3690
|
-
const watchIds = (watch(column) ?? []);
|
|
3691
|
-
const getPickedValue = () => {
|
|
3692
|
-
if (Object.keys(idMap).length <= 0) {
|
|
3693
|
-
return "";
|
|
3694
|
-
}
|
|
3695
|
-
const record = idMap[watchId];
|
|
3696
|
-
if (record === undefined) {
|
|
3697
|
-
return "";
|
|
3698
|
-
}
|
|
3699
|
-
return record[display_column];
|
|
3700
|
-
};
|
|
3701
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3702
|
-
gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [selectedIds.map((id) => {
|
|
3703
|
-
const item = idMap[id];
|
|
3704
|
-
if (item === undefined) {
|
|
3705
|
-
return jsxRuntime.jsx(react.Text, { children: "undefined" }, id);
|
|
3706
|
-
}
|
|
3707
|
-
return (jsxRuntime.jsx(Tag, { closable: true, onClick: () => {
|
|
3708
|
-
setValue(column, watchIds.filter((id) => id != item[column_ref]));
|
|
3709
|
-
}, children: !!renderDisplay === true
|
|
3710
|
-
? renderDisplay(item)
|
|
3711
|
-
: item[display_column] }, id));
|
|
3712
|
-
}), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
|
|
3713
|
-
setOpenSearchResult(true);
|
|
3714
|
-
}, children: "Add" })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
|
|
3715
|
-
setOpenSearchResult(true);
|
|
3716
|
-
}, 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(`${column}.typeToSearch`), onChange: (event) => {
|
|
3717
|
-
onSearchChange(event);
|
|
3718
|
-
setOpenSearchResult(true);
|
|
3719
|
-
}, 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(`${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:
|
|
3720
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3721
|
-
dataList.map((item) => {
|
|
3722
|
-
const selected = isMultiple
|
|
3723
|
-
? watchIds.some((id) => item[column_ref] === id)
|
|
3724
|
-
: watchId === item[column_ref];
|
|
3725
|
-
return (jsxRuntime.jsx(react.Box, { cursor: "pointer", onClick: () => {
|
|
3726
|
-
if (!isMultiple) {
|
|
3727
|
-
setOpenSearchResult(false);
|
|
3728
|
-
setValue(column, item[column_ref]);
|
|
3729
|
-
return;
|
|
3730
|
-
}
|
|
3731
|
-
const newSet = new Set([
|
|
3732
|
-
...(watchIds ?? []),
|
|
3733
|
-
item[column_ref],
|
|
3734
|
-
]);
|
|
3735
|
-
setValue(column, [...newSet]);
|
|
3736
|
-
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
|
|
3737
|
-
? renderDisplay(item)
|
|
3738
|
-
: item[display_column] }, item[column_ref]));
|
|
3739
|
-
}) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(react.Text, { children: translate.t(`${column}.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[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
|
|
3740
|
-
};
|
|
3741
|
-
|
|
3742
|
-
const HoverCardContent = React__namespace.forwardRef(function HoverCardContent(props, ref) {
|
|
3743
|
-
const { portalled = true, portalRef, ...rest } = props;
|
|
3744
|
-
return (jsxRuntime.jsx(react.Portal, { disabled: !portalled, container: portalRef, children: jsxRuntime.jsx(react.HoverCard.Positioner, { children: jsxRuntime.jsx(react.HoverCard.Content, { ref: ref, ...rest }) }) }));
|
|
3745
|
-
});
|
|
3746
|
-
const HoverCardArrow = React__namespace.forwardRef(function HoverCardArrow(props, ref) {
|
|
3747
|
-
return (jsxRuntime.jsx(react.HoverCard.Arrow, { ref: ref, ...props, children: jsxRuntime.jsx(react.HoverCard.ArrowTip, {}) }));
|
|
3748
|
-
});
|
|
3749
|
-
const HoverCardRoot = react.HoverCard.Root;
|
|
3750
|
-
const HoverCardTrigger = react.HoverCard.Trigger;
|
|
3751
|
-
|
|
3752
3597
|
const IdViewer = ({ value, column }) => {
|
|
3753
3598
|
const { schema, idMap, translate } = useSchemaContext();
|
|
3754
3599
|
if (schema.properties == undefined) {
|
|
@@ -3765,38 +3610,6 @@ const IdViewer = ({ value, column }) => {
|
|
|
3765
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] })] })] })] }));
|
|
3766
3611
|
};
|
|
3767
3612
|
|
|
3768
|
-
const NumberInputRoot = React__namespace.forwardRef(function NumberInput(props, ref) {
|
|
3769
|
-
const { children, ...rest } = props;
|
|
3770
|
-
return (jsxRuntime.jsxs(react.NumberInput.Root, { ref: ref, variant: "outline", ...rest, children: [children, jsxRuntime.jsxs(react.NumberInput.Control, { children: [jsxRuntime.jsx(react.NumberInput.IncrementTrigger, {}), jsxRuntime.jsx(react.NumberInput.DecrementTrigger, {})] })] }));
|
|
3771
|
-
});
|
|
3772
|
-
const NumberInputField$1 = react.NumberInput.Input;
|
|
3773
|
-
react.NumberInput.Scrubber;
|
|
3774
|
-
react.NumberInput.Label;
|
|
3775
|
-
|
|
3776
|
-
const NumberInputField = ({ column }) => {
|
|
3777
|
-
const { register, formState: { errors }, } = reactHookForm.useFormContext();
|
|
3778
|
-
const { schema, translate } = useSchemaContext();
|
|
3779
|
-
const { required } = schema;
|
|
3780
|
-
const isRequired = required?.some((columnId) => columnId === column);
|
|
3781
|
-
if (schema.properties == undefined) {
|
|
3782
|
-
throw new Error("schema properties when using String Input Field");
|
|
3783
|
-
}
|
|
3784
|
-
const { gridColumn, gridRow } = schema.properties[column];
|
|
3785
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(NumberInputRoot, { children: jsxRuntime.jsx(NumberInputField$1, { ...register(column, { required: isRequired }) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
|
|
3786
|
-
};
|
|
3787
|
-
|
|
3788
|
-
const StringInputField = ({ column }) => {
|
|
3789
|
-
const { register, formState: { errors }, } = reactHookForm.useFormContext();
|
|
3790
|
-
const { schema, translate } = useSchemaContext();
|
|
3791
|
-
const { required } = schema;
|
|
3792
|
-
const isRequired = required?.some((columnId) => columnId === column);
|
|
3793
|
-
if (schema.properties == undefined) {
|
|
3794
|
-
throw new Error("schema properties when using String Input Field");
|
|
3795
|
-
}
|
|
3796
|
-
const { gridColumn, gridRow } = schema.properties[column];
|
|
3797
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Input, { ...register(column, { required: isRequired }), autoComplete: "off" }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }) }));
|
|
3798
|
-
};
|
|
3799
|
-
|
|
3800
3613
|
const clearEmptyString = (object) => {
|
|
3801
3614
|
return Object.fromEntries(Object.entries(object).filter(([, value]) => value !== ""));
|
|
3802
3615
|
};
|
|
@@ -3826,20 +3639,22 @@ const DataListItem = React__namespace.forwardRef(function DataListItem(props, re
|
|
|
3826
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] }));
|
|
3827
3640
|
});
|
|
3828
3641
|
|
|
3829
|
-
const
|
|
3642
|
+
const Field = React__namespace.forwardRef(function Field(props, ref) {
|
|
3643
|
+
const { label, children, helperText, errorText, optionalText, ...rest } = props;
|
|
3644
|
+
return (jsxRuntime.jsxs(react.Field.Root, { ref: ref, ...rest, children: [label && (jsxRuntime.jsxs(react.Field.Label, { children: [label, jsxRuntime.jsx(react.Field.RequiredIndicator, { fallback: optionalText })] })), children, helperText && (jsxRuntime.jsx(react.Field.HelperText, { children: helperText })), errorText && (jsxRuntime.jsx(react.Field.ErrorText, { children: errorText }))] }));
|
|
3645
|
+
});
|
|
3646
|
+
|
|
3647
|
+
const BooleanPicker = ({ schema, column, prefix }) => {
|
|
3830
3648
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
3831
|
-
const {
|
|
3832
|
-
const { required } = schema;
|
|
3649
|
+
const { translate } = useSchemaContext();
|
|
3650
|
+
const { required, gridColumn, gridRow } = schema;
|
|
3833
3651
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3834
|
-
const
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
}
|
|
3838
|
-
const { gridColumn, gridRow } = schema.properties[column];
|
|
3839
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3652
|
+
const colLabel = `${prefix}${column}`;
|
|
3653
|
+
const value = watch(colLabel);
|
|
3654
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3840
3655
|
gridRow, children: [jsxRuntime.jsx(CheckboxCard, { checked: value, variant: "surface", onSelect: () => {
|
|
3841
|
-
setValue(
|
|
3842
|
-
} }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${
|
|
3656
|
+
setValue(colLabel, !value);
|
|
3657
|
+
} }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${colLabel}.fieldRequired`) }))] }));
|
|
3843
3658
|
};
|
|
3844
3659
|
|
|
3845
3660
|
const monthNamesShort = [
|
|
@@ -3911,18 +3726,33 @@ let DatePicker$1 = class DatePicker extends React.Component {
|
|
|
3911
3726
|
}
|
|
3912
3727
|
};
|
|
3913
3728
|
|
|
3914
|
-
const
|
|
3729
|
+
const PopoverContent = React__namespace.forwardRef(function PopoverContent(props, ref) {
|
|
3730
|
+
const { portalled = true, portalRef, ...rest } = props;
|
|
3731
|
+
return (jsxRuntime.jsx(react.Portal, { disabled: !portalled, container: portalRef, children: jsxRuntime.jsx(react.Popover.Positioner, { children: jsxRuntime.jsx(react.Popover.Content, { ref: ref, ...rest }) }) }));
|
|
3732
|
+
});
|
|
3733
|
+
React__namespace.forwardRef(function PopoverArrow(props, ref) {
|
|
3734
|
+
return (jsxRuntime.jsx(react.Popover.Arrow, { ...props, ref: ref, children: jsxRuntime.jsx(react.Popover.ArrowTip, {}) }));
|
|
3735
|
+
});
|
|
3736
|
+
React__namespace.forwardRef(function PopoverCloseTrigger(props, ref) {
|
|
3737
|
+
return (jsxRuntime.jsx(react.Popover.CloseTrigger, { position: "absolute", top: "1", insetEnd: "1", ...props, asChild: true, ref: ref, children: jsxRuntime.jsx(CloseButton, { size: "sm" }) }));
|
|
3738
|
+
});
|
|
3739
|
+
const PopoverTitle = react.Popover.Title;
|
|
3740
|
+
react.Popover.Description;
|
|
3741
|
+
react.Popover.Footer;
|
|
3742
|
+
react.Popover.Header;
|
|
3743
|
+
const PopoverRoot = react.Popover.Root;
|
|
3744
|
+
const PopoverBody = react.Popover.Body;
|
|
3745
|
+
const PopoverTrigger = react.Popover.Trigger;
|
|
3746
|
+
|
|
3747
|
+
const DatePicker = ({ column, schema, prefix }) => {
|
|
3915
3748
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
3916
|
-
const {
|
|
3917
|
-
const { required } = schema;
|
|
3749
|
+
const { translate } = useSchemaContext();
|
|
3750
|
+
const { required, gridColumn, gridRow } = schema;
|
|
3918
3751
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3752
|
+
const colLabel = `${prefix}${column}`;
|
|
3919
3753
|
const [open, setOpen] = React.useState(false);
|
|
3920
|
-
const selectedDate = watch(
|
|
3921
|
-
|
|
3922
|
-
throw new Error("schema properties when using DatePicker");
|
|
3923
|
-
}
|
|
3924
|
-
const { gridColumn, gridRow } = schema.properties[column];
|
|
3925
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3754
|
+
const selectedDate = watch(colLabel);
|
|
3755
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3926
3756
|
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: () => {
|
|
3927
3757
|
setOpen(true);
|
|
3928
3758
|
}, children: selectedDate !== undefined ? selectedDate : "" }) }), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { children: [jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(DatePicker$1
|
|
@@ -3931,7 +3761,7 @@ const DatePicker = ({ column }) => {
|
|
|
3931
3761
|
// @ts-expect-error TODO: find appropriate types
|
|
3932
3762
|
selected: new Date(selectedDate),
|
|
3933
3763
|
// @ts-expect-error TODO: find appropriate types
|
|
3934
|
-
onDateSelected: ({
|
|
3764
|
+
onDateSelected: ({ date }) => {
|
|
3935
3765
|
setValue(column, dayjs(date).format("YYYY-MM-DD"));
|
|
3936
3766
|
setOpen(false);
|
|
3937
3767
|
} })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
|
|
@@ -3947,29 +3777,26 @@ function filterArray(array, searchTerm) {
|
|
|
3947
3777
|
});
|
|
3948
3778
|
}
|
|
3949
3779
|
|
|
3950
|
-
const EnumPicker = ({ column, isMultiple = false }) => {
|
|
3780
|
+
const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
3951
3781
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
3952
|
-
const {
|
|
3782
|
+
const { translate } = useSchemaContext();
|
|
3953
3783
|
const { required } = schema;
|
|
3954
3784
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3955
|
-
|
|
3956
|
-
throw new Error("schema properties when using DatePicker");
|
|
3957
|
-
}
|
|
3958
|
-
const { gridColumn, gridRow, renderDisplay } = schema.properties[column];
|
|
3785
|
+
const { gridColumn, gridRow, renderDisplay } = schema;
|
|
3959
3786
|
const [searchText, setSearchText] = React.useState();
|
|
3960
3787
|
const [limit, setLimit] = React.useState(10);
|
|
3961
3788
|
const [openSearchResult, setOpenSearchResult] = React.useState();
|
|
3962
3789
|
const ref = React.useRef(null);
|
|
3963
3790
|
const watchEnum = watch(column);
|
|
3964
3791
|
const watchEnums = (watch(column) ?? []);
|
|
3965
|
-
const
|
|
3966
|
-
const
|
|
3967
|
-
const count = properties.enum?.length ?? 0;
|
|
3792
|
+
const dataList = schema.enum ?? [];
|
|
3793
|
+
const count = schema.enum?.length ?? 0;
|
|
3968
3794
|
const isDirty = (searchText?.length ?? 0) > 0;
|
|
3969
3795
|
const onSearchChange = async (event) => {
|
|
3970
3796
|
setSearchText(event.target.value);
|
|
3971
3797
|
setLimit(10);
|
|
3972
3798
|
};
|
|
3799
|
+
const col = `${prefix}${column}`;
|
|
3973
3800
|
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3974
3801
|
gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
|
|
3975
3802
|
const item = enumValue;
|
|
@@ -3999,8 +3826,10 @@ const EnumPicker = ({ column, isMultiple = false }) => {
|
|
|
3999
3826
|
}
|
|
4000
3827
|
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
4001
3828
|
setValue(column, [...newSet]);
|
|
4002
|
-
}, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
|
|
4003
|
-
|
|
3829
|
+
}, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
|
|
3830
|
+
? 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`) }))] }));
|
|
4004
3833
|
};
|
|
4005
3834
|
|
|
4006
3835
|
function isEnteringWindow(_ref) {
|
|
@@ -4355,41 +4184,193 @@ const FileDropzone = ({ children = undefined, gridProps = {}, onDrop = () => { }
|
|
|
4355
4184
|
return (jsxRuntime.jsxs(react.Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "gray.400", alignContent: "center", justifyContent: "center", borderWidth: 1, borderRadius: 4, ...gridProps, children: [children, !!children === false && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(react.Flex, { children: placeholder }), jsxRuntime.jsx(react.Input, { type: "file", multiple: true, style: { display: "none" }, ref: fileInput, onChange: handleChange })] }))] }));
|
|
4356
4185
|
};
|
|
4357
4186
|
|
|
4358
|
-
const FilePicker = ({ column }) => {
|
|
4187
|
+
const FilePicker = ({ column, schema, prefix }) => {
|
|
4359
4188
|
const { setValue, formState: { errors }, watch, } = reactHookForm.useFormContext();
|
|
4360
|
-
const {
|
|
4361
|
-
const { required } = schema;
|
|
4189
|
+
const { translate } = useSchemaContext();
|
|
4190
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4362
4191
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4363
|
-
if (schema.properties == undefined) {
|
|
4364
|
-
throw new Error("schema properties when using String Input Field");
|
|
4365
|
-
}
|
|
4366
|
-
const { gridColumn, gridRow } = schema.properties[column];
|
|
4367
4192
|
const currentFiles = (watch(column) ?? []);
|
|
4368
|
-
|
|
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 }) => {
|
|
4369
4195
|
const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
|
|
4370
|
-
setValue(
|
|
4371
|
-
}, placeholder: translate.t(`${
|
|
4196
|
+
setValue(col, [...currentFiles, ...newFiles]);
|
|
4197
|
+
}, placeholder: translate.t(`${col}.fileDropzone`) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
4372
4198
|
return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
|
|
4373
4199
|
setValue(column, currentFiles.filter(({ name }) => {
|
|
4374
4200
|
return name !== file.name;
|
|
4375
4201
|
}));
|
|
4376
|
-
}, display: "flex", flexFlow:
|
|
4377
|
-
}) }), errors[`${
|
|
4202
|
+
}, 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`) }))] }));
|
|
4204
|
+
};
|
|
4205
|
+
|
|
4206
|
+
const getTableData = async ({ serverUrl, in_table, searching = "", where = [], limit = 10, offset = 0, }) => {
|
|
4207
|
+
if (serverUrl === undefined || serverUrl.length == 0) {
|
|
4208
|
+
throw new Error("The serverUrl is missing");
|
|
4209
|
+
}
|
|
4210
|
+
if (in_table === undefined || in_table.length == 0) {
|
|
4211
|
+
throw new Error("The in_table is missing");
|
|
4212
|
+
}
|
|
4213
|
+
const options = {
|
|
4214
|
+
method: "GET",
|
|
4215
|
+
url: `${serverUrl}/api/g/${in_table}`,
|
|
4216
|
+
params: {
|
|
4217
|
+
searching,
|
|
4218
|
+
where,
|
|
4219
|
+
limit,
|
|
4220
|
+
offset
|
|
4221
|
+
},
|
|
4222
|
+
};
|
|
4223
|
+
try {
|
|
4224
|
+
const { data } = await axios.request(options);
|
|
4225
|
+
console.log(data);
|
|
4226
|
+
return data;
|
|
4227
|
+
}
|
|
4228
|
+
catch (error) {
|
|
4229
|
+
console.error(error);
|
|
4230
|
+
throw error;
|
|
4231
|
+
}
|
|
4232
|
+
};
|
|
4233
|
+
|
|
4234
|
+
const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
4235
|
+
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
4236
|
+
const { serverUrl, idMap, setIdMap, translate } = useSchemaContext();
|
|
4237
|
+
const { required, gridColumn, gridRow, renderDisplay, foreign_key } = schema;
|
|
4238
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4239
|
+
const { table, column: column_ref, display_column, } = foreign_key;
|
|
4240
|
+
const [searchText, setSearchText] = React.useState();
|
|
4241
|
+
const [limit, setLimit] = React.useState(10);
|
|
4242
|
+
const [openSearchResult, setOpenSearchResult] = React.useState();
|
|
4243
|
+
const [page, setPage] = React.useState(0);
|
|
4244
|
+
const ref = React.useRef(null);
|
|
4245
|
+
const selectedIds = watch(column) ?? [];
|
|
4246
|
+
const colLabel = `${prefix}${column}`;
|
|
4247
|
+
const query = reactQuery.useQuery({
|
|
4248
|
+
queryKey: [`idpicker`, { column, searchText, limit, page }],
|
|
4249
|
+
queryFn: async () => {
|
|
4250
|
+
const data = await getTableData({
|
|
4251
|
+
serverUrl,
|
|
4252
|
+
searching: searchText ?? "",
|
|
4253
|
+
in_table: table,
|
|
4254
|
+
limit: limit,
|
|
4255
|
+
offset: page * 10,
|
|
4256
|
+
});
|
|
4257
|
+
const newMap = Object.fromEntries((data ?? { data: [] }).data.map((item) => {
|
|
4258
|
+
return [
|
|
4259
|
+
item[column_ref],
|
|
4260
|
+
{
|
|
4261
|
+
...item,
|
|
4262
|
+
},
|
|
4263
|
+
];
|
|
4264
|
+
}));
|
|
4265
|
+
setIdMap((state) => {
|
|
4266
|
+
return { ...state, ...newMap };
|
|
4267
|
+
});
|
|
4268
|
+
return data;
|
|
4269
|
+
},
|
|
4270
|
+
enabled: (searchText ?? "")?.length > 0,
|
|
4271
|
+
staleTime: 300000,
|
|
4272
|
+
});
|
|
4273
|
+
const { isLoading, isFetching, data, isPending, isError } = query;
|
|
4274
|
+
const dataList = data?.data ?? [];
|
|
4275
|
+
const count = data?.count ?? 0;
|
|
4276
|
+
const isDirty = (searchText?.length ?? 0) > 0;
|
|
4277
|
+
const onSearchChange = async (event) => {
|
|
4278
|
+
setSearchText(event.target.value);
|
|
4279
|
+
setPage(0);
|
|
4280
|
+
setLimit(10);
|
|
4281
|
+
};
|
|
4282
|
+
const watchId = watch(column);
|
|
4283
|
+
const watchIds = (watch(column) ?? []);
|
|
4284
|
+
const getPickedValue = () => {
|
|
4285
|
+
if (Object.keys(idMap).length <= 0) {
|
|
4286
|
+
return "";
|
|
4287
|
+
}
|
|
4288
|
+
const record = idMap[watchId];
|
|
4289
|
+
if (record === undefined) {
|
|
4290
|
+
return "";
|
|
4291
|
+
}
|
|
4292
|
+
return record[display_column];
|
|
4293
|
+
};
|
|
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) => {
|
|
4296
|
+
const item = idMap[id];
|
|
4297
|
+
if (item === undefined) {
|
|
4298
|
+
return (jsxRuntime.jsxs(react.Text, { children: [" ", translate.t(`${colLabel}.undefined`)] }, id));
|
|
4299
|
+
}
|
|
4300
|
+
return (jsxRuntime.jsx(Tag, { closable: true, onClick: () => {
|
|
4301
|
+
setValue(column, watchIds.filter((id) => id != item[column_ref]));
|
|
4302
|
+
}, children: !!renderDisplay === true
|
|
4303
|
+
? renderDisplay(item)
|
|
4304
|
+
: item[display_column] }, id));
|
|
4305
|
+
}), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
|
|
4306
|
+
setOpenSearchResult(true);
|
|
4307
|
+
}, children: translate.t(`${colLabel}.addMore`) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
|
|
4308
|
+
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) => {
|
|
4310
|
+
onSearchChange(event);
|
|
4311
|
+
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:
|
|
4313
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4314
|
+
dataList.map((item) => {
|
|
4315
|
+
const selected = isMultiple
|
|
4316
|
+
? watchIds.some((id) => item[column_ref] === id)
|
|
4317
|
+
: watchId === item[column_ref];
|
|
4318
|
+
return (jsxRuntime.jsx(react.Box, { cursor: "pointer", onClick: () => {
|
|
4319
|
+
if (!isMultiple) {
|
|
4320
|
+
setOpenSearchResult(false);
|
|
4321
|
+
setValue(colLabel, item[column_ref]);
|
|
4322
|
+
return;
|
|
4323
|
+
}
|
|
4324
|
+
const newSet = new Set([
|
|
4325
|
+
...(watchIds ?? []),
|
|
4326
|
+
item[column_ref],
|
|
4327
|
+
]);
|
|
4328
|
+
setValue(column, [...newSet]);
|
|
4329
|
+
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected ? { color: "gray.400/50" } : {}), children: !!renderDisplay === true
|
|
4330
|
+
? renderDisplay(item)
|
|
4331
|
+
: 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`) }))] }));
|
|
4378
4333
|
};
|
|
4379
4334
|
|
|
4380
|
-
const
|
|
4335
|
+
const NumberInputRoot = React__namespace.forwardRef(function NumberInput(props, ref) {
|
|
4336
|
+
const { children, ...rest } = props;
|
|
4337
|
+
return (jsxRuntime.jsxs(react.NumberInput.Root, { ref: ref, variant: "outline", ...rest, children: [children, jsxRuntime.jsxs(react.NumberInput.Control, { children: [jsxRuntime.jsx(react.NumberInput.IncrementTrigger, {}), jsxRuntime.jsx(react.NumberInput.DecrementTrigger, {})] })] }));
|
|
4338
|
+
});
|
|
4339
|
+
const NumberInputField$1 = react.NumberInput.Input;
|
|
4340
|
+
react.NumberInput.Scrubber;
|
|
4341
|
+
react.NumberInput.Label;
|
|
4342
|
+
|
|
4343
|
+
const NumberInputField = ({ schema, column, prefix, }) => {
|
|
4344
|
+
const { register, formState: { errors }, } = reactHookForm.useFormContext();
|
|
4345
|
+
const { translate } = useSchemaContext();
|
|
4346
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4347
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4348
|
+
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`) }))] }));
|
|
4350
|
+
};
|
|
4351
|
+
|
|
4352
|
+
const ObjectInput = ({ schema, column, prefix }) => {
|
|
4353
|
+
const { properties } = schema;
|
|
4354
|
+
if (properties === undefined) {
|
|
4355
|
+
throw new Error(`properties is undefined when using ObjectInput`);
|
|
4356
|
+
}
|
|
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
|
+
}) }));
|
|
4363
|
+
};
|
|
4364
|
+
|
|
4365
|
+
const RecordInput = ({ column, schema, prefix }) => {
|
|
4381
4366
|
const { formState: { errors }, setValue, getValues, } = reactHookForm.useFormContext();
|
|
4382
|
-
const {
|
|
4383
|
-
const { required } = schema;
|
|
4367
|
+
const { translate } = useSchemaContext();
|
|
4368
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4384
4369
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4385
4370
|
const entries = Object.entries(getValues(column) ?? {});
|
|
4386
4371
|
const [showNewEntries, setShowNewEntries] = React.useState(false);
|
|
4387
4372
|
const [newKey, setNewKey] = React.useState();
|
|
4388
4373
|
const [newValue, setNewValue] = React.useState();
|
|
4389
|
-
if (schema.properties == undefined) {
|
|
4390
|
-
throw new Error("schema properties when using DatePicker");
|
|
4391
|
-
}
|
|
4392
|
-
const { gridColumn, gridRow } = schema.properties[column];
|
|
4393
4374
|
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.fieldLabel`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
|
|
4394
4375
|
return (jsxRuntime.jsxs(react.Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsxRuntime.jsx(react.Input, { value: key, onChange: (e) => {
|
|
4395
4376
|
const filtered = entries.filter(([target]) => {
|
|
@@ -4433,6 +4414,15 @@ const ObjectInput = ({ column }) => {
|
|
|
4433
4414
|
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.fieldRequired`) }))] }));
|
|
4434
4415
|
};
|
|
4435
4416
|
|
|
4417
|
+
const StringInputField = ({ column, schema, prefix, }) => {
|
|
4418
|
+
const { register, formState: { errors }, } = reactHookForm.useFormContext();
|
|
4419
|
+
const { translate } = useSchemaContext();
|
|
4420
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4421
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4422
|
+
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`) }))] }) }));
|
|
4424
|
+
};
|
|
4425
|
+
|
|
4436
4426
|
const RadioCardItem = React__namespace.forwardRef(function RadioCardItem(props, ref) {
|
|
4437
4427
|
const { inputProps, label, description, addon, icon, indicator = jsxRuntime.jsx(react.RadioCard.ItemIndicator, {}), indicatorPlacement = "end", ...rest } = props;
|
|
4438
4428
|
const hasContent = label || description || icon;
|
|
@@ -4528,6 +4518,62 @@ const TagPicker = ({ column }) => {
|
|
|
4528
4518
|
}), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
|
|
4529
4519
|
};
|
|
4530
4520
|
|
|
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,
|
|
4526
|
+
column,
|
|
4527
|
+
prefix, }, "fdpok");
|
|
4528
|
+
const colSchema = properties[column];
|
|
4529
|
+
if (colSchema === undefined) {
|
|
4530
|
+
throw new Error(`${column} does not exist when using ColumnRenderer`);
|
|
4531
|
+
}
|
|
4532
|
+
const { type, variant, foreign_key, properties: innerProperties } = colSchema;
|
|
4533
|
+
if (type === "string") {
|
|
4534
|
+
if ((properties[column].enum ?? []).length > 0) {
|
|
4535
|
+
return jsxRuntime.jsx(EnumPicker, { schema: colSchema, prefix, column });
|
|
4536
|
+
}
|
|
4537
|
+
if (variant === "id-picker") {
|
|
4538
|
+
idPickerSanityCheck(column, foreign_key);
|
|
4539
|
+
return jsxRuntime.jsx(IdPicker, { schema: colSchema, prefix, column });
|
|
4540
|
+
}
|
|
4541
|
+
if (variant === "date-picker") {
|
|
4542
|
+
return jsxRuntime.jsx(DatePicker, { schema: colSchema, prefix, column });
|
|
4543
|
+
}
|
|
4544
|
+
return jsxRuntime.jsx(StringInputField, { schema: colSchema, prefix, column });
|
|
4545
|
+
}
|
|
4546
|
+
if (type === "number" || type === "integer") {
|
|
4547
|
+
return jsxRuntime.jsx(NumberInputField, { schema: colSchema, prefix, column });
|
|
4548
|
+
}
|
|
4549
|
+
if (type === "boolean") {
|
|
4550
|
+
return jsxRuntime.jsx(BooleanPicker, { schema: colSchema, prefix, column });
|
|
4551
|
+
}
|
|
4552
|
+
if (type === "object") {
|
|
4553
|
+
if (innerProperties) {
|
|
4554
|
+
return jsxRuntime.jsx(ObjectInput, { schema: colSchema, prefix, column });
|
|
4555
|
+
}
|
|
4556
|
+
return jsxRuntime.jsx(RecordInput, { schema: colSchema, prefix, column });
|
|
4557
|
+
}
|
|
4558
|
+
if (type === "array") {
|
|
4559
|
+
if (variant === "id-picker") {
|
|
4560
|
+
idPickerSanityCheck(column, foreign_key);
|
|
4561
|
+
return (jsxRuntime.jsx(IdPicker, { schema: colSchema, prefix, column, isMultiple: true }));
|
|
4562
|
+
}
|
|
4563
|
+
if (variant === "tag-picker") {
|
|
4564
|
+
return jsxRuntime.jsx(TagPicker, { schema: colSchema, prefix, column });
|
|
4565
|
+
}
|
|
4566
|
+
if (variant === "file-picker") {
|
|
4567
|
+
return jsxRuntime.jsx(FilePicker, { schema: colSchema, prefix, column });
|
|
4568
|
+
}
|
|
4569
|
+
return jsxRuntime.jsx(react.Text, { children: `array ${column}` });
|
|
4570
|
+
}
|
|
4571
|
+
if (type === "null") {
|
|
4572
|
+
return jsxRuntime.jsx(react.Text, { children: `null ${column}` });
|
|
4573
|
+
}
|
|
4574
|
+
return jsxRuntime.jsx(react.Text, { children: "missing type" });
|
|
4575
|
+
};
|
|
4576
|
+
|
|
4531
4577
|
const idPickerSanityCheck = (column, foreign_key) => {
|
|
4532
4578
|
if (!!foreign_key == false) {
|
|
4533
4579
|
throw new Error(`The key foreign_key does not exist in properties of column ${column} when using id-picker.`);
|
|
@@ -4715,59 +4761,11 @@ const FormInternal = () => {
|
|
|
4715
4761
|
}, variant: "subtle", children: translate.t("cancel") }), 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)}` })] }) }) }) }) }))] }));
|
|
4716
4762
|
}
|
|
4717
4763
|
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) => {
|
|
4718
|
-
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
|
|
4722
|
-
|
|
4723
|
-
const shouldIgnore = ignore.some((column) => {
|
|
4724
|
-
return column == key;
|
|
4725
|
-
});
|
|
4726
|
-
if (shouldIgnore) {
|
|
4727
|
-
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
4728
|
-
}
|
|
4729
|
-
//@ts-expect-error TODO: add more fields to support form-creation
|
|
4730
|
-
const { type, variant, foreign_key } = values;
|
|
4731
|
-
if (type === "string") {
|
|
4732
|
-
// @ts-expect-error enum should exists
|
|
4733
|
-
if ((values.enum ?? []).length > 0) {
|
|
4734
|
-
return jsxRuntime.jsx(EnumPicker, { column: key }, `form-${key}`);
|
|
4735
|
-
}
|
|
4736
|
-
if (variant === "id-picker") {
|
|
4737
|
-
idPickerSanityCheck(column, foreign_key);
|
|
4738
|
-
return jsxRuntime.jsx(IdPicker, { column: key }, `form-${key}`);
|
|
4739
|
-
}
|
|
4740
|
-
if (variant === "date-picker") {
|
|
4741
|
-
return jsxRuntime.jsx(DatePicker, { column: key }, `form-${key}`);
|
|
4742
|
-
}
|
|
4743
|
-
return jsxRuntime.jsx(StringInputField, { column: key }, `form-${key}`);
|
|
4744
|
-
}
|
|
4745
|
-
if (type === "number" || type === "integer") {
|
|
4746
|
-
return jsxRuntime.jsx(NumberInputField, { column: key }, `form-${key}`);
|
|
4747
|
-
}
|
|
4748
|
-
if (type === "boolean") {
|
|
4749
|
-
return jsxRuntime.jsx(BooleanPicker, { column: key }, `form-${key}`);
|
|
4750
|
-
}
|
|
4751
|
-
if (type === "object") {
|
|
4752
|
-
return jsxRuntime.jsx(ObjectInput, { column: key }, `form-${key}`);
|
|
4753
|
-
}
|
|
4754
|
-
if (type === "array") {
|
|
4755
|
-
if (variant === "id-picker") {
|
|
4756
|
-
idPickerSanityCheck(column, foreign_key);
|
|
4757
|
-
return jsxRuntime.jsx(IdPicker, { column: key, isMultiple: true }, `form-${key}`);
|
|
4758
|
-
}
|
|
4759
|
-
if (variant === "tag-picker") {
|
|
4760
|
-
return jsxRuntime.jsx(TagPicker, { column: key }, `form-${key}`);
|
|
4761
|
-
}
|
|
4762
|
-
if (variant === "file-picker") {
|
|
4763
|
-
return jsxRuntime.jsx(FilePicker, { column: key }, `form-${key}`);
|
|
4764
|
-
}
|
|
4765
|
-
return jsxRuntime.jsx(react.Text, { children: `array ${column}` }, `form-${key}`);
|
|
4766
|
-
}
|
|
4767
|
-
if (type === "null") {
|
|
4768
|
-
return jsxRuntime.jsx(react.Text, { children: `null ${column}` }, `form-${key}`);
|
|
4769
|
-
}
|
|
4770
|
-
return jsxRuntime.jsx(react.Text, { children: "missing type" }, `form-${key}`);
|
|
4764
|
+
return (jsxRuntime.jsx(ColumnRenderer
|
|
4765
|
+
// @ts-expect-error find suitable types
|
|
4766
|
+
, {
|
|
4767
|
+
// @ts-expect-error find suitable types
|
|
4768
|
+
properties: properties, prefix: ``, column }, `form-${column}`));
|
|
4771
4769
|
}) }), jsxRuntime.jsx(Button, { onClick: () => {
|
|
4772
4770
|
methods.handleSubmit(onValid)();
|
|
4773
4771
|
}, formNoValidate: true, children: translate.t("submit") })] }), isError && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: ["isError", jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" ", `${error}`] })] }))] }));
|
|
@@ -4862,6 +4860,7 @@ exports.ViewDialog = ViewDialog;
|
|
|
4862
4860
|
exports.getColumns = getColumns;
|
|
4863
4861
|
exports.getMultiDates = getMultiDates;
|
|
4864
4862
|
exports.getRangeDates = getRangeDates;
|
|
4863
|
+
exports.idPickerSanityCheck = idPickerSanityCheck;
|
|
4865
4864
|
exports.useDataTable = useDataTable;
|
|
4866
4865
|
exports.useDataTableContext = useDataTableContext;
|
|
4867
4866
|
exports.useDataTableServer = useDataTableServer;
|