@simplysm/solid 13.0.72 → 13.0.74
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 +209 -202
- package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/data/calendar/Calendar.js +3 -11
- package/dist/components/data/calendar/Calendar.js.map +2 -2
- package/dist/components/data/sheet/DataSheet.js +10 -10
- package/dist/components/data/sheet/DataSheet.js.map +2 -2
- package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
- package/dist/components/data/sheet/DataSheetConfigDialog.js +27 -9
- package/dist/components/data/sheet/DataSheetConfigDialog.js.map +2 -2
- package/dist/components/disclosure/Dialog.d.ts +1 -1
- package/dist/components/disclosure/Dialog.d.ts.map +1 -1
- package/dist/components/disclosure/Dialog.js +5 -5
- package/dist/components/disclosure/Dialog.js.map +2 -2
- package/dist/components/disclosure/dialogZIndex.d.ts +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +23 -23
- package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/features/crud-sheet/CrudSheet.js +49 -49
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/crud-sheet/types.d.ts +4 -4
- package/dist/components/features/crud-sheet/types.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.d.ts +25 -7
- package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
- package/dist/components/features/data-select-button/DataSelectButton.js +27 -12
- package/dist/components/features/data-select-button/DataSelectButton.js.map +2 -2
- package/dist/components/features/permission-table/PermissionTable.js +4 -4
- package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.d.ts +22 -10
- package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelect.js +113 -29
- package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +3 -3
- 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 +5 -4
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/feedback/notification/NotificationBanner.js +3 -3
- package/dist/components/feedback/notification/NotificationBanner.js.map +2 -2
- package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationBell.js +12 -5
- package/dist/components/feedback/notification/NotificationBell.js.map +2 -2
- package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
- package/dist/components/feedback/notification/NotificationProvider.js +3 -1
- package/dist/components/feedback/notification/NotificationProvider.js.map +2 -2
- package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
- package/dist/components/form-control/ThemeToggle.js +9 -6
- package/dist/components/form-control/ThemeToggle.js.map +2 -2
- package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Checkbox.js +3 -1
- package/dist/components/form-control/checkbox/Checkbox.js.map +2 -2
- package/dist/components/form-control/checkbox/CheckboxGroup.js +1 -1
- package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
- package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
- package/dist/components/form-control/checkbox/Radio.js +3 -1
- package/dist/components/form-control/checkbox/Radio.js.map +2 -2
- package/dist/components/form-control/checkbox/RadioGroup.js +1 -1
- package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
- package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/components/form-control/color-picker/ColorPicker.js +3 -1
- package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
- package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/form-control/combobox/Combobox.js +9 -5
- package/dist/components/form-control/combobox/Combobox.js.map +2 -2
- package/dist/components/form-control/date-range-picker/DateRangePicker.js +9 -9
- package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
- package/dist/components/form-control/editor/EditorToolbar.js +3 -3
- package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
- package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DatePicker.js +9 -3
- package/dist/components/form-control/field/DatePicker.js.map +2 -2
- package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/DateTimePicker.js +9 -3
- package/dist/components/form-control/field/DateTimePicker.js.map +2 -2
- package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
- package/dist/components/form-control/field/NumberInput.js +9 -3
- package/dist/components/form-control/field/NumberInput.js.map +2 -2
- package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
- package/dist/components/form-control/field/TextInput.js +10 -4
- package/dist/components/form-control/field/TextInput.js.map +2 -2
- package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
- package/dist/components/form-control/field/Textarea.js +9 -3
- package/dist/components/form-control/field/Textarea.js.map +2 -2
- package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
- package/dist/components/form-control/field/TimePicker.js +9 -3
- package/dist/components/form-control/field/TimePicker.js.map +2 -2
- package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
- package/dist/components/form-control/numpad/Numpad.js +5 -1
- package/dist/components/form-control/numpad/Numpad.js.map +2 -2
- package/dist/components/form-control/select/Select.js +7 -7
- package/dist/components/form-control/select/Select.js.map +2 -2
- package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -1
- package/dist/components/form-control/state-preset/StatePreset.js +42 -20
- package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
- package/dist/components/layout/sidebar/SidebarContainer.js +3 -3
- package/dist/components/layout/sidebar/SidebarContainer.js.map +2 -2
- package/dist/components/layout/sidebar/SidebarMenu.d.ts.map +1 -1
- package/dist/components/layout/sidebar/SidebarMenu.js +5 -2
- package/dist/components/layout/sidebar/SidebarMenu.js.map +2 -2
- package/dist/components/layout/topbar/Topbar.js +3 -4
- package/dist/components/layout/topbar/Topbar.js.map +2 -2
- package/dist/components/layout/topbar/TopbarMenu.js +3 -3
- package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
- package/dist/hooks/createSelectionGroup.d.ts +2 -2
- package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
- package/dist/hooks/createSelectionGroup.js +5 -2
- package/dist/hooks/createSelectionGroup.js.map +2 -2
- package/dist/providers/i18n/I18nContext.d.ts +0 -4
- package/dist/providers/i18n/I18nContext.d.ts.map +1 -1
- package/dist/providers/i18n/I18nContext.js +1 -5
- package/dist/providers/i18n/I18nContext.js.map +2 -2
- package/dist/providers/i18n/locales/en.d.ts +38 -0
- package/dist/providers/i18n/locales/en.d.ts.map +1 -1
- package/dist/providers/i18n/locales/en.js +39 -1
- package/dist/providers/i18n/locales/en.js.map +1 -1
- package/dist/providers/i18n/locales/ko.d.ts +38 -0
- package/dist/providers/i18n/locales/ko.d.ts.map +1 -1
- package/dist/providers/i18n/locales/ko.js +39 -1
- package/dist/providers/i18n/locales/ko.js.map +1 -1
- package/package.json +6 -6
- package/src/components/data/calendar/Calendar.tsx +3 -4
- package/src/components/data/sheet/DataSheet.tsx +11 -11
- package/src/components/data/sheet/DataSheetConfigDialog.tsx +12 -10
- package/src/components/data/sheet/types.ts +1 -1
- package/src/components/disclosure/Dialog.tsx +10 -10
- package/src/components/disclosure/dialogZIndex.ts +1 -1
- package/src/components/features/crud-detail/CrudDetail.tsx +25 -25
- package/src/components/features/crud-sheet/CrudSheet.tsx +53 -53
- package/src/components/features/crud-sheet/types.ts +4 -4
- package/src/components/features/data-select-button/DataSelectButton.tsx +51 -21
- package/src/components/features/permission-table/PermissionTable.tsx +3 -3
- package/src/components/features/shared-data/SharedDataSelect.tsx +172 -33
- package/src/components/features/shared-data/SharedDataSelectButton.tsx +3 -2
- package/src/components/features/shared-data/SharedDataSelectList.tsx +4 -4
- package/src/components/feedback/notification/NotificationBanner.tsx +3 -3
- package/src/components/feedback/notification/NotificationBell.tsx +6 -4
- package/src/components/feedback/notification/NotificationProvider.tsx +3 -1
- package/src/components/form-control/ThemeToggle.tsx +10 -6
- package/src/components/form-control/checkbox/Checkbox.tsx +4 -1
- package/src/components/form-control/checkbox/CheckboxGroup.tsx +1 -1
- package/src/components/form-control/checkbox/Radio.tsx +4 -1
- package/src/components/form-control/checkbox/RadioGroup.tsx +1 -1
- package/src/components/form-control/color-picker/ColorPicker.tsx +4 -1
- package/src/components/form-control/combobox/Combobox.tsx +6 -3
- package/src/components/form-control/date-range-picker/DateRangePicker.tsx +8 -8
- package/src/components/form-control/editor/EditorToolbar.tsx +23 -23
- package/src/components/form-control/field/DatePicker.tsx +6 -3
- package/src/components/form-control/field/DateTimePicker.tsx +6 -3
- package/src/components/form-control/field/NumberInput.tsx +6 -3
- package/src/components/form-control/field/TextInput.tsx +7 -4
- package/src/components/form-control/field/Textarea.tsx +6 -3
- package/src/components/form-control/field/TimePicker.tsx +6 -3
- package/src/components/form-control/numpad/Numpad.tsx +3 -1
- package/src/components/form-control/select/Select.tsx +7 -7
- package/src/components/form-control/state-preset/StatePreset.tsx +14 -12
- package/src/components/layout/sidebar/SidebarContainer.tsx +3 -3
- package/src/components/layout/sidebar/SidebarMenu.tsx +3 -1
- package/src/components/layout/topbar/Topbar.tsx +3 -3
- package/src/components/layout/topbar/TopbarMenu.tsx +3 -3
- package/src/hooks/createSelectionGroup.tsx +8 -4
- package/src/providers/i18n/I18nContext.tsx +0 -7
- package/src/providers/i18n/locales/en.ts +38 -0
- package/src/providers/i18n/locales/ko.ts +38 -0
- package/tailwind.config.ts +2 -2
- package/tests/components/data/kanban/Kanban.selection.spec.tsx +34 -24
- package/tests/components/disclosure/Dialog.spec.tsx +28 -28
- package/tests/components/disclosure/DialogProvider.spec.tsx +51 -25
- package/tests/components/features/address/AddressSearch.spec.tsx +12 -4
- package/tests/components/features/crud-detail/CrudDetail.spec.tsx +1 -0
- package/tests/components/features/crud-sheet/CrudSheet.spec.tsx +30 -6
- package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +77 -56
- package/tests/components/features/permission-table/PermissionTable.spec.tsx +12 -8
- package/tests/components/features/shared-data/SharedDataSelect.spec.tsx +172 -0
- package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +14 -2
- package/tests/components/feedback/notification/LiveRegion.spec.tsx +20 -9
- package/tests/components/feedback/notification/NotificationBanner.spec.tsx +64 -46
- package/tests/components/feedback/notification/NotificationBell.spec.tsx +70 -51
- package/tests/components/feedback/notification/NotificationContext.spec.tsx +105 -78
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +25 -20
- package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +53 -30
- package/tests/components/form-control/checkbox/Radio.spec.tsx +25 -20
- package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +53 -30
- package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +24 -15
- package/tests/components/form-control/combobox/Combobox.spec.tsx +92 -59
- package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +2 -2
- package/tests/components/form-control/field/DatePicker.spec.tsx +50 -44
- package/tests/components/form-control/field/DateTimePicker.spec.tsx +51 -45
- package/tests/components/form-control/field/NumberInput.spec.tsx +53 -47
- package/tests/components/form-control/field/TextInput.spec.tsx +50 -44
- package/tests/components/form-control/field/Textarea.spec.tsx +35 -29
- package/tests/components/form-control/field/TimePicker.spec.tsx +43 -37
- package/tests/components/form-control/numpad/Numpad.spec.tsx +175 -25
- package/tests/components/form-control/select/Select.spec.tsx +5 -0
- package/tests/components/form-control/select/SelectItem.spec.tsx +1 -0
- package/tests/components/layout/sidebar/Sidebar.spec.tsx +79 -35
- package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +1 -0
- package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +28 -17
- package/tests/components/layout/topbar/TopbarActions.spec.tsx +41 -23
- package/tests/components/layout/topbar/createTopbarActions.spec.tsx +1 -0
- package/tests/hooks/usePrint.spec.tsx +1 -1
- package/tests/hooks/useRouterLink.spec.tsx +2 -0
- package/tests/hooks/useSyncConfig.spec.tsx +1 -0
- package/tests/providers/ErrorLoggerProvider.spec.tsx +1 -0
- package/tests/providers/PwaUpdateProvider.spec.tsx +16 -6
- package/tests/providers/ServiceClientContext.spec.tsx +40 -25
- package/tests/providers/i18n/I18nContext.spec.tsx +3 -4
- package/tests/providers/shared-data/SharedDataProvider.spec.tsx +2 -0
- package/dist/hooks/usePrint.d.ts +0 -3
- package/dist/hooks/usePrint.d.ts.map +0 -1
- package/dist/hooks/usePrint.js +0 -5
- package/dist/hooks/usePrint.js.map +0 -6
- package/src/hooks/usePrint.ts +0 -2
|
@@ -1,29 +1,36 @@
|
|
|
1
1
|
import { render, fireEvent, waitFor } from "@solidjs/testing-library";
|
|
2
2
|
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
3
3
|
import { Combobox } from "../../../../src/components/form-control/combobox/Combobox";
|
|
4
|
+
import { I18nProvider } from "../../../../src/providers/i18n/I18nContext";
|
|
5
|
+
import { ConfigProvider } from "../../../../src/providers/ConfigContext";
|
|
4
6
|
|
|
5
7
|
describe("Combobox component", () => {
|
|
6
8
|
const mockLoadItems = vi.fn(() => Promise.resolve([]));
|
|
7
9
|
|
|
8
10
|
beforeEach(() => {
|
|
11
|
+
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
9
12
|
mockLoadItems.mockClear();
|
|
10
13
|
});
|
|
11
14
|
|
|
12
15
|
describe("basic rendering", () => {
|
|
13
16
|
it("renders trigger", () => {
|
|
14
17
|
const { getByRole } = render(() => (
|
|
15
|
-
<
|
|
18
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
19
|
+
<Combobox loadItems={mockLoadItems} renderValue={(v) => <>{v}</>} />
|
|
20
|
+
</I18nProvider></ConfigProvider>
|
|
16
21
|
));
|
|
17
22
|
expect(getByRole("combobox")).not.toBeNull();
|
|
18
23
|
});
|
|
19
24
|
|
|
20
25
|
it("displays placeholder", () => {
|
|
21
26
|
const { container } = render(() => (
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
28
|
+
<Combobox
|
|
29
|
+
loadItems={mockLoadItems}
|
|
30
|
+
placeholder="검색하세요"
|
|
31
|
+
renderValue={(v) => <>{v}</>}
|
|
32
|
+
/>
|
|
33
|
+
</I18nProvider></ConfigProvider>
|
|
27
34
|
));
|
|
28
35
|
const input = container.querySelector("input");
|
|
29
36
|
expect(input?.getAttribute("placeholder")).toBe("검색하세요");
|
|
@@ -31,7 +38,9 @@ describe("Combobox component", () => {
|
|
|
31
38
|
|
|
32
39
|
it("defaults input autocomplete to one-time-code", () => {
|
|
33
40
|
const { container } = render(() => (
|
|
34
|
-
<
|
|
41
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
42
|
+
<Combobox loadItems={mockLoadItems} renderValue={(v) => <>{v}</>} />
|
|
43
|
+
</I18nProvider></ConfigProvider>
|
|
35
44
|
));
|
|
36
45
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
37
46
|
expect(input.autocomplete).toBe("one-time-code");
|
|
@@ -39,7 +48,9 @@ describe("Combobox component", () => {
|
|
|
39
48
|
|
|
40
49
|
it("sets aria-disabled when disabled", () => {
|
|
41
50
|
const { getByRole } = render(() => (
|
|
42
|
-
<
|
|
51
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
52
|
+
<Combobox loadItems={mockLoadItems} disabled renderValue={(v) => <>{v}</>} />
|
|
53
|
+
</I18nProvider></ConfigProvider>
|
|
43
54
|
));
|
|
44
55
|
expect(getByRole("combobox").getAttribute("aria-disabled")).toBe("true");
|
|
45
56
|
});
|
|
@@ -49,7 +60,9 @@ describe("Combobox component", () => {
|
|
|
49
60
|
it("opens dropdown on input", async () => {
|
|
50
61
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "사과" }]));
|
|
51
62
|
const { container } = render(() => (
|
|
52
|
-
<
|
|
63
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
64
|
+
<Combobox loadItems={loadItems} renderValue={(v: { name: string }) => <>{v.name}</>} />
|
|
65
|
+
</I18nProvider></ConfigProvider>
|
|
53
66
|
));
|
|
54
67
|
|
|
55
68
|
const input = container.querySelector("input")!;
|
|
@@ -63,7 +76,9 @@ describe("Combobox component", () => {
|
|
|
63
76
|
it("closes dropdown when item is selected", async () => {
|
|
64
77
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "사과" }]));
|
|
65
78
|
const { container, getByRole } = render(() => (
|
|
66
|
-
<
|
|
79
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
80
|
+
<Combobox loadItems={loadItems} renderValue={(v: { name: string }) => <>{v.name}</>} />
|
|
81
|
+
</I18nProvider></ConfigProvider>
|
|
67
82
|
));
|
|
68
83
|
|
|
69
84
|
const input = container.querySelector("input")!;
|
|
@@ -84,7 +99,9 @@ describe("Combobox component", () => {
|
|
|
84
99
|
it("closes dropdown with Escape key", async () => {
|
|
85
100
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "사과" }]));
|
|
86
101
|
const { container, getByRole } = render(() => (
|
|
87
|
-
<
|
|
102
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
103
|
+
<Combobox loadItems={loadItems} renderValue={(v: { name: string }) => <>{v.name}</>} />
|
|
104
|
+
</I18nProvider></ConfigProvider>
|
|
88
105
|
));
|
|
89
106
|
|
|
90
107
|
const input = container.querySelector("input")!;
|
|
@@ -108,11 +125,13 @@ describe("Combobox component", () => {
|
|
|
108
125
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "사과" }]));
|
|
109
126
|
|
|
110
127
|
const { container } = render(() => (
|
|
111
|
-
<
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
128
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
129
|
+
<Combobox
|
|
130
|
+
loadItems={loadItems}
|
|
131
|
+
onValueChange={handleChange}
|
|
132
|
+
renderValue={(v: { name: string }) => <>{v.name}</>}
|
|
133
|
+
/>
|
|
134
|
+
</I18nProvider></ConfigProvider>
|
|
116
135
|
));
|
|
117
136
|
|
|
118
137
|
const input = container.querySelector("input")!;
|
|
@@ -134,11 +153,13 @@ describe("Combobox component", () => {
|
|
|
134
153
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "결과" }]));
|
|
135
154
|
|
|
136
155
|
const { container } = render(() => (
|
|
137
|
-
<
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
156
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
157
|
+
<Combobox
|
|
158
|
+
loadItems={loadItems}
|
|
159
|
+
debounceMs={50}
|
|
160
|
+
renderValue={(v: { name: string }) => <>{v.name}</>}
|
|
161
|
+
/>
|
|
162
|
+
</I18nProvider></ConfigProvider>
|
|
142
163
|
));
|
|
143
164
|
|
|
144
165
|
const input = container.querySelector("input")!;
|
|
@@ -160,12 +181,14 @@ describe("Combobox component", () => {
|
|
|
160
181
|
const loadItems = vi.fn(() => Promise.resolve([]));
|
|
161
182
|
|
|
162
183
|
const { container, getByRole } = render(() => (
|
|
163
|
-
<
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
184
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
185
|
+
<Combobox
|
|
186
|
+
loadItems={loadItems}
|
|
187
|
+
onValueChange={handleChange}
|
|
188
|
+
allowCustomValue
|
|
189
|
+
renderValue={(v) => <>{v}</>}
|
|
190
|
+
/>
|
|
191
|
+
</I18nProvider></ConfigProvider>
|
|
169
192
|
));
|
|
170
193
|
|
|
171
194
|
const input = container.querySelector("input")!;
|
|
@@ -180,13 +203,15 @@ describe("Combobox component", () => {
|
|
|
180
203
|
const loadItems = vi.fn(() => Promise.resolve([]));
|
|
181
204
|
|
|
182
205
|
const { container, getByRole } = render(() => (
|
|
183
|
-
<
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
206
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
207
|
+
<Combobox
|
|
208
|
+
loadItems={loadItems}
|
|
209
|
+
onValueChange={handleChange}
|
|
210
|
+
allowCustomValue
|
|
211
|
+
parseCustomValue={(text) => ({ name: text, custom: true })}
|
|
212
|
+
renderValue={(v: { name: string }) => <>{v.name}</>}
|
|
213
|
+
/>
|
|
214
|
+
</I18nProvider></ConfigProvider>
|
|
190
215
|
));
|
|
191
216
|
|
|
192
217
|
const input = container.querySelector("input")!;
|
|
@@ -200,25 +225,29 @@ describe("Combobox component", () => {
|
|
|
200
225
|
describe("validation", () => {
|
|
201
226
|
it("sets error message when required and value is empty", () => {
|
|
202
227
|
const { container } = render(() => (
|
|
203
|
-
<
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
228
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
229
|
+
<Combobox
|
|
230
|
+
loadItems={mockLoadItems}
|
|
231
|
+
required
|
|
232
|
+
value={undefined}
|
|
233
|
+
renderValue={(v) => <>{v}</>}
|
|
234
|
+
/>
|
|
235
|
+
</I18nProvider></ConfigProvider>
|
|
209
236
|
));
|
|
210
237
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
211
|
-
expect(hiddenInput.validationMessage).toBe("This
|
|
238
|
+
expect(hiddenInput.validationMessage).toBe("This is a required field");
|
|
212
239
|
});
|
|
213
240
|
|
|
214
241
|
it("is valid when required and value exists", () => {
|
|
215
242
|
const { container } = render(() => (
|
|
216
|
-
<
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
243
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
244
|
+
<Combobox
|
|
245
|
+
loadItems={mockLoadItems}
|
|
246
|
+
required
|
|
247
|
+
value="선택된 값"
|
|
248
|
+
renderValue={(v) => <>{v}</>}
|
|
249
|
+
/>
|
|
250
|
+
</I18nProvider></ConfigProvider>
|
|
222
251
|
));
|
|
223
252
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
224
253
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
@@ -226,12 +255,14 @@ describe("Combobox component", () => {
|
|
|
226
255
|
|
|
227
256
|
it("sets error message returned by validate function", () => {
|
|
228
257
|
const { container } = render(() => (
|
|
229
|
-
<
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
258
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
259
|
+
<Combobox
|
|
260
|
+
loadItems={mockLoadItems}
|
|
261
|
+
validate={(v) => (v === "invalid-val" ? "허용되지 않는 값입니다" : undefined)}
|
|
262
|
+
value="invalid-val"
|
|
263
|
+
renderValue={(v) => <>{v}</>}
|
|
264
|
+
/>
|
|
265
|
+
</I18nProvider></ConfigProvider>
|
|
235
266
|
));
|
|
236
267
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
237
268
|
expect(hiddenInput.validationMessage).toBe("허용되지 않는 값입니다");
|
|
@@ -239,12 +270,14 @@ describe("Combobox component", () => {
|
|
|
239
270
|
|
|
240
271
|
it("is valid when validate function returns undefined", () => {
|
|
241
272
|
const { container } = render(() => (
|
|
242
|
-
<
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
273
|
+
<ConfigProvider clientName="test"><I18nProvider>
|
|
274
|
+
<Combobox
|
|
275
|
+
loadItems={mockLoadItems}
|
|
276
|
+
validate={(v) => (v === "invalid-val" ? "허용되지 않는 값입니다" : undefined)}
|
|
277
|
+
value="valid-val"
|
|
278
|
+
renderValue={(v) => <>{v}</>}
|
|
279
|
+
/>
|
|
280
|
+
</I18nProvider></ConfigProvider>
|
|
248
281
|
));
|
|
249
282
|
const hiddenInput = container.querySelector("input[aria-hidden='true']") as HTMLInputElement;
|
|
250
283
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
@@ -167,7 +167,7 @@ describe("DateRangePicker component", () => {
|
|
|
167
167
|
|
|
168
168
|
describe("disabled state", () => {
|
|
169
169
|
it("applies aria-disabled to Select", () => {
|
|
170
|
-
const { container } = render(() => <DateRangePicker disabled
|
|
170
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><DateRangePicker disabled /></I18nProvider></ConfigProvider>);
|
|
171
171
|
const wrapper = container.querySelector("[data-date-range-picker]");
|
|
172
172
|
|
|
173
173
|
const select = wrapper?.querySelector("[data-select]");
|
|
@@ -198,7 +198,7 @@ describe("DateRangePicker component", () => {
|
|
|
198
198
|
describe("class merging", () => {
|
|
199
199
|
it("applies custom class to wrapper", () => {
|
|
200
200
|
// eslint-disable-next-line tailwindcss/no-custom-classname
|
|
201
|
-
const { container } = render(() => <DateRangePicker class="my-custom-class"
|
|
201
|
+
const { container } = render(() => <ConfigProvider clientName="test"><I18nProvider><DateRangePicker class="my-custom-class" /></I18nProvider></ConfigProvider>);
|
|
202
202
|
const wrapper = container.querySelector("[data-date-range-picker]") as HTMLElement;
|
|
203
203
|
|
|
204
204
|
expect(wrapper).toBeTruthy();
|