@bsol-oss/react-datatable5 12.0.0-beta.20 → 12.0.0-beta.22
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 +34 -11
- package/dist/index.js +197 -70
- package/dist/index.mjs +200 -73
- package/dist/types/components/DataTable/controls/TableControls.d.ts +3 -1
- package/dist/types/components/DataTable/display/TableFooter.d.ts +1 -5
- 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/TimePicker.d.ts +7 -0
- package/dist/types/components/Form/components/types/CustomJSONSchema7.d.ts +14 -1
- package/dist/types/components/Form/components/viewers/CustomViewer.d.ts +8 -0
- package/dist/types/components/TimePicker/TimePicker.d.ts +19 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -3,17 +3,17 @@ import { Row, RowData, OnChangeFn, Updater, FilterFn, ColumnDef, RowSelectionSta
|
|
|
3
3
|
import * as React$1 from 'react';
|
|
4
4
|
import React__default, { ReactNode, Dispatch, SetStateAction } from 'react';
|
|
5
5
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
6
|
-
import { ImageProps, TableRootProps, TableHeaderProps as TableHeaderProps$1, TableRowProps,
|
|
6
|
+
import { ImageProps, GridProps, TableRootProps, TableHeaderProps as TableHeaderProps$1, TableRowProps, CardBodyProps, FlexProps, TextProps, BoxProps } from '@chakra-ui/react';
|
|
7
7
|
import { IconType } from 'react-icons';
|
|
8
8
|
import * as react_i18next from 'react-i18next';
|
|
9
9
|
import { UseTranslationResponse } from 'react-i18next';
|
|
10
10
|
import { RankingInfo } from '@tanstack/match-sorter-utils';
|
|
11
11
|
import { UseQueryResult } from '@tanstack/react-query';
|
|
12
12
|
import { JSONSchema7 } from 'json-schema';
|
|
13
|
-
import { ForeignKeyProps } from '@/components/Form/components/fields/StringInputField';
|
|
13
|
+
import { ForeignKeyProps as ForeignKeyProps$1 } from '@/components/Form/components/fields/StringInputField';
|
|
14
14
|
import { AxiosRequestConfig } from 'axios';
|
|
15
15
|
import * as react_hook_form from 'react-hook-form';
|
|
16
|
-
import {
|
|
16
|
+
import { UseFormReturn, FieldValues, SubmitHandler } from 'react-hook-form';
|
|
17
17
|
import { RenderProps, Props } from '@bsol-oss/dayzed-react19';
|
|
18
18
|
|
|
19
19
|
interface DensityToggleButtonProps {
|
|
@@ -308,8 +308,9 @@ interface TableControlsProps {
|
|
|
308
308
|
extraItems?: ReactNode;
|
|
309
309
|
loading?: boolean;
|
|
310
310
|
hasError?: boolean;
|
|
311
|
+
gridProps?: GridProps;
|
|
311
312
|
}
|
|
312
|
-
declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView, filterOptions, extraItems, loading, hasError, }: TableControlsProps) => react_jsx_runtime.JSX.Element;
|
|
313
|
+
declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView, filterOptions, extraItems, loading, hasError, gridProps, }: TableControlsProps) => react_jsx_runtime.JSX.Element;
|
|
313
314
|
|
|
314
315
|
interface TableProps extends TableRootProps {
|
|
315
316
|
showLoading?: boolean;
|
|
@@ -342,14 +343,10 @@ interface TableRowSelectorProps<TData> {
|
|
|
342
343
|
declare const TableBody: ({ showSelector, alwaysShowSelector, canResize, }: TableBodyProps) => react_jsx_runtime.JSX.Element;
|
|
343
344
|
|
|
344
345
|
interface TableFooterProps {
|
|
345
|
-
pinnedBgColor?: {
|
|
346
|
-
light: string;
|
|
347
|
-
dark: string;
|
|
348
|
-
};
|
|
349
346
|
showSelector?: boolean;
|
|
350
347
|
alwaysShowSelector?: boolean;
|
|
351
348
|
}
|
|
352
|
-
declare const TableFooter: ({
|
|
349
|
+
declare const TableFooter: ({ showSelector, alwaysShowSelector, }: TableFooterProps) => react_jsx_runtime.JSX.Element;
|
|
353
350
|
|
|
354
351
|
interface TableHeaderProps {
|
|
355
352
|
canResize?: boolean;
|
|
@@ -448,8 +445,34 @@ declare const FilterOptions: ({ column }: FilterOptionsProps) => react_jsx_runti
|
|
|
448
445
|
|
|
449
446
|
declare const GlobalFilter: () => react_jsx_runtime.JSX.Element;
|
|
450
447
|
|
|
448
|
+
interface ForeignKeyProps {
|
|
449
|
+
column: string;
|
|
450
|
+
table: string;
|
|
451
|
+
display_column: string;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
interface CustomJSONSchema7 extends JSONSchema7 {
|
|
455
|
+
gridColumn?: string;
|
|
456
|
+
gridRow?: string;
|
|
457
|
+
foreign_key?: ForeignKeyProps;
|
|
458
|
+
variant?: string;
|
|
459
|
+
renderDisplay?: (item: unknown) => ReactNode;
|
|
460
|
+
inputRender?: (props: {
|
|
461
|
+
column: string;
|
|
462
|
+
schema: CustomJSONSchema7;
|
|
463
|
+
prefix: string;
|
|
464
|
+
formContext: UseFormReturn;
|
|
465
|
+
}) => ReactNode;
|
|
466
|
+
inputViewerRender?: (props: {
|
|
467
|
+
column: string;
|
|
468
|
+
schema: CustomJSONSchema7;
|
|
469
|
+
prefix: string;
|
|
470
|
+
formContext: UseFormReturn;
|
|
471
|
+
}) => ReactNode;
|
|
472
|
+
}
|
|
473
|
+
|
|
451
474
|
interface FormRootProps<TData extends FieldValues> {
|
|
452
|
-
schema:
|
|
475
|
+
schema: CustomJSONSchema7;
|
|
453
476
|
serverUrl: string;
|
|
454
477
|
requestUrl?: string;
|
|
455
478
|
idMap: Record<string, object>;
|
|
@@ -472,7 +495,7 @@ interface CustomJSONSchema7Definition extends JSONSchema7 {
|
|
|
472
495
|
display_column: string;
|
|
473
496
|
gridColumn: string;
|
|
474
497
|
gridRow: string;
|
|
475
|
-
foreign_key: ForeignKeyProps;
|
|
498
|
+
foreign_key: ForeignKeyProps$1;
|
|
476
499
|
children: ReactNode;
|
|
477
500
|
}
|
|
478
501
|
declare const idPickerSanityCheck: (column: string, foreign_key?: {
|
package/dist/index.js
CHANGED
|
@@ -2457,7 +2457,7 @@ function ColumnCard({ columnId }) {
|
|
|
2457
2457
|
onDrop: () => setDragging(false), // NEW
|
|
2458
2458
|
});
|
|
2459
2459
|
}, [columnId, table]);
|
|
2460
|
-
return (jsxRuntime.jsxs(react.Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsxRuntime.jsx(react.Flex, { alignItems: "center", padding: "0", cursor: "grab", children: jsxRuntime.jsx(fa6.FaGripLinesVertical, { color: "
|
|
2460
|
+
return (jsxRuntime.jsxs(react.Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsxRuntime.jsx(react.Flex, { alignItems: "center", padding: "0", cursor: "grab", children: jsxRuntime.jsx(fa6.FaGripLinesVertical, { color: "colorPalette.400" }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "space-between", alignItems: "center", children: jsxRuntime.jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
|
|
2461
2461
|
}
|
|
2462
2462
|
function CardContainer({ location, children }) {
|
|
2463
2463
|
const ref = React.useRef(null);
|
|
@@ -2589,7 +2589,7 @@ const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
|
|
|
2589
2589
|
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "null" });
|
|
2590
2590
|
}
|
|
2591
2591
|
return (jsxRuntime.jsx(react.Grid, { rowGap: 1, padding: 1, overflow: "auto", ...boxProps, children: Object.entries(object).map(([field, value]) => {
|
|
2592
|
-
return (jsxRuntime.jsxs(react.Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsxRuntime.jsx(react.Text, { color: "
|
|
2592
|
+
return (jsxRuntime.jsxs(react.Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsxRuntime.jsx(react.Text, { color: "colorPalette.400", children: getColumn({ field }) }), typeof value === "object" ? (jsxRuntime.jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsxRuntime.jsx(react.Text, { children: JSON.stringify(value) }))] }, field));
|
|
2593
2593
|
}) }));
|
|
2594
2594
|
};
|
|
2595
2595
|
|
|
@@ -2639,7 +2639,7 @@ const CellRenderer = ({ cell }) => {
|
|
|
2639
2639
|
paddingY: 2,
|
|
2640
2640
|
}, object: value })] }, cell.id));
|
|
2641
2641
|
}
|
|
2642
|
-
return (jsxRuntime.jsxs(react.Box, { gridColumn, gridRow, children: [jsxRuntime.jsx(react.Box, { color:
|
|
2642
|
+
return (jsxRuntime.jsxs(react.Box, { gridColumn, gridRow, children: [jsxRuntime.jsx(react.Box, { color: "colorPalette.400", children: getLabel({ columnId: cell.column.id }) }), jsxRuntime.jsx(react.Box, { wordBreak: "break-word", textOverflow: "ellipsis", overflow: "hidden", children: `${formatValue(cell.getValue())}` })] }, cell.id));
|
|
2643
2643
|
};
|
|
2644
2644
|
const DataDisplay = ({ variant = "" }) => {
|
|
2645
2645
|
const { table, translate } = useDataTableContext();
|
|
@@ -2995,13 +2995,11 @@ const TableFilterTags = () => {
|
|
|
2995
2995
|
}) }));
|
|
2996
2996
|
};
|
|
2997
2997
|
|
|
2998
|
-
const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsxRuntime.jsx(jsxRuntime.Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, }) => {
|
|
2998
|
+
const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsxRuntime.jsx(jsxRuntime.Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, gridProps = {}, }) => {
|
|
2999
2999
|
const { translate } = useDataTableContext();
|
|
3000
|
-
return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", children: [jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsx(react.Box, { children: showView && jsxRuntime.jsx(ViewDialog, { icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsxRuntime.jsx(react.Spinner, { size: "sm" }), hasError && (jsxRuntime.jsx(Tooltip, { content: translate.t("has_error"), children: jsxRuntime.jsx(react.Icon, { as: bs.BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsxRuntime.jsx(GlobalFilter, {}), showFilter && jsxRuntime.jsx(FilterDialog, {}), showReload && jsxRuntime.jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
|
|
3000
|
+
return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, children: [jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsx(react.Box, { children: showView && jsxRuntime.jsx(ViewDialog, { icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsxRuntime.jsx(react.Spinner, { size: "sm" }), hasError && (jsxRuntime.jsx(Tooltip, { content: translate.t("has_error"), children: jsxRuntime.jsx(react.Icon, { as: bs.BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsxRuntime.jsx(GlobalFilter, {}), showFilter && jsxRuntime.jsx(FilterDialog, {}), showReload && jsxRuntime.jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
|
|
3001
3001
|
return (jsxRuntime.jsxs(react.Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxRuntime.jsxs(react.Text, { children: [column, ":"] }), jsxRuntime.jsx(FilterOptions, { column: column })] }, column));
|
|
3002
|
-
}) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto",
|
|
3003
|
-
backgroundColor: "gray.900",
|
|
3004
|
-
}, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] }))] }));
|
|
3002
|
+
}) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] }))] }));
|
|
3005
3003
|
};
|
|
3006
3004
|
|
|
3007
3005
|
const EmptyState = React__namespace.forwardRef(function EmptyState(props, ref) {
|
|
@@ -3015,7 +3013,7 @@ const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...pr
|
|
|
3015
3013
|
if (table.getRowModel().rows.length <= 0) {
|
|
3016
3014
|
return emptyComponent;
|
|
3017
3015
|
}
|
|
3018
|
-
return (jsxRuntime.jsx(react.Table.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", ...props, children: children }));
|
|
3016
|
+
return (jsxRuntime.jsx(react.Table.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...props, children: children }));
|
|
3019
3017
|
};
|
|
3020
3018
|
|
|
3021
3019
|
const Checkbox = React__namespace.forwardRef(function Checkbox(props, ref) {
|
|
@@ -3079,7 +3077,7 @@ const TableRowSelector = ({ index, row, }) => {
|
|
|
3079
3077
|
onCheckedChange: row.getToggleSelectedHandler() }) }));
|
|
3080
3078
|
};
|
|
3081
3079
|
|
|
3082
|
-
const TableFooter = ({
|
|
3080
|
+
const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
|
|
3083
3081
|
const table = useDataTableContext().table;
|
|
3084
3082
|
const SELECTION_BOX_WIDTH = 20;
|
|
3085
3083
|
const [hoveredCheckBox, setHoveredCheckBox] = React.useState(false);
|
|
@@ -3098,41 +3096,11 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
|
|
|
3098
3096
|
}
|
|
3099
3097
|
return false;
|
|
3100
3098
|
};
|
|
3101
|
-
|
|
3102
|
-
const thProps = header.column.getIsPinned()
|
|
3103
|
-
? {
|
|
3104
|
-
left: showSelector
|
|
3105
|
-
? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
3106
|
-
: `${header.getStart("left") + table.getDensityValue() * 2}px`,
|
|
3107
|
-
background: pinnedBgColor.light,
|
|
3108
|
-
position: "sticky",
|
|
3109
|
-
zIndex: 1,
|
|
3110
|
-
_dark: {
|
|
3111
|
-
backgroundColor: pinnedBgColor.dark,
|
|
3112
|
-
},
|
|
3113
|
-
}
|
|
3114
|
-
: {};
|
|
3115
|
-
return thProps;
|
|
3116
|
-
};
|
|
3117
|
-
return (jsxRuntime.jsx(react.Table.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Table.Header
|
|
3118
|
-
// styling resize and pinning start
|
|
3119
|
-
, {
|
|
3120
|
-
// styling resize and pinning start
|
|
3121
|
-
padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
|
|
3122
|
-
? {
|
|
3123
|
-
left: `0px`,
|
|
3124
|
-
backgroundColor: pinnedBgColor.light,
|
|
3125
|
-
position: "sticky",
|
|
3126
|
-
zIndex: 1,
|
|
3127
|
-
_dark: { backgroundColor: pinnedBgColor.dark },
|
|
3128
|
-
}
|
|
3129
|
-
: {}),
|
|
3130
|
-
// styling resize and pinning end
|
|
3131
|
-
onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
|
|
3099
|
+
return (jsxRuntime.jsx(react.Table.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Table.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
|
|
3132
3100
|
// indeterminate: table.getIsSomeRowsSelected(),
|
|
3133
3101
|
onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), footerGroup.headers.map((header) => (jsxRuntime.jsx(react.Table.Cell, { padding: "0", columnSpan: `${header.colSpan}`,
|
|
3134
3102
|
// styling resize and pinning start
|
|
3135
|
-
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid",
|
|
3103
|
+
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsxRuntime.jsx(react.MenuRoot, { children: jsxRuntime.jsx(react.MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3136
3104
|
? null
|
|
3137
3105
|
: reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && (
|
|
3138
3106
|
// <UpDownIcon />
|
|
@@ -3158,7 +3126,7 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3158
3126
|
position: "sticky",
|
|
3159
3127
|
top: 0,
|
|
3160
3128
|
};
|
|
3161
|
-
return (jsxRuntime.jsx(react.Table.Header, { ...(isSticky ? stickyProps : {}), ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", ...tableRowProps, children: [showSelector && (jsxRuntime.jsx(react.Table.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
3129
|
+
return (jsxRuntime.jsx(react.Table.Header, { ...(isSticky ? stickyProps : {}), bgColor: "transparent", ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", bgColor: "transparent", ...tableRowProps, children: [showSelector && (jsxRuntime.jsx(react.Table.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
3162
3130
|
base: "colorPalette.900",
|
|
3163
3131
|
_dark: "colorPalette.100",
|
|
3164
3132
|
},
|
|
@@ -3176,10 +3144,20 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3176
3144
|
base: "colorPalette.800",
|
|
3177
3145
|
_dark: "colorPalette.200",
|
|
3178
3146
|
},
|
|
3179
|
-
bg: { base: "colorPalette.100", _dark: "colorPalette.900" }, ...getThProps(header), children: [jsxRuntime.jsxs(MenuRoot, { children: [jsxRuntime.jsx(MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto",
|
|
3180
|
-
|
|
3181
|
-
_dark:
|
|
3182
|
-
|
|
3147
|
+
bg: { base: "colorPalette.100", _dark: "colorPalette.900" }, ...getThProps(header), children: [jsxRuntime.jsxs(MenuRoot, { children: [jsxRuntime.jsx(MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", color: {
|
|
3148
|
+
base: "colorPalette.800",
|
|
3149
|
+
_dark: "colorPalette.200",
|
|
3150
|
+
_hover: {
|
|
3151
|
+
base: "colorPalette.700",
|
|
3152
|
+
_dark: "colorPalette.300",
|
|
3153
|
+
},
|
|
3154
|
+
},
|
|
3155
|
+
bg: {
|
|
3156
|
+
base: "colorPalette.100",
|
|
3157
|
+
_dark: "colorPalette.900",
|
|
3158
|
+
_hover: {
|
|
3159
|
+
base: "colorPalette.200",
|
|
3160
|
+
_dark: "colorPalette.800",
|
|
3183
3161
|
},
|
|
3184
3162
|
}, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3185
3163
|
? null
|
|
@@ -3207,10 +3185,12 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3207
3185
|
});
|
|
3208
3186
|
}, children: [jsxRuntime.jsx(gr.GrDescend, {}), "Sort Descending"] }) }), header.column.getIsSorted() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3209
3187
|
header.column.clearSorting();
|
|
3210
|
-
}, children: [jsxRuntime.jsx(md.MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3188
|
+
}, children: [jsxRuntime.jsx(md.MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3189
|
+
? "colorPalette.700"
|
|
3190
|
+
: "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
|
|
3211
3191
|
borderRightColor: header.column.getIsResizing()
|
|
3212
|
-
? "
|
|
3213
|
-
: "
|
|
3192
|
+
? "colorPalette.700"
|
|
3193
|
+
: "colorPalette.400",
|
|
3214
3194
|
}, ...resizeProps }))] }, `chakra-table-header-${header.id}`));
|
|
3215
3195
|
})] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
|
|
3216
3196
|
};
|
|
@@ -3678,6 +3658,18 @@ const BooleanPicker = ({ schema, column, prefix }) => {
|
|
|
3678
3658
|
} }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3679
3659
|
};
|
|
3680
3660
|
|
|
3661
|
+
const CustomInput = ({ column, schema, prefix }) => {
|
|
3662
|
+
const formContext = reactHookForm.useFormContext();
|
|
3663
|
+
const { inputRender } = schema;
|
|
3664
|
+
return (inputRender &&
|
|
3665
|
+
inputRender({
|
|
3666
|
+
column,
|
|
3667
|
+
schema,
|
|
3668
|
+
prefix,
|
|
3669
|
+
formContext,
|
|
3670
|
+
}));
|
|
3671
|
+
};
|
|
3672
|
+
|
|
3681
3673
|
const monthNamesShort = [
|
|
3682
3674
|
"Jan",
|
|
3683
3675
|
"Feb",
|
|
@@ -3775,9 +3767,9 @@ const DatePicker = ({ column, schema, prefix }) => {
|
|
|
3775
3767
|
const selectedDate = watch(colLabel);
|
|
3776
3768
|
const formatedDate = dayjs(selectedDate).format("YYYY-MM-DD");
|
|
3777
3769
|
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3778
|
-
gridRow, children: [jsxRuntime.jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: jsxRuntime.
|
|
3770
|
+
gridRow, children: [jsxRuntime.jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: jsxRuntime.jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
3779
3771
|
setOpen(true);
|
|
3780
|
-
}, children: selectedDate !== undefined ? `${formatedDate}` : "" }) }), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { children: [jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(DatePicker$1
|
|
3772
|
+
}, justifyContent: "start", children: [jsxRuntime.jsx(md.MdDateRange, {}), selectedDate !== undefined ? `${formatedDate}` : ""] }) }), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { children: [jsxRuntime.jsx(PopoverTitle, {}), jsxRuntime.jsx(DatePicker$1
|
|
3781
3773
|
// @ts-expect-error TODO: find appropriate types
|
|
3782
3774
|
, {
|
|
3783
3775
|
// @ts-expect-error TODO: find appropriate types
|
|
@@ -3802,7 +3794,7 @@ function filterArray(array, searchTerm) {
|
|
|
3802
3794
|
const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
3803
3795
|
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
3804
3796
|
const { translate } = useSchemaContext();
|
|
3805
|
-
const { required } = schema;
|
|
3797
|
+
const { required, variant } = schema;
|
|
3806
3798
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3807
3799
|
const { gridColumn, gridRow, renderDisplay } = schema;
|
|
3808
3800
|
const [searchText, setSearchText] = React.useState();
|
|
@@ -3819,6 +3811,22 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3819
3811
|
setSearchText(event.target.value);
|
|
3820
3812
|
setLimit(10);
|
|
3821
3813
|
};
|
|
3814
|
+
if (variant === "radio") {
|
|
3815
|
+
return (jsxRuntime.jsx(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3816
|
+
gridRow, children: jsxRuntime.jsx(react.RadioGroup.Root, { defaultValue: "1", children: jsxRuntime.jsx(react.HStack, { gap: "6", children: filterArray(dataList, searchText ?? "").map((item) => {
|
|
3817
|
+
return (jsxRuntime.jsxs(react.RadioGroup.Item, { onClick: () => {
|
|
3818
|
+
if (!isMultiple) {
|
|
3819
|
+
setOpenSearchResult(false);
|
|
3820
|
+
setValue(colLabel, item);
|
|
3821
|
+
return;
|
|
3822
|
+
}
|
|
3823
|
+
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
3824
|
+
setValue(colLabel, [...newSet]);
|
|
3825
|
+
}, value: item, children: [jsxRuntime.jsx(react.RadioGroup.ItemHiddenInput, {}), jsxRuntime.jsx(react.RadioGroup.ItemIndicator, {}), jsxRuntime.jsx(react.RadioGroup.ItemText, { children: !!renderDisplay === true
|
|
3826
|
+
? renderDisplay(item)
|
|
3827
|
+
: translate.t(removeIndex(`${colLabel}.${item}`)) })] }, `${colLabel}-${item}`));
|
|
3828
|
+
}) }) }) }));
|
|
3829
|
+
}
|
|
3822
3830
|
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3823
3831
|
gridRow, children: [isMultiple && (jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
|
|
3824
3832
|
const item = enumValue;
|
|
@@ -3834,7 +3842,7 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3834
3842
|
setOpenSearchResult(true);
|
|
3835
3843
|
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
|
|
3836
3844
|
setOpenSearchResult(true);
|
|
3837
|
-
}, children: watchEnum === undefined
|
|
3845
|
+
}, justifyContent: "start", children: watchEnum === undefined
|
|
3838
3846
|
? ""
|
|
3839
3847
|
: translate.t(removeIndex(`${colLabel}.${watchEnum}`)) })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(`${column}.type_to_search`), onChange: (event) => {
|
|
3840
3848
|
onSearchChange(event);
|
|
@@ -3851,7 +3859,7 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3851
3859
|
}
|
|
3852
3860
|
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
3853
3861
|
setValue(colLabel, [...newSet]);
|
|
3854
|
-
}, ...(selected ? { color: "
|
|
3862
|
+
}, ...(selected ? { color: "colorPalette.400/50" } : {}), children: !!renderDisplay === true
|
|
3855
3863
|
? renderDisplay(item)
|
|
3856
3864
|
: translate.t(removeIndex(`${colLabel}.${item}`)) }, `${colLabel}-${item}`));
|
|
3857
3865
|
}) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] })] }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
@@ -4206,7 +4214,7 @@ const FileDropzone = ({ children = undefined, gridProps = {}, onDrop = () => { }
|
|
|
4206
4214
|
const filesArray = [...event.target.files];
|
|
4207
4215
|
onDrop({ files: filesArray });
|
|
4208
4216
|
};
|
|
4209
|
-
return (jsxRuntime.jsxs(react.Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "
|
|
4217
|
+
return (jsxRuntime.jsxs(react.Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "colorPalette.400", alignContent: "center", justifyContent: "center", borderWidth: 1, borderRadius: 4, ...gridProps, children: [children, !!children === false && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(react.Flex, { children: placeholder }), jsxRuntime.jsx(react.Input, { type: "file", multiple: true, style: { display: "none" }, ref: fileInput, onChange: handleChange })] }))] }));
|
|
4210
4218
|
};
|
|
4211
4219
|
|
|
4212
4220
|
const FilePicker = ({ column, schema, prefix }) => {
|
|
@@ -4224,7 +4232,7 @@ const FilePicker = ({ column, schema, prefix }) => {
|
|
|
4224
4232
|
setValue(column, currentFiles.filter(({ name }) => {
|
|
4225
4233
|
return name !== file.name;
|
|
4226
4234
|
}));
|
|
4227
|
-
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
|
|
4235
|
+
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsxRuntime.jsx(react.Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
|
|
4228
4236
|
}) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4229
4237
|
};
|
|
4230
4238
|
|
|
@@ -4357,7 +4365,7 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4357
4365
|
setOpenSearchResult(true);
|
|
4358
4366
|
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsxRuntime.jsx(Button, { variant: "outline", onClick: () => {
|
|
4359
4367
|
setOpenSearchResult(true);
|
|
4360
|
-
}, children: getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.typeToSearch`)), onChange: (event) => {
|
|
4368
|
+
}, justifyContent: "start", children: getPickedValue() })), jsxRuntime.jsxs(PopoverRoot, { open: openSearchResult, onOpenChange: (e) => setOpenSearchResult(e.open), closeOnInteractOutside: true, initialFocusEl: () => ref.current, positioning: { placement: "bottom-start", strategy: "fixed" }, children: [jsxRuntime.jsx(PopoverTrigger, {}), jsxRuntime.jsx(PopoverContent, { children: jsxRuntime.jsxs(PopoverBody, { display: "grid", gap: 1, children: [jsxRuntime.jsx(react.Input, { placeholder: translate.t(removeIndex(`${colLabel}.typeToSearch`)), onChange: (event) => {
|
|
4361
4369
|
onSearchChange(event);
|
|
4362
4370
|
setOpenSearchResult(true);
|
|
4363
4371
|
}, autoComplete: "off", ref: ref }), jsxRuntime.jsx(PopoverTitle, {}), (searchText?.length ?? 0) > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isFetching && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isFetching" }), isLoading && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isLoading" }), isPending && jsxRuntime.jsx(jsxRuntime.Fragment, { children: "isPending" }), (isFetching || isLoading || isPending) && jsxRuntime.jsx(react.Spinner, {}), isError && (jsxRuntime.jsx(react.Icon, { color: "red.400", children: jsxRuntime.jsx(bi.BiError, {}) })), jsxRuntime.jsx(react.Text, { justifySelf: "center", children: `${translate.t(removeIndex(`${colLabel}.total`))} ${count}, ${translate.t(removeIndex(`${colLabel}.showing`))} ${limit}` }), jsxRuntime.jsxs(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(15rem, 1fr))", overflow: "auto", maxHeight: "50vh", children: [jsxRuntime.jsx(react.Flex, { flexFlow: "column wrap", children:
|
|
@@ -4377,7 +4385,9 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4377
4385
|
item[column_ref],
|
|
4378
4386
|
]);
|
|
4379
4387
|
setValue(colLabel, [...newSet]);
|
|
4380
|
-
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
|
|
4388
|
+
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
|
|
4389
|
+
? { color: "colorPalette.400/50" }
|
|
4390
|
+
: {}), children: !!renderDisplay === true
|
|
4381
4391
|
? renderDisplay(item)
|
|
4382
4392
|
: item[display_column] }, item[column_ref]));
|
|
4383
4393
|
}) }), isDirty && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: dataList.length <= 0 && (jsxRuntime.jsx(react.Text, { children: translate.t(removeIndex(`${colLabel}.empty_search_result`)) })) }))] }), jsxRuntime.jsx(PaginationRoot, { justifySelf: "center", count: count, pageSize: 10, defaultPage: 1, page: page + 1, onPageChange: (e) => setPage(e.page - 1), children: jsxRuntime.jsxs(react.HStack, { gap: "4", children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), count > 0 && jsxRuntime.jsx(PaginationPageText, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) })] }))] }) })] }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
@@ -4577,9 +4587,115 @@ const TagPicker = ({ column, schema, prefix }) => {
|
|
|
4577
4587
|
}), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
|
|
4578
4588
|
};
|
|
4579
4589
|
|
|
4590
|
+
function TimePicker$1({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel = {
|
|
4591
|
+
am: "am",
|
|
4592
|
+
pm: "pm",
|
|
4593
|
+
}, onChange = () => { }, }) {
|
|
4594
|
+
const hours = Array.from({ length: 12 }, (_, i) => {
|
|
4595
|
+
const hour = i + 1;
|
|
4596
|
+
return hour.toString().padStart(2, "0");
|
|
4597
|
+
});
|
|
4598
|
+
const minutes = Array.from({ length: 60 }, (_, i) => {
|
|
4599
|
+
return i.toString().padStart(2, "0");
|
|
4600
|
+
});
|
|
4601
|
+
const hoursCollection = react.createListCollection({
|
|
4602
|
+
items: hours.map((hour) => ({
|
|
4603
|
+
value: hour,
|
|
4604
|
+
label: hour,
|
|
4605
|
+
})),
|
|
4606
|
+
});
|
|
4607
|
+
const minutesCollection = react.createListCollection({
|
|
4608
|
+
items: minutes.map((hour) => ({
|
|
4609
|
+
value: hour,
|
|
4610
|
+
label: hour,
|
|
4611
|
+
})),
|
|
4612
|
+
});
|
|
4613
|
+
const meridiemsCollection = react.createListCollection({
|
|
4614
|
+
items: ["am", "pm"].map((hour) => ({
|
|
4615
|
+
value: hour,
|
|
4616
|
+
label: meridiemLabel[hour] ?? hour,
|
|
4617
|
+
})),
|
|
4618
|
+
});
|
|
4619
|
+
return (jsxRuntime.jsxs(react.Grid, { templateColumns: "auto auto", gap: "4", children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "center", alignItems: "center", gap: "2", children: [jsxRuntime.jsxs(react.Select.Root, { value: [`${hour.toString().padStart(2, "0")}`], onValueChange: (e) => {
|
|
4620
|
+
setHour(parseInt(e.value[0]));
|
|
4621
|
+
onChange({ hour: parseInt(e.value[0]), minute, meridiem });
|
|
4622
|
+
}, collection: hoursCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "Hour" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: hoursCollection.items.map(({ value: hour }) => (jsxRuntime.jsxs(react.Select.Item, { item: hour, children: [hour, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, hour))) }) })] }), jsxRuntime.jsx(react.Text, { children: ":" }), jsxRuntime.jsxs(react.Select.Root, { value: [`${minute.toString().padStart(2, "0")}`], onValueChange: (e) => {
|
|
4623
|
+
setMinute(parseInt(e.value[0]));
|
|
4624
|
+
onChange({ hour, minute: parseInt(e.value[0]), meridiem });
|
|
4625
|
+
}, collection: minutesCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "Minute" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: minutes.map((minute) => (jsxRuntime.jsxs(react.Select.Item, { item: minute, children: [minute, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, minute))) }) })] })] }), jsxRuntime.jsxs(react.Select.Root, { value: [meridiem], onValueChange: (e) => {
|
|
4626
|
+
setMeridiem(e.value[0]);
|
|
4627
|
+
onChange({ hour, minute, meridiem: e.value[0] });
|
|
4628
|
+
}, collection: meridiemsCollection, positioning: { sameWidth: true, placement: "bottom" }, children: [jsxRuntime.jsx(react.Select.HiddenSelect, {}), jsxRuntime.jsx(react.Select.Control, { children: jsxRuntime.jsx(react.Select.Trigger, { children: jsxRuntime.jsx(react.Select.ValueText, { placeholder: "am/pm" }) }) }), jsxRuntime.jsx(react.Select.Positioner, { children: jsxRuntime.jsx(react.Select.Content, { width: "full", children: meridiemsCollection.items.map(({ value: hour, label }) => (jsxRuntime.jsxs(react.Select.Item, { item: hour, children: [label, jsxRuntime.jsx(react.Select.ItemIndicator, {})] }, hour))) }) })] })] }));
|
|
4629
|
+
}
|
|
4630
|
+
|
|
4631
|
+
const TimePicker = ({ column, schema, prefix }) => {
|
|
4632
|
+
const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
|
|
4633
|
+
const { translate } = useSchemaContext();
|
|
4634
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4635
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4636
|
+
const colLabel = `${prefix}${column}`;
|
|
4637
|
+
const [open, setOpen] = React.useState(false);
|
|
4638
|
+
const value = watch(colLabel);
|
|
4639
|
+
const formatedTime = dayjs(value).format("hh:mm A");
|
|
4640
|
+
// Parse the initial time parts from the ISO time string (HH:mm:ss)
|
|
4641
|
+
const parseTime = (isoTime) => {
|
|
4642
|
+
if (!isoTime)
|
|
4643
|
+
return { hour: 12, minute: 0, meridiem: "am" };
|
|
4644
|
+
const parsed = dayjs(isoTime);
|
|
4645
|
+
if (!parsed.isValid())
|
|
4646
|
+
return { hour: 12, minute: 0, meridiem: "am" };
|
|
4647
|
+
let hour = parsed.hour();
|
|
4648
|
+
const minute = parsed.minute();
|
|
4649
|
+
const meridiem = hour >= 12 ? "pm" : "am";
|
|
4650
|
+
if (hour === 0)
|
|
4651
|
+
hour = 12;
|
|
4652
|
+
else if (hour > 12)
|
|
4653
|
+
hour -= 12;
|
|
4654
|
+
return { hour, minute, meridiem };
|
|
4655
|
+
};
|
|
4656
|
+
const initialTime = parseTime(value);
|
|
4657
|
+
const [hour, setHour] = React.useState(initialTime.hour);
|
|
4658
|
+
const [minute, setMinute] = React.useState(initialTime.minute);
|
|
4659
|
+
const [meridiem, setMeridiem] = React.useState(initialTime.meridiem);
|
|
4660
|
+
React.useEffect(() => {
|
|
4661
|
+
const { hour, minute, meridiem } = parseTime(value);
|
|
4662
|
+
setHour(hour);
|
|
4663
|
+
setMinute(minute);
|
|
4664
|
+
setMeridiem(meridiem);
|
|
4665
|
+
}, [value]);
|
|
4666
|
+
// Convert hour, minute, meridiem to 24-hour ISO time string
|
|
4667
|
+
const toIsoTime = (hour, minute, meridiem) => {
|
|
4668
|
+
let h = hour;
|
|
4669
|
+
if (meridiem === "am" && hour === 12)
|
|
4670
|
+
h = 0;
|
|
4671
|
+
else if (meridiem === "pm" && hour < 12)
|
|
4672
|
+
h = hour + 12;
|
|
4673
|
+
return dayjs().hour(h).minute(minute).second(0).toISOString();
|
|
4674
|
+
};
|
|
4675
|
+
// Handle changes to time parts
|
|
4676
|
+
const handleTimeChange = ({ hour: newHour, minute: newMinute, meridiem: newMeridiem, }) => {
|
|
4677
|
+
setHour(newHour);
|
|
4678
|
+
setMinute(newMinute);
|
|
4679
|
+
setMeridiem(newMeridiem);
|
|
4680
|
+
const isoTime = toIsoTime(newHour, newMinute, newMeridiem);
|
|
4681
|
+
setValue(colLabel, isoTime, { shouldValidate: true, shouldDirty: true });
|
|
4682
|
+
};
|
|
4683
|
+
const containerRef = React.useRef(null);
|
|
4684
|
+
return (jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4685
|
+
gridRow, children: [jsxRuntime.jsxs(react.Popover.Root, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsxRuntime.jsx(react.Popover.Trigger, { asChild: true, children: jsxRuntime.jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
|
|
4686
|
+
setOpen(true);
|
|
4687
|
+
}, justifyContent: "start", children: [jsxRuntime.jsx(io.IoMdClock, {}), value !== undefined ? `${formatedTime}` : ""] }) }), jsxRuntime.jsx(react.Portal, { children: jsxRuntime.jsx(react.Popover.Positioner, { children: jsxRuntime.jsx(react.Popover.Content, { ref: containerRef, children: jsxRuntime.jsx(react.Popover.Body, { children: jsxRuntime.jsx(TimePicker$1, { hour: hour, setHour: setHour, minute: minute, setMinute: setMinute, meridiem: meridiem, setMeridiem: setMeridiem, onChange: handleTimeChange, meridiemLabel: {
|
|
4688
|
+
am: translate.t(removeIndex(`${colLabel}.am`)),
|
|
4689
|
+
pm: translate.t(removeIndex(`${colLabel}.pm`)),
|
|
4690
|
+
} }) }) }) }) })] }), errors[`${column}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4691
|
+
};
|
|
4692
|
+
|
|
4580
4693
|
const SchemaRenderer = ({ schema, prefix, column, }) => {
|
|
4581
4694
|
const colSchema = schema;
|
|
4582
4695
|
const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
|
|
4696
|
+
if (variant === "custom-input") {
|
|
4697
|
+
return jsxRuntime.jsx(CustomInput, { schema: colSchema, prefix, column });
|
|
4698
|
+
}
|
|
4583
4699
|
if (type === "string") {
|
|
4584
4700
|
if ((schema.enum ?? []).length > 0) {
|
|
4585
4701
|
return jsxRuntime.jsx(EnumPicker, { schema: colSchema, prefix, column });
|
|
@@ -4591,6 +4707,9 @@ const SchemaRenderer = ({ schema, prefix, column, }) => {
|
|
|
4591
4707
|
if (variant === "date-picker") {
|
|
4592
4708
|
return jsxRuntime.jsx(DatePicker, { schema: colSchema, prefix, column });
|
|
4593
4709
|
}
|
|
4710
|
+
if (variant === "time-picker") {
|
|
4711
|
+
return jsxRuntime.jsx(TimePicker, { schema: colSchema, prefix, column });
|
|
4712
|
+
}
|
|
4594
4713
|
return jsxRuntime.jsx(StringInputField, { schema: colSchema, prefix, column });
|
|
4595
4714
|
}
|
|
4596
4715
|
if (type === "number" || type === "integer") {
|
|
@@ -4694,22 +4813,15 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
4694
4813
|
};
|
|
4695
4814
|
|
|
4696
4815
|
const FileViewer = ({ column, schema, prefix }) => {
|
|
4697
|
-
const {
|
|
4816
|
+
const { watch } = reactHookForm.useFormContext();
|
|
4698
4817
|
const { translate } = useSchemaContext();
|
|
4699
4818
|
const { required, gridColumn, gridRow } = schema;
|
|
4700
4819
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4701
4820
|
const currentFiles = (watch(column) ?? []);
|
|
4702
4821
|
const colLabel = `${prefix}${column}`;
|
|
4703
|
-
return (jsxRuntime.
|
|
4704
|
-
|
|
4705
|
-
|
|
4706
|
-
}, placeholder: translate.t(`${colLabel}.fileDropzone`) }), jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
4707
|
-
return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
|
|
4708
|
-
setValue(column, currentFiles.filter(({ name }) => {
|
|
4709
|
-
return name !== file.name;
|
|
4710
|
-
}));
|
|
4711
|
-
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsxRuntime.jsx(react.Box, { children: file.name }), jsxRuntime.jsx(ti.TiDeleteOutline, {})] }) }, file.name));
|
|
4712
|
-
}) }), errors[`${colLabel}`] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4822
|
+
return (jsxRuntime.jsx(Field, { label: `${translate.t(`${colLabel}.field_label`)}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", display: "grid", gridTemplateRows: "auto 1fr auto", alignItems: "stretch", children: jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
4823
|
+
return (jsxRuntime.jsx(react.Card.Root, { variant: "subtle", children: jsxRuntime.jsxs(react.Card.Body, { gap: "2", display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [file.type.startsWith("image/") && (jsxRuntime.jsx(react.Image, { src: URL.createObjectURL(file), alt: file.name, boxSize: "50px", objectFit: "cover", borderRadius: "md", marginRight: "2" })), jsxRuntime.jsx(react.Box, { children: file.name })] }) }, file.name));
|
|
4824
|
+
}) }) }));
|
|
4713
4825
|
};
|
|
4714
4826
|
|
|
4715
4827
|
const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
@@ -4918,9 +5030,24 @@ const StringViewer = ({ column, schema, prefix, }) => {
|
|
|
4918
5030
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, gridColumn: gridColumn ?? "span 4", gridRow: gridRow ?? "span 1", children: [jsxRuntime.jsx(react.Text, { children: value }), errors[colLabel] && (jsxRuntime.jsx(react.Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }) }));
|
|
4919
5031
|
};
|
|
4920
5032
|
|
|
5033
|
+
const CustomViewer = ({ column, schema, prefix }) => {
|
|
5034
|
+
const formContext = reactHookForm.useFormContext();
|
|
5035
|
+
const { inputViewerRender } = schema;
|
|
5036
|
+
return (inputViewerRender &&
|
|
5037
|
+
inputViewerRender({
|
|
5038
|
+
column,
|
|
5039
|
+
schema,
|
|
5040
|
+
prefix,
|
|
5041
|
+
formContext,
|
|
5042
|
+
}));
|
|
5043
|
+
};
|
|
5044
|
+
|
|
4921
5045
|
const SchemaViewer = ({ schema, prefix, column, }) => {
|
|
4922
5046
|
const colSchema = schema;
|
|
4923
5047
|
const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
|
|
5048
|
+
if (variant === "custom-input") {
|
|
5049
|
+
return jsxRuntime.jsx(CustomViewer, { schema: colSchema, prefix, column });
|
|
5050
|
+
}
|
|
4924
5051
|
if (type === "string") {
|
|
4925
5052
|
if ((schema.enum ?? []).length > 0) {
|
|
4926
5053
|
return jsxRuntime.jsx(EnumViewer, { schema: colSchema, prefix, column });
|
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, 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, Center, Heading } from '@chakra-ui/react';
|
|
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, 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 { MdOutlineSort, MdFilterAlt, MdSearch, MdClose, MdOutlineViewColumn, MdFilterListAlt, MdPushPin, MdCancel, MdClear, MdOutlineChecklist } from 'react-icons/md';
|
|
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';
|
|
@@ -2437,7 +2437,7 @@ function ColumnCard({ columnId }) {
|
|
|
2437
2437
|
onDrop: () => setDragging(false), // NEW
|
|
2438
2438
|
});
|
|
2439
2439
|
}, [columnId, table]);
|
|
2440
|
-
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: "
|
|
2440
|
+
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() }) })] }));
|
|
2441
2441
|
}
|
|
2442
2442
|
function CardContainer({ location, children }) {
|
|
2443
2443
|
const ref = useRef(null);
|
|
@@ -2569,7 +2569,7 @@ const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
|
|
|
2569
2569
|
return jsx(Fragment, { children: "null" });
|
|
2570
2570
|
}
|
|
2571
2571
|
return (jsx(Grid, { rowGap: 1, padding: 1, overflow: "auto", ...boxProps, children: Object.entries(object).map(([field, value]) => {
|
|
2572
|
-
return (jsxs(Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsx(Text, { color: "
|
|
2572
|
+
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));
|
|
2573
2573
|
}) }));
|
|
2574
2574
|
};
|
|
2575
2575
|
|
|
@@ -2619,7 +2619,7 @@ const CellRenderer = ({ cell }) => {
|
|
|
2619
2619
|
paddingY: 2,
|
|
2620
2620
|
}, object: value })] }, cell.id));
|
|
2621
2621
|
}
|
|
2622
|
-
return (jsxs(Box, { gridColumn, gridRow, children: [jsx(Box, { color:
|
|
2622
|
+
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));
|
|
2623
2623
|
};
|
|
2624
2624
|
const DataDisplay = ({ variant = "" }) => {
|
|
2625
2625
|
const { table, translate } = useDataTableContext();
|
|
@@ -2975,13 +2975,11 @@ const TableFilterTags = () => {
|
|
|
2975
2975
|
}) }));
|
|
2976
2976
|
};
|
|
2977
2977
|
|
|
2978
|
-
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, }) => {
|
|
2978
|
+
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 = {}, }) => {
|
|
2979
2979
|
const { translate } = useDataTableContext();
|
|
2980
|
-
return (jsxs(Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", 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) => {
|
|
2980
|
+
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) => {
|
|
2981
2981
|
return (jsxs(Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxs(Text, { children: [column, ":"] }), jsx(FilterOptions, { column: column })] }, column));
|
|
2982
|
-
}) })), showFilterTags && (jsx(Flex, { children: jsx(TableFilterTags, {}) }))] }), jsx(Grid, { overflow: "auto",
|
|
2983
|
-
backgroundColor: "gray.900",
|
|
2984
|
-
}, 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, {}) })] }))] }));
|
|
2982
|
+
}) })), 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, {}) })] }))] }));
|
|
2985
2983
|
};
|
|
2986
2984
|
|
|
2987
2985
|
const EmptyState = React.forwardRef(function EmptyState(props, ref) {
|
|
@@ -2995,7 +2993,7 @@ const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...pr
|
|
|
2995
2993
|
if (table.getRowModel().rows.length <= 0) {
|
|
2996
2994
|
return emptyComponent;
|
|
2997
2995
|
}
|
|
2998
|
-
return (jsx(Table$1.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, display: "grid", alignContent: "start", overflowY: "auto", ...props, children: children }));
|
|
2996
|
+
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 }));
|
|
2999
2997
|
};
|
|
3000
2998
|
|
|
3001
2999
|
const Checkbox = React.forwardRef(function Checkbox(props, ref) {
|
|
@@ -3059,7 +3057,7 @@ const TableRowSelector = ({ index, row, }) => {
|
|
|
3059
3057
|
onCheckedChange: row.getToggleSelectedHandler() }) }));
|
|
3060
3058
|
};
|
|
3061
3059
|
|
|
3062
|
-
const TableFooter = ({
|
|
3060
|
+
const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
|
|
3063
3061
|
const table = useDataTableContext().table;
|
|
3064
3062
|
const SELECTION_BOX_WIDTH = 20;
|
|
3065
3063
|
const [hoveredCheckBox, setHoveredCheckBox] = useState(false);
|
|
@@ -3078,41 +3076,11 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
|
|
|
3078
3076
|
}
|
|
3079
3077
|
return false;
|
|
3080
3078
|
};
|
|
3081
|
-
|
|
3082
|
-
const thProps = header.column.getIsPinned()
|
|
3083
|
-
? {
|
|
3084
|
-
left: showSelector
|
|
3085
|
-
? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
|
|
3086
|
-
: `${header.getStart("left") + table.getDensityValue() * 2}px`,
|
|
3087
|
-
background: pinnedBgColor.light,
|
|
3088
|
-
position: "sticky",
|
|
3089
|
-
zIndex: 1,
|
|
3090
|
-
_dark: {
|
|
3091
|
-
backgroundColor: pinnedBgColor.dark,
|
|
3092
|
-
},
|
|
3093
|
-
}
|
|
3094
|
-
: {};
|
|
3095
|
-
return thProps;
|
|
3096
|
-
};
|
|
3097
|
-
return (jsx(Table$1.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxs(Table$1.Row, { display: "flex", children: [showSelector && (jsxs(Table$1.Header
|
|
3098
|
-
// styling resize and pinning start
|
|
3099
|
-
, {
|
|
3100
|
-
// styling resize and pinning start
|
|
3101
|
-
padding: `${table.getDensityValue()}px`, ...(table.getIsSomeColumnsPinned("left")
|
|
3102
|
-
? {
|
|
3103
|
-
left: `0px`,
|
|
3104
|
-
backgroundColor: pinnedBgColor.light,
|
|
3105
|
-
position: "sticky",
|
|
3106
|
-
zIndex: 1,
|
|
3107
|
-
_dark: { backgroundColor: pinnedBgColor.dark },
|
|
3108
|
-
}
|
|
3109
|
-
: {}),
|
|
3110
|
-
// styling resize and pinning end
|
|
3111
|
-
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(),
|
|
3079
|
+
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(),
|
|
3112
3080
|
// indeterminate: table.getIsSomeRowsSelected(),
|
|
3113
3081
|
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}`,
|
|
3114
3082
|
// styling resize and pinning start
|
|
3115
|
-
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid",
|
|
3083
|
+
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
|
|
3116
3084
|
? null
|
|
3117
3085
|
: flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && (
|
|
3118
3086
|
// <UpDownIcon />
|
|
@@ -3138,7 +3106,7 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3138
3106
|
position: "sticky",
|
|
3139
3107
|
top: 0,
|
|
3140
3108
|
};
|
|
3141
|
-
return (jsx(Table$1.Header, { ...(isSticky ? stickyProps : {}), ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxs(Table$1.Row, { display: "flex", ...tableRowProps, children: [showSelector && (jsx(Table$1.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
3109
|
+
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: {
|
|
3142
3110
|
base: "colorPalette.900",
|
|
3143
3111
|
_dark: "colorPalette.100",
|
|
3144
3112
|
},
|
|
@@ -3156,10 +3124,20 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3156
3124
|
base: "colorPalette.800",
|
|
3157
3125
|
_dark: "colorPalette.200",
|
|
3158
3126
|
},
|
|
3159
|
-
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",
|
|
3160
|
-
|
|
3161
|
-
_dark:
|
|
3162
|
-
|
|
3127
|
+
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: {
|
|
3128
|
+
base: "colorPalette.800",
|
|
3129
|
+
_dark: "colorPalette.200",
|
|
3130
|
+
_hover: {
|
|
3131
|
+
base: "colorPalette.700",
|
|
3132
|
+
_dark: "colorPalette.300",
|
|
3133
|
+
},
|
|
3134
|
+
},
|
|
3135
|
+
bg: {
|
|
3136
|
+
base: "colorPalette.100",
|
|
3137
|
+
_dark: "colorPalette.900",
|
|
3138
|
+
_hover: {
|
|
3139
|
+
base: "colorPalette.200",
|
|
3140
|
+
_dark: "colorPalette.800",
|
|
3163
3141
|
},
|
|
3164
3142
|
}, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3165
3143
|
? null
|
|
@@ -3187,10 +3165,12 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3187
3165
|
});
|
|
3188
3166
|
}, children: [jsx(GrDescend, {}), "Sort Descending"] }) }), header.column.getIsSorted() && (jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3189
3167
|
header.column.clearSorting();
|
|
3190
|
-
}, children: [jsx(MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3168
|
+
}, children: [jsx(MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3169
|
+
? "colorPalette.700"
|
|
3170
|
+
: "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
|
|
3191
3171
|
borderRightColor: header.column.getIsResizing()
|
|
3192
|
-
? "
|
|
3193
|
-
: "
|
|
3172
|
+
? "colorPalette.700"
|
|
3173
|
+
: "colorPalette.400",
|
|
3194
3174
|
}, ...resizeProps }))] }, `chakra-table-header-${header.id}`));
|
|
3195
3175
|
})] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
|
|
3196
3176
|
};
|
|
@@ -3658,6 +3638,18 @@ const BooleanPicker = ({ schema, column, prefix }) => {
|
|
|
3658
3638
|
} }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
3659
3639
|
};
|
|
3660
3640
|
|
|
3641
|
+
const CustomInput = ({ column, schema, prefix }) => {
|
|
3642
|
+
const formContext = useFormContext();
|
|
3643
|
+
const { inputRender } = schema;
|
|
3644
|
+
return (inputRender &&
|
|
3645
|
+
inputRender({
|
|
3646
|
+
column,
|
|
3647
|
+
schema,
|
|
3648
|
+
prefix,
|
|
3649
|
+
formContext,
|
|
3650
|
+
}));
|
|
3651
|
+
};
|
|
3652
|
+
|
|
3661
3653
|
const monthNamesShort = [
|
|
3662
3654
|
"Jan",
|
|
3663
3655
|
"Feb",
|
|
@@ -3755,9 +3747,9 @@ const DatePicker = ({ column, schema, prefix }) => {
|
|
|
3755
3747
|
const selectedDate = watch(colLabel);
|
|
3756
3748
|
const formatedDate = dayjs(selectedDate).format("YYYY-MM-DD");
|
|
3757
3749
|
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3758
|
-
gridRow, children: [jsxs(PopoverRoot, { open: open, onOpenChange: (e) => setOpen(e.open), closeOnInteractOutside: true, children: [jsx(PopoverTrigger, { asChild: true, children:
|
|
3750
|
+
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: () => {
|
|
3759
3751
|
setOpen(true);
|
|
3760
|
-
}, children: selectedDate !== undefined ? `${formatedDate}` : "" }) }), jsx(PopoverContent, { children: jsxs(PopoverBody, { children: [jsx(PopoverTitle, {}), jsx(DatePicker$1
|
|
3752
|
+
}, justifyContent: "start", children: [jsx(MdDateRange, {}), selectedDate !== undefined ? `${formatedDate}` : ""] }) }), jsx(PopoverContent, { children: jsxs(PopoverBody, { children: [jsx(PopoverTitle, {}), jsx(DatePicker$1
|
|
3761
3753
|
// @ts-expect-error TODO: find appropriate types
|
|
3762
3754
|
, {
|
|
3763
3755
|
// @ts-expect-error TODO: find appropriate types
|
|
@@ -3782,7 +3774,7 @@ function filterArray(array, searchTerm) {
|
|
|
3782
3774
|
const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
3783
3775
|
const { watch, formState: { errors }, setValue, } = useFormContext();
|
|
3784
3776
|
const { translate } = useSchemaContext();
|
|
3785
|
-
const { required } = schema;
|
|
3777
|
+
const { required, variant } = schema;
|
|
3786
3778
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
3787
3779
|
const { gridColumn, gridRow, renderDisplay } = schema;
|
|
3788
3780
|
const [searchText, setSearchText] = useState();
|
|
@@ -3799,6 +3791,22 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3799
3791
|
setSearchText(event.target.value);
|
|
3800
3792
|
setLimit(10);
|
|
3801
3793
|
};
|
|
3794
|
+
if (variant === "radio") {
|
|
3795
|
+
return (jsx(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3796
|
+
gridRow, children: jsx(RadioGroup$1.Root, { defaultValue: "1", children: jsx(HStack, { gap: "6", children: filterArray(dataList, searchText ?? "").map((item) => {
|
|
3797
|
+
return (jsxs(RadioGroup$1.Item, { onClick: () => {
|
|
3798
|
+
if (!isMultiple) {
|
|
3799
|
+
setOpenSearchResult(false);
|
|
3800
|
+
setValue(colLabel, item);
|
|
3801
|
+
return;
|
|
3802
|
+
}
|
|
3803
|
+
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
3804
|
+
setValue(colLabel, [...newSet]);
|
|
3805
|
+
}, value: item, children: [jsx(RadioGroup$1.ItemHiddenInput, {}), jsx(RadioGroup$1.ItemIndicator, {}), jsx(RadioGroup$1.ItemText, { children: !!renderDisplay === true
|
|
3806
|
+
? renderDisplay(item)
|
|
3807
|
+
: translate.t(removeIndex(`${colLabel}.${item}`)) })] }, `${colLabel}-${item}`));
|
|
3808
|
+
}) }) }) }));
|
|
3809
|
+
}
|
|
3802
3810
|
return (jsxs(Field, { label: `${translate.t(removeIndex(`${column}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
3803
3811
|
gridRow, children: [isMultiple && (jsxs(Flex, { flexFlow: "wrap", gap: 1, children: [watchEnums.map((enumValue) => {
|
|
3804
3812
|
const item = enumValue;
|
|
@@ -3814,7 +3822,7 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3814
3822
|
setOpenSearchResult(true);
|
|
3815
3823
|
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
|
|
3816
3824
|
setOpenSearchResult(true);
|
|
3817
|
-
}, children: watchEnum === undefined
|
|
3825
|
+
}, justifyContent: "start", children: watchEnum === undefined
|
|
3818
3826
|
? ""
|
|
3819
3827
|
: 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) => {
|
|
3820
3828
|
onSearchChange(event);
|
|
@@ -3831,7 +3839,7 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
3831
3839
|
}
|
|
3832
3840
|
const newSet = new Set([...(watchEnums ?? []), item]);
|
|
3833
3841
|
setValue(colLabel, [...newSet]);
|
|
3834
|
-
}, ...(selected ? { color: "
|
|
3842
|
+
}, ...(selected ? { color: "colorPalette.400/50" } : {}), children: !!renderDisplay === true
|
|
3835
3843
|
? renderDisplay(item)
|
|
3836
3844
|
: translate.t(removeIndex(`${colLabel}.${item}`)) }, `${colLabel}-${item}`));
|
|
3837
3845
|
}) }), 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`)) }))] }));
|
|
@@ -4186,7 +4194,7 @@ const FileDropzone = ({ children = undefined, gridProps = {}, onDrop = () => { }
|
|
|
4186
4194
|
const filesArray = [...event.target.files];
|
|
4187
4195
|
onDrop({ files: filesArray });
|
|
4188
4196
|
};
|
|
4189
|
-
return (jsxs(Grid, { ...getColor(isDraggedOver), ref: ref, cursor: "pointer", onClick: handleClick, borderStyle: "dashed", borderColor: "
|
|
4197
|
+
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 })] }))] }));
|
|
4190
4198
|
};
|
|
4191
4199
|
|
|
4192
4200
|
const FilePicker = ({ column, schema, prefix }) => {
|
|
@@ -4204,7 +4212,7 @@ const FilePicker = ({ column, schema, prefix }) => {
|
|
|
4204
4212
|
setValue(column, currentFiles.filter(({ name }) => {
|
|
4205
4213
|
return name !== file.name;
|
|
4206
4214
|
}));
|
|
4207
|
-
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsx(Box, { children: file.name }), jsx(TiDeleteOutline, {})] }) }, file.name));
|
|
4215
|
+
}, 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));
|
|
4208
4216
|
}) }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4209
4217
|
};
|
|
4210
4218
|
|
|
@@ -4337,7 +4345,7 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4337
4345
|
setOpenSearchResult(true);
|
|
4338
4346
|
}, children: translate.t(removeIndex(`${colLabel}.add_more`)) })] })), !isMultiple && (jsx(Button, { variant: "outline", onClick: () => {
|
|
4339
4347
|
setOpenSearchResult(true);
|
|
4340
|
-
}, 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}.typeToSearch`)), onChange: (event) => {
|
|
4348
|
+
}, 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}.typeToSearch`)), onChange: (event) => {
|
|
4341
4349
|
onSearchChange(event);
|
|
4342
4350
|
setOpenSearchResult(true);
|
|
4343
4351
|
}, 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:
|
|
@@ -4357,7 +4365,9 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
|
4357
4365
|
item[column_ref],
|
|
4358
4366
|
]);
|
|
4359
4367
|
setValue(colLabel, [...newSet]);
|
|
4360
|
-
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
|
|
4368
|
+
}, opacity: 0.7, _hover: { opacity: 1 }, ...(selected
|
|
4369
|
+
? { color: "colorPalette.400/50" }
|
|
4370
|
+
: {}), children: !!renderDisplay === true
|
|
4361
4371
|
? renderDisplay(item)
|
|
4362
4372
|
: item[display_column] }, item[column_ref]));
|
|
4363
4373
|
}) }), 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`)) }))] }));
|
|
@@ -4557,9 +4567,115 @@ const TagPicker = ({ column, schema, prefix }) => {
|
|
|
4557
4567
|
}), errors[`${column}`] && (jsx(Text, { color: "red.400", children: (errors[`${column}`]?.message ?? "No error message") }))] }));
|
|
4558
4568
|
};
|
|
4559
4569
|
|
|
4570
|
+
function TimePicker$1({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel = {
|
|
4571
|
+
am: "am",
|
|
4572
|
+
pm: "pm",
|
|
4573
|
+
}, onChange = () => { }, }) {
|
|
4574
|
+
const hours = Array.from({ length: 12 }, (_, i) => {
|
|
4575
|
+
const hour = i + 1;
|
|
4576
|
+
return hour.toString().padStart(2, "0");
|
|
4577
|
+
});
|
|
4578
|
+
const minutes = Array.from({ length: 60 }, (_, i) => {
|
|
4579
|
+
return i.toString().padStart(2, "0");
|
|
4580
|
+
});
|
|
4581
|
+
const hoursCollection = createListCollection({
|
|
4582
|
+
items: hours.map((hour) => ({
|
|
4583
|
+
value: hour,
|
|
4584
|
+
label: hour,
|
|
4585
|
+
})),
|
|
4586
|
+
});
|
|
4587
|
+
const minutesCollection = createListCollection({
|
|
4588
|
+
items: minutes.map((hour) => ({
|
|
4589
|
+
value: hour,
|
|
4590
|
+
label: hour,
|
|
4591
|
+
})),
|
|
4592
|
+
});
|
|
4593
|
+
const meridiemsCollection = createListCollection({
|
|
4594
|
+
items: ["am", "pm"].map((hour) => ({
|
|
4595
|
+
value: hour,
|
|
4596
|
+
label: meridiemLabel[hour] ?? hour,
|
|
4597
|
+
})),
|
|
4598
|
+
});
|
|
4599
|
+
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) => {
|
|
4600
|
+
setHour(parseInt(e.value[0]));
|
|
4601
|
+
onChange({ hour: parseInt(e.value[0]), minute, meridiem });
|
|
4602
|
+
}, 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) => {
|
|
4603
|
+
setMinute(parseInt(e.value[0]));
|
|
4604
|
+
onChange({ hour, minute: parseInt(e.value[0]), meridiem });
|
|
4605
|
+
}, 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) => {
|
|
4606
|
+
setMeridiem(e.value[0]);
|
|
4607
|
+
onChange({ hour, minute, meridiem: e.value[0] });
|
|
4608
|
+
}, 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))) }) })] })] }));
|
|
4609
|
+
}
|
|
4610
|
+
|
|
4611
|
+
const TimePicker = ({ column, schema, prefix }) => {
|
|
4612
|
+
const { watch, formState: { errors }, setValue, } = useFormContext();
|
|
4613
|
+
const { translate } = useSchemaContext();
|
|
4614
|
+
const { required, gridColumn, gridRow } = schema;
|
|
4615
|
+
const isRequired = required?.some((columnId) => columnId === column);
|
|
4616
|
+
const colLabel = `${prefix}${column}`;
|
|
4617
|
+
const [open, setOpen] = useState(false);
|
|
4618
|
+
const value = watch(colLabel);
|
|
4619
|
+
const formatedTime = dayjs(value).format("hh:mm A");
|
|
4620
|
+
// Parse the initial time parts from the ISO time string (HH:mm:ss)
|
|
4621
|
+
const parseTime = (isoTime) => {
|
|
4622
|
+
if (!isoTime)
|
|
4623
|
+
return { hour: 12, minute: 0, meridiem: "am" };
|
|
4624
|
+
const parsed = dayjs(isoTime);
|
|
4625
|
+
if (!parsed.isValid())
|
|
4626
|
+
return { hour: 12, minute: 0, meridiem: "am" };
|
|
4627
|
+
let hour = parsed.hour();
|
|
4628
|
+
const minute = parsed.minute();
|
|
4629
|
+
const meridiem = hour >= 12 ? "pm" : "am";
|
|
4630
|
+
if (hour === 0)
|
|
4631
|
+
hour = 12;
|
|
4632
|
+
else if (hour > 12)
|
|
4633
|
+
hour -= 12;
|
|
4634
|
+
return { hour, minute, meridiem };
|
|
4635
|
+
};
|
|
4636
|
+
const initialTime = parseTime(value);
|
|
4637
|
+
const [hour, setHour] = useState(initialTime.hour);
|
|
4638
|
+
const [minute, setMinute] = useState(initialTime.minute);
|
|
4639
|
+
const [meridiem, setMeridiem] = useState(initialTime.meridiem);
|
|
4640
|
+
useEffect(() => {
|
|
4641
|
+
const { hour, minute, meridiem } = parseTime(value);
|
|
4642
|
+
setHour(hour);
|
|
4643
|
+
setMinute(minute);
|
|
4644
|
+
setMeridiem(meridiem);
|
|
4645
|
+
}, [value]);
|
|
4646
|
+
// Convert hour, minute, meridiem to 24-hour ISO time string
|
|
4647
|
+
const toIsoTime = (hour, minute, meridiem) => {
|
|
4648
|
+
let h = hour;
|
|
4649
|
+
if (meridiem === "am" && hour === 12)
|
|
4650
|
+
h = 0;
|
|
4651
|
+
else if (meridiem === "pm" && hour < 12)
|
|
4652
|
+
h = hour + 12;
|
|
4653
|
+
return dayjs().hour(h).minute(minute).second(0).toISOString();
|
|
4654
|
+
};
|
|
4655
|
+
// Handle changes to time parts
|
|
4656
|
+
const handleTimeChange = ({ hour: newHour, minute: newMinute, meridiem: newMeridiem, }) => {
|
|
4657
|
+
setHour(newHour);
|
|
4658
|
+
setMinute(newMinute);
|
|
4659
|
+
setMeridiem(newMeridiem);
|
|
4660
|
+
const isoTime = toIsoTime(newHour, newMinute, newMeridiem);
|
|
4661
|
+
setValue(colLabel, isoTime, { shouldValidate: true, shouldDirty: true });
|
|
4662
|
+
};
|
|
4663
|
+
const containerRef = useRef(null);
|
|
4664
|
+
return (jsxs(Field, { label: `${translate.t(removeIndex(`${colLabel}.field_label`))}`, required: isRequired, alignItems: "stretch", gridColumn,
|
|
4665
|
+
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: () => {
|
|
4666
|
+
setOpen(true);
|
|
4667
|
+
}, 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: {
|
|
4668
|
+
am: translate.t(removeIndex(`${colLabel}.am`)),
|
|
4669
|
+
pm: translate.t(removeIndex(`${colLabel}.pm`)),
|
|
4670
|
+
} }) }) }) }) })] }), errors[`${column}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4671
|
+
};
|
|
4672
|
+
|
|
4560
4673
|
const SchemaRenderer = ({ schema, prefix, column, }) => {
|
|
4561
4674
|
const colSchema = schema;
|
|
4562
4675
|
const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
|
|
4676
|
+
if (variant === "custom-input") {
|
|
4677
|
+
return jsx(CustomInput, { schema: colSchema, prefix, column });
|
|
4678
|
+
}
|
|
4563
4679
|
if (type === "string") {
|
|
4564
4680
|
if ((schema.enum ?? []).length > 0) {
|
|
4565
4681
|
return jsx(EnumPicker, { schema: colSchema, prefix, column });
|
|
@@ -4571,6 +4687,9 @@ const SchemaRenderer = ({ schema, prefix, column, }) => {
|
|
|
4571
4687
|
if (variant === "date-picker") {
|
|
4572
4688
|
return jsx(DatePicker, { schema: colSchema, prefix, column });
|
|
4573
4689
|
}
|
|
4690
|
+
if (variant === "time-picker") {
|
|
4691
|
+
return jsx(TimePicker, { schema: colSchema, prefix, column });
|
|
4692
|
+
}
|
|
4574
4693
|
return jsx(StringInputField, { schema: colSchema, prefix, column });
|
|
4575
4694
|
}
|
|
4576
4695
|
if (type === "number" || type === "integer") {
|
|
@@ -4674,22 +4793,15 @@ const EnumViewer = ({ column, isMultiple = false, schema, prefix, }) => {
|
|
|
4674
4793
|
};
|
|
4675
4794
|
|
|
4676
4795
|
const FileViewer = ({ column, schema, prefix }) => {
|
|
4677
|
-
const {
|
|
4796
|
+
const { watch } = useFormContext();
|
|
4678
4797
|
const { translate } = useSchemaContext();
|
|
4679
4798
|
const { required, gridColumn, gridRow } = schema;
|
|
4680
4799
|
const isRequired = required?.some((columnId) => columnId === column);
|
|
4681
4800
|
const currentFiles = (watch(column) ?? []);
|
|
4682
4801
|
const colLabel = `${prefix}${column}`;
|
|
4683
|
-
return (
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
}, placeholder: translate.t(`${colLabel}.fileDropzone`) }), jsx(Flex, { flexFlow: "column", gap: 1, children: currentFiles.map((file) => {
|
|
4687
|
-
return (jsx(Card.Root, { variant: "subtle", children: jsxs(Card.Body, { gap: "2", cursor: "pointer", onClick: () => {
|
|
4688
|
-
setValue(column, currentFiles.filter(({ name }) => {
|
|
4689
|
-
return name !== file.name;
|
|
4690
|
-
}));
|
|
4691
|
-
}, display: "flex", flexFlow: "row", alignItems: "center", padding: "2", children: [jsx(Box, { children: file.name }), jsx(TiDeleteOutline, {})] }) }, file.name));
|
|
4692
|
-
}) }), errors[`${colLabel}`] && (jsx(Text, { color: "red.400", children: translate.t(removeIndex(`${colLabel}.field_required`)) }))] }));
|
|
4802
|
+
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) => {
|
|
4803
|
+
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));
|
|
4804
|
+
}) }) }));
|
|
4693
4805
|
};
|
|
4694
4806
|
|
|
4695
4807
|
const IdViewer = ({ column, schema, prefix, isMultiple = false, }) => {
|
|
@@ -4898,9 +5010,24 @@ const StringViewer = ({ column, schema, prefix, }) => {
|
|
|
4898
5010
|
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`)) }))] }) }));
|
|
4899
5011
|
};
|
|
4900
5012
|
|
|
5013
|
+
const CustomViewer = ({ column, schema, prefix }) => {
|
|
5014
|
+
const formContext = useFormContext();
|
|
5015
|
+
const { inputViewerRender } = schema;
|
|
5016
|
+
return (inputViewerRender &&
|
|
5017
|
+
inputViewerRender({
|
|
5018
|
+
column,
|
|
5019
|
+
schema,
|
|
5020
|
+
prefix,
|
|
5021
|
+
formContext,
|
|
5022
|
+
}));
|
|
5023
|
+
};
|
|
5024
|
+
|
|
4901
5025
|
const SchemaViewer = ({ schema, prefix, column, }) => {
|
|
4902
5026
|
const colSchema = schema;
|
|
4903
5027
|
const { type, variant, properties: innerProperties, foreign_key, items, } = schema;
|
|
5028
|
+
if (variant === "custom-input") {
|
|
5029
|
+
return jsx(CustomViewer, { schema: colSchema, prefix, column });
|
|
5030
|
+
}
|
|
4904
5031
|
if (type === "string") {
|
|
4905
5032
|
if ((schema.enum ?? []).length > 0) {
|
|
4906
5033
|
return jsx(EnumViewer, { schema: colSchema, prefix, column });
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GridProps } from "@chakra-ui/react";
|
|
1
2
|
import { ReactNode } from "react";
|
|
2
3
|
export interface TableControlsProps {
|
|
3
4
|
totalText?: string;
|
|
@@ -17,5 +18,6 @@ export interface TableControlsProps {
|
|
|
17
18
|
extraItems?: ReactNode;
|
|
18
19
|
loading?: boolean;
|
|
19
20
|
hasError?: boolean;
|
|
21
|
+
gridProps?: GridProps;
|
|
20
22
|
}
|
|
21
|
-
export declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView, filterOptions, extraItems, loading, hasError, }: TableControlsProps) => import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView, filterOptions, extraItems, loading, hasError, gridProps, }: TableControlsProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
export interface TableFooterProps {
|
|
2
|
-
pinnedBgColor?: {
|
|
3
|
-
light: string;
|
|
4
|
-
dark: string;
|
|
5
|
-
};
|
|
6
2
|
showSelector?: boolean;
|
|
7
3
|
alwaysShowSelector?: boolean;
|
|
8
4
|
}
|
|
9
|
-
export declare const TableFooter: ({
|
|
5
|
+
export declare const TableFooter: ({ showSelector, alwaysShowSelector, }: TableFooterProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,8 +4,9 @@ import { JSONSchema7 } from "json-schema";
|
|
|
4
4
|
import { Dispatch, ReactNode, SetStateAction } from "react";
|
|
5
5
|
import { FieldValues, SubmitHandler, UseFormReturn } from "react-hook-form";
|
|
6
6
|
import { UseTranslationResponse } from "react-i18next";
|
|
7
|
+
import { CustomJSONSchema7 } from "../types/CustomJSONSchema7";
|
|
7
8
|
export interface FormRootProps<TData extends FieldValues> {
|
|
8
|
-
schema:
|
|
9
|
+
schema: CustomJSONSchema7;
|
|
9
10
|
serverUrl: string;
|
|
10
11
|
requestUrl?: string;
|
|
11
12
|
idMap: Record<string, object>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { CustomJSONSchema7 } from "../types/CustomJSONSchema7";
|
|
3
|
+
export interface DatePickerProps {
|
|
4
|
+
column: string;
|
|
5
|
+
schema: CustomJSONSchema7;
|
|
6
|
+
prefix: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const CustomInput: ({ column, schema, prefix }: DatePickerProps) => import("react").ReactNode;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CustomJSONSchema7 } from "../types/CustomJSONSchema7";
|
|
2
|
+
export interface DatePickerProps {
|
|
3
|
+
column: string;
|
|
4
|
+
schema: CustomJSONSchema7;
|
|
5
|
+
prefix: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const TimePicker: ({ column, schema, prefix }: DatePickerProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { JSONSchema7 } from "json-schema";
|
|
2
2
|
import { ReactNode } from "react";
|
|
3
3
|
import { ForeignKeyProps } from "../fields/StringInputField";
|
|
4
|
+
import { UseFormReturn } from "react-hook-form";
|
|
4
5
|
export interface CustomJSONSchema7 extends JSONSchema7 {
|
|
5
6
|
gridColumn?: string;
|
|
6
7
|
gridRow?: string;
|
|
7
8
|
foreign_key?: ForeignKeyProps;
|
|
8
9
|
variant?: string;
|
|
9
|
-
renderDisplay
|
|
10
|
+
renderDisplay?: (item: unknown) => ReactNode;
|
|
11
|
+
inputRender?: (props: {
|
|
12
|
+
column: string;
|
|
13
|
+
schema: CustomJSONSchema7;
|
|
14
|
+
prefix: string;
|
|
15
|
+
formContext: UseFormReturn;
|
|
16
|
+
}) => ReactNode;
|
|
17
|
+
inputViewerRender?: (props: {
|
|
18
|
+
column: string;
|
|
19
|
+
schema: CustomJSONSchema7;
|
|
20
|
+
prefix: string;
|
|
21
|
+
formContext: UseFormReturn;
|
|
22
|
+
}) => ReactNode;
|
|
10
23
|
}
|
|
11
24
|
export interface TagPickerProps {
|
|
12
25
|
column: string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { CustomJSONSchema7 } from "../types/CustomJSONSchema7";
|
|
3
|
+
export interface DatePickerProps {
|
|
4
|
+
column: string;
|
|
5
|
+
schema: CustomJSONSchema7;
|
|
6
|
+
prefix: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const CustomViewer: ({ column, schema, prefix }: DatePickerProps) => import("react").ReactNode;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface TimePickerProps {
|
|
2
|
+
hour: number;
|
|
3
|
+
setHour: (hour: number) => void;
|
|
4
|
+
minute: number;
|
|
5
|
+
setMinute: (minute: number) => void;
|
|
6
|
+
meridiem: "am" | "pm";
|
|
7
|
+
setMeridiem: (meridiem: "am" | "pm") => void;
|
|
8
|
+
onChange?: (newValue: {
|
|
9
|
+
hour: number;
|
|
10
|
+
minute: number;
|
|
11
|
+
meridiem: "am" | "pm";
|
|
12
|
+
}) => void;
|
|
13
|
+
meridiemLabel?: {
|
|
14
|
+
am: string;
|
|
15
|
+
pm: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare function TimePicker({ hour, setHour, minute, setMinute, meridiem, setMeridiem, meridiemLabel, onChange, }: TimePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export {};
|