@simplysm/solid 13.0.77 → 13.0.80
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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from "vitest";
|
|
2
2
|
import { createRoot } from "solid-js";
|
|
3
|
-
import {
|
|
3
|
+
import { createDataSheetReorder } from "../../../../../src/components/data/sheet/hooks/createDataSheetReorder";
|
|
4
4
|
|
|
5
5
|
interface TestItem {
|
|
6
6
|
id: number;
|
|
@@ -8,7 +8,7 @@ interface TestItem {
|
|
|
8
8
|
children?: TestItem[];
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
describe("
|
|
11
|
+
describe("createDataSheetReorder", () => {
|
|
12
12
|
describe("isDescendant", () => {
|
|
13
13
|
it("should return false for non-descendant items", () => {
|
|
14
14
|
createRoot(() => {
|
|
@@ -17,7 +17,7 @@ describe("useDataSheetReorder", () => {
|
|
|
17
17
|
|
|
18
18
|
const displayItems = () => [];
|
|
19
19
|
|
|
20
|
-
const { dragState } =
|
|
20
|
+
const { dragState } = createDataSheetReorder<TestItem>(
|
|
21
21
|
{
|
|
22
22
|
itemChildren: (item) => item.children,
|
|
23
23
|
},
|
|
@@ -36,7 +36,7 @@ describe("useDataSheetReorder", () => {
|
|
|
36
36
|
|
|
37
37
|
const displayItems = () => [];
|
|
38
38
|
|
|
39
|
-
const { dragState } =
|
|
39
|
+
const { dragState } = createDataSheetReorder<TestItem>(
|
|
40
40
|
{
|
|
41
41
|
itemChildren: (item) => item.children,
|
|
42
42
|
},
|
|
@@ -56,7 +56,7 @@ describe("useDataSheetReorder", () => {
|
|
|
56
56
|
|
|
57
57
|
const displayItems = () => [];
|
|
58
58
|
|
|
59
|
-
const { dragState } =
|
|
59
|
+
const { dragState } = createDataSheetReorder<TestItem>(
|
|
60
60
|
{
|
|
61
61
|
itemChildren: (item) => item.children,
|
|
62
62
|
},
|
|
@@ -79,7 +79,7 @@ describe("useDataSheetReorder", () => {
|
|
|
79
79
|
|
|
80
80
|
const displayItems = () => [];
|
|
81
81
|
|
|
82
|
-
const { dragState } =
|
|
82
|
+
const { dragState } = createDataSheetReorder<TestItem>(
|
|
83
83
|
{
|
|
84
84
|
itemChildren: (item) => item.children,
|
|
85
85
|
},
|
|
@@ -98,7 +98,7 @@ describe("useDataSheetReorder", () => {
|
|
|
98
98
|
|
|
99
99
|
const displayItems = () => [];
|
|
100
100
|
|
|
101
|
-
const { dragState } =
|
|
101
|
+
const { dragState } = createDataSheetReorder({}, displayItems);
|
|
102
102
|
|
|
103
103
|
// Without itemChildren, no parent-child relationships exist
|
|
104
104
|
expect(dragState()).toBeNull();
|
|
@@ -111,7 +111,7 @@ describe("useDataSheetReorder", () => {
|
|
|
111
111
|
createRoot(() => {
|
|
112
112
|
const displayItems = () => [];
|
|
113
113
|
|
|
114
|
-
const { dragState } =
|
|
114
|
+
const { dragState } = createDataSheetReorder({}, displayItems);
|
|
115
115
|
|
|
116
116
|
expect(dragState()).toBeNull();
|
|
117
117
|
});
|
|
@@ -124,7 +124,7 @@ describe("useDataSheetReorder", () => {
|
|
|
124
124
|
|
|
125
125
|
const displayItems = () => [];
|
|
126
126
|
|
|
127
|
-
const { dragState, setDragState } =
|
|
127
|
+
const { dragState, setDragState } = createDataSheetReorder({}, displayItems);
|
|
128
128
|
|
|
129
129
|
setDragState({
|
|
130
130
|
draggingItem: item1,
|
|
@@ -147,7 +147,7 @@ describe("useDataSheetReorder", () => {
|
|
|
147
147
|
|
|
148
148
|
const displayItems = () => [];
|
|
149
149
|
|
|
150
|
-
const { dragState, setDragState } =
|
|
150
|
+
const { dragState, setDragState } = createDataSheetReorder({}, displayItems);
|
|
151
151
|
|
|
152
152
|
setDragState({
|
|
153
153
|
draggingItem: item1,
|
|
@@ -169,7 +169,7 @@ describe("useDataSheetReorder", () => {
|
|
|
169
169
|
|
|
170
170
|
const displayItems = () => [];
|
|
171
171
|
|
|
172
|
-
const { dragState, setDragState } =
|
|
172
|
+
const { dragState, setDragState } = createDataSheetReorder({}, displayItems);
|
|
173
173
|
|
|
174
174
|
// Test "before" position
|
|
175
175
|
setDragState({
|
|
@@ -208,7 +208,7 @@ describe("useDataSheetReorder", () => {
|
|
|
208
208
|
|
|
209
209
|
const displayItems = () => [];
|
|
210
210
|
|
|
211
|
-
const { setDragState: _setDragState } =
|
|
211
|
+
const { setDragState: _setDragState } = createDataSheetReorder(
|
|
212
212
|
{
|
|
213
213
|
onItemsReorder: onReorder,
|
|
214
214
|
},
|
|
@@ -228,8 +228,8 @@ describe("useDataSheetReorder", () => {
|
|
|
228
228
|
|
|
229
229
|
const displayItems = () => [];
|
|
230
230
|
|
|
231
|
-
const hook1 =
|
|
232
|
-
const hook2 =
|
|
231
|
+
const hook1 = createDataSheetReorder({}, displayItems);
|
|
232
|
+
const hook2 = createDataSheetReorder({}, displayItems);
|
|
233
233
|
|
|
234
234
|
hook1.setDragState({
|
|
235
235
|
draggingItem: item1,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
2
|
import { createRoot } from "solid-js";
|
|
3
|
-
import {
|
|
3
|
+
import { createDataSheetSelection } from "../../../../../src/components/data/sheet/hooks/createDataSheetSelection";
|
|
4
4
|
import type { FlatItem } from "../../../../../src/components/data/sheet/DataSheet.types";
|
|
5
5
|
|
|
6
6
|
interface TestItem {
|
|
@@ -27,10 +27,10 @@ function createTestFlatItems(items: TestItem[]): FlatItem<TestItem>[] {
|
|
|
27
27
|
}));
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
describe("
|
|
30
|
+
describe("createDataSheetSelection", () => {
|
|
31
31
|
it("should initialize with empty selected items by default", () => {
|
|
32
32
|
createRoot(() => {
|
|
33
|
-
const result =
|
|
33
|
+
const result = createDataSheetSelection({}, () => createTestFlatItems(testItems));
|
|
34
34
|
|
|
35
35
|
expect(result.selection()).toEqual([]);
|
|
36
36
|
});
|
|
@@ -39,7 +39,7 @@ describe("useDataSheetSelection", () => {
|
|
|
39
39
|
it("should initialize with provided selected items", () => {
|
|
40
40
|
createRoot(() => {
|
|
41
41
|
const selection = [testItems[0]];
|
|
42
|
-
const result =
|
|
42
|
+
const result = createDataSheetSelection(
|
|
43
43
|
{ selection },
|
|
44
44
|
() => createTestFlatItems(testItems),
|
|
45
45
|
);
|
|
@@ -50,7 +50,7 @@ describe("useDataSheetSelection", () => {
|
|
|
50
50
|
|
|
51
51
|
it("getItemSelectable should return true for selectable items", () => {
|
|
52
52
|
createRoot(() => {
|
|
53
|
-
const result =
|
|
53
|
+
const result = createDataSheetSelection({}, () => createTestFlatItems(testItems));
|
|
54
54
|
|
|
55
55
|
expect(result.getItemSelectable(testItems[0])).toBe(true);
|
|
56
56
|
});
|
|
@@ -59,7 +59,7 @@ describe("useDataSheetSelection", () => {
|
|
|
59
59
|
it("getItemSelectable should return disabled string when item is not selectable", () => {
|
|
60
60
|
createRoot(() => {
|
|
61
61
|
const isItemSelectable = (item: TestItem): true | string => item.selectable !== false ? true : "disabled";
|
|
62
|
-
const result =
|
|
62
|
+
const result = createDataSheetSelection(
|
|
63
63
|
{ isItemSelectable },
|
|
64
64
|
() => createTestFlatItems(testItems),
|
|
65
65
|
);
|
|
@@ -71,7 +71,7 @@ describe("useDataSheetSelection", () => {
|
|
|
71
71
|
it("getItemSelectable should return reason string when item is disabled", () => {
|
|
72
72
|
createRoot(() => {
|
|
73
73
|
const isItemSelectable = (item: TestItem) => item.disabledReason != null && item.disabledReason !== "" ? item.disabledReason : true;
|
|
74
|
-
const result =
|
|
74
|
+
const result = createDataSheetSelection(
|
|
75
75
|
{ isItemSelectable },
|
|
76
76
|
() => createTestFlatItems(testItems),
|
|
77
77
|
);
|
|
@@ -82,7 +82,7 @@ describe("useDataSheetSelection", () => {
|
|
|
82
82
|
|
|
83
83
|
it("toggleSelect should add item in multiple mode", () => {
|
|
84
84
|
createRoot(() => {
|
|
85
|
-
const result =
|
|
85
|
+
const result = createDataSheetSelection(
|
|
86
86
|
{ selectionMode: "multiple" },
|
|
87
87
|
() => createTestFlatItems(testItems),
|
|
88
88
|
);
|
|
@@ -95,7 +95,7 @@ describe("useDataSheetSelection", () => {
|
|
|
95
95
|
|
|
96
96
|
it("toggleSelect should remove item in multiple mode", () => {
|
|
97
97
|
createRoot(() => {
|
|
98
|
-
const result =
|
|
98
|
+
const result = createDataSheetSelection(
|
|
99
99
|
{ selectionMode: "multiple", selection: [testItems[0]] },
|
|
100
100
|
() => createTestFlatItems(testItems),
|
|
101
101
|
);
|
|
@@ -108,7 +108,7 @@ describe("useDataSheetSelection", () => {
|
|
|
108
108
|
|
|
109
109
|
it("toggleSelect should replace selection in single mode", () => {
|
|
110
110
|
createRoot(() => {
|
|
111
|
-
const result =
|
|
111
|
+
const result = createDataSheetSelection(
|
|
112
112
|
{ selectionMode: "single", selection: [testItems[0]] },
|
|
113
113
|
() => createTestFlatItems(testItems),
|
|
114
114
|
);
|
|
@@ -121,7 +121,7 @@ describe("useDataSheetSelection", () => {
|
|
|
121
121
|
|
|
122
122
|
it("toggleSelect should deselect in single mode when toggling selected item", () => {
|
|
123
123
|
createRoot(() => {
|
|
124
|
-
const result =
|
|
124
|
+
const result = createDataSheetSelection(
|
|
125
125
|
{ selectionMode: "single", selection: [testItems[0]] },
|
|
126
126
|
() => createTestFlatItems(testItems),
|
|
127
127
|
);
|
|
@@ -135,7 +135,7 @@ describe("useDataSheetSelection", () => {
|
|
|
135
135
|
it("toggleSelect should not select non-selectable items", () => {
|
|
136
136
|
createRoot(() => {
|
|
137
137
|
const isItemSelectable = (item: TestItem): true | string => item.selectable !== false ? true : "disabled";
|
|
138
|
-
const result =
|
|
138
|
+
const result = createDataSheetSelection(
|
|
139
139
|
{ isItemSelectable },
|
|
140
140
|
() => createTestFlatItems(testItems),
|
|
141
141
|
);
|
|
@@ -148,7 +148,7 @@ describe("useDataSheetSelection", () => {
|
|
|
148
148
|
|
|
149
149
|
it("toggleSelect should update lastClickAction to 'select' when selecting", () => {
|
|
150
150
|
createRoot(() => {
|
|
151
|
-
const result =
|
|
151
|
+
const result = createDataSheetSelection(
|
|
152
152
|
{ selectionMode: "multiple" },
|
|
153
153
|
() => createTestFlatItems(testItems),
|
|
154
154
|
);
|
|
@@ -161,7 +161,7 @@ describe("useDataSheetSelection", () => {
|
|
|
161
161
|
|
|
162
162
|
it("toggleSelect should update lastClickAction to 'deselect' when deselecting", () => {
|
|
163
163
|
createRoot(() => {
|
|
164
|
-
const result =
|
|
164
|
+
const result = createDataSheetSelection(
|
|
165
165
|
{ selectionMode: "multiple", selection: [testItems[0]] },
|
|
166
166
|
() => createTestFlatItems(testItems),
|
|
167
167
|
);
|
|
@@ -175,7 +175,7 @@ describe("useDataSheetSelection", () => {
|
|
|
175
175
|
it("toggleSelectAll should select all selectable items", () => {
|
|
176
176
|
createRoot(() => {
|
|
177
177
|
const isItemSelectable = (item: TestItem): true | string => item.selectable !== false ? true : "disabled";
|
|
178
|
-
const result =
|
|
178
|
+
const result = createDataSheetSelection(
|
|
179
179
|
{ isItemSelectable },
|
|
180
180
|
() => createTestFlatItems(testItems),
|
|
181
181
|
);
|
|
@@ -191,7 +191,7 @@ describe("useDataSheetSelection", () => {
|
|
|
191
191
|
createRoot(() => {
|
|
192
192
|
const isItemSelectable = (item: TestItem): true | string => item.selectable !== false ? true : "disabled";
|
|
193
193
|
const selectableItems = testItems.filter((i) => i.selectable !== false);
|
|
194
|
-
const result =
|
|
194
|
+
const result = createDataSheetSelection(
|
|
195
195
|
{ isItemSelectable, selection: selectableItems },
|
|
196
196
|
() => createTestFlatItems(testItems),
|
|
197
197
|
);
|
|
@@ -205,7 +205,7 @@ describe("useDataSheetSelection", () => {
|
|
|
205
205
|
it("toggleSelectAll should only select selectable items", () => {
|
|
206
206
|
createRoot(() => {
|
|
207
207
|
const isItemSelectable = (item: TestItem): true | string => item.selectable !== false ? true : "disabled";
|
|
208
|
-
const result =
|
|
208
|
+
const result = createDataSheetSelection(
|
|
209
209
|
{ isItemSelectable },
|
|
210
210
|
() => createTestFlatItems(testItems),
|
|
211
211
|
);
|
|
@@ -218,7 +218,7 @@ describe("useDataSheetSelection", () => {
|
|
|
218
218
|
|
|
219
219
|
it("rangeSelect should do nothing if lastClickedRow is null", () => {
|
|
220
220
|
createRoot(() => {
|
|
221
|
-
const result =
|
|
221
|
+
const result = createDataSheetSelection(
|
|
222
222
|
{ selectionMode: "multiple" },
|
|
223
223
|
() => createTestFlatItems(testItems),
|
|
224
224
|
);
|
|
@@ -231,7 +231,7 @@ describe("useDataSheetSelection", () => {
|
|
|
231
231
|
|
|
232
232
|
it("rangeSelect should select items in range when lastClickAction is 'select'", () => {
|
|
233
233
|
createRoot(() => {
|
|
234
|
-
const result =
|
|
234
|
+
const result = createDataSheetSelection(
|
|
235
235
|
{ selectionMode: "multiple" },
|
|
236
236
|
() => createTestFlatItems(testItems),
|
|
237
237
|
);
|
|
@@ -249,7 +249,7 @@ describe("useDataSheetSelection", () => {
|
|
|
249
249
|
|
|
250
250
|
it("rangeSelect should select items in reverse range", () => {
|
|
251
251
|
createRoot(() => {
|
|
252
|
-
const result =
|
|
252
|
+
const result = createDataSheetSelection(
|
|
253
253
|
{ selectionMode: "multiple" },
|
|
254
254
|
() => createTestFlatItems(testItems),
|
|
255
255
|
);
|
|
@@ -267,7 +267,7 @@ describe("useDataSheetSelection", () => {
|
|
|
267
267
|
|
|
268
268
|
it("rangeSelect should deselect items in range when lastClickAction is 'deselect'", () => {
|
|
269
269
|
createRoot(() => {
|
|
270
|
-
const result =
|
|
270
|
+
const result = createDataSheetSelection(
|
|
271
271
|
{ selectionMode: "multiple", selection: testItems },
|
|
272
272
|
() => createTestFlatItems(testItems),
|
|
273
273
|
);
|
|
@@ -285,7 +285,7 @@ describe("useDataSheetSelection", () => {
|
|
|
285
285
|
it("rangeSelect should only select selectable items in range", () => {
|
|
286
286
|
createRoot(() => {
|
|
287
287
|
const isItemSelectable = (item: TestItem): true | string => item.selectable !== false ? true : "disabled";
|
|
288
|
-
const result =
|
|
288
|
+
const result = createDataSheetSelection(
|
|
289
289
|
{ selectionMode: "multiple", isItemSelectable },
|
|
290
290
|
() => createTestFlatItems(testItems),
|
|
291
291
|
);
|
|
@@ -308,7 +308,7 @@ describe("useDataSheetSelection", () => {
|
|
|
308
308
|
lastCalledWith = items;
|
|
309
309
|
};
|
|
310
310
|
|
|
311
|
-
const result =
|
|
311
|
+
const result = createDataSheetSelection(
|
|
312
312
|
{ selectionMode: "multiple", onSelectionChange },
|
|
313
313
|
() => createTestFlatItems(testItems),
|
|
314
314
|
);
|
|
@@ -321,7 +321,7 @@ describe("useDataSheetSelection", () => {
|
|
|
321
321
|
|
|
322
322
|
it("should track last clicked row", () => {
|
|
323
323
|
createRoot(() => {
|
|
324
|
-
const result =
|
|
324
|
+
const result = createDataSheetSelection(
|
|
325
325
|
{ selectionMode: "multiple" },
|
|
326
326
|
() => createTestFlatItems(testItems),
|
|
327
327
|
);
|
|
@@ -334,7 +334,7 @@ describe("useDataSheetSelection", () => {
|
|
|
334
334
|
|
|
335
335
|
it("should default to 'select' action", () => {
|
|
336
336
|
createRoot(() => {
|
|
337
|
-
const result =
|
|
337
|
+
const result = createDataSheetSelection(
|
|
338
338
|
{ selectionMode: "multiple" },
|
|
339
339
|
() => createTestFlatItems(testItems),
|
|
340
340
|
);
|
|
@@ -346,7 +346,7 @@ describe("useDataSheetSelection", () => {
|
|
|
346
346
|
it("treats false return from isItemSelectable as not selectable", () => {
|
|
347
347
|
createRoot((dispose) => {
|
|
348
348
|
const flatItems = () => createTestFlatItems(testItems);
|
|
349
|
-
const sel =
|
|
349
|
+
const sel = createDataSheetSelection<TestItem>(
|
|
350
350
|
{
|
|
351
351
|
selectionMode: "multiple",
|
|
352
352
|
isItemSelectable: (item) => (item.selectable === false ? false : true),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
2
|
import { createRoot, createSignal } from "solid-js";
|
|
3
|
-
import {
|
|
3
|
+
import { createDataSheetSorting } from "../../../../../src/components/data/sheet/hooks/createDataSheetSorting";
|
|
4
4
|
import type { SortingDef } from "../../../../../src/components/data/sheet/DataSheet.types";
|
|
5
5
|
|
|
6
6
|
interface TestItem {
|
|
@@ -15,7 +15,7 @@ const testData: TestItem[] = [
|
|
|
15
15
|
{ id: 3, name: "Charlie", age: 35 },
|
|
16
16
|
];
|
|
17
17
|
|
|
18
|
-
describe("
|
|
18
|
+
describe("createDataSheetSorting", () => {
|
|
19
19
|
it("initializes with empty sorts", () => {
|
|
20
20
|
createRoot(() => {
|
|
21
21
|
const [sorts, _setSorts] = createSignal<SortingDef[] | undefined>(undefined);
|
|
@@ -25,7 +25,7 @@ describe("useDataSheetSorting", () => {
|
|
|
25
25
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
26
26
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
27
27
|
|
|
28
|
-
const { sorts: resultSorts } =
|
|
28
|
+
const { sorts: resultSorts } = createDataSheetSorting({
|
|
29
29
|
sorts,
|
|
30
30
|
onSortsChange,
|
|
31
31
|
items,
|
|
@@ -43,7 +43,7 @@ describe("useDataSheetSorting", () => {
|
|
|
43
43
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
44
44
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
45
45
|
|
|
46
|
-
const { toggleSort, sorts: resultSorts } =
|
|
46
|
+
const { toggleSort, sorts: resultSorts } = createDataSheetSorting({
|
|
47
47
|
sorts,
|
|
48
48
|
onSortsChange,
|
|
49
49
|
items,
|
|
@@ -63,7 +63,7 @@ describe("useDataSheetSorting", () => {
|
|
|
63
63
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
64
64
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
65
65
|
|
|
66
|
-
const { toggleSort, sorts: resultSorts } =
|
|
66
|
+
const { toggleSort, sorts: resultSorts } = createDataSheetSorting({
|
|
67
67
|
sorts,
|
|
68
68
|
onSortsChange,
|
|
69
69
|
items,
|
|
@@ -91,7 +91,7 @@ describe("useDataSheetSorting", () => {
|
|
|
91
91
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
92
92
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
93
93
|
|
|
94
|
-
const { toggleSort, sorts: resultSorts } =
|
|
94
|
+
const { toggleSort, sorts: resultSorts } = createDataSheetSorting({
|
|
95
95
|
sorts,
|
|
96
96
|
onSortsChange,
|
|
97
97
|
items,
|
|
@@ -125,7 +125,7 @@ describe("useDataSheetSorting", () => {
|
|
|
125
125
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
126
126
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
127
127
|
|
|
128
|
-
const { sortIndex } =
|
|
128
|
+
const { sortIndex } = createDataSheetSorting({
|
|
129
129
|
sorts,
|
|
130
130
|
onSortsChange,
|
|
131
131
|
items,
|
|
@@ -147,7 +147,7 @@ describe("useDataSheetSorting", () => {
|
|
|
147
147
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
148
148
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
149
149
|
|
|
150
|
-
const { sortIndex } =
|
|
150
|
+
const { sortIndex } = createDataSheetSorting({
|
|
151
151
|
sorts,
|
|
152
152
|
onSortsChange,
|
|
153
153
|
items,
|
|
@@ -168,7 +168,7 @@ describe("useDataSheetSorting", () => {
|
|
|
168
168
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
169
169
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
170
170
|
|
|
171
|
-
const { sortedItems } =
|
|
171
|
+
const { sortedItems } = createDataSheetSorting({
|
|
172
172
|
sorts,
|
|
173
173
|
onSortsChange,
|
|
174
174
|
items,
|
|
@@ -190,7 +190,7 @@ describe("useDataSheetSorting", () => {
|
|
|
190
190
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
191
191
|
const [autoSort] = createSignal<boolean | undefined>(false);
|
|
192
192
|
|
|
193
|
-
const { sortedItems } =
|
|
193
|
+
const { sortedItems } = createDataSheetSorting({
|
|
194
194
|
sorts,
|
|
195
195
|
onSortsChange,
|
|
196
196
|
items,
|
|
@@ -210,7 +210,7 @@ describe("useDataSheetSorting", () => {
|
|
|
210
210
|
const [items] = createSignal<TestItem[] | undefined>(testData);
|
|
211
211
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
212
212
|
|
|
213
|
-
const { sortedItems } =
|
|
213
|
+
const { sortedItems } = createDataSheetSorting({
|
|
214
214
|
sorts,
|
|
215
215
|
onSortsChange,
|
|
216
216
|
items,
|
|
@@ -241,7 +241,7 @@ describe("useDataSheetSorting", () => {
|
|
|
241
241
|
const [items] = createSignal<TestItem[] | undefined>(multiData);
|
|
242
242
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
243
243
|
|
|
244
|
-
const { sortedItems } =
|
|
244
|
+
const { sortedItems } = createDataSheetSorting({
|
|
245
245
|
sorts,
|
|
246
246
|
onSortsChange,
|
|
247
247
|
items,
|
|
@@ -266,7 +266,7 @@ describe("useDataSheetSorting", () => {
|
|
|
266
266
|
const [items] = createSignal<TestItem[] | undefined>(undefined);
|
|
267
267
|
const [autoSort] = createSignal<boolean | undefined>(true);
|
|
268
268
|
|
|
269
|
-
const { sortedItems } =
|
|
269
|
+
const { sortedItems } = createDataSheetSorting({
|
|
270
270
|
sorts,
|
|
271
271
|
onSortsChange,
|
|
272
272
|
items,
|
|
@@ -87,10 +87,10 @@ describe("Dialog", () => {
|
|
|
87
87
|
});
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
-
it("hides close button when
|
|
90
|
+
it("hides close button when withCloseButton={false}", async () => {
|
|
91
91
|
render(() => (
|
|
92
92
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
93
|
-
<Dialog open={true}
|
|
93
|
+
<Dialog open={true} withCloseButton={false}>
|
|
94
94
|
<Dialog.Header>테스트</Dialog.Header>
|
|
95
95
|
<div>내용</div>
|
|
96
96
|
</Dialog>
|
|
@@ -26,8 +26,11 @@ function createTestLoad() {
|
|
|
26
26
|
return loadFn;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
// Full props type for the test dialog component
|
|
30
|
+
type TestDialogComponentProps = SelectDialogBaseProps<number> & { confirmKeys: number[] };
|
|
31
|
+
|
|
29
32
|
// Dialog component for tests — uses close prop directly
|
|
30
|
-
function TestDialogComponent(props:
|
|
33
|
+
function TestDialogComponent(props: TestDialogComponentProps) {
|
|
31
34
|
return (
|
|
32
35
|
<div data-testid="dialog-content">
|
|
33
36
|
<div data-testid="select-mode">{props.selectionMode}</div>
|
|
@@ -94,7 +97,7 @@ describe("DataSelectButton", () => {
|
|
|
94
97
|
it("loads and displays multiple selected items", async () => {
|
|
95
98
|
const load = createTestLoad();
|
|
96
99
|
const { findByText } = renderWithDialog(() => (
|
|
97
|
-
<DataSelectButton
|
|
100
|
+
<DataSelectButton<TestItem, number, TestDialogComponentProps>
|
|
98
101
|
value={[1, 3]}
|
|
99
102
|
multiple
|
|
100
103
|
load={load}
|
|
@@ -199,7 +202,7 @@ describe("DataSelectButton", () => {
|
|
|
199
202
|
const onValueChange = vi.fn();
|
|
200
203
|
|
|
201
204
|
const { container, findByText } = renderWithDialog(() => (
|
|
202
|
-
<DataSelectButton
|
|
205
|
+
<DataSelectButton<TestItem, number, TestDialogComponentProps>
|
|
203
206
|
value={[1, 2]}
|
|
204
207
|
multiple
|
|
205
208
|
onValueChange={onValueChange}
|
|
@@ -286,7 +289,7 @@ describe("DataSelectButton", () => {
|
|
|
286
289
|
const onValueChange = vi.fn();
|
|
287
290
|
|
|
288
291
|
const { container } = renderWithDialog(() => (
|
|
289
|
-
<DataSelectButton
|
|
292
|
+
<DataSelectButton<TestItem, number, TestDialogComponentProps>
|
|
290
293
|
multiple
|
|
291
294
|
onValueChange={onValueChange}
|
|
292
295
|
load={load}
|
|
@@ -501,8 +504,8 @@ describe("DataSelectButton", () => {
|
|
|
501
504
|
const load = createTestLoad();
|
|
502
505
|
|
|
503
506
|
const { container } = renderWithDialog(() => (
|
|
504
|
-
<DataSelectButton
|
|
505
|
-
value={1}
|
|
507
|
+
<DataSelectButton<TestItem, number, TestDialogComponentProps>
|
|
508
|
+
value={[1]}
|
|
506
509
|
multiple
|
|
507
510
|
load={load}
|
|
508
511
|
dialog={TestDialogComponent}
|
|
@@ -523,3 +526,49 @@ describe("DataSelectButton", () => {
|
|
|
523
526
|
});
|
|
524
527
|
});
|
|
525
528
|
});
|
|
529
|
+
|
|
530
|
+
describe("DataSelectButton type safety", () => {
|
|
531
|
+
beforeEach(() => {
|
|
532
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
afterEach(() => {
|
|
536
|
+
cleanup();
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
it("single mode types value as TKey", () => {
|
|
540
|
+
const load = createTestLoad();
|
|
541
|
+
// Single mode: value is number, onValueChange receives number | undefined
|
|
542
|
+
const onValueChange = vi.fn<(v: number | undefined) => void>();
|
|
543
|
+
renderWithDialog(() => (
|
|
544
|
+
<DataSelectButton
|
|
545
|
+
value={1}
|
|
546
|
+
onValueChange={onValueChange}
|
|
547
|
+
load={load}
|
|
548
|
+
dialog={TestDialogComponent}
|
|
549
|
+
dialogProps={{ confirmKeys: [] }}
|
|
550
|
+
renderItem={(item: TestItem) => <span>{item.name}</span>}
|
|
551
|
+
/>
|
|
552
|
+
));
|
|
553
|
+
// If this compiles, single mode type is correct
|
|
554
|
+
expect(true).toBe(true);
|
|
555
|
+
});
|
|
556
|
+
|
|
557
|
+
it("multiple mode types value as TKey[]", () => {
|
|
558
|
+
const load = createTestLoad();
|
|
559
|
+
// Multiple mode: value is number[], onValueChange receives number[]
|
|
560
|
+
const onValueChange = vi.fn<(v: number[]) => void>();
|
|
561
|
+
renderWithDialog(() => (
|
|
562
|
+
<DataSelectButton<TestItem, number, TestDialogComponentProps>
|
|
563
|
+
multiple
|
|
564
|
+
value={[1, 2]}
|
|
565
|
+
onValueChange={onValueChange}
|
|
566
|
+
load={load}
|
|
567
|
+
dialog={TestDialogComponent}
|
|
568
|
+
dialogProps={{ confirmKeys: [] }}
|
|
569
|
+
renderItem={(item: TestItem) => <span>{item.name}</span>}
|
|
570
|
+
/>
|
|
571
|
+
));
|
|
572
|
+
expect(true).toBe(true);
|
|
573
|
+
});
|
|
574
|
+
});
|
|
@@ -166,3 +166,43 @@ describe("SharedDataSelect", () => {
|
|
|
166
166
|
});
|
|
167
167
|
});
|
|
168
168
|
});
|
|
169
|
+
|
|
170
|
+
describe("SharedDataSelect type safety", () => {
|
|
171
|
+
beforeEach(() => {
|
|
172
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
afterEach(() => {
|
|
176
|
+
cleanup();
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("single mode types value as TKey", () => {
|
|
180
|
+
const [items] = createSignal(testItems);
|
|
181
|
+
const accessor = createMockAccessor(items);
|
|
182
|
+
const onValueChange = vi.fn<(v: number | undefined) => void>();
|
|
183
|
+
|
|
184
|
+
renderWithDialog(() => (
|
|
185
|
+
<SharedDataSelect data={accessor} value={1} onValueChange={onValueChange}>
|
|
186
|
+
<SharedDataSelect.ItemTemplate>
|
|
187
|
+
{(item: TestItem) => <span>{item.name}</span>}
|
|
188
|
+
</SharedDataSelect.ItemTemplate>
|
|
189
|
+
</SharedDataSelect>
|
|
190
|
+
));
|
|
191
|
+
expect(true).toBe(true);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
it("multiple mode types value as TKey[]", () => {
|
|
195
|
+
const [items] = createSignal(testItems);
|
|
196
|
+
const accessor = createMockAccessor(items);
|
|
197
|
+
const onValueChange = vi.fn<(v: number[]) => void>();
|
|
198
|
+
|
|
199
|
+
renderWithDialog(() => (
|
|
200
|
+
<SharedDataSelect multiple data={accessor} value={[1, 2]} onValueChange={onValueChange}>
|
|
201
|
+
<SharedDataSelect.ItemTemplate>
|
|
202
|
+
{(item: TestItem) => <span>{item.name}</span>}
|
|
203
|
+
</SharedDataSelect.ItemTemplate>
|
|
204
|
+
</SharedDataSelect>
|
|
205
|
+
));
|
|
206
|
+
expect(true).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
@@ -45,13 +45,13 @@ describe("Checkbox component", () => {
|
|
|
45
45
|
|
|
46
46
|
describe("controlled pattern", () => {
|
|
47
47
|
it("reflects value prop as checked state", () => {
|
|
48
|
-
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox
|
|
48
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox checked={true} /></I18nProvider></ConfigProvider>);
|
|
49
49
|
expect(getByRole("checkbox").getAttribute("aria-checked")).toBe("true");
|
|
50
50
|
});
|
|
51
51
|
|
|
52
|
-
it("calls
|
|
52
|
+
it("calls onCheckedChange on click", () => {
|
|
53
53
|
const handleChange = vi.fn();
|
|
54
|
-
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox
|
|
54
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox checked={false} onCheckedChange={handleChange} /></I18nProvider></ConfigProvider>);
|
|
55
55
|
|
|
56
56
|
fireEvent.click(getByRole("checkbox"));
|
|
57
57
|
expect(handleChange).toHaveBeenCalledWith(true);
|
|
@@ -59,7 +59,7 @@ describe("Checkbox component", () => {
|
|
|
59
59
|
|
|
60
60
|
it("updates when external state changes", () => {
|
|
61
61
|
const [value, setValue] = createSignal(false);
|
|
62
|
-
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox
|
|
62
|
+
const { getByRole } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox checked={value()} onCheckedChange={setValue} /></I18nProvider></ConfigProvider>);
|
|
63
63
|
|
|
64
64
|
expect(getByRole("checkbox").getAttribute("aria-checked")).toBe("false");
|
|
65
65
|
|
|
@@ -70,25 +70,25 @@ describe("Checkbox component", () => {
|
|
|
70
70
|
|
|
71
71
|
describe("validation", () => {
|
|
72
72
|
it("sets error message when required and unchecked", () => {
|
|
73
|
-
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox required
|
|
73
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox required checked={false} /></I18nProvider></ConfigProvider>);
|
|
74
74
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
75
75
|
expect(hiddenInput.validationMessage).toBe("This is a required selection");
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
it("is valid when required and checked", () => {
|
|
79
|
-
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox required
|
|
79
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox required checked={true} /></I18nProvider></ConfigProvider>);
|
|
80
80
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
81
81
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
82
82
|
});
|
|
83
83
|
|
|
84
84
|
it("sets error message returned by validate function", () => {
|
|
85
|
-
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox
|
|
85
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox checked={true} validate={() => "커스텀 에러"} /></I18nProvider></ConfigProvider>);
|
|
86
86
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
87
87
|
expect(hiddenInput.validationMessage).toBe("커스텀 에러");
|
|
88
88
|
});
|
|
89
89
|
|
|
90
90
|
it("is valid when validate function returns undefined", () => {
|
|
91
|
-
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox
|
|
91
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><Checkbox checked={true} validate={() => undefined} /></I18nProvider></ConfigProvider>);
|
|
92
92
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
93
93
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
94
94
|
});
|