@bsol-oss/react-datatable5 12.0.0-beta.3 → 12.0.0-beta.30
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 +93 -76
- package/dist/index.js +542 -310
- package/dist/index.mjs +545 -312
- package/dist/types/components/DataTable/DataTable.d.ts +1 -1
- package/dist/types/components/DataTable/DataTableServer.d.ts +1 -1
- package/dist/types/components/DataTable/DefaultTable.d.ts +9 -12
- package/dist/types/components/DataTable/components/TextCell.d.ts +10 -0
- package/dist/types/components/DataTable/context/DataTableContext.d.ts +3 -2
- package/dist/types/components/DataTable/controls/DensityFeature.d.ts +23 -0
- package/dist/types/components/DataTable/controls/DensityToggleButton.d.ts +6 -0
- package/dist/types/components/DataTable/controls/EditSortingButton.d.ts +7 -0
- package/dist/types/components/DataTable/controls/FilterDialog.d.ts +5 -0
- package/dist/types/components/DataTable/controls/PageSizeControl.d.ts +4 -0
- package/dist/types/components/DataTable/controls/Pagination.d.ts +1 -0
- package/dist/types/components/DataTable/controls/ReloadButton.d.ts +5 -0
- package/dist/types/components/DataTable/controls/ResetFilteringButton.d.ts +4 -0
- package/dist/types/components/DataTable/controls/ResetSelectionButton.d.ts +4 -0
- package/dist/types/components/DataTable/controls/ResetSortingButton.d.ts +4 -0
- package/dist/types/components/DataTable/controls/RowCountText.d.ts +1 -0
- package/dist/types/components/DataTable/controls/SelectAllRowsToggle.d.ts +8 -0
- package/dist/types/components/DataTable/controls/TableControls.d.ts +23 -0
- package/dist/types/components/DataTable/controls/TableFilterTags.d.ts +1 -0
- package/dist/types/components/DataTable/controls/TableFilters.d.ts +1 -0
- package/dist/types/components/DataTable/controls/TableSelector.d.ts +1 -0
- package/dist/types/components/DataTable/controls/TableSorter.d.ts +1 -0
- package/dist/types/components/DataTable/controls/TableViewer.d.ts +1 -0
- package/dist/types/components/DataTable/controls/ViewDialog.d.ts +5 -0
- package/dist/types/components/DataTable/display/CardHeader.d.ts +13 -0
- package/dist/types/components/DataTable/display/DataDisplay.d.ts +6 -0
- package/dist/types/components/DataTable/display/EmptyState.d.ts +5 -0
- package/dist/types/components/DataTable/display/ErrorAlert.d.ts +4 -0
- package/dist/types/components/DataTable/display/RecordDisplay.d.ts +9 -0
- package/dist/types/components/DataTable/display/Table.d.ts +10 -0
- package/dist/types/components/DataTable/display/TableBody.d.ts +21 -0
- package/dist/types/components/DataTable/display/TableCardContainer.d.ts +7 -0
- package/dist/types/components/DataTable/display/TableCards.d.ts +11 -0
- package/dist/types/components/DataTable/display/TableComponent.d.ts +6 -0
- package/dist/types/components/DataTable/display/TableDataDisplay.d.ts +6 -0
- package/dist/types/components/DataTable/display/TableFooter.d.ts +5 -0
- package/dist/types/components/DataTable/display/TableHeader.d.ts +9 -0
- package/dist/types/components/DataTable/display/TableLoadingComponent.d.ts +5 -0
- package/dist/types/components/DataTable/display/TextCell.d.ts +10 -0
- package/dist/types/components/DataTable/useDataTable.d.ts +1 -1
- package/dist/types/components/Form/components/core/DefaultForm.d.ts +2 -1
- package/dist/types/components/Form/components/core/FormRoot.d.ts +2 -1
- package/dist/types/components/Form/components/fields/CustomInput.d.ts +8 -0
- package/dist/types/components/Form/components/fields/DatePicker.d.ts +2 -7
- package/dist/types/components/Form/components/fields/FilePicker.d.ts +2 -5
- package/dist/types/components/Form/components/fields/StringInputField.d.ts +2 -5
- package/dist/types/components/Form/components/fields/TextAreaInput.d.ts +12 -0
- package/dist/types/components/Form/components/fields/TimePicker.d.ts +7 -0
- package/dist/types/components/Form/components/fields/types.d.ts +6 -0
- package/dist/types/components/Form/components/types/CustomJSONSchema7.d.ts +16 -1
- package/dist/types/components/Form/components/viewers/CustomViewer.d.ts +8 -0
- package/dist/types/components/Form/components/viewers/TextAreaViewer.d.ts +12 -0
- package/dist/types/components/Form/components/viewers/TimeViewer.d.ts +7 -0
- package/dist/types/components/TimePicker/TimePicker.d.ts +19 -0
- package/dist/types/index.d.ts +32 -33
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -30,6 +30,7 @@ var reactI18next = require('react-i18next');
|
|
|
30
30
|
var axios = require('axios');
|
|
31
31
|
var reactHookForm = require('react-hook-form');
|
|
32
32
|
var dayjs = require('dayjs');
|
|
33
|
+
var utc = require('dayjs/plugin/utc');
|
|
33
34
|
var ti = require('react-icons/ti');
|
|
34
35
|
|
|
35
36
|
function _interopNamespaceDefault(e) {
|
|
@@ -57,6 +58,39 @@ const DataTableContext = React.createContext({
|
|
|
57
58
|
setGlobalFilter: () => { },
|
|
58
59
|
type: "client",
|
|
59
60
|
translate: {},
|
|
61
|
+
data: [],
|
|
62
|
+
columns: [],
|
|
63
|
+
columnOrder: [],
|
|
64
|
+
columnFilters: [],
|
|
65
|
+
density: "sm",
|
|
66
|
+
sorting: [],
|
|
67
|
+
setPagination: function () {
|
|
68
|
+
throw new Error("Function not implemented.");
|
|
69
|
+
},
|
|
70
|
+
setSorting: function () {
|
|
71
|
+
throw new Error("Function not implemented.");
|
|
72
|
+
},
|
|
73
|
+
setColumnFilters: function () {
|
|
74
|
+
throw new Error("Function not implemented.");
|
|
75
|
+
},
|
|
76
|
+
setRowSelection: function () {
|
|
77
|
+
throw new Error("Function not implemented.");
|
|
78
|
+
},
|
|
79
|
+
setColumnOrder: function () {
|
|
80
|
+
throw new Error("Function not implemented.");
|
|
81
|
+
},
|
|
82
|
+
setDensity: function () {
|
|
83
|
+
throw new Error("Function not implemented.");
|
|
84
|
+
},
|
|
85
|
+
setColumnVisibility: function () {
|
|
86
|
+
throw new Error("Function not implemented.");
|
|
87
|
+
},
|
|
88
|
+
pagination: {
|
|
89
|
+
pageIndex: 0,
|
|
90
|
+
pageSize: 10,
|
|
91
|
+
},
|
|
92
|
+
rowSelection: {},
|
|
93
|
+
columnVisibility: {},
|
|
60
94
|
});
|
|
61
95
|
|
|
62
96
|
const useDataTableContext = () => {
|
|
@@ -98,63 +132,6 @@ react.Dialog.Description;
|
|
|
98
132
|
const DialogTrigger = react.Dialog.Trigger;
|
|
99
133
|
react.Dialog.ActionTrigger;
|
|
100
134
|
|
|
101
|
-
const ColumnOrderChanger = ({ columns }) => {
|
|
102
|
-
const [order, setOrder] = React.useState([]);
|
|
103
|
-
const [originalOrder, setOriginalOrder] = React.useState([]);
|
|
104
|
-
const { table } = useDataTableContext();
|
|
105
|
-
const handleChangeOrder = (startIndex, endIndex) => {
|
|
106
|
-
const newOrder = Array.from(order);
|
|
107
|
-
const [removed] = newOrder.splice(startIndex, 1);
|
|
108
|
-
newOrder.splice(endIndex, 0, removed);
|
|
109
|
-
setOrder(newOrder);
|
|
110
|
-
};
|
|
111
|
-
React.useEffect(() => {
|
|
112
|
-
setOrder(columns);
|
|
113
|
-
}, [columns]);
|
|
114
|
-
React.useEffect(() => {
|
|
115
|
-
if (originalOrder.length > 0) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
if (columns.length <= 0) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
setOriginalOrder(columns);
|
|
122
|
-
}, [columns]);
|
|
123
|
-
return (jsxRuntime.jsxs(react.Flex, { gap: 2, flexFlow: "column", children: [jsxRuntime.jsx(react.Flex, { gap: 2, flexFlow: "column", children: order.map((columnId, index) => (jsxRuntime.jsxs(react.Flex, { gap: 2, alignItems: "center", justifyContent: "space-between", children: [jsxRuntime.jsx(react.IconButton, { onClick: () => {
|
|
124
|
-
const prevIndex = index - 1;
|
|
125
|
-
if (prevIndex >= 0) {
|
|
126
|
-
handleChangeOrder(index, prevIndex);
|
|
127
|
-
}
|
|
128
|
-
}, disabled: index === 0, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowUpward, {}) }), table
|
|
129
|
-
.getAllFlatColumns()
|
|
130
|
-
.filter((column) => {
|
|
131
|
-
return column.id === columnId;
|
|
132
|
-
})
|
|
133
|
-
.map((column) => {
|
|
134
|
-
const displayName = column.columnDef.meta === undefined
|
|
135
|
-
? column.id
|
|
136
|
-
: column.columnDef.meta.displayName;
|
|
137
|
-
return jsxRuntime.jsx("span", { children: displayName }, column.id);
|
|
138
|
-
}), jsxRuntime.jsx(react.IconButton, { onClick: () => {
|
|
139
|
-
const nextIndex = index + 1;
|
|
140
|
-
if (nextIndex < order.length) {
|
|
141
|
-
handleChangeOrder(index, nextIndex);
|
|
142
|
-
}
|
|
143
|
-
}, disabled: index === order.length - 1, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowDownward, {}) })] }, columnId))) }), jsxRuntime.jsxs(react.Flex, { gap: "0.25rem", children: [jsxRuntime.jsx(react.Button, { onClick: () => {
|
|
144
|
-
table.setColumnOrder(order);
|
|
145
|
-
}, children: "Apply" }), jsxRuntime.jsx(react.Button, { onClick: () => {
|
|
146
|
-
table.setColumnOrder(originalOrder);
|
|
147
|
-
}, children: "Reset" })] })] }));
|
|
148
|
-
};
|
|
149
|
-
const TableOrderer = () => {
|
|
150
|
-
const { table } = useDataTableContext();
|
|
151
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
const EditOrderButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineMoveDown, {}), title = "Change Order", }) => {
|
|
155
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(DialogRoot, { size: "cover", children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", children: [icon, " ", text] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsxs(DialogHeader, { children: [jsxRuntime.jsx(DialogTitle, {}), title] }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.25rem", children: jsxRuntime.jsx(TableOrderer, {}) }) }), jsxRuntime.jsx(DialogFooter, {})] })] }) }));
|
|
156
|
-
};
|
|
157
|
-
|
|
158
135
|
const TableSorter = () => {
|
|
159
136
|
const { table } = useDataTableContext();
|
|
160
137
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: headerGroup.headers.map((header) => {
|
|
@@ -460,7 +437,7 @@ const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
|
|
|
460
437
|
const FilterDialog = ({ icon = jsxRuntime.jsx(md.MdFilterAlt, {}), }) => {
|
|
461
438
|
const filterModal = react.useDisclosure();
|
|
462
439
|
const { translate } = useDataTableContext();
|
|
463
|
-
return (jsxRuntime.jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("
|
|
440
|
+
return (jsxRuntime.jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("filter_dialog.button_text")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("filter_dialog.title") }) }), jsxRuntime.jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsxRuntime.jsx(TableFilter, {}) }), jsxRuntime.jsxs(DialogFooter, { children: [jsxRuntime.jsx(ResetFilteringButton, { text: translate.t("filter_dialog.reset") }), jsxRuntime.jsx(react.Button, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filter_dialog.close") })] }), jsxRuntime.jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
|
|
464
441
|
};
|
|
465
442
|
|
|
466
443
|
const MenuContent = React__namespace.forwardRef(function MenuContent(props, ref) {
|
|
@@ -2498,8 +2475,8 @@ react.CheckboxCard.Indicator;
|
|
|
2498
2475
|
function ColumnCard({ columnId }) {
|
|
2499
2476
|
const ref = React.useRef(null);
|
|
2500
2477
|
const [dragging, setDragging] = React.useState(false); // NEW
|
|
2501
|
-
const { table } = useDataTableContext();
|
|
2502
|
-
const displayName = columnId;
|
|
2478
|
+
const { table, translate } = useDataTableContext();
|
|
2479
|
+
const displayName = translate.t(columnId);
|
|
2503
2480
|
const column = table.getColumn(columnId);
|
|
2504
2481
|
invariant(column);
|
|
2505
2482
|
React.useEffect(() => {
|
|
@@ -2514,13 +2491,16 @@ function ColumnCard({ columnId }) {
|
|
|
2514
2491
|
onDrop: () => setDragging(false), // NEW
|
|
2515
2492
|
});
|
|
2516
2493
|
}, [columnId, table]);
|
|
2517
|
-
return (jsxRuntime.jsxs(react.Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsxRuntime.jsx(react.Flex, { alignItems: "center", padding: "0", cursor:
|
|
2494
|
+
return (jsxRuntime.jsxs(react.Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsxRuntime.jsx(react.Flex, { alignItems: "center", padding: "0", cursor: "grab", children: jsxRuntime.jsx(fa6.FaGripLinesVertical, { color: "colorPalette.400" }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "space-between", alignItems: "center", children: jsxRuntime.jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
|
|
2518
2495
|
}
|
|
2519
2496
|
function CardContainer({ location, children }) {
|
|
2520
2497
|
const ref = React.useRef(null);
|
|
2521
2498
|
const [isDraggedOver, setIsDraggedOver] = React.useState(false);
|
|
2522
2499
|
React.useEffect(() => {
|
|
2523
2500
|
const el = ref.current;
|
|
2501
|
+
if (el === null) {
|
|
2502
|
+
return;
|
|
2503
|
+
}
|
|
2524
2504
|
invariant(el);
|
|
2525
2505
|
return dropTargetForElements({
|
|
2526
2506
|
element: el,
|
|
@@ -2592,7 +2572,7 @@ const TableViewer = () => {
|
|
|
2592
2572
|
const ViewDialog = ({ icon = jsxRuntime.jsx(io.IoMdEye, {}) }) => {
|
|
2593
2573
|
const viewModel = react.useDisclosure();
|
|
2594
2574
|
const { translate } = useDataTableContext();
|
|
2595
|
-
return (jsxRuntime.jsxs(DialogRoot, { children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("
|
|
2575
|
+
return (jsxRuntime.jsxs(DialogRoot, { children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("view_dialog.button_text")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("view_dialog.title") }) }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(TableViewer, {}) }), jsxRuntime.jsx(DialogFooter, {})] })] }));
|
|
2596
2576
|
};
|
|
2597
2577
|
|
|
2598
2578
|
const CardHeader = ({ row, imageColumnId = undefined, titleColumnId = undefined, tagColumnId = undefined, tagIcon = undefined, showTag = true, imageProps = {}, }) => {
|
|
@@ -2643,7 +2623,7 @@ const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
|
|
|
2643
2623
|
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "null" });
|
|
2644
2624
|
}
|
|
2645
2625
|
return (jsxRuntime.jsx(react.Grid, { rowGap: 1, padding: 1, overflow: "auto", ...boxProps, children: Object.entries(object).map(([field, value]) => {
|
|
2646
|
-
return (jsxRuntime.jsxs(react.Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsxRuntime.jsx(react.Text, { color: "
|
|
2626
|
+
return (jsxRuntime.jsxs(react.Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsxRuntime.jsx(react.Text, { color: "colorPalette.400", children: getColumn({ field }) }), typeof value === "object" ? (jsxRuntime.jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsxRuntime.jsx(react.Text, { children: JSON.stringify(value) }))] }, field));
|
|
2647
2627
|
}) }));
|
|
2648
2628
|
};
|
|
2649
2629
|
|
|
@@ -2693,7 +2673,7 @@ const CellRenderer = ({ cell }) => {
|
|
|
2693
2673
|
paddingY: 2,
|
|
2694
2674
|
}, object: value })] }, cell.id));
|
|
2695
2675
|
}
|
|
2696
|
-
return (jsxRuntime.jsxs(react.Box, { gridColumn, gridRow, children: [jsxRuntime.jsx(react.Box, { color:
|
|
2676
|
+
return (jsxRuntime.jsxs(react.Box, { gridColumn, gridRow, children: [jsxRuntime.jsx(react.Box, { color: "colorPalette.400", children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(react.Box, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
|
|
2697
2677
|
};
|
|
2698
2678
|
const DataDisplay = ({ variant = "" }) => {
|
|
2699
2679
|
const { table, translate } = useDataTableContext();
|
|
@@ -2868,6 +2848,22 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2868
2848
|
setGlobalFilter,
|
|
2869
2849
|
type: "client",
|
|
2870
2850
|
translate,
|
|
2851
|
+
columns,
|
|
2852
|
+
sorting,
|
|
2853
|
+
setSorting,
|
|
2854
|
+
columnFilters,
|
|
2855
|
+
setColumnFilters,
|
|
2856
|
+
pagination,
|
|
2857
|
+
setPagination,
|
|
2858
|
+
rowSelection,
|
|
2859
|
+
setRowSelection,
|
|
2860
|
+
columnOrder,
|
|
2861
|
+
setColumnOrder,
|
|
2862
|
+
density,
|
|
2863
|
+
setDensity,
|
|
2864
|
+
columnVisibility,
|
|
2865
|
+
setColumnVisibility,
|
|
2866
|
+
data,
|
|
2871
2867
|
}, children: children }));
|
|
2872
2868
|
}
|
|
2873
2869
|
|
|
@@ -2936,90 +2932,25 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
|
|
|
2936
2932
|
setGlobalFilter,
|
|
2937
2933
|
type: "server",
|
|
2938
2934
|
translate,
|
|
2935
|
+
columns,
|
|
2936
|
+
sorting,
|
|
2937
|
+
setSorting,
|
|
2938
|
+
columnFilters,
|
|
2939
|
+
setColumnFilters,
|
|
2940
|
+
pagination,
|
|
2941
|
+
setPagination,
|
|
2942
|
+
rowSelection,
|
|
2943
|
+
setRowSelection,
|
|
2944
|
+
columnOrder,
|
|
2945
|
+
setColumnOrder,
|
|
2946
|
+
density,
|
|
2947
|
+
setDensity,
|
|
2948
|
+
columnVisibility,
|
|
2949
|
+
setColumnVisibility,
|
|
2950
|
+
data: query.data?.data ?? [],
|
|
2939
2951
|
}, children: jsxRuntime.jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
|
|
2940
2952
|
}
|
|
2941
2953
|
|
|
2942
|
-
const Checkbox = React__namespace.forwardRef(function Checkbox(props, ref) {
|
|
2943
|
-
const { icon, children, inputProps, rootRef, ...rest } = props;
|
|
2944
|
-
return (jsxRuntime.jsxs(react.Checkbox.Root, { ref: rootRef, ...rest, children: [jsxRuntime.jsx(react.Checkbox.HiddenInput, { ref: ref, ...inputProps }), jsxRuntime.jsx(react.Checkbox.Control, { children: icon || jsxRuntime.jsx(react.Checkbox.Indicator, {}) }), children != null && (jsxRuntime.jsx(react.Checkbox.Label, { children: children }))] }));
|
|
2945
|
-
});
|
|
2946
|
-
|
|
2947
|
-
const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
|
|
2948
|
-
const { table } = useDataTableContext();
|
|
2949
|
-
const SELECTION_BOX_WIDTH = 20;
|
|
2950
|
-
const [hoveredRow, setHoveredRow] = React.useState(-1);
|
|
2951
|
-
const handleRowHover = (index) => {
|
|
2952
|
-
setHoveredRow(index);
|
|
2953
|
-
};
|
|
2954
|
-
const getTdProps = (cell) => {
|
|
2955
|
-
const tdProps = cell.column.getIsPinned()
|
|
2956
|
-
? {
|
|
2957
|
-
left: showSelector
|
|
2958
|
-
? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
2959
|
-
: `${cell.column.getStart("left")}px`,
|
|
2960
|
-
background: pinnedBgColor.light,
|
|
2961
|
-
position: "sticky",
|
|
2962
|
-
zIndex: -1,
|
|
2963
|
-
_dark: {
|
|
2964
|
-
backgroundColor: pinnedBgColor.dark,
|
|
2965
|
-
},
|
|
2966
|
-
}
|
|
2967
|
-
: {};
|
|
2968
|
-
return tdProps;
|
|
2969
|
-
};
|
|
2970
|
-
const getTrProps = ({ hoveredRow, index, }) => {
|
|
2971
|
-
if (hoveredRow === -1) {
|
|
2972
|
-
return {};
|
|
2973
|
-
}
|
|
2974
|
-
if (hoveredRow === index) {
|
|
2975
|
-
return {
|
|
2976
|
-
opacity: "1",
|
|
2977
|
-
};
|
|
2978
|
-
}
|
|
2979
|
-
return {
|
|
2980
|
-
opacity: "0.8",
|
|
2981
|
-
};
|
|
2982
|
-
};
|
|
2983
|
-
return (jsxRuntime.jsx(react.Table.Body, { children: table.getRowModel().rows.map((row, index) => {
|
|
2984
|
-
return (jsxRuntime.jsxs(react.Table.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsxRuntime.jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow, alwaysShowSelector: alwaysShowSelector })), row.getVisibleCells().map((cell, index) => {
|
|
2985
|
-
return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`,
|
|
2986
|
-
// styling resize and pinning start
|
|
2987
|
-
flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`, backgroundColor: "white", ...getTdProps(cell), _dark: {
|
|
2988
|
-
backgroundColor: "gray.950",
|
|
2989
|
-
}, children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
|
|
2990
|
-
})] }, `chakra-table-row-${row.id}`));
|
|
2991
|
-
}) }));
|
|
2992
|
-
};
|
|
2993
|
-
const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, alwaysShowSelector = true, }) => {
|
|
2994
|
-
const { table } = useDataTableContext();
|
|
2995
|
-
const SELECTION_BOX_WIDTH = 20;
|
|
2996
|
-
const isCheckBoxVisible = (current_index, current_row) => {
|
|
2997
|
-
if (alwaysShowSelector) {
|
|
2998
|
-
return true;
|
|
2999
|
-
}
|
|
3000
|
-
if (current_row.getIsSelected()) {
|
|
3001
|
-
return true;
|
|
3002
|
-
}
|
|
3003
|
-
if (hoveredRow == current_index) {
|
|
3004
|
-
return true;
|
|
3005
|
-
}
|
|
3006
|
-
return false;
|
|
3007
|
-
};
|
|
3008
|
-
return (jsxRuntime.jsxs(react.Table.Cell, { padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
|
|
3009
|
-
? {
|
|
3010
|
-
left: `0px`,
|
|
3011
|
-
backgroundColor: pinnedBgColor.light,
|
|
3012
|
-
position: "sticky",
|
|
3013
|
-
zIndex: 1,
|
|
3014
|
-
_dark: { backgroundColor: pinnedBgColor.dark },
|
|
3015
|
-
}
|
|
3016
|
-
: {}),
|
|
3017
|
-
// styling resize and pinning end
|
|
3018
|
-
display: "grid", children: [!isCheckBoxVisible(index, row) && (jsxRuntime.jsx(react.Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` })), isCheckBoxVisible(index, row) && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: row.getIsSelected(),
|
|
3019
|
-
disabled: !row.getCanSelect(),
|
|
3020
|
-
onChange: row.getToggleSelectedHandler() }) }))] }));
|
|
3021
|
-
};
|
|
3022
|
-
|
|
3023
2954
|
const Tooltip = React__namespace.forwardRef(function Tooltip(props, ref) {
|
|
3024
2955
|
const { showArrow, children, disabled, portalled, content, contentProps, portalRef, ...rest } = props;
|
|
3025
2956
|
if (disabled)
|
|
@@ -3098,16 +3029,89 @@ const TableFilterTags = () => {
|
|
|
3098
3029
|
}) }));
|
|
3099
3030
|
};
|
|
3100
3031
|
|
|
3101
|
-
const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsxRuntime.jsx(jsxRuntime.Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, }) => {
|
|
3032
|
+
const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsxRuntime.jsx(jsxRuntime.Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, gridProps = {}, }) => {
|
|
3102
3033
|
const { translate } = useDataTableContext();
|
|
3103
|
-
return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr
|
|
3034
|
+
return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, children: [jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsx(react.Box, { children: showView && jsxRuntime.jsx(ViewDialog, { icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsxRuntime.jsx(react.Spinner, { size: "sm" }), hasError && (jsxRuntime.jsx(Tooltip, { content: translate.t("has_error"), children: jsxRuntime.jsx(react.Icon, { as: bs.BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsxRuntime.jsx(GlobalFilter, {}), showFilter && jsxRuntime.jsx(FilterDialog, {}), showReload && jsxRuntime.jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
|
|
3104
3035
|
return (jsxRuntime.jsxs(react.Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxRuntime.jsxs(react.Text, { children: [column, ":"] }), jsxRuntime.jsx(FilterOptions, { column: column })] }, column));
|
|
3105
|
-
}) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto",
|
|
3106
|
-
|
|
3107
|
-
|
|
3036
|
+
}) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] }))] }));
|
|
3037
|
+
};
|
|
3038
|
+
|
|
3039
|
+
const EmptyState = React__namespace.forwardRef(function EmptyState(props, ref) {
|
|
3040
|
+
const { title, description, icon, children, ...rest } = props;
|
|
3041
|
+
return (jsxRuntime.jsx(react.EmptyState.Root, { ref: ref, ...rest, children: jsxRuntime.jsxs(react.EmptyState.Content, { children: [icon && (jsxRuntime.jsx(react.EmptyState.Indicator, { children: icon })), description ? (jsxRuntime.jsxs(react.VStack, { textAlign: "center", children: [jsxRuntime.jsx(react.EmptyState.Title, { children: title }), jsxRuntime.jsx(react.EmptyState.Description, { children: description })] })) : (jsxRuntime.jsx(react.EmptyState.Title, { children: title })), children] }) }));
|
|
3042
|
+
});
|
|
3043
|
+
|
|
3044
|
+
const EmptyResult = (jsxRuntime.jsx(EmptyState, { icon: jsxRuntime.jsx(hi.HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxRuntime.jsxs(react.List.Root, { variant: "marker", children: [jsxRuntime.jsx(react.List.Item, { children: "Try removing filters" }), jsxRuntime.jsx(react.List.Item, { children: "Try different keywords" })] }) }));
|
|
3045
|
+
const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
|
|
3046
|
+
const { table } = useDataTableContext();
|
|
3047
|
+
if (table.getRowModel().rows.length <= 0) {
|
|
3048
|
+
return emptyComponent;
|
|
3049
|
+
}
|
|
3050
|
+
return (jsxRuntime.jsx(react.Table.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...props, children: children }));
|
|
3051
|
+
};
|
|
3052
|
+
|
|
3053
|
+
const Checkbox = React__namespace.forwardRef(function Checkbox(props, ref) {
|
|
3054
|
+
const { icon, children, inputProps, rootRef, ...rest } = props;
|
|
3055
|
+
return (jsxRuntime.jsxs(react.Checkbox.Root, { ref: rootRef, ...rest, children: [jsxRuntime.jsx(react.Checkbox.HiddenInput, { ref: ref, ...inputProps }), jsxRuntime.jsx(react.Checkbox.Control, { children: icon || jsxRuntime.jsx(react.Checkbox.Indicator, {}) }), children != null && (jsxRuntime.jsx(react.Checkbox.Label, { children: children }))] }));
|
|
3056
|
+
});
|
|
3057
|
+
|
|
3058
|
+
const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
|
|
3059
|
+
"use no memo";
|
|
3060
|
+
const { table } = useDataTableContext();
|
|
3061
|
+
const SELECTION_BOX_WIDTH = 20;
|
|
3062
|
+
const [hoveredRow, setHoveredRow] = React.useState(-1);
|
|
3063
|
+
const handleRowHover = (index) => {
|
|
3064
|
+
setHoveredRow(index);
|
|
3065
|
+
};
|
|
3066
|
+
const getTdProps = (cell) => {
|
|
3067
|
+
const tdProps = cell.column.getIsPinned()
|
|
3068
|
+
? {
|
|
3069
|
+
left: showSelector
|
|
3070
|
+
? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
3071
|
+
: `${cell.column.getStart("left")}px`,
|
|
3072
|
+
position: "relative",
|
|
3073
|
+
}
|
|
3074
|
+
: {};
|
|
3075
|
+
return tdProps;
|
|
3076
|
+
};
|
|
3077
|
+
const getTrProps = ({ hoveredRow, index, }) => {
|
|
3078
|
+
if (hoveredRow === -1) {
|
|
3079
|
+
return {};
|
|
3080
|
+
}
|
|
3081
|
+
if (hoveredRow === index) {
|
|
3082
|
+
return {
|
|
3083
|
+
opacity: "1",
|
|
3084
|
+
};
|
|
3085
|
+
}
|
|
3086
|
+
return {
|
|
3087
|
+
opacity: "0.8",
|
|
3088
|
+
};
|
|
3089
|
+
};
|
|
3090
|
+
return (jsxRuntime.jsx(react.Table.Body, { children: table.getRowModel().rows.map((row, index) => {
|
|
3091
|
+
return (jsxRuntime.jsxs(react.Table.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsxRuntime.jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
|
|
3092
|
+
return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`,
|
|
3093
|
+
// styling resize and pinning start
|
|
3094
|
+
flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`, color: {
|
|
3095
|
+
base: "colorPalette.900",
|
|
3096
|
+
_dark: "colorPalette.100",
|
|
3097
|
+
},
|
|
3098
|
+
bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...getTdProps(cell), children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
|
|
3099
|
+
})] }, `chakra-table-row-${row.id}`));
|
|
3100
|
+
}) }));
|
|
3101
|
+
};
|
|
3102
|
+
const TableRowSelector = ({ index, row, }) => {
|
|
3103
|
+
const { table } = useDataTableContext();
|
|
3104
|
+
const SELECTION_BOX_WIDTH = 20;
|
|
3105
|
+
return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
3106
|
+
base: "colorPalette.900",
|
|
3107
|
+
_dark: "colorPalette.100",
|
|
3108
|
+
},
|
|
3109
|
+
bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: row.getIsSelected(),
|
|
3110
|
+
disabled: !row.getCanSelect(),
|
|
3111
|
+
onCheckedChange: row.getToggleSelectedHandler() }) }));
|
|
3108
3112
|
};
|
|
3109
3113
|
|
|
3110
|
-
const TableFooter = ({
|
|
3114
|
+
const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
|
|
3111
3115
|
const table = useDataTableContext().table;
|
|
3112
3116
|
const SELECTION_BOX_WIDTH = 20;
|
|
3113
3117
|
const [hoveredCheckBox, setHoveredCheckBox] = React.useState(false);
|
|
@@ -3126,78 +3130,28 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
|
|
|
3126
3130
|
}
|
|
3127
3131
|
return false;
|
|
3128
3132
|
};
|
|
3129
|
-
|
|
3130
|
-
const thProps = header.column.getIsPinned()
|
|
3131
|
-
? {
|
|
3132
|
-
left: showSelector
|
|
3133
|
-
? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
3134
|
-
: `${header.getStart("left") + table.getDensityValue() * 2}px`,
|
|
3135
|
-
background: pinnedBgColor.light,
|
|
3136
|
-
position: "sticky",
|
|
3137
|
-
zIndex: 1,
|
|
3138
|
-
_dark: {
|
|
3139
|
-
backgroundColor: pinnedBgColor.dark,
|
|
3140
|
-
},
|
|
3141
|
-
}
|
|
3142
|
-
: {};
|
|
3143
|
-
return thProps;
|
|
3144
|
-
};
|
|
3145
|
-
return (jsxRuntime.jsx(react.Table.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Table.Header
|
|
3146
|
-
// styling resize and pinning start
|
|
3147
|
-
, {
|
|
3148
|
-
// styling resize and pinning start
|
|
3149
|
-
padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
|
|
3150
|
-
? {
|
|
3151
|
-
left: `0px`,
|
|
3152
|
-
backgroundColor: pinnedBgColor.light,
|
|
3153
|
-
position: "sticky",
|
|
3154
|
-
zIndex: 1,
|
|
3155
|
-
_dark: { backgroundColor: pinnedBgColor.dark },
|
|
3156
|
-
}
|
|
3157
|
-
: {}),
|
|
3158
|
-
// styling resize and pinning end
|
|
3159
|
-
onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
|
|
3133
|
+
return (jsxRuntime.jsx(react.Table.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Table.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
|
|
3160
3134
|
// indeterminate: table.getIsSomeRowsSelected(),
|
|
3161
3135
|
onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), footerGroup.headers.map((header) => (jsxRuntime.jsx(react.Table.Cell, { padding: "0", columnSpan: `${header.colSpan}`,
|
|
3162
3136
|
// styling resize and pinning start
|
|
3163
|
-
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid",
|
|
3137
|
+
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsxRuntime.jsx(react.MenuRoot, { children: jsxRuntime.jsx(react.MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3164
3138
|
? null
|
|
3165
3139
|
: reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && (
|
|
3166
3140
|
// <UpDownIcon />
|
|
3167
3141
|
jsxRuntime.jsx(jsxRuntime.Fragment, {})), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
|
|
3168
3142
|
};
|
|
3169
3143
|
|
|
3170
|
-
const TableHeader = ({ canResize = true,
|
|
3144
|
+
const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, }) => {
|
|
3171
3145
|
const { table } = useDataTableContext();
|
|
3172
3146
|
const SELECTION_BOX_WIDTH = 20;
|
|
3173
|
-
const [hoveredCheckBox, setHoveredCheckBox] = React.useState(false);
|
|
3174
|
-
const handleRowHover = (isHovered) => {
|
|
3175
|
-
setHoveredCheckBox(isHovered);
|
|
3176
|
-
};
|
|
3177
|
-
const isCheckBoxVisible = () => {
|
|
3178
|
-
if (alwaysShowSelector) {
|
|
3179
|
-
return true;
|
|
3180
|
-
}
|
|
3181
|
-
if (table.getIsAllRowsSelected()) {
|
|
3182
|
-
return true;
|
|
3183
|
-
}
|
|
3184
|
-
if (hoveredCheckBox) {
|
|
3185
|
-
return true;
|
|
3186
|
-
}
|
|
3187
|
-
return false;
|
|
3188
|
-
};
|
|
3189
3147
|
const getThProps = (header) => {
|
|
3190
3148
|
const thProps = header.column.getIsPinned()
|
|
3191
3149
|
? {
|
|
3192
3150
|
left: showSelector
|
|
3193
3151
|
? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
3194
3152
|
: `${header.getStart("left")}px`,
|
|
3195
|
-
background: pinnedBgColor.light,
|
|
3196
3153
|
position: "sticky",
|
|
3197
3154
|
zIndex: 100 + 1,
|
|
3198
|
-
_dark: {
|
|
3199
|
-
backgroundColor: pinnedBgColor.dark,
|
|
3200
|
-
},
|
|
3201
3155
|
}
|
|
3202
3156
|
: {};
|
|
3203
3157
|
return thProps;
|
|
@@ -3206,21 +3160,13 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
|
|
|
3206
3160
|
position: "sticky",
|
|
3207
3161
|
top: 0,
|
|
3208
3162
|
};
|
|
3209
|
-
return (jsxRuntime.jsx(react.Table.Header, { ...(isSticky ? stickyProps : {}), ...
|
|
3210
|
-
|
|
3211
|
-
|
|
3212
|
-
|
|
3213
|
-
|
|
3214
|
-
|
|
3215
|
-
|
|
3216
|
-
zIndex: 1,
|
|
3217
|
-
_dark: { backgroundColor: pinnedBgColor.dark },
|
|
3218
|
-
}
|
|
3219
|
-
: {}),
|
|
3220
|
-
// styling resize and pinning end
|
|
3221
|
-
padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
|
|
3222
|
-
// indeterminate: table.getIsSomeRowsSelected(),
|
|
3223
|
-
onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), headerGroup.headers.map((header) => {
|
|
3163
|
+
return (jsxRuntime.jsx(react.Table.Header, { ...(isSticky ? stickyProps : {}), bgColor: "transparent", ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", bgColor: "transparent", ...tableRowProps, children: [showSelector && (jsxRuntime.jsx(react.Table.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
3164
|
+
base: "colorPalette.900",
|
|
3165
|
+
_dark: "colorPalette.100",
|
|
3166
|
+
},
|
|
3167
|
+
bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: table.getIsAllRowsSelected(),
|
|
3168
|
+
// indeterminate: table.getIsSomeRowsSelected(),
|
|
3169
|
+
onChange: table.getToggleAllRowsSelectedHandler() }) })), headerGroup.headers.map((header) => {
|
|
3224
3170
|
const resizeProps = {
|
|
3225
3171
|
onMouseDown: header.getResizeHandler(),
|
|
3226
3172
|
onTouchStart: header.getResizeHandler(),
|
|
@@ -3228,10 +3174,24 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
|
|
|
3228
3174
|
};
|
|
3229
3175
|
return (jsxRuntime.jsxs(react.Table.ColumnHeader, { padding: 0, columnSpan: `${header.colSpan}`,
|
|
3230
3176
|
// styling resize and pinning start
|
|
3231
|
-
flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index,
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
|
|
3177
|
+
flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index, color: {
|
|
3178
|
+
base: "colorPalette.800",
|
|
3179
|
+
_dark: "colorPalette.200",
|
|
3180
|
+
},
|
|
3181
|
+
bg: { base: "colorPalette.100", _dark: "colorPalette.900" }, ...getThProps(header), children: [jsxRuntime.jsxs(MenuRoot, { children: [jsxRuntime.jsx(MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", color: {
|
|
3182
|
+
base: "colorPalette.800",
|
|
3183
|
+
_dark: "colorPalette.200",
|
|
3184
|
+
_hover: {
|
|
3185
|
+
base: "colorPalette.700",
|
|
3186
|
+
_dark: "colorPalette.300",
|
|
3187
|
+
},
|
|
3188
|
+
},
|
|
3189
|
+
bg: {
|
|
3190
|
+
base: "colorPalette.100",
|
|
3191
|
+
_dark: "colorPalette.900",
|
|
3192
|
+
_hover: {
|
|
3193
|
+
base: "colorPalette.200",
|
|
3194
|
+
_dark: "colorPalette.800",
|
|
3235
3195
|
},
|
|
3236
3196
|
}, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3237
3197
|
? null
|
|
@@ -3259,29 +3219,17 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
|
|
|
3259
3219
|
});
|
|
3260
3220
|
}, children: [jsxRuntime.jsx(gr.GrDescend, {}), "Sort Descending"] }) }), header.column.getIsSorted() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3261
3221
|
header.column.clearSorting();
|
|
3262
|
-
}, children: [jsxRuntime.jsx(md.MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3222
|
+
}, children: [jsxRuntime.jsx(md.MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3223
|
+
? "colorPalette.700"
|
|
3224
|
+
: "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
|
|
3263
3225
|
borderRightColor: header.column.getIsResizing()
|
|
3264
|
-
? "
|
|
3265
|
-
: "
|
|
3226
|
+
? "colorPalette.700"
|
|
3227
|
+
: "colorPalette.400",
|
|
3266
3228
|
}, ...resizeProps }))] }, `chakra-table-header-${header.id}`));
|
|
3267
3229
|
})] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
|
|
3268
3230
|
};
|
|
3269
3231
|
|
|
3270
|
-
const
|
|
3271
|
-
const { title, description, icon, children, ...rest } = props;
|
|
3272
|
-
return (jsxRuntime.jsx(react.EmptyState.Root, { ref: ref, ...rest, children: jsxRuntime.jsxs(react.EmptyState.Content, { children: [icon && (jsxRuntime.jsx(react.EmptyState.Indicator, { children: icon })), description ? (jsxRuntime.jsxs(react.VStack, { textAlign: "center", children: [jsxRuntime.jsx(react.EmptyState.Title, { children: title }), jsxRuntime.jsx(react.EmptyState.Description, { children: description })] })) : (jsxRuntime.jsx(react.EmptyState.Title, { children: title })), children] }) }));
|
|
3273
|
-
});
|
|
3274
|
-
|
|
3275
|
-
const EmptyResult = (jsxRuntime.jsx(EmptyState, { icon: jsxRuntime.jsx(hi.HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxRuntime.jsxs(react.List.Root, { variant: "marker", children: [jsxRuntime.jsx(react.List.Item, { children: "Try removing filters" }), jsxRuntime.jsx(react.List.Item, { children: "Try different keywords" })] }) }));
|
|
3276
|
-
const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
|
|
3277
|
-
const { table } = useDataTableContext();
|
|
3278
|
-
if (table.getRowModel().rows.length <= 0) {
|
|
3279
|
-
return emptyComponent;
|
|
3280
|
-
}
|
|
3281
|
-
return (jsxRuntime.jsx(react.Table.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", ...props, children: children }));
|
|
3282
|
-
};
|
|
3283
|
-
|
|
3284
|
-
const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, controlProps = {}, tableFooterProps = {}, variant = "", }) => {
|
|
3232
|
+
const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, tableFooterProps = {}, controlProps = {}, variant = "", }) => {
|
|
3285
3233
|
if (variant === "greedy") {
|
|
3286
3234
|
return (jsxRuntime.jsx(TableControls, { ...controlProps, children: jsxRuntime.jsxs(Table, { canResize: false, ...{ ...tableProps }, children: [jsxRuntime.jsx(TableHeader, { canResize: false, ...tableHeaderProps }), jsxRuntime.jsx(TableBody, { canResize: false, ...tableBodyProps }), showFooter && (jsxRuntime.jsx(TableFooter, { canResize: false, ...tableFooterProps }))] }) }));
|
|
3287
3235
|
}
|
|
@@ -3541,6 +3489,73 @@ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {},
|
|
|
3541
3489
|
return columns;
|
|
3542
3490
|
};
|
|
3543
3491
|
|
|
3492
|
+
const TableDataDisplay = ({ colorPalette, emptyComponent, }) => {
|
|
3493
|
+
const { table, columns, translate, data } = useDataTableContext();
|
|
3494
|
+
const columnDef = table._getColumnDefs();
|
|
3495
|
+
console.log(columnDef, "glp");
|
|
3496
|
+
console.log(columnDef, columns, table.getState().columnOrder, data, "glp");
|
|
3497
|
+
const columnsMap = Object.fromEntries(columns.map((def) => {
|
|
3498
|
+
const { accessorKey, id } = def;
|
|
3499
|
+
if (accessorKey) {
|
|
3500
|
+
return [accessorKey, def];
|
|
3501
|
+
}
|
|
3502
|
+
return [id, def];
|
|
3503
|
+
}));
|
|
3504
|
+
const columnHeaders = Object.keys(columnsMap);
|
|
3505
|
+
const totalWidths = columns
|
|
3506
|
+
.map(({ size }) => {
|
|
3507
|
+
if (!!size === false) {
|
|
3508
|
+
return 0;
|
|
3509
|
+
}
|
|
3510
|
+
if (typeof size === "number") {
|
|
3511
|
+
return size;
|
|
3512
|
+
}
|
|
3513
|
+
return 0;
|
|
3514
|
+
})
|
|
3515
|
+
.reduce((previous, current) => previous + current, 0);
|
|
3516
|
+
const columnWidths = columns
|
|
3517
|
+
.map(({ size }) => {
|
|
3518
|
+
if (!!size === false) {
|
|
3519
|
+
return "1fr";
|
|
3520
|
+
}
|
|
3521
|
+
return `minmax(${size}px, ${(size / totalWidths) * 100}%)`;
|
|
3522
|
+
})
|
|
3523
|
+
.join(" ");
|
|
3524
|
+
console.log({ columnWidths }, "hadfg");
|
|
3525
|
+
const cellProps = {
|
|
3526
|
+
flex: "1 0 0%",
|
|
3527
|
+
overflow: "auto",
|
|
3528
|
+
paddingX: "2",
|
|
3529
|
+
py: "1",
|
|
3530
|
+
color: { base: "colorPalette.900", _dark: "colorPalette.100" },
|
|
3531
|
+
bgColor: { base: "colorPalette.50", _dark: "colorPalette.950" },
|
|
3532
|
+
borderBottomColor: { base: "colorPalette.200", _dark: "colorPalette.800" },
|
|
3533
|
+
borderBottomWidth: "1px",
|
|
3534
|
+
...{ colorPalette },
|
|
3535
|
+
};
|
|
3536
|
+
if (data.length <= 0) {
|
|
3537
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: emptyComponent });
|
|
3538
|
+
}
|
|
3539
|
+
return (jsxRuntime.jsxs(react.Grid, { templateColumns: `${columnWidths}`, overflow: "auto", borderWidth: "1px", color: { base: "colorPalette.900", _dark: "colorPalette.100" }, borderColor: { base: "colorPalette.200", _dark: "colorPalette.800" }, colorPalette, children: [jsxRuntime.jsx(react.Grid, { templateColumns: `${columnWidths}`, column: `1/span ${columns.length}`, bg: { base: "colorPalette.200", _dark: "colorPalette.800" }, colorPalette, children: columnHeaders.map((header) => {
|
|
3540
|
+
return (jsxRuntime.jsx(react.Box, { flex: "1 0 0%", paddingX: "2", py: "1", overflow: "auto", textOverflow: "ellipsis", children: translate.t(`column_header.${header}`) }));
|
|
3541
|
+
}) }), data.map((record) => {
|
|
3542
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: columnHeaders.map((header) => {
|
|
3543
|
+
const { cell } = columnsMap[header];
|
|
3544
|
+
const value = record[header];
|
|
3545
|
+
if (!!record === false) {
|
|
3546
|
+
return (jsxRuntime.jsx(react.Box, { ...cellProps, children: translate.t(`column_cell.placeholder`) }));
|
|
3547
|
+
}
|
|
3548
|
+
if (cell) {
|
|
3549
|
+
return (jsxRuntime.jsx(react.Box, { ...cellProps, children: cell({ row: { original: record } }) }));
|
|
3550
|
+
}
|
|
3551
|
+
if (typeof value === "object") {
|
|
3552
|
+
return (jsxRuntime.jsx(react.Box, { ...cellProps, children: jsxRuntime.jsx(RecordDisplay, { object: value }) }));
|
|
3553
|
+
}
|
|
3554
|
+
return jsxRuntime.jsx(react.Box, { ...cellProps, children: value });
|
|
3555
|
+
}) }));
|
|
3556
|
+
})] }));
|
|
3557
|
+
};
|
|
3558
|
+
|
|
3544
3559
|
const AccordionItemTrigger = React__namespace.forwardRef(function AccordionItemTrigger(props, ref) {
|
|
3545
3560
|
const { children, indicatorPlacement = "end", ...rest } = props;
|
|
3546
3561
|
return (jsxRuntime.jsxs(react.Accordion.ItemTrigger, { ...rest, ref: ref, children: [indicatorPlacement === "start" && (jsxRuntime.jsx(react.Accordion.ItemIndicator, { rotate: { base: "-90deg", _open: "0deg" }, children: jsxRuntime.jsx(lu.LuChevronDown, {}) })), jsxRuntime.jsx(react.HStack, { gap: "4", flex: "1", textAlign: "start", width: "full", children: children }), indicatorPlacement === "end" && (jsxRuntime.jsx(react.Accordion.ItemIndicator, { children: jsxRuntime.jsx(lu.LuChevronDown, {}) }))] }));
|
|
@@ -3636,7 +3651,7 @@ const ArrayRenderer = ({ schema, column, prefix, }) => {
|
|
|
3636
3651
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3637
3652
|
const { formState: { errors }, setValue, watch, } = reactHookForm.useFormContext();
|
|
3638
3653
|
const fields = (watch(colLabel) ?? []);
|
|
3639
|
-
return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.
|
|
3654
|
+
return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", children: [jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaRenderer, { column: `${index}`,
|
|
3640
3655
|
prefix: `${colLabel}.`,
|
|
3641
3656
|
schema: items }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(react.Button, { variant: "ghost", onClick: () => {
|
|
3642
3657
|
setValue(colLabel, fields.filter((_, curIndex) => {
|
|
@@ -3656,7 +3671,7 @@ const ArrayRenderer = ({ schema, column, prefix, }) => {
|
|
|
3656
3671
|
return;
|
|
3657
3672
|
}
|
|
3658
3673
|
setValue(colLabel, [...fields, {}]);
|
|
3659
|
-
}, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
3674
|
+
}, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3660
3675
|
};
|
|
3661
3676
|
|
|
3662
3677
|
const Field = React__namespace.forwardRef(function Field(props, ref) {
|
|
@@ -3671,10 +3686,22 @@ const BooleanPicker = ({ schema, column, prefix }) => {
|
|
|
3671
3686
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3672
3687
|
const colLabel = `${prefix}${column}`;
|
|
3673
3688
|
const value = watch(colLabel);
|
|
3674
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
3689
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3675
3690
|
gridRow, children: [jsxRuntime.jsx(CheckboxCard, { checked: value, variant: "surface", onChange: () => {
|
|
3676
3691
|
setValue(colLabel, !value);
|
|
3677
|
-
} }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
3692
|
+
} }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3693
|
+
};
|
|
3694
|
+
|
|
3695
|
+
const CustomInput = ({ column, schema, prefix }) => {
|
|
3696
|
+
const formContext = reactHookForm.useFormContext();
|
|
3697
|
+
const { inputRender } = schema;
|
|
3698
|
+
return (inputRender &&
|
|
3699
|
+
inputRender({
|
|
3700
|
+
column,
|
|
3701
|
+
schema,
|
|
3702
|
+
prefix,
|
|
3703
|
+
formContext,
|
|
3704
|
+
}));
|
|
3678
3705
|
};
|
|
3679
3706
|
|
|
3680
3707
|
const monthNamesShort = [
|
|
@@ -3764,27 +3791,54 @@ const PopoverRoot = react.Popover.Root;
|
|
|
3764
3791
|
const PopoverBody = react.Popover.Body;
|
|
3765
3792
|
const PopoverTrigger = react.Popover.Trigger;
|
|
3766
3793
|
|
|
3794
|
+
dayjs.extend(utc);
|
|
3767
3795
|
const DatePicker = ({ column, schema, prefix }) => {
|
|
3768
3796
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
3769
3797
|
const { translate } = useSchemaContext();
|
|
3770
|
-
const { required, gridColumn, gridRow } = schema;
|
|
3798
|
+
const { required, gridColumn = "span 4", gridRow = "span 1", displayDateFormat = "YYYY-MM-DD", dateFormat = "YYYY-MM-DD[T]HH:mm:ss[Z]", } = schema;
|
|
3771
3799
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3772
3800
|
const colLabel = `${prefix}${column}`;
|
|
3773
3801
|
const [open, setOpen] = React.useState(false);
|
|
3774
3802
|
const selectedDate = watch(colLabel);
|
|
3775
|
-
|
|
3776
|
-
|
|
3803
|
+
const displayDate = dayjs.utc(selectedDate).format(displayDateFormat);
|
|
3804
|
+
React.useEffect(() => {
|
|
3805
|
+
try {
|
|
3806
|
+
if (selectedDate) {
|
|
3807
|
+
// Parse the selectedDate as UTC or in a specific timezone to avoid +8 hour shift
|
|
3808
|
+
// For example, parse as UTC:
|
|
3809
|
+
const parsedDate = dayjs.utc(selectedDate);
|
|
3810
|
+
// Or if you want to parse in local timezone without shifting:
|
|
3811
|
+
// const parsedDate = dayjs.tz(selectedDate, dayjs.tz.guess());
|
|
3812
|
+
if (!parsedDate.isValid())
|
|
3813
|
+
return;
|
|
3814
|
+
// Format according to dateFormat from schema
|
|
3815
|
+
const formatted = parsedDate.format(dateFormat);
|
|
3816
|
+
// Update the form value only if different to avoid loops
|
|
3817
|
+
if (formatted !== selectedDate) {
|
|
3818
|
+
setValue(colLabel, formatted, {
|
|
3819
|
+
shouldValidate: true,
|
|
3820
|
+
shouldDirty: true,
|
|
3821
|
+
});
|
|
3822
|
+
}
|
|
3823
|
+
}
|
|
3824
|
+
}
|
|
3825
|
+
catch (e) {
|
|
3826
|
+
console.error(e);
|
|
3827
|
+
}
|
|
3828
|
+
}, [selectedDate, dateFormat, colLabel, setValue]);
|
|
3829
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3830
|
+
gridRow, children: [jsxRuntime.jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: jsxRuntime.jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
3777
3831
|
setOpen(true);
|
|
3778
|
-
}, children: selectedDate !== undefined ?
|
|
3832
|
+
}, justifyContent: "start", children: [jsxRuntime.jsx(md.MdDateRange, {}), selectedDate !== undefined ? `${displayDate}` : ""] }) }), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { children: [jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(DatePicker$1
|
|
3779
3833
|
// @ts-expect-error TODO: find appropriate types
|
|
3780
3834
|
, {
|
|
3781
3835
|
// @ts-expect-error TODO: find appropriate types
|
|
3782
3836
|
selected: new Date(selectedDate),
|
|
3783
3837
|
// @ts-expect-error TODO: find appropriate types
|
|
3784
3838
|
onDateSelected: ({ date }) => {
|
|
3785
|
-
setValue(colLabel, dayjs(date).format(
|
|
3839
|
+
setValue(colLabel, dayjs(date).format(dateFormat));
|
|
3786
3840
|
setOpen(false);
|
|
3787
|
-
} })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
3841
|
+
} })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3788
3842
|
};
|
|
3789
3843
|
|
|
3790
3844
|
function filterArray(array, searchTerm) {
|
|
@@ -3800,7 +3854,7 @@ function filterArray(array, searchTerm) {
|
|
|
3800
3854
|
const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
3801
3855
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
3802
3856
|
const { translate } = useSchemaContext();
|
|
3803
|
-
const { required } = schema;
|
|
3857
|
+
const { required, variant } = schema;
|
|
3804
3858
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3805
3859
|
const { gridColumn, gridRow, renderDisplay } = schema;
|
|
3806
3860
|
const [searchText, setSearchText] = React.useState();
|
|
@@ -3817,25 +3871,40 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3817
3871
|
setSearchText(event.target.value);
|
|
3818
3872
|
setLimit(10);
|
|
3819
3873
|
};
|
|
3820
|
-
|
|
3874
|
+
if (variant === "radio") {
|
|
3875
|
+
return (jsxRuntime.jsx(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3876
|
+
gridRow, children: jsxRuntime.jsx(react.RadioGroup.Root, { defaultValue: "1", children: jsxRuntime.jsx(react.HStack, { gap: "6", children: filterArray(dataList, searchText ?? "").map((item) => {
|
|
3877
|
+
return (jsxRuntime.jsxs(react.RadioGroup.Item, { onClick: () => {
|
|
3878
|
+
if (!isMultiple) {
|
|
3879
|
+
setOpenSearchResult(false);
|
|
3880
|
+
setValue(colLabel, item);
|
|
3881
|
+
return;
|
|
3882
|
+
}
|
|
3883
|
+
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
3884
|
+
setValue(colLabel, [...newSet]);
|
|
3885
|
+
}, value: item, children: [jsxRuntime.jsx(react.RadioGroup.ItemHiddenInput, {}), jsxRuntime.jsx(react.RadioGroup.ItemIndicator, {}), jsxRuntime.jsx(react.RadioGroup.ItemText, { children: !!renderDisplay === true
|
|
3886
|
+
? renderDisplay(item)
|
|
3887
|
+
: translate.t(removeIndex(`${colLabel}.${item}`)) })] }, `${colLabel}-${item}`));
|
|
3888
|
+
}) }) }) }));
|
|
3889
|
+
}
|
|
3890
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3821
3891
|
gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
|
|
3822
3892
|
const item = enumValue;
|
|
3823
3893
|
if (item === undefined) {
|
|
3824
3894
|
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "undefined" });
|
|
3825
3895
|
}
|
|
3826
3896
|
return (jsxRuntime.jsx(Tag, { closable: true, onClick: () => {
|
|
3827
|
-
// setSelectedEnums((state) => state.filter((id) => id != item));
|
|
3828
3897
|
setValue(column, watchEnums.filter((id) => id != item));
|
|
3829
3898
|
}, children: !!renderDisplay === true
|
|
3830
3899
|
? renderDisplay(item)
|
|
3831
3900
|
: translate.t(removeIndex(`${colLabel}.${item}`)) }));
|
|
3832
3901
|
}), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
|
|
3833
3902
|
setOpenSearchResult(true);
|
|
3834
|
-
}, children: translate.t(removeIndex(`${colLabel}.
|
|
3903
|
+
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
|
|
3835
3904
|
setOpenSearchResult(true);
|
|
3836
|
-
}, children: watchEnum === undefined
|
|
3905
|
+
}, justifyContent: "start", children: watchEnum === undefined
|
|
3837
3906
|
? ""
|
|
3838
|
-
: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${column}.
|
|
3907
|
+
: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${column}.type_to_search`), onChange: (event) => {
|
|
3839
3908
|
onSearchChange(event);
|
|
3840
3909
|
setOpenSearchResult(true);
|
|
3841
3910
|
}, autoComplete: "off", ref: ref }), jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(react.Text, { children: `${translate.t(`${column}.total`)}: ${count}, ${translate.t(`${column}.showing`)} ${limit}` }), jsxRuntime.jsxs(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children: filterArray(dataList, searchText ?? "").map((item) => {
|
|
@@ -3850,10 +3919,10 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3850
3919
|
}
|
|
3851
3920
|
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
3852
3921
|
setValue(colLabel, [...newSet]);
|
|
3853
|
-
}, ...(selected ? { color: "
|
|
3922
|
+
}, ...(selected ? { color: "colorPalette.400/50" } : {}), children: !!renderDisplay === true
|
|
3854
3923
|
? renderDisplay(item)
|
|
3855
3924
|
: translate.t(removeIndex(`${colLabel}.${item}`)) }, `${colLabel}-${item}`));
|
|
3856
|
-
}) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: translate.t(removeIndex(`${colLabel}.
|
|
3925
|
+
}) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3857
3926
|
};
|
|
3858
3927
|
|
|
3859
3928
|
function isEnteringWindow(_ref) {
|
|
@@ -4205,7 +4274,7 @@ const FileDropzone = ({ children = undefined, gridProps = {}, onDrop = () => { }
|
|
|
4205
4274
|
const filesArray = [...event.target.files];
|
|
4206
4275
|
onDrop({ files: filesArray });
|
|
4207
4276
|
};
|
|
4208
|
-
return (jsxRuntime.jsxs(react.Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "
|
|
4277
|
+
return (jsxRuntime.jsxs(react.Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "colorPalette.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 })] }))] }));
|
|
4209
4278
|
};
|
|
4210
4279
|
|
|
4211
4280
|
const FilePicker = ({ column, schema, prefix }) => {
|
|
@@ -4215,7 +4284,7 @@ const FilePicker = ({ column, schema, prefix }) => {
|
|
|
4215
4284
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4216
4285
|
const currentFiles = (watch(column) ?? []);
|
|
4217
4286
|
const colLabel = `${prefix}${column}`;
|
|
4218
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.
|
|
4287
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${colLabel}.field_label`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: [jsxRuntime.jsx(FileDropzone, { onDrop: ({ files }) => {
|
|
4219
4288
|
const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
|
|
4220
4289
|
setValue(colLabel, [...currentFiles, ...newFiles]);
|
|
4221
4290
|
}, placeholder: translate.t(removeIndex(`${colLabel}.fileDropzone`)) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
@@ -4223,8 +4292,8 @@ const FilePicker = ({ column, schema, prefix }) => {
|
|
|
4223
4292
|
setValue(column, currentFiles.filter(({ name }) => {
|
|
4224
4293
|
return name !== file.name;
|
|
4225
4294
|
}));
|
|
4226
|
-
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
|
|
4227
|
-
}) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4295
|
+
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsxRuntime.jsx(react.Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
|
|
4296
|
+
}) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4228
4297
|
};
|
|
4229
4298
|
|
|
4230
4299
|
const getTableData = async ({ serverUrl, in_table, searching = "", where = [], limit = 10, offset = 0, }) => {
|
|
@@ -4339,9 +4408,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4339
4408
|
if (record === undefined) {
|
|
4340
4409
|
return "";
|
|
4341
4410
|
}
|
|
4411
|
+
if (!!renderDisplay === true) {
|
|
4412
|
+
return renderDisplay(record);
|
|
4413
|
+
}
|
|
4342
4414
|
return record[display_column];
|
|
4343
4415
|
};
|
|
4344
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.
|
|
4416
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.field_label`)))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4345
4417
|
gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchIds.map((id) => {
|
|
4346
4418
|
const item = idMap[id];
|
|
4347
4419
|
if (item === undefined) {
|
|
@@ -4354,9 +4426,9 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4354
4426
|
: item[display_column] }, id));
|
|
4355
4427
|
}), jsxRuntime.jsx(Tag, { cursor: "pointer", onClick: () => {
|
|
4356
4428
|
setOpenSearchResult(true);
|
|
4357
|
-
}, children: translate.t(removeIndex(`${colLabel}.
|
|
4429
|
+
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
|
|
4358
4430
|
setOpenSearchResult(true);
|
|
4359
|
-
}, children: getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.
|
|
4431
|
+
}, justifyContent: "start", children: getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.type_to_search`)), onChange: (event) => {
|
|
4360
4432
|
onSearchChange(event);
|
|
4361
4433
|
setOpenSearchResult(true);
|
|
4362
4434
|
}, 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" }), (isFetching || isLoading || isPending) && jsxRuntime.jsx(react.Spinner, {}), isError && (jsxRuntime.jsx(react.Icon, { color: "red.400", children: jsxRuntime.jsx(bi.BiError, {}) })), jsxRuntime.jsx(react.Text, { justifySelf: "center", children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit}` }), jsxRuntime.jsxs(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children:
|
|
@@ -4376,10 +4448,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4376
4448
|
item[column_ref],
|
|
4377
4449
|
]);
|
|
4378
4450
|
setValue(colLabel, [...newSet]);
|
|
4379
|
-
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
|
|
4451
|
+
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
|
|
4452
|
+
? { color: "colorPalette.400/50" }
|
|
4453
|
+
: {}), children: !!renderDisplay === true
|
|
4380
4454
|
? renderDisplay(item)
|
|
4381
4455
|
: item[display_column] }, item[column_ref]));
|
|
4382
|
-
}) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.
|
|
4456
|
+
}) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] }), jsxRuntime.jsx(PaginationRoot, { justifySelf: "center", count: count, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxRuntime.jsxs(react.HStack, { gap: "4", children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), count > 0 && jsxRuntime.jsx(PaginationPageText, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4383
4457
|
};
|
|
4384
4458
|
|
|
4385
4459
|
const NumberInputRoot = React__namespace.forwardRef(function NumberInput(props, ref) {
|
|
@@ -4397,9 +4471,9 @@ const NumberInputField = ({ schema, column, prefix, }) => {
|
|
|
4397
4471
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4398
4472
|
const colLabel = `${prefix}${column}`;
|
|
4399
4473
|
const value = watch(`${colLabel}`);
|
|
4400
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
4474
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(NumberInputRoot, { children: jsxRuntime.jsx(NumberInputField$1, { required: isRequired, value: value, onChange: (event) => {
|
|
4401
4475
|
setValue(`${colLabel}`, Number(event.target.value));
|
|
4402
|
-
} }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4476
|
+
} }) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4403
4477
|
};
|
|
4404
4478
|
|
|
4405
4479
|
const ObjectInput = ({ schema, column, prefix }) => {
|
|
@@ -4411,13 +4485,13 @@ const ObjectInput = ({ schema, column, prefix }) => {
|
|
|
4411
4485
|
if (properties === undefined) {
|
|
4412
4486
|
throw new Error(`properties is undefined when using ObjectInput`);
|
|
4413
4487
|
}
|
|
4414
|
-
return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.
|
|
4488
|
+
return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, 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) => {
|
|
4415
4489
|
return (
|
|
4416
4490
|
// @ts-expect-error find suitable types
|
|
4417
4491
|
jsxRuntime.jsx(ColumnRenderer, { column: `${key}`,
|
|
4418
4492
|
prefix: `${prefix}${column}.`,
|
|
4419
4493
|
properties }, `form-${colLabel}-${key}`));
|
|
4420
|
-
}) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4494
|
+
}) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4421
4495
|
};
|
|
4422
4496
|
|
|
4423
4497
|
const RecordInput$1 = ({ column, schema, prefix }) => {
|
|
@@ -4429,7 +4503,7 @@ const RecordInput$1 = ({ column, schema, prefix }) => {
|
|
|
4429
4503
|
const [showNewEntries, setShowNewEntries] = React.useState(false);
|
|
4430
4504
|
const [newKey, setNewKey] = React.useState();
|
|
4431
4505
|
const [newValue, setNewValue] = React.useState();
|
|
4432
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.
|
|
4506
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.field_label`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
|
|
4433
4507
|
return (jsxRuntime.jsxs(react.Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsxRuntime.jsx(react.Input, { value: key, onChange: (e) => {
|
|
4434
4508
|
const filtered = entries.filter(([target]) => {
|
|
4435
4509
|
return target !== key;
|
|
@@ -4469,7 +4543,7 @@ const RecordInput$1 = ({ column, schema, prefix }) => {
|
|
|
4469
4543
|
setShowNewEntries(true);
|
|
4470
4544
|
setNewKey(undefined);
|
|
4471
4545
|
setNewValue(undefined);
|
|
4472
|
-
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.
|
|
4546
|
+
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
|
|
4473
4547
|
};
|
|
4474
4548
|
|
|
4475
4549
|
const StringInputField = ({ column, schema, prefix, }) => {
|
|
@@ -4478,7 +4552,7 @@ const StringInputField = ({ column, schema, prefix, }) => {
|
|
|
4478
4552
|
const { required, gridColumn, gridRow } = schema;
|
|
4479
4553
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4480
4554
|
const colLabel = `${prefix}${column}`;
|
|
4481
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
4555
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Input, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
4482
4556
|
};
|
|
4483
4557
|
|
|
4484
4558
|
const RadioCardItem = React__namespace.forwardRef(function RadioCardItem(props, ref) {
|
|
@@ -4576,9 +4650,124 @@ const TagPicker = ({ column, schema, prefix }) => {
|
|
|
4576
4650
|
}), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
|
|
4577
4651
|
};
|
|
4578
4652
|
|
|
4653
|
+
const TextAreaInput = ({ column, schema, prefix, }) => {
|
|
4654
|
+
const { register, formState: { errors }, } = reactHookForm.useFormContext();
|
|
4655
|
+
const { translate } = useSchemaContext();
|
|
4656
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4657
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4658
|
+
const colLabel = `${prefix}${column}`;
|
|
4659
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Textarea, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
4660
|
+
};
|
|
4661
|
+
|
|
4662
|
+
function TimePicker$1({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel = {
|
|
4663
|
+
am: "am",
|
|
4664
|
+
pm: "pm",
|
|
4665
|
+
}, onChange = () => { }, }) {
|
|
4666
|
+
const hours = Array.from({ length: 12 }, (_, i) => {
|
|
4667
|
+
const hour = i + 1;
|
|
4668
|
+
return hour.toString().padStart(2, "0");
|
|
4669
|
+
});
|
|
4670
|
+
const minutes = Array.from({ length: 60 }, (_, i) => {
|
|
4671
|
+
return i.toString().padStart(2, "0");
|
|
4672
|
+
});
|
|
4673
|
+
const hoursCollection = react.createListCollection({
|
|
4674
|
+
items: hours.map((hour) => ({
|
|
4675
|
+
value: hour,
|
|
4676
|
+
label: hour,
|
|
4677
|
+
})),
|
|
4678
|
+
});
|
|
4679
|
+
const minutesCollection = react.createListCollection({
|
|
4680
|
+
items: minutes.map((hour) => ({
|
|
4681
|
+
value: hour,
|
|
4682
|
+
label: hour,
|
|
4683
|
+
})),
|
|
4684
|
+
});
|
|
4685
|
+
const meridiemsCollection = react.createListCollection({
|
|
4686
|
+
items: ["am", "pm"].map((hour) => ({
|
|
4687
|
+
value: hour,
|
|
4688
|
+
label: meridiemLabel[hour] ?? hour,
|
|
4689
|
+
})),
|
|
4690
|
+
});
|
|
4691
|
+
return (jsxRuntime.jsxs(react.Grid, { templateColumns: "auto auto", gap: "4", children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "center", alignItems: "center", gap: "2", children: [jsxRuntime.jsxs(react.Select.Root, { value: [`${hour.toString().padStart(2, "0")}`], onValueChange: (e) => {
|
|
4692
|
+
setHour(parseInt(e.value[0]));
|
|
4693
|
+
onChange({ hour: parseInt(e.value[0]), minute, meridiem });
|
|
4694
|
+
}, collection: hoursCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "Hour" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: hoursCollection.items.map(({ value: hour }) => (jsxRuntime.jsxs(react.Select.Item, { item: hour, children: [hour, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, hour))) }) })] }), jsxRuntime.jsx(react.Text, { children: ":" }), jsxRuntime.jsxs(react.Select.Root, { value: [`${minute.toString().padStart(2, "0")}`], onValueChange: (e) => {
|
|
4695
|
+
setMinute(parseInt(e.value[0]));
|
|
4696
|
+
onChange({ hour, minute: parseInt(e.value[0]), meridiem });
|
|
4697
|
+
}, collection: minutesCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "Minute" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: minutes.map((minute) => (jsxRuntime.jsxs(react.Select.Item, { item: minute, children: [minute, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, minute))) }) })] })] }), jsxRuntime.jsxs(react.Select.Root, { value: [meridiem], onValueChange: (e) => {
|
|
4698
|
+
setMeridiem(e.value[0]);
|
|
4699
|
+
onChange({ hour, minute, meridiem: e.value[0] });
|
|
4700
|
+
}, collection: meridiemsCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "am/pm" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: meridiemsCollection.items.map(({ value: hour, label }) => (jsxRuntime.jsxs(react.Select.Item, { item: hour, children: [label, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, hour))) }) })] })] }));
|
|
4701
|
+
}
|
|
4702
|
+
|
|
4703
|
+
const TimePicker = ({ column, schema, prefix }) => {
|
|
4704
|
+
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
4705
|
+
const { translate } = useSchemaContext();
|
|
4706
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4707
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4708
|
+
const colLabel = `${prefix}${column}`;
|
|
4709
|
+
const [open, setOpen] = React.useState(false);
|
|
4710
|
+
const value = watch(colLabel);
|
|
4711
|
+
const formatedTime = dayjs(value).format("hh:mm A");
|
|
4712
|
+
// Parse the initial time parts from the ISO time string (HH:mm:ss)
|
|
4713
|
+
const parseTime = (isoTime) => {
|
|
4714
|
+
if (!isoTime)
|
|
4715
|
+
return { hour: 12, minute: 0, meridiem: "am" };
|
|
4716
|
+
const parsed = dayjs(isoTime);
|
|
4717
|
+
if (!parsed.isValid())
|
|
4718
|
+
return { hour: 12, minute: 0, meridiem: "am" };
|
|
4719
|
+
let hour = parsed.hour();
|
|
4720
|
+
const minute = parsed.minute();
|
|
4721
|
+
const meridiem = hour >= 12 ? "pm" : "am";
|
|
4722
|
+
if (hour === 0)
|
|
4723
|
+
hour = 12;
|
|
4724
|
+
else if (hour > 12)
|
|
4725
|
+
hour -= 12;
|
|
4726
|
+
return { hour, minute, meridiem };
|
|
4727
|
+
};
|
|
4728
|
+
const initialTime = parseTime(value);
|
|
4729
|
+
const [hour, setHour] = React.useState(initialTime.hour);
|
|
4730
|
+
const [minute, setMinute] = React.useState(initialTime.minute);
|
|
4731
|
+
const [meridiem, setMeridiem] = React.useState(initialTime.meridiem);
|
|
4732
|
+
React.useEffect(() => {
|
|
4733
|
+
const { hour, minute, meridiem } = parseTime(value);
|
|
4734
|
+
setHour(hour);
|
|
4735
|
+
setMinute(minute);
|
|
4736
|
+
setMeridiem(meridiem);
|
|
4737
|
+
}, [value]);
|
|
4738
|
+
// Convert hour, minute, meridiem to 24-hour ISO time string
|
|
4739
|
+
const toIsoTime = (hour, minute, meridiem) => {
|
|
4740
|
+
let h = hour;
|
|
4741
|
+
if (meridiem === "am" && hour === 12)
|
|
4742
|
+
h = 0;
|
|
4743
|
+
else if (meridiem === "pm" && hour < 12)
|
|
4744
|
+
h = hour + 12;
|
|
4745
|
+
return dayjs().hour(h).minute(minute).second(0).toISOString();
|
|
4746
|
+
};
|
|
4747
|
+
// Handle changes to time parts
|
|
4748
|
+
const handleTimeChange = ({ hour: newHour, minute: newMinute, meridiem: newMeridiem, }) => {
|
|
4749
|
+
setHour(newHour);
|
|
4750
|
+
setMinute(newMinute);
|
|
4751
|
+
setMeridiem(newMeridiem);
|
|
4752
|
+
const isoTime = toIsoTime(newHour, newMinute, newMeridiem);
|
|
4753
|
+
setValue(colLabel, isoTime, { shouldValidate: true, shouldDirty: true });
|
|
4754
|
+
};
|
|
4755
|
+
const containerRef = React.useRef(null);
|
|
4756
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4757
|
+
gridRow, children: [jsxRuntime.jsxs(react.Popover.Root, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(react.Popover.Trigger, { asChild: true, children: jsxRuntime.jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
4758
|
+
setOpen(true);
|
|
4759
|
+
}, justifyContent: "start", children: [jsxRuntime.jsx(io.IoMdClock, {}), value !== undefined ? `${formatedTime}` : ""] }) }), jsxRuntime.jsx(react.Portal, { children: jsxRuntime.jsx(react.Popover.Positioner, { children: jsxRuntime.jsx(react.Popover.Content, { ref: containerRef, children: jsxRuntime.jsx(react.Popover.Body, { children: jsxRuntime.jsx(TimePicker$1, { hour: hour, setHour: setHour, minute: minute, setMinute: setMinute, meridiem: meridiem, setMeridiem: setMeridiem, onChange: handleTimeChange, meridiemLabel: {
|
|
4760
|
+
am: translate.t(removeIndex(`${colLabel}.am`)),
|
|
4761
|
+
pm: translate.t(removeIndex(`${colLabel}.pm`)),
|
|
4762
|
+
} }) }) }) }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4763
|
+
};
|
|
4764
|
+
|
|
4579
4765
|
const SchemaRenderer = ({ schema, prefix, column, }) => {
|
|
4580
4766
|
const colSchema = schema;
|
|
4581
4767
|
const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
|
|
4768
|
+
if (variant === "custom-input") {
|
|
4769
|
+
return jsxRuntime.jsx(CustomInput, { schema: colSchema, prefix, column });
|
|
4770
|
+
}
|
|
4582
4771
|
if (type === "string") {
|
|
4583
4772
|
if ((schema.enum ?? []).length > 0) {
|
|
4584
4773
|
return jsxRuntime.jsx(EnumPicker, { schema: colSchema, prefix, column });
|
|
@@ -4590,6 +4779,12 @@ const SchemaRenderer = ({ schema, prefix, column, }) => {
|
|
|
4590
4779
|
if (variant === "date-picker") {
|
|
4591
4780
|
return jsxRuntime.jsx(DatePicker, { schema: colSchema, prefix, column });
|
|
4592
4781
|
}
|
|
4782
|
+
if (variant === "time-picker") {
|
|
4783
|
+
return jsxRuntime.jsx(TimePicker, { schema: colSchema, prefix, column });
|
|
4784
|
+
}
|
|
4785
|
+
if (variant === "text-area") {
|
|
4786
|
+
return jsxRuntime.jsx(TextAreaInput, { schema: colSchema, prefix, column });
|
|
4787
|
+
}
|
|
4593
4788
|
return jsxRuntime.jsx(StringInputField, { schema: colSchema, prefix, column });
|
|
4594
4789
|
}
|
|
4595
4790
|
if (type === "number" || type === "integer") {
|
|
@@ -4642,9 +4837,9 @@ const ArrayViewer = ({ schema, column, prefix }) => {
|
|
|
4642
4837
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4643
4838
|
const { watch, formState: { errors }, } = reactHookForm.useFormContext();
|
|
4644
4839
|
const values = watch(colLabel) ?? [];
|
|
4645
|
-
return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.
|
|
4840
|
+
return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsxRuntime.jsx("span", { children: "*" })] }), values.map((field, index) => (jsxRuntime.jsx(react.Flex, { flexFlow: "column", children: jsxRuntime.jsx(react.Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsxRuntime.jsx(SchemaViewer, { column: `${index}`,
|
|
4646
4841
|
prefix: `${colLabel}.`,
|
|
4647
|
-
schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4842
|
+
schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4648
4843
|
};
|
|
4649
4844
|
|
|
4650
4845
|
const BooleanViewer = ({ schema, column, prefix, }) => {
|
|
@@ -4654,21 +4849,34 @@ const BooleanViewer = ({ schema, column, prefix, }) => {
|
|
|
4654
4849
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4655
4850
|
const colLabel = `${prefix}${column}`;
|
|
4656
4851
|
const value = watch(colLabel);
|
|
4657
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
4852
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4658
4853
|
gridRow, children: [jsxRuntime.jsx(react.Text, { children: value
|
|
4659
4854
|
? translate.t(removeIndex(`${colLabel}.true`))
|
|
4660
|
-
: translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4855
|
+
: translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4856
|
+
};
|
|
4857
|
+
|
|
4858
|
+
const CustomViewer = ({ column, schema, prefix }) => {
|
|
4859
|
+
const formContext = reactHookForm.useFormContext();
|
|
4860
|
+
const { inputViewerRender } = schema;
|
|
4861
|
+
return (inputViewerRender &&
|
|
4862
|
+
inputViewerRender({
|
|
4863
|
+
column,
|
|
4864
|
+
schema,
|
|
4865
|
+
prefix,
|
|
4866
|
+
formContext,
|
|
4867
|
+
}));
|
|
4661
4868
|
};
|
|
4662
4869
|
|
|
4663
4870
|
const DateViewer = ({ column, schema, prefix }) => {
|
|
4664
4871
|
const { watch, formState: { errors }, } = reactHookForm.useFormContext();
|
|
4665
4872
|
const { translate } = useSchemaContext();
|
|
4666
|
-
const { required, gridColumn, gridRow } = schema;
|
|
4873
|
+
const { required, gridColumn = "span 4", gridRow = "span 1", displayDateFormat = "YYYY-MM-DD", } = schema;
|
|
4667
4874
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4668
4875
|
const colLabel = `${prefix}${column}`;
|
|
4669
4876
|
const selectedDate = watch(colLabel);
|
|
4670
|
-
|
|
4671
|
-
|
|
4877
|
+
const displayDate = dayjs.utc(selectedDate).format(displayDateFormat);
|
|
4878
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4879
|
+
gridRow, children: [jsxRuntime.jsxs(react.Text, { children: [" ", selectedDate !== undefined ? displayDate : ""] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
|
|
4672
4880
|
};
|
|
4673
4881
|
|
|
4674
4882
|
const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
@@ -4680,7 +4888,7 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
4680
4888
|
const colLabel = `${prefix}${column}`;
|
|
4681
4889
|
const watchEnum = watch(colLabel);
|
|
4682
4890
|
const watchEnums = (watch(colLabel) ?? []);
|
|
4683
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.
|
|
4891
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4684
4892
|
gridRow, children: [isMultiple && (jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 1, children: watchEnums.map((enumValue) => {
|
|
4685
4893
|
const item = enumValue;
|
|
4686
4894
|
if (item === undefined) {
|
|
@@ -4689,26 +4897,19 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
4689
4897
|
return (jsxRuntime.jsx(Tag, { closable: true, children: !!renderDisplay === true
|
|
4690
4898
|
? renderDisplay(item)
|
|
4691
4899
|
: translate.t(removeIndex(`${colLabel}.${item}`)) }));
|
|
4692
|
-
}) })), !isMultiple && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4900
|
+
}) })), !isMultiple && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4693
4901
|
};
|
|
4694
4902
|
|
|
4695
4903
|
const FileViewer = ({ column, schema, prefix }) => {
|
|
4696
|
-
const {
|
|
4904
|
+
const { watch } = reactHookForm.useFormContext();
|
|
4697
4905
|
const { translate } = useSchemaContext();
|
|
4698
4906
|
const { required, gridColumn, gridRow } = schema;
|
|
4699
4907
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4700
4908
|
const currentFiles = (watch(column) ?? []);
|
|
4701
4909
|
const colLabel = `${prefix}${column}`;
|
|
4702
|
-
return (jsxRuntime.
|
|
4703
|
-
|
|
4704
|
-
|
|
4705
|
-
}, placeholder: translate.t(`${colLabel}.fileDropzone`) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
4706
|
-
return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
|
|
4707
|
-
setValue(column, currentFiles.filter(({ name }) => {
|
|
4708
|
-
return name !== file.name;
|
|
4709
|
-
}));
|
|
4710
|
-
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
|
|
4711
|
-
}) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
|
|
4910
|
+
return (jsxRuntime.jsx(Field, { label: `${translate.t(`${colLabel}.field_label`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
4911
|
+
return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsxRuntime.jsx(react.Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsxRuntime.jsx(react.Box, { children: file.name })] }) }, file.name));
|
|
4912
|
+
}) }) }));
|
|
4712
4913
|
};
|
|
4713
4914
|
|
|
4714
4915
|
const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
@@ -4730,7 +4931,7 @@ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4730
4931
|
}
|
|
4731
4932
|
return record[display_column];
|
|
4732
4933
|
};
|
|
4733
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.
|
|
4934
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4734
4935
|
gridRow, children: [isMultiple && (jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: 1, children: watchIds.map((id) => {
|
|
4735
4936
|
const item = idMap[id];
|
|
4736
4937
|
if (item === undefined) {
|
|
@@ -4739,7 +4940,7 @@ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4739
4940
|
return (jsxRuntime.jsx(Tag, { closable: true, children: !!renderDisplay === true
|
|
4740
4941
|
? renderDisplay(item)
|
|
4741
4942
|
: item[display_column] }, id));
|
|
4742
|
-
}) })), !isMultiple && jsxRuntime.jsx(react.Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4943
|
+
}) })), !isMultiple && jsxRuntime.jsx(react.Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4743
4944
|
};
|
|
4744
4945
|
|
|
4745
4946
|
const NumberViewer = ({ schema, column, prefix, }) => {
|
|
@@ -4749,7 +4950,7 @@ const NumberViewer = ({ schema, column, prefix, }) => {
|
|
|
4749
4950
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4750
4951
|
const colLabel = `${prefix}${column}`;
|
|
4751
4952
|
const value = watch(colLabel);
|
|
4752
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
4953
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn, gridRow, children: [jsxRuntime.jsx(react.Text, { children: value }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4753
4954
|
};
|
|
4754
4955
|
|
|
4755
4956
|
const ObjectViewer = ({ schema, column, prefix }) => {
|
|
@@ -4761,13 +4962,13 @@ const ObjectViewer = ({ schema, column, prefix }) => {
|
|
|
4761
4962
|
if (properties === undefined) {
|
|
4762
4963
|
throw new Error(`properties is undefined when using ObjectInput`);
|
|
4763
4964
|
}
|
|
4764
|
-
return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.
|
|
4965
|
+
return (jsxRuntime.jsxs(react.Box, { gridRow, gridColumn, children: [jsxRuntime.jsxs(react.Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, 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) => {
|
|
4765
4966
|
return (
|
|
4766
4967
|
// @ts-expect-error find suitable types
|
|
4767
4968
|
jsxRuntime.jsx(ColumnViewer, { column: `${key}`,
|
|
4768
4969
|
prefix: `${prefix}${column}.`,
|
|
4769
4970
|
properties }, `form-objectviewer-${colLabel}-${key}`));
|
|
4770
|
-
}) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4971
|
+
}) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4771
4972
|
};
|
|
4772
4973
|
|
|
4773
4974
|
const RecordInput = ({ column, schema, prefix }) => {
|
|
@@ -4779,7 +4980,7 @@ const RecordInput = ({ column, schema, prefix }) => {
|
|
|
4779
4980
|
const [showNewEntries, setShowNewEntries] = React.useState(false);
|
|
4780
4981
|
const [newKey, setNewKey] = React.useState();
|
|
4781
4982
|
const [newValue, setNewValue] = React.useState();
|
|
4782
|
-
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.
|
|
4983
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(`${column}.field_label`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
|
|
4783
4984
|
return (jsxRuntime.jsxs(react.Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsxRuntime.jsx(react.Input, { value: key, onChange: (e) => {
|
|
4784
4985
|
const filtered = entries.filter(([target]) => {
|
|
4785
4986
|
return target !== key;
|
|
@@ -4819,7 +5020,17 @@ const RecordInput = ({ column, schema, prefix }) => {
|
|
|
4819
5020
|
setShowNewEntries(true);
|
|
4820
5021
|
setNewKey(undefined);
|
|
4821
5022
|
setNewValue(undefined);
|
|
4822
|
-
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.
|
|
5023
|
+
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
|
|
5024
|
+
};
|
|
5025
|
+
|
|
5026
|
+
const StringViewer = ({ column, schema, prefix, }) => {
|
|
5027
|
+
const { watch, formState: { errors }, } = reactHookForm.useFormContext();
|
|
5028
|
+
const { translate } = useSchemaContext();
|
|
5029
|
+
const { required, gridColumn, gridRow } = schema;
|
|
5030
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
5031
|
+
const colLabel = `${prefix}${column}`;
|
|
5032
|
+
const value = watch(colLabel);
|
|
5033
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Text, { children: value }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
4823
5034
|
};
|
|
4824
5035
|
|
|
4825
5036
|
const TagViewer = ({ column, schema, prefix }) => {
|
|
@@ -4907,19 +5118,35 @@ const TagViewer = ({ column, schema, prefix }) => {
|
|
|
4907
5118
|
}), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
|
|
4908
5119
|
};
|
|
4909
5120
|
|
|
4910
|
-
const
|
|
5121
|
+
const TextAreaViewer = ({ column, schema, prefix, }) => {
|
|
4911
5122
|
const { watch, formState: { errors }, } = reactHookForm.useFormContext();
|
|
4912
5123
|
const { translate } = useSchemaContext();
|
|
4913
5124
|
const { required, gridColumn, gridRow } = schema;
|
|
4914
5125
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4915
5126
|
const colLabel = `${prefix}${column}`;
|
|
4916
5127
|
const value = watch(colLabel);
|
|
4917
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
5128
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Text, { whiteSpace: "pre-wrap", children: value }), " ", errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
5129
|
+
};
|
|
5130
|
+
|
|
5131
|
+
const TimeViewer = ({ column, schema, prefix }) => {
|
|
5132
|
+
const { watch, formState: { errors }, } = reactHookForm.useFormContext();
|
|
5133
|
+
const { translate } = useSchemaContext();
|
|
5134
|
+
const { required, gridColumn, gridRow } = schema;
|
|
5135
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
5136
|
+
const colLabel = `${prefix}${column}`;
|
|
5137
|
+
const selectedDate = watch(colLabel);
|
|
5138
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
5139
|
+
gridRow, children: [jsxRuntime.jsx(react.Text, { children: selectedDate !== undefined
|
|
5140
|
+
? dayjs(selectedDate).format("hh:mm A")
|
|
5141
|
+
: "" }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
|
|
4918
5142
|
};
|
|
4919
5143
|
|
|
4920
5144
|
const SchemaViewer = ({ schema, prefix, column, }) => {
|
|
4921
5145
|
const colSchema = schema;
|
|
4922
5146
|
const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
|
|
5147
|
+
if (variant === "custom-input") {
|
|
5148
|
+
return jsxRuntime.jsx(CustomViewer, { schema: colSchema, prefix, column });
|
|
5149
|
+
}
|
|
4923
5150
|
if (type === "string") {
|
|
4924
5151
|
if ((schema.enum ?? []).length > 0) {
|
|
4925
5152
|
return jsxRuntime.jsx(EnumViewer, { schema: colSchema, prefix, column });
|
|
@@ -4931,6 +5158,12 @@ const SchemaViewer = ({ schema, prefix, column, }) => {
|
|
|
4931
5158
|
if (variant === "date-picker") {
|
|
4932
5159
|
return jsxRuntime.jsx(DateViewer, { schema: colSchema, prefix, column });
|
|
4933
5160
|
}
|
|
5161
|
+
if (variant === "time-picker") {
|
|
5162
|
+
return jsxRuntime.jsx(TimeViewer, { schema: colSchema, prefix, column });
|
|
5163
|
+
}
|
|
5164
|
+
if (variant === "text-area") {
|
|
5165
|
+
return jsxRuntime.jsx(TextAreaViewer, { schema: colSchema, prefix, column });
|
|
5166
|
+
}
|
|
4934
5167
|
return jsxRuntime.jsx(StringViewer, { schema: colSchema, prefix, column });
|
|
4935
5168
|
}
|
|
4936
5169
|
if (type === "number" || type === "integer") {
|
|
@@ -5053,7 +5286,7 @@ const FormBody = () => {
|
|
|
5053
5286
|
include,
|
|
5054
5287
|
});
|
|
5055
5288
|
if (isSuccess) {
|
|
5056
|
-
return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "2", children: [jsxRuntime.jsxs(react.Alert.Root, { status: "success", children: [jsxRuntime.jsx(react.Alert.Indicator, {}), jsxRuntime.jsx(react.Alert.Title, { children: translate.t("
|
|
5289
|
+
return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "2", children: [jsxRuntime.jsxs(react.Alert.Root, { status: "success", children: [jsxRuntime.jsx(react.Alert.Indicator, {}), jsxRuntime.jsx(react.Alert.Title, { children: translate.t("submit_success") })] }), jsxRuntime.jsx(react.Flex, { justifyContent: "end", children: jsxRuntime.jsx(react.Button, { onClick: async () => {
|
|
5057
5290
|
setIsError(false);
|
|
5058
5291
|
setIsSubmiting(false);
|
|
5059
5292
|
setIsSuccess(false);
|
|
@@ -5061,7 +5294,7 @@ const FormBody = () => {
|
|
|
5061
5294
|
setValidatedData(undefined);
|
|
5062
5295
|
const data = await getUpdatedData();
|
|
5063
5296
|
methods.reset(data);
|
|
5064
|
-
}, formNoValidate: true, children: translate.t("
|
|
5297
|
+
}, formNoValidate: true, children: translate.t("submit_again") }) })] }));
|
|
5065
5298
|
}
|
|
5066
5299
|
if (isConfirming) {
|
|
5067
5300
|
return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "2", children: [jsxRuntime.jsx(react.Grid, { gap: 4, gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
|
|
@@ -5092,8 +5325,8 @@ const FormTitle = () => {
|
|
|
5092
5325
|
return jsxRuntime.jsx(react.Heading, { children: translate.t("title") });
|
|
5093
5326
|
};
|
|
5094
5327
|
|
|
5095
|
-
const DefaultForm = ({ formConfig, }) => {
|
|
5096
|
-
return (jsxRuntime.jsx(FormRoot, { ...formConfig, children: jsxRuntime.jsxs(react.Grid, { gap: "2", children: [jsxRuntime.jsx(FormTitle, {}), jsxRuntime.jsx(FormBody, {})] }) }));
|
|
5328
|
+
const DefaultForm = ({ formConfig, showTitle = true, }) => {
|
|
5329
|
+
return (jsxRuntime.jsx(FormRoot, { ...formConfig, children: jsxRuntime.jsxs(react.Grid, { gap: "2", children: [showTitle && jsxRuntime.jsx(FormTitle, {}), jsxRuntime.jsx(FormBody, {})] }) }));
|
|
5097
5330
|
};
|
|
5098
5331
|
|
|
5099
5332
|
const useForm = ({ preLoadedValues, keyPrefix }) => {
|
|
@@ -5134,7 +5367,6 @@ exports.DefaultCardTitle = DefaultCardTitle;
|
|
|
5134
5367
|
exports.DefaultForm = DefaultForm;
|
|
5135
5368
|
exports.DefaultTable = DefaultTable;
|
|
5136
5369
|
exports.DensityToggleButton = DensityToggleButton;
|
|
5137
|
-
exports.EditOrderButton = EditOrderButton;
|
|
5138
5370
|
exports.EditSortingButton = EditSortingButton;
|
|
5139
5371
|
exports.EmptyState = EmptyState$1;
|
|
5140
5372
|
exports.ErrorAlert = ErrorAlert;
|
|
@@ -5158,12 +5390,12 @@ exports.TableCardContainer = TableCardContainer;
|
|
|
5158
5390
|
exports.TableCards = TableCards;
|
|
5159
5391
|
exports.TableComponent = TableComponent;
|
|
5160
5392
|
exports.TableControls = TableControls;
|
|
5393
|
+
exports.TableDataDisplay = TableDataDisplay;
|
|
5161
5394
|
exports.TableFilter = TableFilter;
|
|
5162
5395
|
exports.TableFilterTags = TableFilterTags;
|
|
5163
5396
|
exports.TableFooter = TableFooter;
|
|
5164
5397
|
exports.TableHeader = TableHeader;
|
|
5165
5398
|
exports.TableLoadingComponent = TableLoadingComponent;
|
|
5166
|
-
exports.TableOrderer = TableOrderer;
|
|
5167
5399
|
exports.TableSelector = TableSelector;
|
|
5168
5400
|
exports.TableSorter = TableSorter;
|
|
5169
5401
|
exports.TableViewer = TableViewer;
|