@bsol-oss/react-datatable5 12.0.0-beta.3 → 12.0.0-beta.31
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 +544 -312
- package/dist/index.mjs +547 -314
- 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.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, Flex,
|
|
2
|
+
import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, Flex, Text, useDisclosure, DialogBackdrop, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Tag as Tag$1, Input, Menu, createRecipeContext, createContext as createContext$1, Pagination as Pagination$1, usePaginationContext, CheckboxCard as CheckboxCard$1, Image, EmptyState as EmptyState$2, VStack, Alert, Card, Tooltip as Tooltip$1, Group, InputElement, Icon, List, Table as Table$1, Checkbox as Checkbox$1, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, Accordion, Field as Field$1, Popover, NumberInput, Show, RadioCard, CheckboxGroup, Textarea, createListCollection, Select, Center, Heading } from '@chakra-ui/react';
|
|
3
3
|
import { AiOutlineColumnWidth } from 'react-icons/ai';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import React__default, { createContext, useContext, useState, useEffect, useRef } from 'react';
|
|
6
6
|
import { LuX, LuCheck, LuChevronRight, LuChevronDown } from 'react-icons/lu';
|
|
7
|
-
import {
|
|
7
|
+
import { MdOutlineSort, MdFilterAlt, MdSearch, MdClose, MdOutlineViewColumn, MdFilterListAlt, MdPushPin, MdCancel, MdClear, MdOutlineChecklist, MdDateRange } from 'react-icons/md';
|
|
8
8
|
import { FaUpDown, FaGripLinesVertical } from 'react-icons/fa6';
|
|
9
9
|
import { BiDownArrow, BiUpArrow, BiError } from 'react-icons/bi';
|
|
10
10
|
import { CgClose } from 'react-icons/cg';
|
|
11
11
|
import Dayzed from '@bsol-oss/dayzed-react19';
|
|
12
12
|
import { HiMiniEllipsisHorizontal, HiChevronLeft, HiChevronRight } from 'react-icons/hi2';
|
|
13
|
-
import { IoMdEye, IoMdCheckbox } from 'react-icons/io';
|
|
13
|
+
import { IoMdEye, IoMdCheckbox, IoMdClock } from 'react-icons/io';
|
|
14
14
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
15
15
|
import { bind, bindAll } from 'bind-event-listener';
|
|
16
16
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
@@ -29,6 +29,7 @@ import { useTranslation } from 'react-i18next';
|
|
|
29
29
|
import axios from 'axios';
|
|
30
30
|
import { FormProvider, useFormContext, useForm as useForm$1 } from 'react-hook-form';
|
|
31
31
|
import dayjs from 'dayjs';
|
|
32
|
+
import utc from 'dayjs/plugin/utc';
|
|
32
33
|
import { TiDeleteOutline } from 'react-icons/ti';
|
|
33
34
|
|
|
34
35
|
const DataTableContext = createContext({
|
|
@@ -37,6 +38,39 @@ const DataTableContext = createContext({
|
|
|
37
38
|
setGlobalFilter: () => { },
|
|
38
39
|
type: "client",
|
|
39
40
|
translate: {},
|
|
41
|
+
data: [],
|
|
42
|
+
columns: [],
|
|
43
|
+
columnOrder: [],
|
|
44
|
+
columnFilters: [],
|
|
45
|
+
density: "sm",
|
|
46
|
+
sorting: [],
|
|
47
|
+
setPagination: function () {
|
|
48
|
+
throw new Error("Function not implemented.");
|
|
49
|
+
},
|
|
50
|
+
setSorting: function () {
|
|
51
|
+
throw new Error("Function not implemented.");
|
|
52
|
+
},
|
|
53
|
+
setColumnFilters: function () {
|
|
54
|
+
throw new Error("Function not implemented.");
|
|
55
|
+
},
|
|
56
|
+
setRowSelection: function () {
|
|
57
|
+
throw new Error("Function not implemented.");
|
|
58
|
+
},
|
|
59
|
+
setColumnOrder: function () {
|
|
60
|
+
throw new Error("Function not implemented.");
|
|
61
|
+
},
|
|
62
|
+
setDensity: function () {
|
|
63
|
+
throw new Error("Function not implemented.");
|
|
64
|
+
},
|
|
65
|
+
setColumnVisibility: function () {
|
|
66
|
+
throw new Error("Function not implemented.");
|
|
67
|
+
},
|
|
68
|
+
pagination: {
|
|
69
|
+
pageIndex: 0,
|
|
70
|
+
pageSize: 10,
|
|
71
|
+
},
|
|
72
|
+
rowSelection: {},
|
|
73
|
+
columnVisibility: {},
|
|
40
74
|
});
|
|
41
75
|
|
|
42
76
|
const useDataTableContext = () => {
|
|
@@ -78,63 +112,6 @@ Dialog.Description;
|
|
|
78
112
|
const DialogTrigger = Dialog.Trigger;
|
|
79
113
|
Dialog.ActionTrigger;
|
|
80
114
|
|
|
81
|
-
const ColumnOrderChanger = ({ columns }) => {
|
|
82
|
-
const [order, setOrder] = useState([]);
|
|
83
|
-
const [originalOrder, setOriginalOrder] = useState([]);
|
|
84
|
-
const { table } = useDataTableContext();
|
|
85
|
-
const handleChangeOrder = (startIndex, endIndex) => {
|
|
86
|
-
const newOrder = Array.from(order);
|
|
87
|
-
const [removed] = newOrder.splice(startIndex, 1);
|
|
88
|
-
newOrder.splice(endIndex, 0, removed);
|
|
89
|
-
setOrder(newOrder);
|
|
90
|
-
};
|
|
91
|
-
useEffect(() => {
|
|
92
|
-
setOrder(columns);
|
|
93
|
-
}, [columns]);
|
|
94
|
-
useEffect(() => {
|
|
95
|
-
if (originalOrder.length > 0) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
if (columns.length <= 0) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
setOriginalOrder(columns);
|
|
102
|
-
}, [columns]);
|
|
103
|
-
return (jsxs(Flex, { gap: 2, flexFlow: "column", children: [jsx(Flex, { gap: 2, flexFlow: "column", children: order.map((columnId, index) => (jsxs(Flex, { gap: 2, alignItems: "center", justifyContent: "space-between", children: [jsx(IconButton, { onClick: () => {
|
|
104
|
-
const prevIndex = index - 1;
|
|
105
|
-
if (prevIndex >= 0) {
|
|
106
|
-
handleChangeOrder(index, prevIndex);
|
|
107
|
-
}
|
|
108
|
-
}, disabled: index === 0, "aria-label": "", children: jsx(MdArrowUpward, {}) }), table
|
|
109
|
-
.getAllFlatColumns()
|
|
110
|
-
.filter((column) => {
|
|
111
|
-
return column.id === columnId;
|
|
112
|
-
})
|
|
113
|
-
.map((column) => {
|
|
114
|
-
const displayName = column.columnDef.meta === undefined
|
|
115
|
-
? column.id
|
|
116
|
-
: column.columnDef.meta.displayName;
|
|
117
|
-
return jsx("span", { children: displayName }, column.id);
|
|
118
|
-
}), jsx(IconButton, { onClick: () => {
|
|
119
|
-
const nextIndex = index + 1;
|
|
120
|
-
if (nextIndex < order.length) {
|
|
121
|
-
handleChangeOrder(index, nextIndex);
|
|
122
|
-
}
|
|
123
|
-
}, disabled: index === order.length - 1, "aria-label": "", children: jsx(MdArrowDownward, {}) })] }, columnId))) }), jsxs(Flex, { gap: "0.25rem", children: [jsx(Button$1, { onClick: () => {
|
|
124
|
-
table.setColumnOrder(order);
|
|
125
|
-
}, children: "Apply" }), jsx(Button$1, { onClick: () => {
|
|
126
|
-
table.setColumnOrder(originalOrder);
|
|
127
|
-
}, children: "Reset" })] })] }));
|
|
128
|
-
};
|
|
129
|
-
const TableOrderer = () => {
|
|
130
|
-
const { table } = useDataTableContext();
|
|
131
|
-
return (jsx(Fragment, { children: jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
const EditOrderButton = ({ text, icon = jsx(MdOutlineMoveDown, {}), title = "Change Order", }) => {
|
|
135
|
-
return (jsx(Fragment, { children: jsxs(DialogRoot, { size: "cover", children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", children: [icon, " ", text] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsxs(DialogHeader, { children: [jsx(DialogTitle, {}), title] }), jsx(DialogBody, { children: jsx(Flex, { flexFlow: "column", gap: "0.25rem", children: jsx(TableOrderer, {}) }) }), jsx(DialogFooter, {})] })] }) }));
|
|
136
|
-
};
|
|
137
|
-
|
|
138
115
|
const TableSorter = () => {
|
|
139
116
|
const { table } = useDataTableContext();
|
|
140
117
|
return (jsx(Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsx(Fragment, { children: headerGroup.headers.map((header) => {
|
|
@@ -440,7 +417,7 @@ const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
|
|
|
440
417
|
const FilterDialog = ({ icon = jsx(MdFilterAlt, {}), }) => {
|
|
441
418
|
const filterModal = useDisclosure();
|
|
442
419
|
const { translate } = useDataTableContext();
|
|
443
|
-
return (jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("
|
|
420
|
+
return (jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("filter_dialog.button_text")] }) }), jsxs(DialogContent, { children: [jsx(DialogHeader, { children: jsx(DialogTitle, { children: translate.t("filter_dialog.title") }) }), jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsx(TableFilter, {}) }), jsxs(DialogFooter, { children: [jsx(ResetFilteringButton, { text: translate.t("filter_dialog.reset") }), jsx(Button$1, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filter_dialog.close") })] }), jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
|
|
444
421
|
};
|
|
445
422
|
|
|
446
423
|
const MenuContent = React.forwardRef(function MenuContent(props, ref) {
|
|
@@ -2478,8 +2455,8 @@ CheckboxCard$1.Indicator;
|
|
|
2478
2455
|
function ColumnCard({ columnId }) {
|
|
2479
2456
|
const ref = useRef(null);
|
|
2480
2457
|
const [dragging, setDragging] = useState(false); // NEW
|
|
2481
|
-
const { table } = useDataTableContext();
|
|
2482
|
-
const displayName = columnId;
|
|
2458
|
+
const { table, translate } = useDataTableContext();
|
|
2459
|
+
const displayName = translate.t(columnId);
|
|
2483
2460
|
const column = table.getColumn(columnId);
|
|
2484
2461
|
invariant(column);
|
|
2485
2462
|
useEffect(() => {
|
|
@@ -2494,13 +2471,16 @@ function ColumnCard({ columnId }) {
|
|
|
2494
2471
|
onDrop: () => setDragging(false), // NEW
|
|
2495
2472
|
});
|
|
2496
2473
|
}, [columnId, table]);
|
|
2497
|
-
return (jsxs(Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsx(Flex, { alignItems: "center", padding: "0", cursor:
|
|
2474
|
+
return (jsxs(Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsx(Flex, { alignItems: "center", padding: "0", cursor: "grab", children: jsx(FaGripLinesVertical, { color: "colorPalette.400" }) }), jsx(Flex, { justifyContent: "space-between", alignItems: "center", children: jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
|
|
2498
2475
|
}
|
|
2499
2476
|
function CardContainer({ location, children }) {
|
|
2500
2477
|
const ref = useRef(null);
|
|
2501
2478
|
const [isDraggedOver, setIsDraggedOver] = useState(false);
|
|
2502
2479
|
useEffect(() => {
|
|
2503
2480
|
const el = ref.current;
|
|
2481
|
+
if (el === null) {
|
|
2482
|
+
return;
|
|
2483
|
+
}
|
|
2504
2484
|
invariant(el);
|
|
2505
2485
|
return dropTargetForElements({
|
|
2506
2486
|
element: el,
|
|
@@ -2572,7 +2552,7 @@ const TableViewer = () => {
|
|
|
2572
2552
|
const ViewDialog = ({ icon = jsx(IoMdEye, {}) }) => {
|
|
2573
2553
|
const viewModel = useDisclosure();
|
|
2574
2554
|
const { translate } = useDataTableContext();
|
|
2575
|
-
return (jsxs(DialogRoot, { children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("
|
|
2555
|
+
return (jsxs(DialogRoot, { children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("view_dialog.button_text")] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsx(DialogHeader, { children: jsx(DialogTitle, { children: translate.t("view_dialog.title") }) }), jsx(DialogBody, { children: jsx(TableViewer, {}) }), jsx(DialogFooter, {})] })] }));
|
|
2576
2556
|
};
|
|
2577
2557
|
|
|
2578
2558
|
const CardHeader = ({ row, imageColumnId = undefined, titleColumnId = undefined, tagColumnId = undefined, tagIcon = undefined, showTag = true, imageProps = {}, }) => {
|
|
@@ -2623,7 +2603,7 @@ const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
|
|
|
2623
2603
|
return jsx(Fragment, { children: "null" });
|
|
2624
2604
|
}
|
|
2625
2605
|
return (jsx(Grid, { rowGap: 1, padding: 1, overflow: "auto", ...boxProps, children: Object.entries(object).map(([field, value]) => {
|
|
2626
|
-
return (jsxs(Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsx(Text, { color: "
|
|
2606
|
+
return (jsxs(Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsx(Text, { color: "colorPalette.400", children: getColumn({ field }) }), typeof value === "object" ? (jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsx(Text, { children: JSON.stringify(value) }))] }, field));
|
|
2627
2607
|
}) }));
|
|
2628
2608
|
};
|
|
2629
2609
|
|
|
@@ -2673,7 +2653,7 @@ const CellRenderer = ({ cell }) => {
|
|
|
2673
2653
|
paddingY: 2,
|
|
2674
2654
|
}, object: value })] }, cell.id));
|
|
2675
2655
|
}
|
|
2676
|
-
return (jsxs(Box, { gridColumn, gridRow, children: [jsx(Box, { color:
|
|
2656
|
+
return (jsxs(Box, { gridColumn, gridRow, children: [jsx(Box, { color: "colorPalette.400", children: getLabel({ columnId: cell.column.id }) }), jsx(Box, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
|
|
2677
2657
|
};
|
|
2678
2658
|
const DataDisplay = ({ variant = "" }) => {
|
|
2679
2659
|
const { table, translate } = useDataTableContext();
|
|
@@ -2848,6 +2828,22 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2848
2828
|
setGlobalFilter,
|
|
2849
2829
|
type: "client",
|
|
2850
2830
|
translate,
|
|
2831
|
+
columns,
|
|
2832
|
+
sorting,
|
|
2833
|
+
setSorting,
|
|
2834
|
+
columnFilters,
|
|
2835
|
+
setColumnFilters,
|
|
2836
|
+
pagination,
|
|
2837
|
+
setPagination,
|
|
2838
|
+
rowSelection,
|
|
2839
|
+
setRowSelection,
|
|
2840
|
+
columnOrder,
|
|
2841
|
+
setColumnOrder,
|
|
2842
|
+
density,
|
|
2843
|
+
setDensity,
|
|
2844
|
+
columnVisibility,
|
|
2845
|
+
setColumnVisibility,
|
|
2846
|
+
data,
|
|
2851
2847
|
}, children: children }));
|
|
2852
2848
|
}
|
|
2853
2849
|
|
|
@@ -2916,90 +2912,25 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
|
|
|
2916
2912
|
setGlobalFilter,
|
|
2917
2913
|
type: "server",
|
|
2918
2914
|
translate,
|
|
2915
|
+
columns,
|
|
2916
|
+
sorting,
|
|
2917
|
+
setSorting,
|
|
2918
|
+
columnFilters,
|
|
2919
|
+
setColumnFilters,
|
|
2920
|
+
pagination,
|
|
2921
|
+
setPagination,
|
|
2922
|
+
rowSelection,
|
|
2923
|
+
setRowSelection,
|
|
2924
|
+
columnOrder,
|
|
2925
|
+
setColumnOrder,
|
|
2926
|
+
density,
|
|
2927
|
+
setDensity,
|
|
2928
|
+
columnVisibility,
|
|
2929
|
+
setColumnVisibility,
|
|
2930
|
+
data: query.data?.data ?? [],
|
|
2919
2931
|
}, children: jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
|
|
2920
2932
|
}
|
|
2921
2933
|
|
|
2922
|
-
const Checkbox = React.forwardRef(function Checkbox(props, ref) {
|
|
2923
|
-
const { icon, children, inputProps, rootRef, ...rest } = props;
|
|
2924
|
-
return (jsxs(Checkbox$1.Root, { ref: rootRef, ...rest, children: [jsx(Checkbox$1.HiddenInput, { ref: ref, ...inputProps }), jsx(Checkbox$1.Control, { children: icon || jsx(Checkbox$1.Indicator, {}) }), children != null && (jsx(Checkbox$1.Label, { children: children }))] }));
|
|
2925
|
-
});
|
|
2926
|
-
|
|
2927
|
-
const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
|
|
2928
|
-
const { table } = useDataTableContext();
|
|
2929
|
-
const SELECTION_BOX_WIDTH = 20;
|
|
2930
|
-
const [hoveredRow, setHoveredRow] = useState(-1);
|
|
2931
|
-
const handleRowHover = (index) => {
|
|
2932
|
-
setHoveredRow(index);
|
|
2933
|
-
};
|
|
2934
|
-
const getTdProps = (cell) => {
|
|
2935
|
-
const tdProps = cell.column.getIsPinned()
|
|
2936
|
-
? {
|
|
2937
|
-
left: showSelector
|
|
2938
|
-
? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
2939
|
-
: `${cell.column.getStart("left")}px`,
|
|
2940
|
-
background: pinnedBgColor.light,
|
|
2941
|
-
position: "sticky",
|
|
2942
|
-
zIndex: -1,
|
|
2943
|
-
_dark: {
|
|
2944
|
-
backgroundColor: pinnedBgColor.dark,
|
|
2945
|
-
},
|
|
2946
|
-
}
|
|
2947
|
-
: {};
|
|
2948
|
-
return tdProps;
|
|
2949
|
-
};
|
|
2950
|
-
const getTrProps = ({ hoveredRow, index, }) => {
|
|
2951
|
-
if (hoveredRow === -1) {
|
|
2952
|
-
return {};
|
|
2953
|
-
}
|
|
2954
|
-
if (hoveredRow === index) {
|
|
2955
|
-
return {
|
|
2956
|
-
opacity: "1",
|
|
2957
|
-
};
|
|
2958
|
-
}
|
|
2959
|
-
return {
|
|
2960
|
-
opacity: "0.8",
|
|
2961
|
-
};
|
|
2962
|
-
};
|
|
2963
|
-
return (jsx(Table$1.Body, { children: table.getRowModel().rows.map((row, index) => {
|
|
2964
|
-
return (jsxs(Table$1.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow, alwaysShowSelector: alwaysShowSelector })), row.getVisibleCells().map((cell, index) => {
|
|
2965
|
-
return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`,
|
|
2966
|
-
// styling resize and pinning start
|
|
2967
|
-
flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`, backgroundColor: "white", ...getTdProps(cell), _dark: {
|
|
2968
|
-
backgroundColor: "gray.950",
|
|
2969
|
-
}, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
|
|
2970
|
-
})] }, `chakra-table-row-${row.id}`));
|
|
2971
|
-
}) }));
|
|
2972
|
-
};
|
|
2973
|
-
const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, alwaysShowSelector = true, }) => {
|
|
2974
|
-
const { table } = useDataTableContext();
|
|
2975
|
-
const SELECTION_BOX_WIDTH = 20;
|
|
2976
|
-
const isCheckBoxVisible = (current_index, current_row) => {
|
|
2977
|
-
if (alwaysShowSelector) {
|
|
2978
|
-
return true;
|
|
2979
|
-
}
|
|
2980
|
-
if (current_row.getIsSelected()) {
|
|
2981
|
-
return true;
|
|
2982
|
-
}
|
|
2983
|
-
if (hoveredRow == current_index) {
|
|
2984
|
-
return true;
|
|
2985
|
-
}
|
|
2986
|
-
return false;
|
|
2987
|
-
};
|
|
2988
|
-
return (jsxs(Table$1.Cell, { padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
|
|
2989
|
-
? {
|
|
2990
|
-
left: `0px`,
|
|
2991
|
-
backgroundColor: pinnedBgColor.light,
|
|
2992
|
-
position: "sticky",
|
|
2993
|
-
zIndex: 1,
|
|
2994
|
-
_dark: { backgroundColor: pinnedBgColor.dark },
|
|
2995
|
-
}
|
|
2996
|
-
: {}),
|
|
2997
|
-
// styling resize and pinning end
|
|
2998
|
-
display: "grid", children: [!isCheckBoxVisible(index, row) && (jsx(Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` })), isCheckBoxVisible(index, row) && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: row.getIsSelected(),
|
|
2999
|
-
disabled: !row.getCanSelect(),
|
|
3000
|
-
onChange: row.getToggleSelectedHandler() }) }))] }));
|
|
3001
|
-
};
|
|
3002
|
-
|
|
3003
2934
|
const Tooltip = React.forwardRef(function Tooltip(props, ref) {
|
|
3004
2935
|
const { showArrow, children, disabled, portalled, content, contentProps, portalRef, ...rest } = props;
|
|
3005
2936
|
if (disabled)
|
|
@@ -3078,16 +3009,89 @@ const TableFilterTags = () => {
|
|
|
3078
3009
|
}) }));
|
|
3079
3010
|
};
|
|
3080
3011
|
|
|
3081
|
-
const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsx(Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsx(Fragment, {}), loading = false, hasError = false, }) => {
|
|
3012
|
+
const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsx(Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsx(Fragment, {}), loading = false, hasError = false, gridProps = {}, }) => {
|
|
3082
3013
|
const { translate } = useDataTableContext();
|
|
3083
|
-
return (jsxs(Grid, { templateRows: "auto 1fr
|
|
3014
|
+
return (jsxs(Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, children: [jsxs(Flex, { flexFlow: "column", gap: 2, children: [jsxs(Flex, { justifyContent: "space-between", children: [jsx(Box, { children: showView && jsx(ViewDialog, { icon: jsx(MdOutlineViewColumn, {}) }) }), jsxs(Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsx(Spinner, { size: "sm" }), hasError && (jsx(Tooltip, { content: translate.t("has_error"), children: jsx(Icon, { as: BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsx(GlobalFilter, {}), showFilter && jsx(FilterDialog, {}), showReload && jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsx(Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
|
|
3084
3015
|
return (jsxs(Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxs(Text, { children: [column, ":"] }), jsx(FilterOptions, { column: column })] }, column));
|
|
3085
|
-
}) })), showFilterTags && (jsx(Flex, { children: jsx(TableFilterTags, {}) }))] }), jsx(Grid, { overflow: "auto",
|
|
3086
|
-
|
|
3087
|
-
|
|
3016
|
+
}) })), showFilterTags && (jsx(Flex, { children: jsx(TableFilterTags, {}) }))] }), jsx(Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxs(Flex, { justifyContent: "space-between", children: [jsxs(Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsx(PageSizeControl, {}), showPageCountText && (jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsx(RowCountText, {})] }))] }), jsx(Box, { justifySelf: "end", children: showPagination && jsx(Pagination, {}) })] }))] }));
|
|
3017
|
+
};
|
|
3018
|
+
|
|
3019
|
+
const EmptyState = React.forwardRef(function EmptyState(props, ref) {
|
|
3020
|
+
const { title, description, icon, children, ...rest } = props;
|
|
3021
|
+
return (jsx(EmptyState$2.Root, { ref: ref, ...rest, children: jsxs(EmptyState$2.Content, { children: [icon && (jsx(EmptyState$2.Indicator, { children: icon })), description ? (jsxs(VStack, { textAlign: "center", children: [jsx(EmptyState$2.Title, { children: title }), jsx(EmptyState$2.Description, { children: description })] })) : (jsx(EmptyState$2.Title, { children: title })), children] }) }));
|
|
3022
|
+
});
|
|
3023
|
+
|
|
3024
|
+
const EmptyResult = (jsx(EmptyState, { icon: jsx(HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxs(List.Root, { variant: "marker", children: [jsx(List.Item, { children: "Try removing filters" }), jsx(List.Item, { children: "Try different keywords" })] }) }));
|
|
3025
|
+
const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
|
|
3026
|
+
const { table } = useDataTableContext();
|
|
3027
|
+
if (table.getRowModel().rows.length <= 0) {
|
|
3028
|
+
return emptyComponent;
|
|
3029
|
+
}
|
|
3030
|
+
return (jsx(Table$1.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 }));
|
|
3031
|
+
};
|
|
3032
|
+
|
|
3033
|
+
const Checkbox = React.forwardRef(function Checkbox(props, ref) {
|
|
3034
|
+
const { icon, children, inputProps, rootRef, ...rest } = props;
|
|
3035
|
+
return (jsxs(Checkbox$1.Root, { ref: rootRef, ...rest, children: [jsx(Checkbox$1.HiddenInput, { ref: ref, ...inputProps }), jsx(Checkbox$1.Control, { children: icon || jsx(Checkbox$1.Indicator, {}) }), children != null && (jsx(Checkbox$1.Label, { children: children }))] }));
|
|
3036
|
+
});
|
|
3037
|
+
|
|
3038
|
+
const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
|
|
3039
|
+
"use no memo";
|
|
3040
|
+
const { table } = useDataTableContext();
|
|
3041
|
+
const SELECTION_BOX_WIDTH = 20;
|
|
3042
|
+
const [hoveredRow, setHoveredRow] = useState(-1);
|
|
3043
|
+
const handleRowHover = (index) => {
|
|
3044
|
+
setHoveredRow(index);
|
|
3045
|
+
};
|
|
3046
|
+
const getTdProps = (cell) => {
|
|
3047
|
+
const tdProps = cell.column.getIsPinned()
|
|
3048
|
+
? {
|
|
3049
|
+
left: showSelector
|
|
3050
|
+
? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
3051
|
+
: `${cell.column.getStart("left")}px`,
|
|
3052
|
+
position: "relative",
|
|
3053
|
+
}
|
|
3054
|
+
: {};
|
|
3055
|
+
return tdProps;
|
|
3056
|
+
};
|
|
3057
|
+
const getTrProps = ({ hoveredRow, index, }) => {
|
|
3058
|
+
if (hoveredRow === -1) {
|
|
3059
|
+
return {};
|
|
3060
|
+
}
|
|
3061
|
+
if (hoveredRow === index) {
|
|
3062
|
+
return {
|
|
3063
|
+
opacity: "1",
|
|
3064
|
+
};
|
|
3065
|
+
}
|
|
3066
|
+
return {
|
|
3067
|
+
opacity: "0.8",
|
|
3068
|
+
};
|
|
3069
|
+
};
|
|
3070
|
+
return (jsx(Table$1.Body, { children: table.getRowModel().rows.map((row, index) => {
|
|
3071
|
+
return (jsxs(Table$1.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
|
|
3072
|
+
return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`,
|
|
3073
|
+
// styling resize and pinning start
|
|
3074
|
+
flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`, color: {
|
|
3075
|
+
base: "colorPalette.900",
|
|
3076
|
+
_dark: "colorPalette.100",
|
|
3077
|
+
},
|
|
3078
|
+
bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...getTdProps(cell), children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
|
|
3079
|
+
})] }, `chakra-table-row-${row.id}`));
|
|
3080
|
+
}) }));
|
|
3081
|
+
};
|
|
3082
|
+
const TableRowSelector = ({ index, row, }) => {
|
|
3083
|
+
const { table } = useDataTableContext();
|
|
3084
|
+
const SELECTION_BOX_WIDTH = 20;
|
|
3085
|
+
return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
3086
|
+
base: "colorPalette.900",
|
|
3087
|
+
_dark: "colorPalette.100",
|
|
3088
|
+
},
|
|
3089
|
+
bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: row.getIsSelected(),
|
|
3090
|
+
disabled: !row.getCanSelect(),
|
|
3091
|
+
onCheckedChange: row.getToggleSelectedHandler() }) }));
|
|
3088
3092
|
};
|
|
3089
3093
|
|
|
3090
|
-
const TableFooter = ({
|
|
3094
|
+
const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
|
|
3091
3095
|
const table = useDataTableContext().table;
|
|
3092
3096
|
const SELECTION_BOX_WIDTH = 20;
|
|
3093
3097
|
const [hoveredCheckBox, setHoveredCheckBox] = useState(false);
|
|
@@ -3106,78 +3110,28 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
|
|
|
3106
3110
|
}
|
|
3107
3111
|
return false;
|
|
3108
3112
|
};
|
|
3109
|
-
|
|
3110
|
-
const thProps = header.column.getIsPinned()
|
|
3111
|
-
? {
|
|
3112
|
-
left: showSelector
|
|
3113
|
-
? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
3114
|
-
: `${header.getStart("left") + table.getDensityValue() * 2}px`,
|
|
3115
|
-
background: pinnedBgColor.light,
|
|
3116
|
-
position: "sticky",
|
|
3117
|
-
zIndex: 1,
|
|
3118
|
-
_dark: {
|
|
3119
|
-
backgroundColor: pinnedBgColor.dark,
|
|
3120
|
-
},
|
|
3121
|
-
}
|
|
3122
|
-
: {};
|
|
3123
|
-
return thProps;
|
|
3124
|
-
};
|
|
3125
|
-
return (jsx(Table$1.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxs(Table$1.Row, { display: "flex", children: [showSelector && (jsxs(Table$1.Header
|
|
3126
|
-
// styling resize and pinning start
|
|
3127
|
-
, {
|
|
3128
|
-
// styling resize and pinning start
|
|
3129
|
-
padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
|
|
3130
|
-
? {
|
|
3131
|
-
left: `0px`,
|
|
3132
|
-
backgroundColor: pinnedBgColor.light,
|
|
3133
|
-
position: "sticky",
|
|
3134
|
-
zIndex: 1,
|
|
3135
|
-
_dark: { backgroundColor: pinnedBgColor.dark },
|
|
3136
|
-
}
|
|
3137
|
-
: {}),
|
|
3138
|
-
// styling resize and pinning end
|
|
3139
|
-
onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
|
|
3113
|
+
return (jsx(Table$1.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxs(Table$1.Row, { display: "flex", children: [showSelector && (jsxs(Table$1.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
|
|
3140
3114
|
// indeterminate: table.getIsSomeRowsSelected(),
|
|
3141
3115
|
onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsx(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) => (jsx(Table$1.Cell, { padding: "0", columnSpan: `${header.colSpan}`,
|
|
3142
3116
|
// styling resize and pinning start
|
|
3143
|
-
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid",
|
|
3117
|
+
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsx(MenuRoot$1, { children: jsx(MenuTrigger$1, { asChild: true, children: jsx(Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3144
3118
|
? null
|
|
3145
3119
|
: flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && (
|
|
3146
3120
|
// <UpDownIcon />
|
|
3147
3121
|
jsx(Fragment, {})), header.column.getIsSorted() === "asc" && (jsx(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
|
|
3148
3122
|
};
|
|
3149
3123
|
|
|
3150
|
-
const TableHeader = ({ canResize = true,
|
|
3124
|
+
const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, }) => {
|
|
3151
3125
|
const { table } = useDataTableContext();
|
|
3152
3126
|
const SELECTION_BOX_WIDTH = 20;
|
|
3153
|
-
const [hoveredCheckBox, setHoveredCheckBox] = useState(false);
|
|
3154
|
-
const handleRowHover = (isHovered) => {
|
|
3155
|
-
setHoveredCheckBox(isHovered);
|
|
3156
|
-
};
|
|
3157
|
-
const isCheckBoxVisible = () => {
|
|
3158
|
-
if (alwaysShowSelector) {
|
|
3159
|
-
return true;
|
|
3160
|
-
}
|
|
3161
|
-
if (table.getIsAllRowsSelected()) {
|
|
3162
|
-
return true;
|
|
3163
|
-
}
|
|
3164
|
-
if (hoveredCheckBox) {
|
|
3165
|
-
return true;
|
|
3166
|
-
}
|
|
3167
|
-
return false;
|
|
3168
|
-
};
|
|
3169
3127
|
const getThProps = (header) => {
|
|
3170
3128
|
const thProps = header.column.getIsPinned()
|
|
3171
3129
|
? {
|
|
3172
3130
|
left: showSelector
|
|
3173
3131
|
? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
3174
3132
|
: `${header.getStart("left")}px`,
|
|
3175
|
-
background: pinnedBgColor.light,
|
|
3176
3133
|
position: "sticky",
|
|
3177
3134
|
zIndex: 100 + 1,
|
|
3178
|
-
_dark: {
|
|
3179
|
-
backgroundColor: pinnedBgColor.dark,
|
|
3180
|
-
},
|
|
3181
3135
|
}
|
|
3182
3136
|
: {};
|
|
3183
3137
|
return thProps;
|
|
@@ -3186,21 +3140,13 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
|
|
|
3186
3140
|
position: "sticky",
|
|
3187
3141
|
top: 0,
|
|
3188
3142
|
};
|
|
3189
|
-
return (jsx(Table$1.Header, { ...(isSticky ? stickyProps : {}), ...
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
zIndex: 1,
|
|
3197
|
-
_dark: { backgroundColor: pinnedBgColor.dark },
|
|
3198
|
-
}
|
|
3199
|
-
: {}),
|
|
3200
|
-
// styling resize and pinning end
|
|
3201
|
-
padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
|
|
3202
|
-
// indeterminate: table.getIsSomeRowsSelected(),
|
|
3203
|
-
onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsx(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) => {
|
|
3143
|
+
return (jsx(Table$1.Header, { ...(isSticky ? stickyProps : {}), bgColor: "transparent", ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxs(Table$1.Row, { display: "flex", bgColor: "transparent", ...tableRowProps, children: [showSelector && (jsx(Table$1.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
3144
|
+
base: "colorPalette.900",
|
|
3145
|
+
_dark: "colorPalette.100",
|
|
3146
|
+
},
|
|
3147
|
+
bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: table.getIsAllRowsSelected(),
|
|
3148
|
+
// indeterminate: table.getIsSomeRowsSelected(),
|
|
3149
|
+
onChange: table.getToggleAllRowsSelectedHandler() }) })), headerGroup.headers.map((header) => {
|
|
3204
3150
|
const resizeProps = {
|
|
3205
3151
|
onMouseDown: header.getResizeHandler(),
|
|
3206
3152
|
onTouchStart: header.getResizeHandler(),
|
|
@@ -3208,10 +3154,24 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
|
|
|
3208
3154
|
};
|
|
3209
3155
|
return (jsxs(Table$1.ColumnHeader, { padding: 0, columnSpan: `${header.colSpan}`,
|
|
3210
3156
|
// styling resize and pinning start
|
|
3211
|
-
flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index,
|
|
3212
|
-
|
|
3213
|
-
|
|
3214
|
-
|
|
3157
|
+
flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index, color: {
|
|
3158
|
+
base: "colorPalette.800",
|
|
3159
|
+
_dark: "colorPalette.200",
|
|
3160
|
+
},
|
|
3161
|
+
bg: { base: "colorPalette.100", _dark: "colorPalette.900" }, ...getThProps(header), children: [jsxs(MenuRoot, { children: [jsx(MenuTrigger, { asChild: true, children: jsx(Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", color: {
|
|
3162
|
+
base: "colorPalette.800",
|
|
3163
|
+
_dark: "colorPalette.200",
|
|
3164
|
+
_hover: {
|
|
3165
|
+
base: "colorPalette.700",
|
|
3166
|
+
_dark: "colorPalette.300",
|
|
3167
|
+
},
|
|
3168
|
+
},
|
|
3169
|
+
bg: {
|
|
3170
|
+
base: "colorPalette.100",
|
|
3171
|
+
_dark: "colorPalette.900",
|
|
3172
|
+
_hover: {
|
|
3173
|
+
base: "colorPalette.200",
|
|
3174
|
+
_dark: "colorPalette.800",
|
|
3215
3175
|
},
|
|
3216
3176
|
}, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3217
3177
|
? null
|
|
@@ -3239,29 +3199,17 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
|
|
|
3239
3199
|
});
|
|
3240
3200
|
}, children: [jsx(GrDescend, {}), "Sort Descending"] }) }), header.column.getIsSorted() && (jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3241
3201
|
header.column.clearSorting();
|
|
3242
|
-
}, children: [jsx(MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3202
|
+
}, children: [jsx(MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3203
|
+
? "colorPalette.700"
|
|
3204
|
+
: "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
|
|
3243
3205
|
borderRightColor: header.column.getIsResizing()
|
|
3244
|
-
? "
|
|
3245
|
-
: "
|
|
3206
|
+
? "colorPalette.700"
|
|
3207
|
+
: "colorPalette.400",
|
|
3246
3208
|
}, ...resizeProps }))] }, `chakra-table-header-${header.id}`));
|
|
3247
3209
|
})] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
|
|
3248
3210
|
};
|
|
3249
3211
|
|
|
3250
|
-
const
|
|
3251
|
-
const { title, description, icon, children, ...rest } = props;
|
|
3252
|
-
return (jsx(EmptyState$2.Root, { ref: ref, ...rest, children: jsxs(EmptyState$2.Content, { children: [icon && (jsx(EmptyState$2.Indicator, { children: icon })), description ? (jsxs(VStack, { textAlign: "center", children: [jsx(EmptyState$2.Title, { children: title }), jsx(EmptyState$2.Description, { children: description })] })) : (jsx(EmptyState$2.Title, { children: title })), children] }) }));
|
|
3253
|
-
});
|
|
3254
|
-
|
|
3255
|
-
const EmptyResult = (jsx(EmptyState, { icon: jsx(HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxs(List.Root, { variant: "marker", children: [jsx(List.Item, { children: "Try removing filters" }), jsx(List.Item, { children: "Try different keywords" })] }) }));
|
|
3256
|
-
const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
|
|
3257
|
-
const { table } = useDataTableContext();
|
|
3258
|
-
if (table.getRowModel().rows.length <= 0) {
|
|
3259
|
-
return emptyComponent;
|
|
3260
|
-
}
|
|
3261
|
-
return (jsx(Table$1.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", ...props, children: children }));
|
|
3262
|
-
};
|
|
3263
|
-
|
|
3264
|
-
const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, controlProps = {}, tableFooterProps = {}, variant = "", }) => {
|
|
3212
|
+
const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, tableFooterProps = {}, controlProps = {}, variant = "", }) => {
|
|
3265
3213
|
if (variant === "greedy") {
|
|
3266
3214
|
return (jsx(TableControls, { ...controlProps, children: jsxs(Table, { canResize: false, ...{ ...tableProps }, children: [jsx(TableHeader, { canResize: false, ...tableHeaderProps }), jsx(TableBody, { canResize: false, ...tableBodyProps }), showFooter && (jsx(TableFooter, { canResize: false, ...tableFooterProps }))] }) }));
|
|
3267
3215
|
}
|
|
@@ -3521,6 +3469,73 @@ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {},
|
|
|
3521
3469
|
return columns;
|
|
3522
3470
|
};
|
|
3523
3471
|
|
|
3472
|
+
const TableDataDisplay = ({ colorPalette, emptyComponent, }) => {
|
|
3473
|
+
const { table, columns, translate, data } = useDataTableContext();
|
|
3474
|
+
const columnDef = table._getColumnDefs();
|
|
3475
|
+
console.log(columnDef, "glp");
|
|
3476
|
+
console.log(columnDef, columns, table.getState().columnOrder, data, "glp");
|
|
3477
|
+
const columnsMap = Object.fromEntries(columns.map((def) => {
|
|
3478
|
+
const { accessorKey, id } = def;
|
|
3479
|
+
if (accessorKey) {
|
|
3480
|
+
return [accessorKey, def];
|
|
3481
|
+
}
|
|
3482
|
+
return [id, def];
|
|
3483
|
+
}));
|
|
3484
|
+
const columnHeaders = Object.keys(columnsMap);
|
|
3485
|
+
const totalWidths = columns
|
|
3486
|
+
.map(({ size }) => {
|
|
3487
|
+
if (!!size === false) {
|
|
3488
|
+
return 0;
|
|
3489
|
+
}
|
|
3490
|
+
if (typeof size === "number") {
|
|
3491
|
+
return size;
|
|
3492
|
+
}
|
|
3493
|
+
return 0;
|
|
3494
|
+
})
|
|
3495
|
+
.reduce((previous, current) => previous + current, 0);
|
|
3496
|
+
const columnWidths = columns
|
|
3497
|
+
.map(({ size }) => {
|
|
3498
|
+
if (!!size === false) {
|
|
3499
|
+
return "1fr";
|
|
3500
|
+
}
|
|
3501
|
+
return `minmax(${size}px, ${(size / totalWidths) * 100}%)`;
|
|
3502
|
+
})
|
|
3503
|
+
.join(" ");
|
|
3504
|
+
console.log({ columnWidths }, "hadfg");
|
|
3505
|
+
const cellProps = {
|
|
3506
|
+
flex: "1 0 0%",
|
|
3507
|
+
overflow: "auto",
|
|
3508
|
+
paddingX: "2",
|
|
3509
|
+
py: "1",
|
|
3510
|
+
color: { base: "colorPalette.900", _dark: "colorPalette.100" },
|
|
3511
|
+
bgColor: { base: "colorPalette.50", _dark: "colorPalette.950" },
|
|
3512
|
+
borderBottomColor: { base: "colorPalette.200", _dark: "colorPalette.800" },
|
|
3513
|
+
borderBottomWidth: "1px",
|
|
3514
|
+
...{ colorPalette },
|
|
3515
|
+
};
|
|
3516
|
+
if (data.length <= 0) {
|
|
3517
|
+
return jsx(Fragment, { children: emptyComponent });
|
|
3518
|
+
}
|
|
3519
|
+
return (jsxs(Grid, { templateColumns: `${columnWidths}`, overflow: "auto", borderWidth: "1px", color: { base: "colorPalette.900", _dark: "colorPalette.100" }, borderColor: { base: "colorPalette.200", _dark: "colorPalette.800" }, colorPalette, children: [jsx(Grid, { templateColumns: `${columnWidths}`, column: `1/span ${columns.length}`, bg: { base: "colorPalette.200", _dark: "colorPalette.800" }, colorPalette, children: columnHeaders.map((header) => {
|
|
3520
|
+
return (jsx(Box, { flex: "1 0 0%", paddingX: "2", py: "1", overflow: "auto", textOverflow: "ellipsis", children: translate.t(`column_header.${header}`) }));
|
|
3521
|
+
}) }), data.map((record) => {
|
|
3522
|
+
return (jsx(Fragment, { children: columnHeaders.map((header) => {
|
|
3523
|
+
const { cell } = columnsMap[header];
|
|
3524
|
+
const value = record[header];
|
|
3525
|
+
if (!!record === false) {
|
|
3526
|
+
return (jsx(Box, { ...cellProps, children: translate.t(`column_cell.placeholder`) }));
|
|
3527
|
+
}
|
|
3528
|
+
if (cell) {
|
|
3529
|
+
return (jsx(Box, { ...cellProps, children: cell({ row: { original: record } }) }));
|
|
3530
|
+
}
|
|
3531
|
+
if (typeof value === "object") {
|
|
3532
|
+
return (jsx(Box, { ...cellProps, children: jsx(RecordDisplay, { object: value }) }));
|
|
3533
|
+
}
|
|
3534
|
+
return jsx(Box, { ...cellProps, children: value });
|
|
3535
|
+
}) }));
|
|
3536
|
+
})] }));
|
|
3537
|
+
};
|
|
3538
|
+
|
|
3524
3539
|
const AccordionItemTrigger = React.forwardRef(function AccordionItemTrigger(props, ref) {
|
|
3525
3540
|
const { children, indicatorPlacement = "end", ...rest } = props;
|
|
3526
3541
|
return (jsxs(Accordion.ItemTrigger, { ...rest, ref: ref, children: [indicatorPlacement === "start" && (jsx(Accordion.ItemIndicator, { rotate: { base: "-90deg", _open: "0deg" }, children: jsx(LuChevronDown, {}) })), jsx(HStack, { gap: "4", flex: "1", textAlign: "start", width: "full", children: children }), indicatorPlacement === "end" && (jsx(Accordion.ItemIndicator, { children: jsx(LuChevronDown, {}) }))] }));
|
|
@@ -3616,7 +3631,7 @@ const ArrayRenderer = ({ schema, column, prefix, }) => {
|
|
|
3616
3631
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3617
3632
|
const { formState: { errors }, setValue, watch, } = useFormContext();
|
|
3618
3633
|
const fields = (watch(colLabel) ?? []);
|
|
3619
|
-
return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.
|
|
3634
|
+
return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsx("span", { children: "*" })] }), fields.map((field, index) => (jsxs(Flex, { flexFlow: "column", children: [jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsx(SchemaRenderer, { column: `${index}`,
|
|
3620
3635
|
prefix: `${colLabel}.`,
|
|
3621
3636
|
schema: items }) }), jsx(Flex, { justifyContent: "end", children: jsx(Button$1, { variant: "ghost", onClick: () => {
|
|
3622
3637
|
setValue(colLabel, fields.filter((_, curIndex) => {
|
|
@@ -3636,7 +3651,7 @@ const ArrayRenderer = ({ schema, column, prefix, }) => {
|
|
|
3636
3651
|
return;
|
|
3637
3652
|
}
|
|
3638
3653
|
setValue(colLabel, [...fields, {}]);
|
|
3639
|
-
}, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
3654
|
+
}, children: translate.t(removeIndex(`${colLabel}.add`)) }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3640
3655
|
};
|
|
3641
3656
|
|
|
3642
3657
|
const Field = React.forwardRef(function Field(props, ref) {
|
|
@@ -3651,10 +3666,22 @@ const BooleanPicker = ({ schema, column, prefix }) => {
|
|
|
3651
3666
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3652
3667
|
const colLabel = `${prefix}${column}`;
|
|
3653
3668
|
const value = watch(colLabel);
|
|
3654
|
-
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
3669
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3655
3670
|
gridRow, children: [jsx(CheckboxCard, { checked: value, variant: "surface", onChange: () => {
|
|
3656
3671
|
setValue(colLabel, !value);
|
|
3657
|
-
} }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
3672
|
+
} }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3673
|
+
};
|
|
3674
|
+
|
|
3675
|
+
const CustomInput = ({ column, schema, prefix }) => {
|
|
3676
|
+
const formContext = useFormContext();
|
|
3677
|
+
const { inputRender } = schema;
|
|
3678
|
+
return (inputRender &&
|
|
3679
|
+
inputRender({
|
|
3680
|
+
column,
|
|
3681
|
+
schema,
|
|
3682
|
+
prefix,
|
|
3683
|
+
formContext,
|
|
3684
|
+
}));
|
|
3658
3685
|
};
|
|
3659
3686
|
|
|
3660
3687
|
const monthNamesShort = [
|
|
@@ -3744,27 +3771,54 @@ const PopoverRoot = Popover.Root;
|
|
|
3744
3771
|
const PopoverBody = Popover.Body;
|
|
3745
3772
|
const PopoverTrigger = Popover.Trigger;
|
|
3746
3773
|
|
|
3774
|
+
dayjs.extend(utc);
|
|
3747
3775
|
const DatePicker = ({ column, schema, prefix }) => {
|
|
3748
3776
|
const { watch, formState: { errors }, setValue, } = useFormContext();
|
|
3749
3777
|
const { translate } = useSchemaContext();
|
|
3750
|
-
const { required, gridColumn, gridRow } = schema;
|
|
3778
|
+
const { required, gridColumn = "span 4", gridRow = "span 1", displayDateFormat = "YYYY-MM-DD", dateFormat = "YYYY-MM-DD[T]HH:mm:ss[Z]", } = schema;
|
|
3751
3779
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3752
3780
|
const colLabel = `${prefix}${column}`;
|
|
3753
3781
|
const [open, setOpen] = useState(false);
|
|
3754
3782
|
const selectedDate = watch(colLabel);
|
|
3755
|
-
|
|
3756
|
-
|
|
3783
|
+
const displayDate = dayjs.utc(selectedDate).format(displayDateFormat);
|
|
3784
|
+
useEffect(() => {
|
|
3785
|
+
try {
|
|
3786
|
+
if (selectedDate) {
|
|
3787
|
+
// Parse the selectedDate as UTC or in a specific timezone to avoid +8 hour shift
|
|
3788
|
+
// For example, parse as UTC:
|
|
3789
|
+
const parsedDate = dayjs.utc(selectedDate);
|
|
3790
|
+
// Or if you want to parse in local timezone without shifting:
|
|
3791
|
+
// const parsedDate = dayjs.tz(selectedDate, dayjs.tz.guess());
|
|
3792
|
+
if (!parsedDate.isValid())
|
|
3793
|
+
return;
|
|
3794
|
+
// Format according to dateFormat from schema
|
|
3795
|
+
const formatted = parsedDate.format(dateFormat);
|
|
3796
|
+
// Update the form value only if different to avoid loops
|
|
3797
|
+
if (formatted !== selectedDate) {
|
|
3798
|
+
setValue(colLabel, formatted, {
|
|
3799
|
+
shouldValidate: true,
|
|
3800
|
+
shouldDirty: true,
|
|
3801
|
+
});
|
|
3802
|
+
}
|
|
3803
|
+
}
|
|
3804
|
+
}
|
|
3805
|
+
catch (e) {
|
|
3806
|
+
console.error(e);
|
|
3807
|
+
}
|
|
3808
|
+
}, [selectedDate, dateFormat, colLabel, setValue]);
|
|
3809
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3810
|
+
gridRow, children: [jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsx(PopoverTrigger, { asChild: true, children: jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
3757
3811
|
setOpen(true);
|
|
3758
|
-
}, children: selectedDate !== undefined ?
|
|
3812
|
+
}, justifyContent: "start", children: [jsx(MdDateRange, {}), selectedDate !== undefined ? `${displayDate}` : ""] }) }), jsx(PopoverContent, { children: jsxs(PopoverBody, { children: [jsx(PopoverTitle, {}), jsx(DatePicker$1
|
|
3759
3813
|
// @ts-expect-error TODO: find appropriate types
|
|
3760
3814
|
, {
|
|
3761
3815
|
// @ts-expect-error TODO: find appropriate types
|
|
3762
3816
|
selected: new Date(selectedDate),
|
|
3763
3817
|
// @ts-expect-error TODO: find appropriate types
|
|
3764
3818
|
onDateSelected: ({ date }) => {
|
|
3765
|
-
setValue(colLabel, dayjs(date).format(
|
|
3819
|
+
setValue(colLabel, dayjs(date).format(dateFormat));
|
|
3766
3820
|
setOpen(false);
|
|
3767
|
-
} })] }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
3821
|
+
} })] }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3768
3822
|
};
|
|
3769
3823
|
|
|
3770
3824
|
function filterArray(array, searchTerm) {
|
|
@@ -3780,7 +3834,7 @@ function filterArray(array, searchTerm) {
|
|
|
3780
3834
|
const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
3781
3835
|
const { watch, formState: { errors }, setValue, } = useFormContext();
|
|
3782
3836
|
const { translate } = useSchemaContext();
|
|
3783
|
-
const { required } = schema;
|
|
3837
|
+
const { required, variant } = schema;
|
|
3784
3838
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3785
3839
|
const { gridColumn, gridRow, renderDisplay } = schema;
|
|
3786
3840
|
const [searchText, setSearchText] = useState();
|
|
@@ -3797,25 +3851,40 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3797
3851
|
setSearchText(event.target.value);
|
|
3798
3852
|
setLimit(10);
|
|
3799
3853
|
};
|
|
3800
|
-
|
|
3854
|
+
if (variant === "radio") {
|
|
3855
|
+
return (jsx(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3856
|
+
gridRow, children: jsx(RadioGroup$1.Root, { defaultValue: "1", children: jsx(HStack, { gap: "6", children: filterArray(dataList, searchText ?? "").map((item) => {
|
|
3857
|
+
return (jsxs(RadioGroup$1.Item, { onClick: () => {
|
|
3858
|
+
if (!isMultiple) {
|
|
3859
|
+
setOpenSearchResult(false);
|
|
3860
|
+
setValue(colLabel, item);
|
|
3861
|
+
return;
|
|
3862
|
+
}
|
|
3863
|
+
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
3864
|
+
setValue(colLabel, [...newSet]);
|
|
3865
|
+
}, value: item, children: [jsx(RadioGroup$1.ItemHiddenInput, {}), jsx(RadioGroup$1.ItemIndicator, {}), jsx(RadioGroup$1.ItemText, { children: !!renderDisplay === true
|
|
3866
|
+
? renderDisplay(item)
|
|
3867
|
+
: translate.t(removeIndex(`${colLabel}.${item}`)) })] }, `${colLabel}-${item}`));
|
|
3868
|
+
}) }) }) }));
|
|
3869
|
+
}
|
|
3870
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3801
3871
|
gridRow, children: [isMultiple && (jsxs(Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
|
|
3802
3872
|
const item = enumValue;
|
|
3803
3873
|
if (item === undefined) {
|
|
3804
3874
|
return jsx(Fragment, { children: "undefined" });
|
|
3805
3875
|
}
|
|
3806
3876
|
return (jsx(Tag, { closable: true, onClick: () => {
|
|
3807
|
-
// setSelectedEnums((state) => state.filter((id) => id != item));
|
|
3808
3877
|
setValue(column, watchEnums.filter((id) => id != item));
|
|
3809
3878
|
}, children: !!renderDisplay === true
|
|
3810
3879
|
? renderDisplay(item)
|
|
3811
3880
|
: translate.t(removeIndex(`${colLabel}.${item}`)) }));
|
|
3812
3881
|
}), jsx(Tag, { cursor: "pointer", onClick: () => {
|
|
3813
3882
|
setOpenSearchResult(true);
|
|
3814
|
-
}, children: translate.t(removeIndex(`${colLabel}.
|
|
3883
|
+
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
|
|
3815
3884
|
setOpenSearchResult(true);
|
|
3816
|
-
}, children: watchEnum === undefined
|
|
3885
|
+
}, justifyContent: "start", children: watchEnum === undefined
|
|
3817
3886
|
? ""
|
|
3818
|
-
: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(`${column}.
|
|
3887
|
+
: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(`${column}.type_to_search`), onChange: (event) => {
|
|
3819
3888
|
onSearchChange(event);
|
|
3820
3889
|
setOpenSearchResult(true);
|
|
3821
3890
|
}, autoComplete: "off", ref: ref }), jsx(PopoverTitle, {}), jsx(Text, { children: `${translate.t(`${column}.total`)}: ${count}, ${translate.t(`${column}.showing`)} ${limit}` }), jsxs(Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsx(Flex, { flexFlow: "column wrap", children: filterArray(dataList, searchText ?? "").map((item) => {
|
|
@@ -3830,10 +3899,10 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3830
3899
|
}
|
|
3831
3900
|
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
3832
3901
|
setValue(colLabel, [...newSet]);
|
|
3833
|
-
}, ...(selected ? { color: "
|
|
3902
|
+
}, ...(selected ? { color: "colorPalette.400/50" } : {}), children: !!renderDisplay === true
|
|
3834
3903
|
? renderDisplay(item)
|
|
3835
3904
|
: translate.t(removeIndex(`${colLabel}.${item}`)) }, `${colLabel}-${item}`));
|
|
3836
|
-
}) }), isDirty && (jsx(Fragment, { children: dataList.length <= 0 && (jsx(Fragment, { children: translate.t(removeIndex(`${colLabel}.
|
|
3905
|
+
}) }), isDirty && (jsx(Fragment, { children: dataList.length <= 0 && (jsx(Fragment, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] })] }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3837
3906
|
};
|
|
3838
3907
|
|
|
3839
3908
|
function isEnteringWindow(_ref) {
|
|
@@ -4185,7 +4254,7 @@ const FileDropzone = ({ children = undefined, gridProps = {}, onDrop = () => { }
|
|
|
4185
4254
|
const filesArray = [...event.target.files];
|
|
4186
4255
|
onDrop({ files: filesArray });
|
|
4187
4256
|
};
|
|
4188
|
-
return (jsxs(Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "
|
|
4257
|
+
return (jsxs(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 && (jsxs(Fragment, { children: [jsx(Flex, { children: placeholder }), jsx(Input, { type: "file", multiple: true, style: { display: "none" }, ref: fileInput, onChange: handleChange })] }))] }));
|
|
4189
4258
|
};
|
|
4190
4259
|
|
|
4191
4260
|
const FilePicker = ({ column, schema, prefix }) => {
|
|
@@ -4195,7 +4264,7 @@ const FilePicker = ({ column, schema, prefix }) => {
|
|
|
4195
4264
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4196
4265
|
const currentFiles = (watch(column) ?? []);
|
|
4197
4266
|
const colLabel = `${prefix}${column}`;
|
|
4198
|
-
return (jsxs(Field, { label: `${translate.t(`${colLabel}.
|
|
4267
|
+
return (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: [jsx(FileDropzone, { onDrop: ({ files }) => {
|
|
4199
4268
|
const newFiles = files.filter(({ name }) => !currentFiles.some((cur) => cur.name === name));
|
|
4200
4269
|
setValue(colLabel, [...currentFiles, ...newFiles]);
|
|
4201
4270
|
}, placeholder: translate.t(removeIndex(`${colLabel}.fileDropzone`)) }), jsx(Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
@@ -4203,8 +4272,8 @@ const FilePicker = ({ column, schema, prefix }) => {
|
|
|
4203
4272
|
setValue(column, currentFiles.filter(({ name }) => {
|
|
4204
4273
|
return name !== file.name;
|
|
4205
4274
|
}));
|
|
4206
|
-
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsx(Box, { children: file.name }), jsx(TiDeleteOutline, {})] }) }, file.name));
|
|
4207
|
-
}) }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4275
|
+
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsx(Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsx(Box, { children: file.name }), jsx(TiDeleteOutline, {})] }) }, file.name));
|
|
4276
|
+
}) }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4208
4277
|
};
|
|
4209
4278
|
|
|
4210
4279
|
const getTableData = async ({ serverUrl, in_table, searching = "", where = [], limit = 10, offset = 0, }) => {
|
|
@@ -4319,9 +4388,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4319
4388
|
if (record === undefined) {
|
|
4320
4389
|
return "";
|
|
4321
4390
|
}
|
|
4391
|
+
if (!!renderDisplay === true) {
|
|
4392
|
+
return renderDisplay(record);
|
|
4393
|
+
}
|
|
4322
4394
|
return record[display_column];
|
|
4323
4395
|
};
|
|
4324
|
-
return (jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.
|
|
4396
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(removeIndex(`${column}.field_label`)))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4325
4397
|
gridRow, children: [isMultiple && (jsxs(Flex, { flexFlow: "wrap", gap: 1, children: [watchIds.map((id) => {
|
|
4326
4398
|
const item = idMap[id];
|
|
4327
4399
|
if (item === undefined) {
|
|
@@ -4334,9 +4406,9 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4334
4406
|
: item[display_column] }, id));
|
|
4335
4407
|
}), jsx(Tag, { cursor: "pointer", onClick: () => {
|
|
4336
4408
|
setOpenSearchResult(true);
|
|
4337
|
-
}, children: translate.t(removeIndex(`${colLabel}.
|
|
4409
|
+
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
|
|
4338
4410
|
setOpenSearchResult(true);
|
|
4339
|
-
}, children: getPickedValue() })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(removeIndex(`${colLabel}.
|
|
4411
|
+
}, justifyContent: "start", children: getPickedValue() })), jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsx(PopoverTrigger, {}), jsx(PopoverContent, { children: jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsx(Input, { placeholder: translate.t(removeIndex(`${colLabel}.type_to_search`)), onChange: (event) => {
|
|
4340
4412
|
onSearchChange(event);
|
|
4341
4413
|
setOpenSearchResult(true);
|
|
4342
4414
|
}, autoComplete: "off", ref: ref }), jsx(PopoverTitle, {}), (searchText?.length ?? 0) > 0 && (jsxs(Fragment, { children: [isFetching && jsx(Fragment, { children: "isFetching" }), isLoading && jsx(Fragment, { children: "isLoading" }), isPending && jsx(Fragment, { children: "isPending" }), (isFetching || isLoading || isPending) && jsx(Spinner, {}), isError && (jsx(Icon, { color: "red.400", children: jsx(BiError, {}) })), jsx(Text, { justifySelf: "center", children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit}` }), jsxs(Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsx(Flex, { flexFlow: "column wrap", children:
|
|
@@ -4356,10 +4428,12 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4356
4428
|
item[column_ref],
|
|
4357
4429
|
]);
|
|
4358
4430
|
setValue(colLabel, [...newSet]);
|
|
4359
|
-
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
|
|
4431
|
+
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
|
|
4432
|
+
? { color: "colorPalette.400/50" }
|
|
4433
|
+
: {}), children: !!renderDisplay === true
|
|
4360
4434
|
? renderDisplay(item)
|
|
4361
4435
|
: item[display_column] }, item[column_ref]));
|
|
4362
|
-
}) }), isDirty && (jsx(Fragment, { children: dataList.length <= 0 && (jsx(Text, { children: translate.t(removeIndex(`${colLabel}.
|
|
4436
|
+
}) }), isDirty && (jsx(Fragment, { children: dataList.length <= 0 && (jsx(Text, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] }), jsx(PaginationRoot, { justifySelf: "center", count: count, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxs(HStack, { gap: "4", children: [jsx(PaginationPrevTrigger, {}), count > 0 && jsx(PaginationPageText, {}), jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4363
4437
|
};
|
|
4364
4438
|
|
|
4365
4439
|
const NumberInputRoot = React.forwardRef(function NumberInput$1(props, ref) {
|
|
@@ -4377,9 +4451,9 @@ const NumberInputField = ({ schema, column, prefix, }) => {
|
|
|
4377
4451
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4378
4452
|
const colLabel = `${prefix}${column}`;
|
|
4379
4453
|
const value = watch(`${colLabel}`);
|
|
4380
|
-
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
4454
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn, gridRow, children: [jsx(NumberInputRoot, { children: jsx(NumberInputField$1, { required: isRequired, value: value, onChange: (event) => {
|
|
4381
4455
|
setValue(`${colLabel}`, Number(event.target.value));
|
|
4382
|
-
} }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4456
|
+
} }) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4383
4457
|
};
|
|
4384
4458
|
|
|
4385
4459
|
const ObjectInput = ({ schema, column, prefix }) => {
|
|
@@ -4391,13 +4465,13 @@ const ObjectInput = ({ schema, column, prefix }) => {
|
|
|
4391
4465
|
if (properties === undefined) {
|
|
4392
4466
|
throw new Error(`properties is undefined when using ObjectInput`);
|
|
4393
4467
|
}
|
|
4394
|
-
return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.
|
|
4468
|
+
return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsx("span", { children: "*" })] }), jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
|
|
4395
4469
|
return (
|
|
4396
4470
|
// @ts-expect-error find suitable types
|
|
4397
4471
|
jsx(ColumnRenderer, { column: `${key}`,
|
|
4398
4472
|
prefix: `${prefix}${column}.`,
|
|
4399
4473
|
properties }, `form-${colLabel}-${key}`));
|
|
4400
|
-
}) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4474
|
+
}) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4401
4475
|
};
|
|
4402
4476
|
|
|
4403
4477
|
const RecordInput$1 = ({ column, schema, prefix }) => {
|
|
@@ -4409,7 +4483,7 @@ const RecordInput$1 = ({ column, schema, prefix }) => {
|
|
|
4409
4483
|
const [showNewEntries, setShowNewEntries] = useState(false);
|
|
4410
4484
|
const [newKey, setNewKey] = useState();
|
|
4411
4485
|
const [newValue, setNewValue] = useState();
|
|
4412
|
-
return (jsxs(Field, { label: `${translate.t(`${column}.
|
|
4486
|
+
return (jsxs(Field, { label: `${translate.t(`${column}.field_label`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
|
|
4413
4487
|
return (jsxs(Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsx(Input, { value: key, onChange: (e) => {
|
|
4414
4488
|
const filtered = entries.filter(([target]) => {
|
|
4415
4489
|
return target !== key;
|
|
@@ -4449,7 +4523,7 @@ const RecordInput$1 = ({ column, schema, prefix }) => {
|
|
|
4449
4523
|
setShowNewEntries(true);
|
|
4450
4524
|
setNewKey(undefined);
|
|
4451
4525
|
setNewValue(undefined);
|
|
4452
|
-
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.
|
|
4526
|
+
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
|
|
4453
4527
|
};
|
|
4454
4528
|
|
|
4455
4529
|
const StringInputField = ({ column, schema, prefix, }) => {
|
|
@@ -4458,7 +4532,7 @@ const StringInputField = ({ column, schema, prefix, }) => {
|
|
|
4458
4532
|
const { required, gridColumn, gridRow } = schema;
|
|
4459
4533
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4460
4534
|
const colLabel = `${prefix}${column}`;
|
|
4461
|
-
return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
4535
|
+
return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Input, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
4462
4536
|
};
|
|
4463
4537
|
|
|
4464
4538
|
const RadioCardItem = React.forwardRef(function RadioCardItem(props, ref) {
|
|
@@ -4556,9 +4630,124 @@ const TagPicker = ({ column, schema, prefix }) => {
|
|
|
4556
4630
|
}), errors[`${column}`] && (jsx(Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
|
|
4557
4631
|
};
|
|
4558
4632
|
|
|
4633
|
+
const TextAreaInput = ({ column, schema, prefix, }) => {
|
|
4634
|
+
const { register, formState: { errors }, } = useFormContext();
|
|
4635
|
+
const { translate } = useSchemaContext();
|
|
4636
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4637
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4638
|
+
const colLabel = `${prefix}${column}`;
|
|
4639
|
+
return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Textarea, { ...register(`${colLabel}`, { required: isRequired }), autoComplete: "off" }), errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
4640
|
+
};
|
|
4641
|
+
|
|
4642
|
+
function TimePicker$1({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel = {
|
|
4643
|
+
am: "am",
|
|
4644
|
+
pm: "pm",
|
|
4645
|
+
}, onChange = () => { }, }) {
|
|
4646
|
+
const hours = Array.from({ length: 12 }, (_, i) => {
|
|
4647
|
+
const hour = i + 1;
|
|
4648
|
+
return hour.toString().padStart(2, "0");
|
|
4649
|
+
});
|
|
4650
|
+
const minutes = Array.from({ length: 60 }, (_, i) => {
|
|
4651
|
+
return i.toString().padStart(2, "0");
|
|
4652
|
+
});
|
|
4653
|
+
const hoursCollection = createListCollection({
|
|
4654
|
+
items: hours.map((hour) => ({
|
|
4655
|
+
value: hour,
|
|
4656
|
+
label: hour,
|
|
4657
|
+
})),
|
|
4658
|
+
});
|
|
4659
|
+
const minutesCollection = createListCollection({
|
|
4660
|
+
items: minutes.map((hour) => ({
|
|
4661
|
+
value: hour,
|
|
4662
|
+
label: hour,
|
|
4663
|
+
})),
|
|
4664
|
+
});
|
|
4665
|
+
const meridiemsCollection = createListCollection({
|
|
4666
|
+
items: ["am", "pm"].map((hour) => ({
|
|
4667
|
+
value: hour,
|
|
4668
|
+
label: meridiemLabel[hour] ?? hour,
|
|
4669
|
+
})),
|
|
4670
|
+
});
|
|
4671
|
+
return (jsxs(Grid, { templateColumns: "auto auto", gap: "4", children: [jsxs(Flex, { justifyContent: "center", alignItems: "center", gap: "2", children: [jsxs(Select.Root, { value: [`${hour.toString().padStart(2, "0")}`], onValueChange: (e) => {
|
|
4672
|
+
setHour(parseInt(e.value[0]));
|
|
4673
|
+
onChange({ hour: parseInt(e.value[0]), minute, meridiem });
|
|
4674
|
+
}, collection: hoursCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsx(Select.HiddenSelect, {}), jsx(Select.Control, { children: jsx(Select.Trigger, { children: jsx(Select.ValueText, { placeholder: "Hour" }) }) }), jsx(Select.Positioner, { children: jsx(Select.Content, { width: "full", children: hoursCollection.items.map(({ value: hour }) => (jsxs(Select.Item, { item: hour, children: [hour, jsx(Select.ItemIndicator, {})] }, hour))) }) })] }), jsx(Text, { children: ":" }), jsxs(Select.Root, { value: [`${minute.toString().padStart(2, "0")}`], onValueChange: (e) => {
|
|
4675
|
+
setMinute(parseInt(e.value[0]));
|
|
4676
|
+
onChange({ hour, minute: parseInt(e.value[0]), meridiem });
|
|
4677
|
+
}, collection: minutesCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsx(Select.HiddenSelect, {}), jsx(Select.Control, { children: jsx(Select.Trigger, { children: jsx(Select.ValueText, { placeholder: "Minute" }) }) }), jsx(Select.Positioner, { children: jsx(Select.Content, { width: "full", children: minutes.map((minute) => (jsxs(Select.Item, { item: minute, children: [minute, jsx(Select.ItemIndicator, {})] }, minute))) }) })] })] }), jsxs(Select.Root, { value: [meridiem], onValueChange: (e) => {
|
|
4678
|
+
setMeridiem(e.value[0]);
|
|
4679
|
+
onChange({ hour, minute, meridiem: e.value[0] });
|
|
4680
|
+
}, collection: meridiemsCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsx(Select.HiddenSelect, {}), jsx(Select.Control, { children: jsx(Select.Trigger, { children: jsx(Select.ValueText, { placeholder: "am/pm" }) }) }), jsx(Select.Positioner, { children: jsx(Select.Content, { width: "full", children: meridiemsCollection.items.map(({ value: hour, label }) => (jsxs(Select.Item, { item: hour, children: [label, jsx(Select.ItemIndicator, {})] }, hour))) }) })] })] }));
|
|
4681
|
+
}
|
|
4682
|
+
|
|
4683
|
+
const TimePicker = ({ column, schema, prefix }) => {
|
|
4684
|
+
const { watch, formState: { errors }, setValue, } = useFormContext();
|
|
4685
|
+
const { translate } = useSchemaContext();
|
|
4686
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4687
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4688
|
+
const colLabel = `${prefix}${column}`;
|
|
4689
|
+
const [open, setOpen] = useState(false);
|
|
4690
|
+
const value = watch(colLabel);
|
|
4691
|
+
const formatedTime = dayjs(value).format("hh:mm A");
|
|
4692
|
+
// Parse the initial time parts from the ISO time string (HH:mm:ss)
|
|
4693
|
+
const parseTime = (isoTime) => {
|
|
4694
|
+
if (!isoTime)
|
|
4695
|
+
return { hour: 12, minute: 0, meridiem: "am" };
|
|
4696
|
+
const parsed = dayjs(isoTime);
|
|
4697
|
+
if (!parsed.isValid())
|
|
4698
|
+
return { hour: 12, minute: 0, meridiem: "am" };
|
|
4699
|
+
let hour = parsed.hour();
|
|
4700
|
+
const minute = parsed.minute();
|
|
4701
|
+
const meridiem = hour >= 12 ? "pm" : "am";
|
|
4702
|
+
if (hour === 0)
|
|
4703
|
+
hour = 12;
|
|
4704
|
+
else if (hour > 12)
|
|
4705
|
+
hour -= 12;
|
|
4706
|
+
return { hour, minute, meridiem };
|
|
4707
|
+
};
|
|
4708
|
+
const initialTime = parseTime(value);
|
|
4709
|
+
const [hour, setHour] = useState(initialTime.hour);
|
|
4710
|
+
const [minute, setMinute] = useState(initialTime.minute);
|
|
4711
|
+
const [meridiem, setMeridiem] = useState(initialTime.meridiem);
|
|
4712
|
+
useEffect(() => {
|
|
4713
|
+
const { hour, minute, meridiem } = parseTime(value);
|
|
4714
|
+
setHour(hour);
|
|
4715
|
+
setMinute(minute);
|
|
4716
|
+
setMeridiem(meridiem);
|
|
4717
|
+
}, [value]);
|
|
4718
|
+
// Convert hour, minute, meridiem to 24-hour ISO time string
|
|
4719
|
+
const toIsoTime = (hour, minute, meridiem) => {
|
|
4720
|
+
let h = hour;
|
|
4721
|
+
if (meridiem === "am" && hour === 12)
|
|
4722
|
+
h = 0;
|
|
4723
|
+
else if (meridiem === "pm" && hour < 12)
|
|
4724
|
+
h = hour + 12;
|
|
4725
|
+
return dayjs().hour(h).minute(minute).second(0).toISOString();
|
|
4726
|
+
};
|
|
4727
|
+
// Handle changes to time parts
|
|
4728
|
+
const handleTimeChange = ({ hour: newHour, minute: newMinute, meridiem: newMeridiem, }) => {
|
|
4729
|
+
setHour(newHour);
|
|
4730
|
+
setMinute(newMinute);
|
|
4731
|
+
setMeridiem(newMeridiem);
|
|
4732
|
+
const isoTime = toIsoTime(newHour, newMinute, newMeridiem);
|
|
4733
|
+
setValue(colLabel, isoTime, { shouldValidate: true, shouldDirty: true });
|
|
4734
|
+
};
|
|
4735
|
+
const containerRef = useRef(null);
|
|
4736
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4737
|
+
gridRow, children: [jsxs(Popover.Root, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsx(Popover.Trigger, { asChild: true, children: jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
4738
|
+
setOpen(true);
|
|
4739
|
+
}, justifyContent: "start", children: [jsx(IoMdClock, {}), value !== undefined ? `${formatedTime}` : ""] }) }), jsx(Portal, { children: jsx(Popover.Positioner, { children: jsx(Popover.Content, { ref: containerRef, children: jsx(Popover.Body, { children: jsx(TimePicker$1, { hour: hour, setHour: setHour, minute: minute, setMinute: setMinute, meridiem: meridiem, setMeridiem: setMeridiem, onChange: handleTimeChange, meridiemLabel: {
|
|
4740
|
+
am: translate.t(removeIndex(`${colLabel}.am`)),
|
|
4741
|
+
pm: translate.t(removeIndex(`${colLabel}.pm`)),
|
|
4742
|
+
} }) }) }) }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4743
|
+
};
|
|
4744
|
+
|
|
4559
4745
|
const SchemaRenderer = ({ schema, prefix, column, }) => {
|
|
4560
4746
|
const colSchema = schema;
|
|
4561
|
-
const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
|
|
4747
|
+
const { type, variant, properties: innerProperties, foreign_key, format, items, } = schema;
|
|
4748
|
+
if (variant === "custom-input") {
|
|
4749
|
+
return jsx(CustomInput, { schema: colSchema, prefix, column });
|
|
4750
|
+
}
|
|
4562
4751
|
if (type === "string") {
|
|
4563
4752
|
if ((schema.enum ?? []).length > 0) {
|
|
4564
4753
|
return jsx(EnumPicker, { schema: colSchema, prefix, column });
|
|
@@ -4567,9 +4756,15 @@ const SchemaRenderer = ({ schema, prefix, column, }) => {
|
|
|
4567
4756
|
idPickerSanityCheck(column, foreign_key);
|
|
4568
4757
|
return jsx(IdPicker, { schema: colSchema, prefix, column });
|
|
4569
4758
|
}
|
|
4570
|
-
if (
|
|
4759
|
+
if (format === "date") {
|
|
4571
4760
|
return jsx(DatePicker, { schema: colSchema, prefix, column });
|
|
4572
4761
|
}
|
|
4762
|
+
if (format === "time") {
|
|
4763
|
+
return jsx(TimePicker, { schema: colSchema, prefix, column });
|
|
4764
|
+
}
|
|
4765
|
+
if (variant === "text-area") {
|
|
4766
|
+
return jsx(TextAreaInput, { schema: colSchema, prefix, column });
|
|
4767
|
+
}
|
|
4573
4768
|
return jsx(StringInputField, { schema: colSchema, prefix, column });
|
|
4574
4769
|
}
|
|
4575
4770
|
if (type === "number" || type === "integer") {
|
|
@@ -4622,9 +4817,9 @@ const ArrayViewer = ({ schema, column, prefix }) => {
|
|
|
4622
4817
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4623
4818
|
const { watch, formState: { errors }, } = useFormContext();
|
|
4624
4819
|
const values = watch(colLabel) ?? [];
|
|
4625
|
-
return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.
|
|
4820
|
+
return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsx("span", { children: "*" })] }), values.map((field, index) => (jsx(Flex, { flexFlow: "column", children: jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: jsx(SchemaViewer, { column: `${index}`,
|
|
4626
4821
|
prefix: `${colLabel}.`,
|
|
4627
|
-
schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4822
|
+
schema: items }) }) }, `form-${prefix}${column}.${index}`))), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4628
4823
|
};
|
|
4629
4824
|
|
|
4630
4825
|
const BooleanViewer = ({ schema, column, prefix, }) => {
|
|
@@ -4634,21 +4829,34 @@ const BooleanViewer = ({ schema, column, prefix, }) => {
|
|
|
4634
4829
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4635
4830
|
const colLabel = `${prefix}${column}`;
|
|
4636
4831
|
const value = watch(colLabel);
|
|
4637
|
-
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
4832
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4638
4833
|
gridRow, children: [jsx(Text, { children: value
|
|
4639
4834
|
? translate.t(removeIndex(`${colLabel}.true`))
|
|
4640
|
-
: translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4835
|
+
: translate.t(removeIndex(`${colLabel}.false`)) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4836
|
+
};
|
|
4837
|
+
|
|
4838
|
+
const CustomViewer = ({ column, schema, prefix }) => {
|
|
4839
|
+
const formContext = useFormContext();
|
|
4840
|
+
const { inputViewerRender } = schema;
|
|
4841
|
+
return (inputViewerRender &&
|
|
4842
|
+
inputViewerRender({
|
|
4843
|
+
column,
|
|
4844
|
+
schema,
|
|
4845
|
+
prefix,
|
|
4846
|
+
formContext,
|
|
4847
|
+
}));
|
|
4641
4848
|
};
|
|
4642
4849
|
|
|
4643
4850
|
const DateViewer = ({ column, schema, prefix }) => {
|
|
4644
4851
|
const { watch, formState: { errors }, } = useFormContext();
|
|
4645
4852
|
const { translate } = useSchemaContext();
|
|
4646
|
-
const { required, gridColumn, gridRow } = schema;
|
|
4853
|
+
const { required, gridColumn = "span 4", gridRow = "span 1", displayDateFormat = "YYYY-MM-DD", } = schema;
|
|
4647
4854
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4648
4855
|
const colLabel = `${prefix}${column}`;
|
|
4649
4856
|
const selectedDate = watch(colLabel);
|
|
4650
|
-
|
|
4651
|
-
|
|
4857
|
+
const displayDate = dayjs.utc(selectedDate).format(displayDateFormat);
|
|
4858
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4859
|
+
gridRow, children: [jsxs(Text, { children: [" ", selectedDate !== undefined ? displayDate : ""] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
|
|
4652
4860
|
};
|
|
4653
4861
|
|
|
4654
4862
|
const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
@@ -4660,7 +4868,7 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
4660
4868
|
const colLabel = `${prefix}${column}`;
|
|
4661
4869
|
const watchEnum = watch(colLabel);
|
|
4662
4870
|
const watchEnums = (watch(colLabel) ?? []);
|
|
4663
|
-
return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.
|
|
4871
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4664
4872
|
gridRow, children: [isMultiple && (jsx(Flex, { flexFlow: "wrap", gap: 1, children: watchEnums.map((enumValue) => {
|
|
4665
4873
|
const item = enumValue;
|
|
4666
4874
|
if (item === undefined) {
|
|
@@ -4669,26 +4877,19 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
4669
4877
|
return (jsx(Tag, { closable: true, children: !!renderDisplay === true
|
|
4670
4878
|
? renderDisplay(item)
|
|
4671
4879
|
: translate.t(removeIndex(`${colLabel}.${item}`)) }));
|
|
4672
|
-
}) })), !isMultiple && (jsx(Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4880
|
+
}) })), !isMultiple && (jsx(Text, { children: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4673
4881
|
};
|
|
4674
4882
|
|
|
4675
4883
|
const FileViewer = ({ column, schema, prefix }) => {
|
|
4676
|
-
const {
|
|
4884
|
+
const { watch } = useFormContext();
|
|
4677
4885
|
const { translate } = useSchemaContext();
|
|
4678
4886
|
const { required, gridColumn, gridRow } = schema;
|
|
4679
4887
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4680
4888
|
const currentFiles = (watch(column) ?? []);
|
|
4681
4889
|
const colLabel = `${prefix}${column}`;
|
|
4682
|
-
return (
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
}, placeholder: translate.t(`${colLabel}.fileDropzone`) }), jsx(Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
4686
|
-
return (jsx(Card.Root, { variant: "subtle", children: jsxs(Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
|
|
4687
|
-
setValue(column, currentFiles.filter(({ name }) => {
|
|
4688
|
-
return name !== file.name;
|
|
4689
|
-
}));
|
|
4690
|
-
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsx(Box, { children: file.name }), jsx(TiDeleteOutline, {})] }) }, file.name));
|
|
4691
|
-
}) }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.fieldRequired`)) }))] }));
|
|
4890
|
+
return (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: jsx(Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
4891
|
+
return (jsx(Card.Root, { variant: "subtle", children: jsxs(Card.Body, { gap: "2", display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsx(Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsx(Box, { children: file.name })] }) }, file.name));
|
|
4892
|
+
}) }) }));
|
|
4692
4893
|
};
|
|
4693
4894
|
|
|
4694
4895
|
const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
@@ -4710,7 +4911,7 @@ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4710
4911
|
}
|
|
4711
4912
|
return record[display_column];
|
|
4712
4913
|
};
|
|
4713
|
-
return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.
|
|
4914
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4714
4915
|
gridRow, children: [isMultiple && (jsx(Flex, { flexFlow: "wrap", gap: 1, children: watchIds.map((id) => {
|
|
4715
4916
|
const item = idMap[id];
|
|
4716
4917
|
if (item === undefined) {
|
|
@@ -4719,7 +4920,7 @@ const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4719
4920
|
return (jsx(Tag, { closable: true, children: !!renderDisplay === true
|
|
4720
4921
|
? renderDisplay(item)
|
|
4721
4922
|
: item[display_column] }, id));
|
|
4722
|
-
}) })), !isMultiple && jsx(Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4923
|
+
}) })), !isMultiple && jsx(Text, { children: getPickedValue() }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4723
4924
|
};
|
|
4724
4925
|
|
|
4725
4926
|
const NumberViewer = ({ schema, column, prefix, }) => {
|
|
@@ -4729,7 +4930,7 @@ const NumberViewer = ({ schema, column, prefix, }) => {
|
|
|
4729
4930
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4730
4931
|
const colLabel = `${prefix}${column}`;
|
|
4731
4932
|
const value = watch(colLabel);
|
|
4732
|
-
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
4933
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn, gridRow, children: [jsx(Text, { children: value }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4733
4934
|
};
|
|
4734
4935
|
|
|
4735
4936
|
const ObjectViewer = ({ schema, column, prefix }) => {
|
|
@@ -4741,13 +4942,13 @@ const ObjectViewer = ({ schema, column, prefix }) => {
|
|
|
4741
4942
|
if (properties === undefined) {
|
|
4742
4943
|
throw new Error(`properties is undefined when using ObjectInput`);
|
|
4743
4944
|
}
|
|
4744
|
-
return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.
|
|
4945
|
+
return (jsxs(Box, { gridRow, gridColumn, children: [jsxs(Box, { as: "label", gridColumn: "1/span12", children: [`${translate.t(removeIndex(`${colLabel}.field_label`))}`, isRequired && jsx("span", { children: "*" })] }), jsx(Grid, { gap: "4", padding: "4", gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat("auto-fit", auto)`, children: Object.keys(properties ?? {}).map((key) => {
|
|
4745
4946
|
return (
|
|
4746
4947
|
// @ts-expect-error find suitable types
|
|
4747
4948
|
jsx(ColumnViewer, { column: `${key}`,
|
|
4748
4949
|
prefix: `${prefix}${column}.`,
|
|
4749
4950
|
properties }, `form-objectviewer-${colLabel}-${key}`));
|
|
4750
|
-
}) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.
|
|
4951
|
+
}) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4751
4952
|
};
|
|
4752
4953
|
|
|
4753
4954
|
const RecordInput = ({ column, schema, prefix }) => {
|
|
@@ -4759,7 +4960,7 @@ const RecordInput = ({ column, schema, prefix }) => {
|
|
|
4759
4960
|
const [showNewEntries, setShowNewEntries] = useState(false);
|
|
4760
4961
|
const [newKey, setNewKey] = useState();
|
|
4761
4962
|
const [newValue, setNewValue] = useState();
|
|
4762
|
-
return (jsxs(Field, { label: `${translate.t(`${column}.
|
|
4963
|
+
return (jsxs(Field, { label: `${translate.t(`${column}.field_label`)}`, required: isRequired, alignItems: "stretch", gridColumn, gridRow, children: [entries.map(([key, value]) => {
|
|
4763
4964
|
return (jsxs(Grid, { templateColumns: "1fr 1fr auto", gap: 1, children: [jsx(Input, { value: key, onChange: (e) => {
|
|
4764
4965
|
const filtered = entries.filter(([target]) => {
|
|
4765
4966
|
return target !== key;
|
|
@@ -4799,7 +5000,17 @@ const RecordInput = ({ column, schema, prefix }) => {
|
|
|
4799
5000
|
setShowNewEntries(true);
|
|
4800
5001
|
setNewKey(undefined);
|
|
4801
5002
|
setNewValue(undefined);
|
|
4802
|
-
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.
|
|
5003
|
+
}, children: translate.t(`${column}.addNew`) }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
|
|
5004
|
+
};
|
|
5005
|
+
|
|
5006
|
+
const StringViewer = ({ column, schema, prefix, }) => {
|
|
5007
|
+
const { watch, formState: { errors }, } = useFormContext();
|
|
5008
|
+
const { translate } = useSchemaContext();
|
|
5009
|
+
const { required, gridColumn, gridRow } = schema;
|
|
5010
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
5011
|
+
const colLabel = `${prefix}${column}`;
|
|
5012
|
+
const value = watch(colLabel);
|
|
5013
|
+
return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Text, { children: value }), errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
4803
5014
|
};
|
|
4804
5015
|
|
|
4805
5016
|
const TagViewer = ({ column, schema, prefix }) => {
|
|
@@ -4887,19 +5098,35 @@ const TagViewer = ({ column, schema, prefix }) => {
|
|
|
4887
5098
|
}), errors[`${column}`] && (jsx(Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
|
|
4888
5099
|
};
|
|
4889
5100
|
|
|
4890
|
-
const
|
|
5101
|
+
const TextAreaViewer = ({ column, schema, prefix, }) => {
|
|
4891
5102
|
const { watch, formState: { errors }, } = useFormContext();
|
|
4892
5103
|
const { translate } = useSchemaContext();
|
|
4893
5104
|
const { required, gridColumn, gridRow } = schema;
|
|
4894
5105
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4895
5106
|
const colLabel = `${prefix}${column}`;
|
|
4896
5107
|
const value = watch(colLabel);
|
|
4897
|
-
return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.
|
|
5108
|
+
return (jsx(Fragment, { children: jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsx(Text, { whiteSpace: "pre-wrap", children: value }), " ", errors[colLabel] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
5109
|
+
};
|
|
5110
|
+
|
|
5111
|
+
const TimeViewer = ({ column, schema, prefix }) => {
|
|
5112
|
+
const { watch, formState: { errors }, } = useFormContext();
|
|
5113
|
+
const { translate } = useSchemaContext();
|
|
5114
|
+
const { required, gridColumn, gridRow } = schema;
|
|
5115
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
5116
|
+
const colLabel = `${prefix}${column}`;
|
|
5117
|
+
const selectedDate = watch(colLabel);
|
|
5118
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
5119
|
+
gridRow, children: [jsx(Text, { children: selectedDate !== undefined
|
|
5120
|
+
? dayjs(selectedDate).format("hh:mm A")
|
|
5121
|
+
: "" }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(`${column}.field_required`) }))] }));
|
|
4898
5122
|
};
|
|
4899
5123
|
|
|
4900
5124
|
const SchemaViewer = ({ schema, prefix, column, }) => {
|
|
4901
5125
|
const colSchema = schema;
|
|
4902
5126
|
const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
|
|
5127
|
+
if (variant === "custom-input") {
|
|
5128
|
+
return jsx(CustomViewer, { schema: colSchema, prefix, column });
|
|
5129
|
+
}
|
|
4903
5130
|
if (type === "string") {
|
|
4904
5131
|
if ((schema.enum ?? []).length > 0) {
|
|
4905
5132
|
return jsx(EnumViewer, { schema: colSchema, prefix, column });
|
|
@@ -4911,6 +5138,12 @@ const SchemaViewer = ({ schema, prefix, column, }) => {
|
|
|
4911
5138
|
if (variant === "date-picker") {
|
|
4912
5139
|
return jsx(DateViewer, { schema: colSchema, prefix, column });
|
|
4913
5140
|
}
|
|
5141
|
+
if (variant === "time-picker") {
|
|
5142
|
+
return jsx(TimeViewer, { schema: colSchema, prefix, column });
|
|
5143
|
+
}
|
|
5144
|
+
if (variant === "text-area") {
|
|
5145
|
+
return jsx(TextAreaViewer, { schema: colSchema, prefix, column });
|
|
5146
|
+
}
|
|
4914
5147
|
return jsx(StringViewer, { schema: colSchema, prefix, column });
|
|
4915
5148
|
}
|
|
4916
5149
|
if (type === "number" || type === "integer") {
|
|
@@ -5033,7 +5266,7 @@ const FormBody = () => {
|
|
|
5033
5266
|
include,
|
|
5034
5267
|
});
|
|
5035
5268
|
if (isSuccess) {
|
|
5036
|
-
return (jsxs(Flex, { flexFlow: "column", gap: "2", children: [jsxs(Alert.Root, { status: "success", children: [jsx(Alert.Indicator, {}), jsx(Alert.Title, { children: translate.t("
|
|
5269
|
+
return (jsxs(Flex, { flexFlow: "column", gap: "2", children: [jsxs(Alert.Root, { status: "success", children: [jsx(Alert.Indicator, {}), jsx(Alert.Title, { children: translate.t("submit_success") })] }), jsx(Flex, { justifyContent: "end", children: jsx(Button$1, { onClick: async () => {
|
|
5037
5270
|
setIsError(false);
|
|
5038
5271
|
setIsSubmiting(false);
|
|
5039
5272
|
setIsSuccess(false);
|
|
@@ -5041,7 +5274,7 @@ const FormBody = () => {
|
|
|
5041
5274
|
setValidatedData(undefined);
|
|
5042
5275
|
const data = await getUpdatedData();
|
|
5043
5276
|
methods.reset(data);
|
|
5044
|
-
}, formNoValidate: true, children: translate.t("
|
|
5277
|
+
}, formNoValidate: true, children: translate.t("submit_again") }) })] }));
|
|
5045
5278
|
}
|
|
5046
5279
|
if (isConfirming) {
|
|
5047
5280
|
return (jsxs(Flex, { flexFlow: "column", gap: "2", children: [jsx(Grid, { gap: 4, gridTemplateColumns: "repeat(12, 1fr)", gridTemplateRows: `repeat(${rowNumber ?? "auto-fit"}, auto)`, children: ordered.map((column) => {
|
|
@@ -5072,8 +5305,8 @@ const FormTitle = () => {
|
|
|
5072
5305
|
return jsx(Heading, { children: translate.t("title") });
|
|
5073
5306
|
};
|
|
5074
5307
|
|
|
5075
|
-
const DefaultForm = ({ formConfig, }) => {
|
|
5076
|
-
return (jsx(FormRoot, { ...formConfig, children: jsxs(Grid, { gap: "2", children: [jsx(FormTitle, {}), jsx(FormBody, {})] }) }));
|
|
5308
|
+
const DefaultForm = ({ formConfig, showTitle = true, }) => {
|
|
5309
|
+
return (jsx(FormRoot, { ...formConfig, children: jsxs(Grid, { gap: "2", children: [showTitle && jsx(FormTitle, {}), jsx(FormBody, {})] }) }));
|
|
5077
5310
|
};
|
|
5078
5311
|
|
|
5079
5312
|
const useForm = ({ preLoadedValues, keyPrefix }) => {
|
|
@@ -5106,4 +5339,4 @@ const getMultiDates = ({ selected, selectedDate, selectedDates, selectable, }) =
|
|
|
5106
5339
|
}
|
|
5107
5340
|
};
|
|
5108
5341
|
|
|
5109
|
-
export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultForm, DefaultTable, DensityToggleButton,
|
|
5342
|
+
export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultForm, DefaultTable, DensityToggleButton, EditSortingButton, EmptyState$1 as EmptyState, ErrorAlert, FilterDialog, FilterOptions, FormBody, FormRoot, FormTitle, GlobalFilter, PageSizeControl, Pagination, RecordDisplay, ReloadButton, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableControls, TableDataDisplay, TableFilter, TableFilterTags, TableFooter, TableHeader, TableLoadingComponent, TableSelector, TableSorter, TableViewer, TextCell, ViewDialog, getColumns, getMultiDates, getRangeDates, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
|