@simplysm/solid 13.0.78 → 13.0.81
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/README.md +23 -217
- package/dist/components/data/Pagination.js +2 -2
- package/dist/components/data/Pagination.js.map +2 -2
- package/dist/components/data/Table.js +2 -2
- package/dist/components/data/Table.js.map +2 -2
- package/dist/components/data/calendar/Calendar.js +2 -2
- package/dist/components/data/calendar/Calendar.js.map +2 -2
- package/dist/components/data/kanban/Kanban.js +3 -3
- package/dist/components/data/kanban/Kanban.js.map +2 -2
- package/dist/components/data/list/ListItem.js +1 -1
- package/dist/components/data/list/ListItem.js.map +1 -1
- package/dist/components/data/list/ListItem.styles.js +1 -1
- package/dist/components/data/list/ListItem.styles.js.map +1 -1
- package/dist/components/data/sheet/DataSheet.js +16 -16
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheet.styles.js +2 -2
- package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.js +5 -5
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +2 -2
- package/dist/components/data/sheet/hooks/{useDataSheetExpansion.d.ts → createDataSheetExpansion.d.ts} +4 -4
- package/dist/components/data/sheet/hooks/createDataSheetExpansion.d.ts.map +1 -0
- package/dist/components/data/sheet/hooks/{useDataSheetExpansion.js → createDataSheetExpansion.js} +3 -3
- package/dist/components/data/sheet/hooks/{useDataSheetExpansion.js.map → createDataSheetExpansion.js.map} +2 -2
- package/dist/components/data/sheet/hooks/{useDataSheetFixedColumns.d.ts → createDataSheetFixedColumns.d.ts} +3 -3
- package/dist/components/data/sheet/hooks/createDataSheetFixedColumns.d.ts.map +1 -0
- package/dist/components/data/sheet/hooks/{useDataSheetFixedColumns.js → createDataSheetFixedColumns.js} +3 -3
- package/dist/components/data/sheet/hooks/{useDataSheetFixedColumns.js.map → createDataSheetFixedColumns.js.map} +2 -2
- package/dist/components/data/sheet/hooks/{useDataSheetHeaderCell.d.ts → createDataSheetHeaderCell.d.ts} +3 -3
- package/dist/components/data/sheet/hooks/createDataSheetHeaderCell.d.ts.map +1 -0
- package/dist/components/data/sheet/hooks/{useDataSheetHeaderCell.js → createDataSheetHeaderCell.js} +3 -3
- package/dist/components/data/sheet/hooks/{useDataSheetHeaderCell.js.map → createDataSheetHeaderCell.js.map} +3 -3
- package/dist/components/data/sheet/hooks/{useDataSheetPaging.d.ts → createDataSheetPaging.d.ts} +4 -4
- package/dist/components/data/sheet/hooks/createDataSheetPaging.d.ts.map +1 -0
- package/dist/components/data/sheet/hooks/{useDataSheetPaging.js → createDataSheetPaging.js} +3 -3
- package/dist/components/data/sheet/hooks/{useDataSheetPaging.js.map → createDataSheetPaging.js.map} +2 -2
- package/dist/components/data/sheet/hooks/{useDataSheetReorder.d.ts → createDataSheetReorder.d.ts} +3 -3
- package/dist/components/data/sheet/hooks/createDataSheetReorder.d.ts.map +1 -0
- package/dist/components/data/sheet/hooks/{useDataSheetReorder.js → createDataSheetReorder.js} +3 -3
- package/dist/components/data/sheet/hooks/{useDataSheetReorder.js.map → createDataSheetReorder.js.map} +2 -2
- package/dist/components/data/sheet/hooks/{useDataSheetSelection.d.ts → createDataSheetSelection.d.ts} +4 -4
- package/dist/components/data/sheet/hooks/createDataSheetSelection.d.ts.map +1 -0
- package/dist/components/data/sheet/hooks/{useDataSheetSelection.js → createDataSheetSelection.js} +3 -3
- package/dist/components/data/sheet/hooks/{useDataSheetSelection.js.map → createDataSheetSelection.js.map} +2 -2
- package/dist/components/data/sheet/hooks/{useDataSheetSorting.d.ts → createDataSheetSorting.d.ts} +4 -4
- package/dist/components/data/sheet/hooks/createDataSheetSorting.d.ts.map +1 -0
- package/dist/components/data/sheet/hooks/{useDataSheetSorting.js → createDataSheetSorting.js} +3 -3
- package/dist/components/data/sheet/hooks/{useDataSheetSorting.js.map → createDataSheetSorting.js.map} +2 -2
- package/dist/components/disclosure/Dialog.d.ts +2 -2
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +4 -4
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/Tabs.js +3 -3
- package/dist/components/disclosure/Tabs.js.map +2 -2
- package/dist/components/features/crud-sheet/CrudSheet.js +3 -3
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/data-select-button/DataSelectButton.d.ts +23 -9
- package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js.map +1 -1
- package/dist/components/features/permission-table/PermissionTable.js +2 -2
- package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.d.ts +23 -9
- package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelect.js.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +25 -10
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectButton.js.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/feedback/Progress.d.ts +1 -1
- package/dist/components/feedback/Progress.d.ts.map +1 -1
- package/dist/components/feedback/Progress.js +3 -3
- package/dist/components/feedback/Progress.js.map +2 -2
- package/dist/components/form-control/Button.js +2 -2
- package/dist/components/form-control/Button.js.map +2 -2
- package/dist/components/form-control/DropdownTrigger.styles.js +2 -2
- package/dist/components/form-control/DropdownTrigger.styles.js.map +1 -1
- package/dist/components/form-control/ThemeToggle.js +4 -4
- package/dist/components/form-control/ThemeToggle.js.map +2 -2
- package/dist/components/form-control/checkbox/Checkbox.d.ts +3 -3
- package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Checkbox.styles.js +3 -3
- package/dist/components/form-control/checkbox/Checkbox.styles.js.map +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js +2 -2
- package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
- package/dist/components/form-control/checkbox/Radio.d.ts +3 -3
- package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js +2 -2
- package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
- package/dist/components/form-control/checkbox/SelectableBase.d.ts +3 -3
- package/dist/components/form-control/checkbox/SelectableBase.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/SelectableBase.js +10 -10
- package/dist/components/form-control/checkbox/SelectableBase.js.map +2 -2
- package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
- package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +1 -1
- package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.js +1 -1
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/editor/RichTextEditor.js +2 -2
- package/dist/components/form-control/editor/RichTextEditor.js.map +2 -2
- package/dist/components/form-control/field/Field.styles.js +7 -7
- package/dist/components/form-control/field/Field.styles.js.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +1 -1
- package/dist/components/form-control/field/NumberInput.js.map +1 -1
- package/dist/components/form-control/field/TextInput.js +1 -1
- package/dist/components/form-control/field/TextInput.js.map +1 -1
- package/dist/components/form-control/field/Textarea.js +1 -1
- package/dist/components/form-control/field/Textarea.js.map +1 -1
- package/dist/components/form-control/numpad/Numpad.d.ts +2 -2
- package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
- package/dist/components/form-control/numpad/Numpad.js +4 -4
- package/dist/components/form-control/numpad/Numpad.js.map +2 -2
- package/dist/components/form-control/select/Select.js +1 -1
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/state-preset/StatePreset.js +8 -8
- package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
- package/dist/components/layout/topbar/Topbar.js +3 -3
- package/dist/components/layout/topbar/Topbar.js.map +2 -2
- package/dist/providers/PwaUpdateProvider.d.ts.map +1 -1
- package/dist/providers/PwaUpdateProvider.js +11 -4
- package/dist/providers/PwaUpdateProvider.js.map +2 -2
- package/dist/styles/control.styles.d.ts +3 -3
- package/dist/styles/control.styles.d.ts.map +1 -1
- package/dist/styles/control.styles.js +2 -2
- package/dist/styles/control.styles.js.map +1 -1
- package/docs/data.md +204 -0
- package/docs/disclosure.md +139 -0
- package/docs/display.md +125 -0
- package/docs/features.md +282 -0
- package/docs/feedback.md +136 -0
- package/docs/form-controls.md +520 -0
- package/docs/helpers.md +172 -0
- package/docs/hooks.md +146 -0
- package/docs/layout.md +94 -0
- package/docs/providers.md +179 -0
- package/package.json +19 -18
- package/src/components/data/Pagination.tsx +2 -2
- package/src/components/data/Table.tsx +2 -2
- package/src/components/data/calendar/Calendar.tsx +2 -2
- package/src/components/data/kanban/Kanban.tsx +2 -2
- package/src/components/data/list/ListItem.styles.ts +1 -1
- package/src/components/data/list/ListItem.tsx +1 -1
- package/src/components/data/sheet/DataSheet.styles.ts +2 -2
- package/src/components/data/sheet/DataSheet.tsx +16 -16
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +5 -5
- package/src/components/data/sheet/hooks/{useDataSheetExpansion.ts → createDataSheetExpansion.ts} +5 -5
- package/src/components/data/sheet/hooks/{useDataSheetFixedColumns.ts → createDataSheetFixedColumns.ts} +3 -3
- package/src/components/data/sheet/hooks/{useDataSheetHeaderCell.tsx → createDataSheetHeaderCell.tsx} +2 -2
- package/src/components/data/sheet/hooks/{useDataSheetPaging.ts → createDataSheetPaging.ts} +5 -5
- package/src/components/data/sheet/hooks/{useDataSheetReorder.ts → createDataSheetReorder.ts} +3 -3
- package/src/components/data/sheet/hooks/{useDataSheetSelection.ts → createDataSheetSelection.ts} +5 -5
- package/src/components/data/sheet/hooks/{useDataSheetSorting.ts → createDataSheetSorting.ts} +5 -5
- package/src/components/disclosure/Dialog.tsx +5 -5
- package/src/components/disclosure/Tabs.tsx +3 -3
- package/src/components/features/crud-sheet/CrudSheet.tsx +3 -3
- package/src/components/features/data-select-button/DataSelectButton.tsx +42 -11
- package/src/components/features/permission-table/PermissionTable.tsx +2 -2
- package/src/components/features/shared-data/SharedDataSelect.tsx +45 -14
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +38 -11
- package/src/components/features/shared-data/SharedDataSelectList.tsx +1 -1
- package/src/components/feedback/Progress.tsx +4 -4
- package/src/components/form-control/Button.tsx +2 -2
- package/src/components/form-control/DropdownTrigger.styles.ts +2 -2
- package/src/components/form-control/ThemeToggle.tsx +4 -4
- package/src/components/form-control/checkbox/Checkbox.styles.ts +3 -3
- package/src/components/form-control/checkbox/Checkbox.tsx +3 -3
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +2 -2
- package/src/components/form-control/checkbox/Radio.tsx +3 -3
- package/src/components/form-control/checkbox/RadioGroup.tsx +2 -2
- package/src/components/form-control/checkbox/SelectableBase.tsx +15 -15
- package/src/components/form-control/color-picker/ColorPicker.tsx +2 -2
- package/src/components/form-control/date-range-picker/DateRangePicker.tsx +1 -1
- package/src/components/form-control/editor/EditorToolbar.tsx +1 -1
- package/src/components/form-control/editor/RichTextEditor.tsx +2 -2
- package/src/components/form-control/field/Field.styles.ts +7 -7
- package/src/components/form-control/field/NumberInput.tsx +1 -1
- package/src/components/form-control/field/TextInput.tsx +1 -1
- package/src/components/form-control/field/Textarea.tsx +1 -1
- package/src/components/form-control/numpad/Numpad.tsx +6 -6
- package/src/components/form-control/select/Select.tsx +1 -1
- package/src/components/form-control/state-preset/StatePreset.tsx +9 -9
- package/src/components/layout/topbar/Topbar.tsx +3 -3
- package/src/providers/PwaUpdateProvider.tsx +12 -5
- package/src/styles/control.styles.ts +3 -3
- package/tests/components/data/sheet/hooks/{useDataSheetExpansion.spec.ts → createDataSheetExpansion.spec.ts} +16 -16
- package/tests/components/data/sheet/hooks/{useDataSheetFixedColumns.spec.ts → createDataSheetFixedColumns.spec.ts} +27 -27
- package/tests/components/data/sheet/hooks/{useDataSheetPaging.spec.ts → createDataSheetPaging.spec.ts} +16 -16
- package/tests/components/data/sheet/hooks/{useDataSheetReorder.spec.ts → createDataSheetReorder.spec.ts} +14 -14
- package/tests/components/data/sheet/hooks/{useDataSheetSelection.spec.ts → createDataSheetSelection.spec.ts} +26 -26
- package/tests/components/data/sheet/hooks/{useDataSheetSorting.spec.ts → createDataSheetSorting.spec.ts} +13 -13
- package/tests/components/disclosure/Dialog.spec.tsx +2 -2
- package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +55 -6
- package/tests/components/features/shared-data/SharedDataSelect.spec.tsx +40 -0
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +8 -8
- package/tests/components/form-control/checkbox/Radio.spec.tsx +9 -9
- package/tests/components/form-control/numpad/Numpad.spec.tsx +10 -10
- package/dist/components/data/sheet/hooks/useDataSheetExpansion.d.ts.map +0 -1
- package/dist/components/data/sheet/hooks/useDataSheetFixedColumns.d.ts.map +0 -1
- package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.d.ts.map +0 -1
- package/dist/components/data/sheet/hooks/useDataSheetPaging.d.ts.map +0 -1
- package/dist/components/data/sheet/hooks/useDataSheetReorder.d.ts.map +0 -1
- package/dist/components/data/sheet/hooks/useDataSheetSelection.d.ts.map +0 -1
- package/dist/components/data/sheet/hooks/useDataSheetSorting.d.ts.map +0 -1
|
@@ -69,13 +69,13 @@ import {
|
|
|
69
69
|
toolbarClass,
|
|
70
70
|
trRowClass,
|
|
71
71
|
} from "./DataSheet.styles";
|
|
72
|
-
import {
|
|
73
|
-
import {
|
|
74
|
-
import {
|
|
75
|
-
import {
|
|
76
|
-
import {
|
|
77
|
-
import {
|
|
78
|
-
import {
|
|
72
|
+
import { createDataSheetSorting } from "./hooks/createDataSheetSorting";
|
|
73
|
+
import { createDataSheetPaging } from "./hooks/createDataSheetPaging";
|
|
74
|
+
import { createDataSheetExpansion } from "./hooks/createDataSheetExpansion";
|
|
75
|
+
import { createDataSheetSelection } from "./hooks/createDataSheetSelection";
|
|
76
|
+
import { createDataSheetReorder } from "./hooks/createDataSheetReorder";
|
|
77
|
+
import { createDataSheetFixedColumns } from "./hooks/createDataSheetFixedColumns";
|
|
78
|
+
import { createDataSheetHeaderCell } from "./hooks/createDataSheetHeaderCell";
|
|
79
79
|
|
|
80
80
|
|
|
81
81
|
const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
@@ -221,7 +221,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
221
221
|
toggleSort,
|
|
222
222
|
sortIndex: sortIndex,
|
|
223
223
|
sortedItems,
|
|
224
|
-
} =
|
|
224
|
+
} = createDataSheetSorting<TItem>({
|
|
225
225
|
sorts: () => local.sorts,
|
|
226
226
|
onSortsChange: () => local.onSortsChange,
|
|
227
227
|
items: () => local.items,
|
|
@@ -233,7 +233,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
// #region Paging
|
|
236
|
-
const { currentPage, setCurrentPage, pageCount, pagedItems } =
|
|
236
|
+
const { currentPage, setCurrentPage, pageCount, pagedItems } = createDataSheetPaging<TItem>({
|
|
237
237
|
page: () => local.page,
|
|
238
238
|
onPageChange: () => local.onPageChange,
|
|
239
239
|
pageSize: () => local.pageSize,
|
|
@@ -261,7 +261,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
261
261
|
getFixedStyle,
|
|
262
262
|
isLastFixed,
|
|
263
263
|
registerColumnRef,
|
|
264
|
-
} =
|
|
264
|
+
} = createDataSheetFixedColumns<TItem>(
|
|
265
265
|
{
|
|
266
266
|
get itemChildren() { return local.itemChildren; },
|
|
267
267
|
get selectionMode() { return local.selectionMode; },
|
|
@@ -357,7 +357,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
357
357
|
|
|
358
358
|
// #region Expanding
|
|
359
359
|
const { expandedItems, flatItems, toggleExpand, isAllExpanded, toggleExpandAll } =
|
|
360
|
-
|
|
360
|
+
createDataSheetExpansion<TItem>(
|
|
361
361
|
{
|
|
362
362
|
get expandedItems() { return local.expandedItems; },
|
|
363
363
|
get onExpandedItemsChange() { return local.onExpandedItemsChange; },
|
|
@@ -380,7 +380,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
380
380
|
rangeSelect,
|
|
381
381
|
lastClickedRow,
|
|
382
382
|
setLastClickedRow,
|
|
383
|
-
} =
|
|
383
|
+
} = createDataSheetSelection<TItem>(
|
|
384
384
|
{
|
|
385
385
|
get selectionMode() { return local.selectionMode; },
|
|
386
386
|
get selection() { return local.selection; },
|
|
@@ -403,7 +403,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
403
403
|
}
|
|
404
404
|
|
|
405
405
|
// #region Reorder
|
|
406
|
-
const { dragState, onReorderPointerDown } =
|
|
406
|
+
const { dragState, onReorderPointerDown } = createDataSheetReorder<TItem>(
|
|
407
407
|
{
|
|
408
408
|
get onItemsReorder() { return local.onItemsReorder; },
|
|
409
409
|
get itemChildren() { return local.itemChildren; },
|
|
@@ -466,7 +466,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
466
466
|
|
|
467
467
|
// #region Sub-render functions
|
|
468
468
|
|
|
469
|
-
const { renderHeaderCell } =
|
|
469
|
+
const { renderHeaderCell } = createDataSheetHeaderCell({
|
|
470
470
|
effectiveColumns,
|
|
471
471
|
headerRowTops,
|
|
472
472
|
getFixedStyle,
|
|
@@ -584,7 +584,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
584
584
|
}
|
|
585
585
|
>
|
|
586
586
|
<Checkbox
|
|
587
|
-
|
|
587
|
+
checked={isSelected()}
|
|
588
588
|
disabled={selectable() !== true}
|
|
589
589
|
inset
|
|
590
590
|
class={twMerge(
|
|
@@ -783,7 +783,7 @@ const DataSheetInner = <TItem,>(props: DataSheetProps<TItem>) => {
|
|
|
783
783
|
<Show when={local.selectionMode === "multiple"}>
|
|
784
784
|
<div class={featureCellClickableClass} onClick={() => toggleSelectAll()}>
|
|
785
785
|
<Checkbox
|
|
786
|
-
|
|
786
|
+
checked={(() => {
|
|
787
787
|
const selectableItems = displayItems()
|
|
788
788
|
.map((flat) => flat.item)
|
|
789
789
|
.filter((item) => getItemSelectable(item) === true);
|
|
@@ -112,7 +112,7 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
112
112
|
<DataSheet.Column<EditColumnItem>
|
|
113
113
|
key="header"
|
|
114
114
|
header={i18n.t("dataSheetConfigDialog.column")}
|
|
115
|
-
class={pad.
|
|
115
|
+
class={pad.md}
|
|
116
116
|
sortable={false}
|
|
117
117
|
>
|
|
118
118
|
{(ctx) => ctx.item.headerText}
|
|
@@ -121,8 +121,8 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
121
121
|
{(ctx) => (
|
|
122
122
|
<Checkbox
|
|
123
123
|
inset
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
checked={ctx.item.fixed}
|
|
125
|
+
onCheckedChange={(v) => updateItem(ctx.item.key, "fixed", v)}
|
|
126
126
|
/>
|
|
127
127
|
)}
|
|
128
128
|
</DataSheet.Column>
|
|
@@ -130,8 +130,8 @@ export const DataSheetConfigDialog: Component<DataSheetConfigDialogProps> = (pro
|
|
|
130
130
|
{(ctx) => (
|
|
131
131
|
<Checkbox
|
|
132
132
|
inset
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
checked={ctx.item.hidden}
|
|
134
|
+
onCheckedChange={(v) => updateItem(ctx.item.key, "hidden", v)}
|
|
135
135
|
/>
|
|
136
136
|
)}
|
|
137
137
|
</DataSheet.Column>
|
package/src/components/data/sheet/hooks/{useDataSheetExpansion.ts → createDataSheetExpansion.ts}
RENAMED
|
@@ -3,13 +3,13 @@ import type { FlatItem } from "../DataSheet.types";
|
|
|
3
3
|
import { collectAllExpandable, flattenTree } from "../DataSheet.utils";
|
|
4
4
|
import { createControllableSignal } from "../../../../hooks/createControllableSignal";
|
|
5
5
|
|
|
6
|
-
export interface
|
|
6
|
+
export interface CreateDataSheetExpansionProps<TItem> {
|
|
7
7
|
expandedItems?: TItem[];
|
|
8
8
|
onExpandedItemsChange?: (items: TItem[]) => void;
|
|
9
9
|
itemChildren?: (item: TItem, index: number) => TItem[] | undefined;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export interface
|
|
12
|
+
export interface CreateDataSheetExpansionReturn<TItem> {
|
|
13
13
|
expandedItems: Accessor<TItem[]>;
|
|
14
14
|
setExpandedItems: (newValue: TItem[] | ((prev: TItem[]) => TItem[])) => TItem[];
|
|
15
15
|
flatItems: Accessor<FlatItem<TItem>[]>;
|
|
@@ -18,11 +18,11 @@ export interface UseDataSheetExpansionReturn<TItem> {
|
|
|
18
18
|
toggleExpandAll: () => void;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export function
|
|
22
|
-
props:
|
|
21
|
+
export function createDataSheetExpansion<TItem>(
|
|
22
|
+
props: CreateDataSheetExpansionProps<TItem>,
|
|
23
23
|
pagedItems: Accessor<TItem[]>,
|
|
24
24
|
originalIndexMap: Accessor<Map<TItem, number>>,
|
|
25
|
-
):
|
|
25
|
+
): CreateDataSheetExpansionReturn<TItem> {
|
|
26
26
|
const [expandedItems, setExpandedItems] = createControllableSignal({
|
|
27
27
|
value: () => props.expandedItems ?? [],
|
|
28
28
|
onChange: () => props.onExpandedItemsChange,
|
|
@@ -2,14 +2,14 @@ import { createMemo, createSignal, type Accessor } from "solid-js";
|
|
|
2
2
|
import { createResizeObserver } from "@solid-primitives/resize-observer";
|
|
3
3
|
import type { DataSheetColumnDef, DataSheetReorderEvent } from "../DataSheet.types";
|
|
4
4
|
|
|
5
|
-
export interface
|
|
5
|
+
export interface CreateDataSheetFixedColumnsProps<TItem> {
|
|
6
6
|
itemChildren?: (item: TItem, index: number) => TItem[] | undefined;
|
|
7
7
|
selectionMode?: "single" | "multiple";
|
|
8
8
|
onItemsReorder?: (event: DataSheetReorderEvent<TItem>) => void;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export function
|
|
12
|
-
props:
|
|
11
|
+
export function createDataSheetFixedColumns<TItem>(
|
|
12
|
+
props: CreateDataSheetFixedColumnsProps<TItem>,
|
|
13
13
|
effectiveColumns: Accessor<DataSheetColumnDef<TItem>[]>
|
|
14
14
|
) {
|
|
15
15
|
// Feature column presence checks
|
package/src/components/data/sheet/hooks/{useDataSheetHeaderCell.tsx → createDataSheetHeaderCell.tsx}
RENAMED
|
@@ -6,7 +6,7 @@ import { Icon } from "../../../display/Icon";
|
|
|
6
6
|
import { IconArrowsSort, IconSortAscending, IconSortDescending } from "@tabler/icons-solidjs";
|
|
7
7
|
import type { HeaderDef, DataSheetColumnDef } from "../DataSheet.types";
|
|
8
8
|
|
|
9
|
-
export interface
|
|
9
|
+
export interface CreateDataSheetHeaderCellProps<TItem> {
|
|
10
10
|
effectiveColumns: () => DataSheetColumnDef<TItem>[];
|
|
11
11
|
headerRowTops: () => number[];
|
|
12
12
|
getFixedStyle: (colIndex: number) => string | undefined;
|
|
@@ -26,7 +26,7 @@ export interface UseDataSheetHeaderCellProps<TItem> {
|
|
|
26
26
|
sortIconClass: string;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export function
|
|
29
|
+
export function createDataSheetHeaderCell<TItem>(props: CreateDataSheetHeaderCellProps<TItem>) {
|
|
30
30
|
function renderHeaderCell(header: HeaderDef, colIndex: number, rowIndex: number): JSX.Element {
|
|
31
31
|
const isSortable = () =>
|
|
32
32
|
header.isLastRow &&
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createMemo, type Accessor } from "solid-js";
|
|
2
2
|
import { createControllableSignal } from "../../../../hooks/createControllableSignal";
|
|
3
3
|
|
|
4
|
-
export interface
|
|
4
|
+
export interface CreateDataSheetPagingOptions<TItem> {
|
|
5
5
|
page: Accessor<number | undefined>;
|
|
6
6
|
onPageChange: Accessor<((page: number) => void) | undefined>;
|
|
7
7
|
pageSize: Accessor<number | undefined>;
|
|
@@ -10,16 +10,16 @@ export interface UseDataSheetPagingOptions<TItem> {
|
|
|
10
10
|
sortedItems: Accessor<TItem[]>;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export interface
|
|
13
|
+
export interface CreateDataSheetPagingReturn<TItem> {
|
|
14
14
|
currentPage: Accessor<number>;
|
|
15
15
|
setCurrentPage: (newValue: number | ((prev: number) => number)) => number;
|
|
16
16
|
pageCount: Accessor<number>;
|
|
17
17
|
pagedItems: Accessor<TItem[]>;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
export function
|
|
21
|
-
options:
|
|
22
|
-
):
|
|
20
|
+
export function createDataSheetPaging<TItem>(
|
|
21
|
+
options: CreateDataSheetPagingOptions<TItem>,
|
|
22
|
+
): CreateDataSheetPagingReturn<TItem> {
|
|
23
23
|
const [currentPage, setCurrentPage] = createControllableSignal({
|
|
24
24
|
value: () => options.page() ?? 1,
|
|
25
25
|
onChange: () => options.onPageChange(),
|
package/src/components/data/sheet/hooks/{useDataSheetReorder.ts → createDataSheetReorder.ts}
RENAMED
|
@@ -2,13 +2,13 @@ import { createSignal, type Accessor } from "solid-js";
|
|
|
2
2
|
import { startPointerDrag } from "../../../../helpers/startPointerDrag";
|
|
3
3
|
import type { DataSheetReorderEvent, FlatItem } from "../DataSheet.types";
|
|
4
4
|
|
|
5
|
-
export interface
|
|
5
|
+
export interface CreateDataSheetReorderProps<TItem> {
|
|
6
6
|
onItemsReorder?: (event: DataSheetReorderEvent<TItem>) => void;
|
|
7
7
|
itemChildren?: (item: TItem, index: number) => TItem[] | undefined;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export function
|
|
11
|
-
props:
|
|
10
|
+
export function createDataSheetReorder<TItem>(
|
|
11
|
+
props: CreateDataSheetReorderProps<TItem>,
|
|
12
12
|
displayItems: Accessor<FlatItem<TItem>[]>
|
|
13
13
|
) {
|
|
14
14
|
const [dragState, setDragState] = createSignal<{
|
package/src/components/data/sheet/hooks/{useDataSheetSelection.ts → createDataSheetSelection.ts}
RENAMED
|
@@ -2,14 +2,14 @@ import { createSignal, type Accessor } from "solid-js";
|
|
|
2
2
|
import type { FlatItem } from "../DataSheet.types";
|
|
3
3
|
import { createControllableSignal } from "../../../../hooks/createControllableSignal";
|
|
4
4
|
|
|
5
|
-
export interface
|
|
5
|
+
export interface CreateDataSheetSelectionProps<TItem> {
|
|
6
6
|
selectionMode?: "single" | "multiple";
|
|
7
7
|
selection?: TItem[];
|
|
8
8
|
onSelectionChange?: (items: TItem[]) => void;
|
|
9
9
|
isItemSelectable?: (item: TItem) => boolean | string;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export interface
|
|
12
|
+
export interface CreateDataSheetSelectionReturn<TItem> {
|
|
13
13
|
selection: Accessor<TItem[]>;
|
|
14
14
|
setSelection: (newValue: TItem[] | ((prev: TItem[]) => TItem[])) => TItem[];
|
|
15
15
|
getItemSelectable: (item: TItem) => boolean | string;
|
|
@@ -22,10 +22,10 @@ export interface UseDataSheetSelectionReturn<TItem> {
|
|
|
22
22
|
setLastClickAction: (value: "select" | "deselect") => void;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export function
|
|
26
|
-
props:
|
|
25
|
+
export function createDataSheetSelection<TItem>(
|
|
26
|
+
props: CreateDataSheetSelectionProps<TItem>,
|
|
27
27
|
displayItems: Accessor<FlatItem<TItem>[]>,
|
|
28
|
-
):
|
|
28
|
+
): CreateDataSheetSelectionReturn<TItem> {
|
|
29
29
|
const [selection, setSelection] = createControllableSignal({
|
|
30
30
|
value: () => props.selection ?? [],
|
|
31
31
|
onChange: () => props.onSelectionChange,
|
package/src/components/data/sheet/hooks/{useDataSheetSorting.ts → createDataSheetSorting.ts}
RENAMED
|
@@ -3,14 +3,14 @@ import { createControllableSignal } from "../../../../hooks/createControllableSi
|
|
|
3
3
|
import { applySorting } from "../DataSheet.utils";
|
|
4
4
|
import type { SortingDef } from "../DataSheet.types";
|
|
5
5
|
|
|
6
|
-
export interface
|
|
6
|
+
export interface CreateDataSheetSortingOptions<TItem> {
|
|
7
7
|
sorts: Accessor<SortingDef[] | undefined>;
|
|
8
8
|
onSortsChange: Accessor<((sorts: SortingDef[]) => void) | undefined>;
|
|
9
9
|
items: Accessor<TItem[] | undefined>;
|
|
10
10
|
autoSort: Accessor<boolean | undefined>;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export interface
|
|
13
|
+
export interface CreateDataSheetSortingReturn<TItem> {
|
|
14
14
|
sorts: Accessor<SortingDef[]>;
|
|
15
15
|
setSorts: (newValue: SortingDef[] | ((prev: SortingDef[]) => SortingDef[])) => SortingDef[];
|
|
16
16
|
toggleSort: (key: string, multiple: boolean) => void;
|
|
@@ -18,9 +18,9 @@ export interface UseDataSheetSortingReturn<TItem> {
|
|
|
18
18
|
sortedItems: Accessor<TItem[]>;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export function
|
|
22
|
-
options:
|
|
23
|
-
):
|
|
21
|
+
export function createDataSheetSorting<TItem>(
|
|
22
|
+
options: CreateDataSheetSortingOptions<TItem>,
|
|
23
|
+
): CreateDataSheetSortingReturn<TItem> {
|
|
24
24
|
const [sorts, setSorts] = createControllableSignal({
|
|
25
25
|
value: () => options.sorts() ?? [],
|
|
26
26
|
onChange: () => options.onSortsChange(),
|
|
@@ -46,7 +46,7 @@ export interface DialogShowOptions {
|
|
|
46
46
|
/** Dialog header */
|
|
47
47
|
header?: JSX.Element;
|
|
48
48
|
/** Show close button */
|
|
49
|
-
|
|
49
|
+
withCloseButton?: boolean;
|
|
50
50
|
/** Close on backdrop click */
|
|
51
51
|
closeOnInteractOutside?: boolean;
|
|
52
52
|
/** Close on ESC key */
|
|
@@ -112,7 +112,7 @@ export interface DialogProps {
|
|
|
112
112
|
/** Callback when open state changes */
|
|
113
113
|
onOpenChange?: (open: boolean) => void;
|
|
114
114
|
/** Show close button (default: true) */
|
|
115
|
-
|
|
115
|
+
withCloseButton?: boolean;
|
|
116
116
|
/** Close on backdrop click */
|
|
117
117
|
closeOnInteractOutside?: boolean;
|
|
118
118
|
/** Close on Escape key (default: true) */
|
|
@@ -210,7 +210,7 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
|
|
|
210
210
|
const [local] = splitProps(props, [
|
|
211
211
|
"open",
|
|
212
212
|
"onOpenChange",
|
|
213
|
-
"
|
|
213
|
+
"withCloseButton",
|
|
214
214
|
"closeOnInteractOutside",
|
|
215
215
|
"closeOnEscape",
|
|
216
216
|
"resizable",
|
|
@@ -575,7 +575,7 @@ const DialogInner: ParentComponent<DialogProps> = (props) => {
|
|
|
575
575
|
{header()!.children}
|
|
576
576
|
</h5>
|
|
577
577
|
<Show when={action()}>{action()!.children}</Show>
|
|
578
|
-
<Show when={local.
|
|
578
|
+
<Show when={local.withCloseButton ?? true}>
|
|
579
579
|
<Button
|
|
580
580
|
data-dialog-close
|
|
581
581
|
size={"sm"}
|
|
@@ -726,7 +726,7 @@ export const DialogProvider: ParentComponent<DialogProviderProps> = (props) => {
|
|
|
726
726
|
}
|
|
727
727
|
}}
|
|
728
728
|
onCloseComplete={() => removeEntry(entry.id)}
|
|
729
|
-
|
|
729
|
+
withCloseButton={entry.options.withCloseButton}
|
|
730
730
|
closeOnInteractOutside={entry.options.closeOnInteractOutside}
|
|
731
731
|
closeOnEscape={entry.options.closeOnEscape}
|
|
732
732
|
resizable={entry.options.resizable}
|
|
@@ -32,14 +32,14 @@ function TabsTabInner(props: TabsTabProps) {
|
|
|
32
32
|
const isSelected = () => ctx.value() === props.value;
|
|
33
33
|
|
|
34
34
|
const tabSizeClasses: Record<ComponentSize, string> = {
|
|
35
|
-
|
|
35
|
+
md: "px-3 py-1.5 text-sm",
|
|
36
36
|
xs: clsx(pad.sm, "text-xs"),
|
|
37
37
|
sm: "px-2.5 py-1 text-sm",
|
|
38
38
|
lg: "px-4 py-2.5 text-base",
|
|
39
39
|
xl: "px-5 py-3 text-lg",
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
-
const sizeClasses = () => tabSizeClasses[ctx.size() ?? "
|
|
42
|
+
const sizeClasses = () => tabSizeClasses[ctx.size() ?? "md"];
|
|
43
43
|
|
|
44
44
|
const stateClass = () =>
|
|
45
45
|
isSelected()
|
|
@@ -123,7 +123,7 @@ const TabsInner: ParentComponent<TabsProps> = (props) => {
|
|
|
123
123
|
|
|
124
124
|
return (
|
|
125
125
|
<TabsContext.Provider value={contextValue}>
|
|
126
|
-
<div {...rest} role="tablist" class={twMerge(clsx("inline-flex items-center", gap.
|
|
126
|
+
<div {...rest} role="tablist" class={twMerge(clsx("inline-flex items-center", gap.md, "border-b", border.default), local.class)} style={local.style}>
|
|
127
127
|
{local.children}
|
|
128
128
|
</div>
|
|
129
129
|
</TabsContext.Provider>
|
|
@@ -677,7 +677,7 @@ const CrudSheetBase = <TItem, TFilter extends Record<string, unknown>>(
|
|
|
677
677
|
) {
|
|
678
678
|
return (
|
|
679
679
|
<Link
|
|
680
|
-
class={clsx("flex", gap.
|
|
680
|
+
class={clsx("flex", gap.md)}
|
|
681
681
|
onClick={(e) => {
|
|
682
682
|
e.preventDefault();
|
|
683
683
|
e.stopPropagation();
|
|
@@ -702,7 +702,7 @@ const CrudSheetBase = <TItem, TFilter extends Record<string, unknown>>(
|
|
|
702
702
|
<Show when={local.lastModifiedAtProp}>
|
|
703
703
|
<DataSheetColumn<TItem> key={local.lastModifiedAtProp!} header={i18n.t("crudSheet.lastModified")} hidden>
|
|
704
704
|
{(dsCtx) => (
|
|
705
|
-
<div class={clsx(pad.
|
|
705
|
+
<div class={clsx(pad.md, "text-center")}>
|
|
706
706
|
{(
|
|
707
707
|
obj.getChainValue(dsCtx.item, local.lastModifiedAtProp!, true) as
|
|
708
708
|
| DateTime
|
|
@@ -716,7 +716,7 @@ const CrudSheetBase = <TItem, TFilter extends Record<string, unknown>>(
|
|
|
716
716
|
<Show when={local.lastModifiedByProp}>
|
|
717
717
|
<DataSheetColumn<TItem> key={local.lastModifiedByProp!} header={i18n.t("crudSheet.modifiedBy")} hidden>
|
|
718
718
|
{(dsCtx) => (
|
|
719
|
-
<div class={clsx(pad.
|
|
719
|
+
<div class={clsx(pad.md, "text-center")}>
|
|
720
720
|
{obj.getChainValue(dsCtx.item, local.lastModifiedByProp!, true) as string}
|
|
721
721
|
</div>
|
|
722
722
|
)}
|
|
@@ -49,16 +49,12 @@ export type DialogPropsField<P, TKey = string | number> =
|
|
|
49
49
|
? { dialogProps?: UserDialogProps<P, TKey> }
|
|
50
50
|
: { dialogProps: UserDialogProps<P, TKey> };
|
|
51
51
|
|
|
52
|
-
/**
|
|
53
|
-
|
|
52
|
+
/** Common props shared between single and multiple modes */
|
|
53
|
+
interface DataSelectButtonCommonProps<
|
|
54
54
|
TItem,
|
|
55
55
|
TKey = string | number,
|
|
56
56
|
TDialogProps extends SelectDialogBaseProps<TKey> = SelectDialogBaseProps<TKey>,
|
|
57
|
-
>
|
|
58
|
-
/** Currently selected key(s) (single or multiple) */
|
|
59
|
-
value?: TKey | TKey[];
|
|
60
|
-
/** Value change callback */
|
|
61
|
-
onValueChange?: (value: TKey | TKey[] | undefined) => void;
|
|
57
|
+
> {
|
|
62
58
|
/** Function to load items by key */
|
|
63
59
|
load: (keys: TKey[]) => TItem[] | Promise<TItem[]>;
|
|
64
60
|
/** Item rendering function */
|
|
@@ -67,8 +63,6 @@ export type DataSelectButtonProps<
|
|
|
67
63
|
dialog: Component<TDialogProps>;
|
|
68
64
|
/** Dialog options (header, size, etc.) */
|
|
69
65
|
dialogOptions?: DialogShowOptions;
|
|
70
|
-
/** Multiple selection mode */
|
|
71
|
-
multiple?: boolean;
|
|
72
66
|
/** Required input */
|
|
73
67
|
required?: boolean;
|
|
74
68
|
/** Disabled */
|
|
@@ -81,7 +75,44 @@ export type DataSelectButtonProps<
|
|
|
81
75
|
validate?: (value: unknown) => string | undefined;
|
|
82
76
|
/** lazyValidation: show error only after focus is lost */
|
|
83
77
|
lazyValidation?: boolean;
|
|
84
|
-
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Single select props */
|
|
81
|
+
interface DataSelectButtonSingleProps<
|
|
82
|
+
TItem,
|
|
83
|
+
TKey = string | number,
|
|
84
|
+
TDialogProps extends SelectDialogBaseProps<TKey> = SelectDialogBaseProps<TKey>,
|
|
85
|
+
> extends DataSelectButtonCommonProps<TItem, TKey, TDialogProps> {
|
|
86
|
+
/** Single select mode */
|
|
87
|
+
multiple?: false;
|
|
88
|
+
/** Currently selected key */
|
|
89
|
+
value?: TKey;
|
|
90
|
+
/** Value change callback */
|
|
91
|
+
onValueChange?: (value: TKey | undefined) => void;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Multiple select props */
|
|
95
|
+
interface DataSelectButtonMultipleProps<
|
|
96
|
+
TItem,
|
|
97
|
+
TKey = string | number,
|
|
98
|
+
TDialogProps extends SelectDialogBaseProps<TKey> = SelectDialogBaseProps<TKey>,
|
|
99
|
+
> extends DataSelectButtonCommonProps<TItem, TKey, TDialogProps> {
|
|
100
|
+
/** Multiple select mode */
|
|
101
|
+
multiple: true;
|
|
102
|
+
/** Currently selected keys */
|
|
103
|
+
value?: TKey[];
|
|
104
|
+
/** Value change callback */
|
|
105
|
+
onValueChange?: (value: TKey[]) => void;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** DataSelectButton Props */
|
|
109
|
+
export type DataSelectButtonProps<
|
|
110
|
+
TItem,
|
|
111
|
+
TKey = string | number,
|
|
112
|
+
TDialogProps extends SelectDialogBaseProps<TKey> = SelectDialogBaseProps<TKey>,
|
|
113
|
+
> =
|
|
114
|
+
| (DataSelectButtonSingleProps<TItem, TKey, TDialogProps> & DialogPropsField<TDialogProps, TKey>)
|
|
115
|
+
| (DataSelectButtonMultipleProps<TItem, TKey, TDialogProps> & DialogPropsField<TDialogProps, TKey>);
|
|
85
116
|
|
|
86
117
|
const actionButtonClass = clsx(
|
|
87
118
|
"flex-shrink-0",
|
|
@@ -101,7 +132,7 @@ function getTriggerContainerClass(options: {
|
|
|
101
132
|
}): string {
|
|
102
133
|
return twMerge(
|
|
103
134
|
triggerBaseClass,
|
|
104
|
-
triggerSizeClasses[options.size ?? "
|
|
135
|
+
triggerSizeClasses[options.size ?? "md"],
|
|
105
136
|
options.disabled && triggerDisabledClass,
|
|
106
137
|
options.inset && triggerInsetClass,
|
|
107
138
|
options.class,
|
|
@@ -294,8 +294,8 @@ export const PermissionTable: Component<PermissionTableProps> = (props) => {
|
|
|
294
294
|
return (
|
|
295
295
|
<Show when={hasPermInTree(item, perm)}>
|
|
296
296
|
<Checkbox
|
|
297
|
-
|
|
298
|
-
|
|
297
|
+
checked={isGroupPermChecked(item, perm, currentValue())}
|
|
298
|
+
onCheckedChange={(checked) => handlePermChange(item, perm, checked)}
|
|
299
299
|
disabled={local.disabled || isPermDisabled(item, perm, currentValue())}
|
|
300
300
|
inset
|
|
301
301
|
/>
|
|
@@ -37,20 +37,14 @@ const Action: Component<ActionProps> = (props) => {
|
|
|
37
37
|
return ActionSlot(props);
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
/**
|
|
41
|
-
|
|
40
|
+
/** Common props shared between single and multiple modes */
|
|
41
|
+
interface SharedDataSelectCommonProps<
|
|
42
42
|
TItem,
|
|
43
|
-
|
|
43
|
+
_TKey extends string | number = string | number,
|
|
44
44
|
TDialogProps extends SelectDialogBaseProps = SelectDialogBaseProps,
|
|
45
|
-
>
|
|
45
|
+
> {
|
|
46
46
|
/** Shared data accessor */
|
|
47
47
|
data: SharedDataAccessor<TItem>;
|
|
48
|
-
/** Currently selected key value (translated to item internally) */
|
|
49
|
-
value?: TKey | TKey[];
|
|
50
|
-
/** Value change callback (receives key, not item) */
|
|
51
|
-
onValueChange?: (value: TKey | TKey[] | undefined) => void;
|
|
52
|
-
/** Multiple selection mode */
|
|
53
|
-
multiple?: boolean;
|
|
54
48
|
/** Required input */
|
|
55
49
|
required?: boolean;
|
|
56
50
|
/** Disabled */
|
|
@@ -67,7 +61,44 @@ export type SharedDataSelectProps<
|
|
|
67
61
|
dialogOptions?: DialogShowOptions;
|
|
68
62
|
/** Compound children: ItemTemplate, Action */
|
|
69
63
|
children: JSX.Element;
|
|
70
|
-
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Single select props */
|
|
67
|
+
interface SharedDataSelectSingleProps<
|
|
68
|
+
TItem,
|
|
69
|
+
TKey extends string | number = string | number,
|
|
70
|
+
TDialogProps extends SelectDialogBaseProps = SelectDialogBaseProps,
|
|
71
|
+
> extends SharedDataSelectCommonProps<TItem, TKey, TDialogProps> {
|
|
72
|
+
/** Single select mode */
|
|
73
|
+
multiple?: false;
|
|
74
|
+
/** Currently selected key value */
|
|
75
|
+
value?: TKey;
|
|
76
|
+
/** Value change callback */
|
|
77
|
+
onValueChange?: (value: TKey | undefined) => void;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Multiple select props */
|
|
81
|
+
interface SharedDataSelectMultipleProps<
|
|
82
|
+
TItem,
|
|
83
|
+
TKey extends string | number = string | number,
|
|
84
|
+
TDialogProps extends SelectDialogBaseProps = SelectDialogBaseProps,
|
|
85
|
+
> extends SharedDataSelectCommonProps<TItem, TKey, TDialogProps> {
|
|
86
|
+
/** Multiple select mode */
|
|
87
|
+
multiple: true;
|
|
88
|
+
/** Currently selected key values */
|
|
89
|
+
value?: TKey[];
|
|
90
|
+
/** Value change callback */
|
|
91
|
+
onValueChange?: (value: TKey[]) => void;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** SharedDataSelect Props */
|
|
95
|
+
export type SharedDataSelectProps<
|
|
96
|
+
TItem,
|
|
97
|
+
TKey extends string | number = string | number,
|
|
98
|
+
TDialogProps extends SelectDialogBaseProps = SelectDialogBaseProps,
|
|
99
|
+
> =
|
|
100
|
+
| (SharedDataSelectSingleProps<TItem, TKey, TDialogProps> & DialogPropsField<TDialogProps>)
|
|
101
|
+
| (SharedDataSelectMultipleProps<TItem, TKey, TDialogProps> & DialogPropsField<TDialogProps>);
|
|
71
102
|
|
|
72
103
|
const SharedDataSelectBase = <
|
|
73
104
|
TItem,
|
|
@@ -146,9 +177,9 @@ const SharedDataSelectBase = <
|
|
|
146
177
|
if (result) {
|
|
147
178
|
const newKeys = result.selectedKeys;
|
|
148
179
|
if (rest.multiple) {
|
|
149
|
-
rest.onValueChange?.(newKeys);
|
|
180
|
+
(rest.onValueChange as ((value: TKey[]) => void) | undefined)?.(newKeys);
|
|
150
181
|
} else {
|
|
151
|
-
rest.onValueChange?.(newKeys.length > 0 ? newKeys[0] : undefined);
|
|
182
|
+
(rest.onValueChange as ((value: TKey | undefined) => void) | undefined)?.(newKeys.length > 0 ? newKeys[0] : undefined);
|
|
152
183
|
}
|
|
153
184
|
}
|
|
154
185
|
};
|
|
@@ -160,7 +191,7 @@ const SharedDataSelectBase = <
|
|
|
160
191
|
get onValueChange() {
|
|
161
192
|
if (!rest.onValueChange) return undefined;
|
|
162
193
|
return (item: TItem | TItem[] | undefined) => {
|
|
163
|
-
rest.onValueChange
|
|
194
|
+
(rest.onValueChange as (value: any) => void)(itemToKey(item));
|
|
164
195
|
};
|
|
165
196
|
},
|
|
166
197
|
get items() {
|