@kaizen/components 1.52.1 → 1.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/DatePicker/DatePicker.cjs +8 -1
- package/dist/cjs/DatePicker/utils/getLocale.cjs +2 -0
- package/dist/cjs/DatePicker/utils/validateDate.cjs +28 -2
- package/dist/cjs/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.cjs +8 -1
- package/dist/cjs/Filter/FilterBar/subcomponents/ClearAllButton/ClearAllButton.cjs +14 -2
- package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarDatePicker/FilterBarDatePicker.cjs +1 -0
- package/dist/cjs/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.cjs +10 -1
- package/dist/cjs/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.cjs +8 -1
- package/dist/cjs/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.cjs +5 -1
- package/dist/cjs/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useEndDateValidation.cjs +1 -0
- package/dist/cjs/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useStartDateValidation.cjs +1 -0
- package/dist/cjs/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/validateEndDateBeforeStartDate.cjs +16 -1
- package/dist/esm/DatePicker/DatePicker.mjs +8 -1
- package/dist/esm/DatePicker/utils/getLocale.mjs +3 -1
- package/dist/esm/DatePicker/utils/validateDate.mjs +22 -2
- package/dist/esm/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.mjs +8 -1
- package/dist/esm/Filter/FilterBar/subcomponents/ClearAllButton/ClearAllButton.mjs +14 -2
- package/dist/esm/Filter/FilterBar/subcomponents/FilterBarDatePicker/FilterBarDatePicker.mjs +1 -0
- package/dist/esm/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.mjs +10 -1
- package/dist/esm/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.mjs +8 -1
- package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.mjs +5 -1
- package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useEndDateValidation.mjs +1 -0
- package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useStartDateValidation.mjs +1 -0
- package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/validateEndDateBeforeStartDate.mjs +10 -1
- package/dist/styles.css +2 -2
- package/dist/types/AvatarGroup/_docs/example-data.d.ts +8 -0
- package/dist/types/BrandMoment/_docs/ExampleHeaders.d.ts +3 -0
- package/dist/types/Calendar/_docs/controls/defaultMonthControls.d.ts +2 -0
- package/dist/types/Calendar/_docs/controls/weekStartsOnControls.d.ts +2 -0
- package/dist/types/Container/Container.d.ts +1 -1
- package/dist/types/Content/Content.d.ts +1 -1
- package/dist/types/DateInput/DateInput/DateInput.d.ts +1 -1
- package/dist/types/DatePicker/DatePicker.d.ts +1 -1
- package/dist/types/DatePicker/_docs/controls/datePickerLocaleControls.d.ts +2 -0
- package/dist/types/DatePicker/_docs/controls/disabledDayMatchersControls.d.ts +2 -0
- package/dist/types/DatePicker/subcomponents/DateInputField/DateInputField.d.ts +1 -1
- package/dist/types/DatePicker/types.d.ts +2 -1
- package/dist/types/DatePicker/utils/getLocale.d.ts +1 -1
- package/dist/types/Filter/FilterBar/context/types.d.ts +28 -0
- package/dist/types/Filter/FilterButton/subcomponents/FilterButtonBase/FilterButtonBase.d.ts +1 -1
- package/dist/types/Filter/FilterDatePicker/_docs/controls/disabledDaysControls.d.ts +2 -0
- package/dist/types/Filter/FilterDatePicker/_docs/controls/validationControls.d.ts +2 -0
- package/dist/types/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.d.ts +1 -1
- package/dist/types/Filter/FilterDateRangePicker/_docs/controls/disabledDaysControls.d.ts +2 -0
- package/dist/types/Filter/FilterDateRangePicker/_docs/controls/validationControls.d.ts +2 -0
- package/dist/types/Filter/FilterMultiSelect/_docs/MockData.d.ts +10 -0
- package/dist/types/Filter/FilterSelect/_docs/mockData.d.ts +6 -0
- package/dist/types/Filter/_docs/controls/renderTriggerControls.d.ts +2 -0
- package/dist/types/Menu/_docs/MenuContentExample.d.ts +8 -0
- package/dist/types/Menu/_docs/examples.d.ts +11 -0
- package/dist/types/Modal/_docs/controls.d.ts +11 -0
- package/dist/types/MultiSelect/MultiSelect.d.ts +23 -0
- package/dist/types/MultiSelect/subcomponents/MultiSelectOptions/MultiSelectOptions.d.ts +13 -0
- package/dist/types/Select/Select.d.ts +3 -3
- package/dist/types/Workflow/_docs/controls/controls.d.ts +2 -0
- package/dist/types/Workflow/_docs/controls/index.d.ts +1 -0
- package/dist/types/__future__/Select/Select.d.ts +2 -2
- package/dist/types/__future__/Select/_docs/mockData.d.ts +6 -0
- package/dist/types/__future__/Select/subcomponents/SelectToggle/SelectToggle.d.ts +2 -2
- package/dist/types/__future__/Select/types.d.ts +22 -0
- package/dist/types/__future__/Workflow/_docs/controls/controls.d.ts +2 -0
- package/dist/types/__future__/Workflow/_docs/controls/index.d.ts +1 -0
- package/dist/types/__overlays__/Tooltip/v1/utils/isSemanticElement.d.ts +2 -2
- package/dist/types/utils/getNodeText.d.ts +2 -1
- package/locales/en.json +40 -0
- package/package.json +1 -1
- package/src/Avatar/_docs/Avatar.mdx +1 -1
- package/src/AvatarGroup/_docs/AvatarGroup.mdx +1 -1
- package/src/Badge/_docs/Badge.mdx +1 -1
- package/src/Brand/_docs/Brand.mdx +1 -1
- package/src/BrandMoment/_docs/BrandMoment.mdx +1 -1
- package/src/Button/Button/_docs/Button.mdx +1 -1
- package/src/Button/IconButton/_docs/IconButton.mdx +1 -1
- package/src/ButtonGroup/_docs/ButtonGroup.mdx +1 -1
- package/src/Calendar/CalendarRange/_docs/CalendarRange.mdx +1 -1
- package/src/Calendar/CalendarSingle/_docs/CalendarSingle.mdx +1 -1
- package/src/Card/_docs/Card.mdx +1 -1
- package/src/Checkbox/Checkbox/_docs/Checkbox.mdx +1 -1
- package/src/Checkbox/CheckboxField/_docs/CheckboxField.mdx +1 -1
- package/src/Checkbox/CheckboxGroup/_docs/CheckboxGroup.mdx +1 -1
- package/src/Collapsible/Collapsible/_docs/Collapsible.mdx +1 -1
- package/src/Collapsible/CollapsibleGroup/_docs/CollapsibleGroup.mdx +1 -1
- package/src/Collapsible/ExpertAdviceCollapsible/_docs/ExpertAdviceCollapsible.mdx +1 -1
- package/src/Container/_docs/Container.mdx +1 -1
- package/src/Content/_docs/Content.mdx +1 -1
- package/src/DateInput/DateInputDescription/DateInputDescription.spec.tsx +26 -18
- package/src/DatePicker/DatePicker.spec.tsx +100 -69
- package/src/DatePicker/DatePicker.tsx +13 -5
- package/src/DatePicker/_docs/DatePicker.mdx +1 -1
- package/src/DatePicker/_docs/DatePicker.stickersheet.stories.tsx +57 -21
- package/src/DatePicker/_docs/DatePicker.stories.tsx +2 -3
- package/src/DatePicker/_docs/controls/datePickerLocaleControls.ts +1 -1
- package/src/DatePicker/subcomponents/DateInputField/DateInputField.spec.tsx +49 -36
- package/src/DatePicker/types.ts +2 -1
- package/src/DatePicker/utils/getLocale.ts +6 -2
- package/src/DatePicker/utils/validateDate.spec.ts +40 -16
- package/src/DatePicker/utils/{validateDate.ts → validateDate.tsx} +24 -4
- package/src/DateRangePicker/_docs/DateRangePicker.mdx +1 -1
- package/src/Divider/_docs/Divider.mdx +1 -1
- package/src/EmptyState/_docs/EmptyState.mdx +1 -1
- package/src/ErrorPage/_docs/ErrorPage.mdx +1 -1
- package/src/FieldGroup/_docs/FieldGroup.mdx +1 -1
- package/src/FieldMessage/_docs/FieldMessage.mdx +1 -1
- package/src/Filter/Filter/_docs/Filter.mdx +1 -1
- package/src/Filter/FilterBar/FilterBar.spec.tsx +56 -25
- package/src/Filter/FilterBar/_docs/FilterBar.mdx +1 -1
- package/src/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.spec.tsx +21 -13
- package/src/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.tsx +11 -1
- package/src/Filter/FilterBar/subcomponents/ClearAllButton/ClearAllButton.tsx +17 -2
- package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.spec.tsx +17 -8
- package/src/Filter/FilterBar/subcomponents/FilterBarDatePicker/FilterBarDatePicker.spec.tsx +37 -23
- package/src/Filter/FilterBar/subcomponents/FilterBarDateRangePicker/FilterBarDateRangePicker.spec.tsx +35 -23
- package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.spec.tsx +42 -26
- package/src/Filter/FilterBar/subcomponents/FilterBarSelect/FilterBarSelect.spec.tsx +37 -24
- package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.spec.tsx +12 -12
- package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.tsx +15 -2
- package/src/Filter/FilterButton/_docs/filter-buttons.mdx +1 -1
- package/src/Filter/FilterDatePicker/FilterDatePicker.spec.tsx +21 -16
- package/src/Filter/FilterDatePicker/_docs/FilterDatePicker.mdx +1 -1
- package/src/Filter/FilterDatePicker/_docs/FilterDatePicker.stickersheet.stories.tsx +50 -1
- package/src/Filter/FilterDatePicker/hooks/useDateInputHandlers.spec.ts +3 -3
- package/src/Filter/FilterDatePicker/hooks/{useDateValidation.spec.tsx → useDateValidation.spec.ts} +13 -12
- package/src/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.tsx +10 -1
- package/src/Filter/FilterDatePicker/subcomponents/FilterDatePickerField/FilterDatePickerField.spec.tsx +57 -36
- package/src/Filter/FilterDatePicker/utils/validateDate.spec.ts +52 -28
- package/src/Filter/FilterDateRangePicker/FilterDateRangePicker.spec.tsx +3 -2
- package/src/Filter/FilterDateRangePicker/_docs/FilterDateRangePicker.mdx +1 -1
- package/src/Filter/FilterDateRangePicker/_docs/FilterDateRangePicker.stickersheet.stories.tsx +55 -24
- package/src/Filter/FilterDateRangePicker/subcomponents/DateRangeInputField/DateRangeInputField.spec.tsx +43 -28
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.spec.tsx +82 -48
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.tsx +6 -1
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/{useEndDateValidation.spec.tsx → useEndDateValidation.spec.ts} +23 -20
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/{useStartDateValidation.spec.tsx → useStartDateValidation.spec.ts} +13 -11
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/validateEndDateBeforeStartDate.spec.ts +17 -6
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/{validateEndDateBeforeStartDate.ts → validateEndDateBeforeStartDate.tsx} +9 -3
- package/src/Filter/FilterMultiSelect/FilterMultiSelect.spec.tsx +10 -14
- package/src/Filter/FilterMultiSelect/_docs/FilterMultiSelect.mdx +1 -1
- package/src/Filter/FilterMultiSelect/context/SelectionProvider/SelectionProvider.spec.tsx +392 -372
- package/src/Filter/FilterMultiSelect/subcomponents/SearchInput/SearchInput.spec.tsx +9 -6
- package/src/Filter/FilterSelect/_docs/FilterSelect.mdx +1 -1
- package/src/GuidanceBlock/_docs/GuidanceBlock.mdx +1 -1
- package/src/Heading/_docs/Heading.mdx +1 -1
- package/src/Icon/_docs/Icon.mdx +1 -1
- package/src/Illustration/Scene/BrandMomentCaptureIntro/_docs/BrandMomentCaptureIntro.mdx +1 -1
- package/src/Illustration/Scene/_docs/Scene.mdx +1 -1
- package/src/Illustration/Spot/_docs/Spot.mdx +1 -1
- package/src/Input/Input/_docs/Input.mdx +1 -1
- package/src/Input/InputRange/_docs/InputRange.mdx +1 -1
- package/src/Input/InputSearch/InputSearch.spec.tsx +15 -14
- package/src/Input/InputSearch/_docs/InputSearch.mdx +1 -1
- package/src/Label/_docs/Label.mdx +1 -1
- package/src/LabelledMessage/_docs/LabelledMessage.mdx +1 -1
- package/src/LikertScaleLegacy/_docs/LikertScaleLegacy.mdx +1 -1
- package/src/Loading/LoadingGraphic/_docs/LoadingGraphic.mdx +1 -1
- package/src/Loading/LoadingHeading/_docs/LoadingHeading.mdx +1 -1
- package/src/Loading/LoadingInput/_docs/LoadingInput.mdx +1 -1
- package/src/Loading/LoadingParagraph/_docs/LoadingParagraph.mdx +1 -1
- package/src/Loading/LoadingSpinner/_docs/LoadingSpinner.mdx +1 -1
- package/src/Menu/_docs/Menu.mdx +1 -1
- package/src/Modal/ConfirmationModal/_docs/ConfirmationModal.mdx +1 -1
- package/src/Modal/ContextModal/_docs/ContextModal.mdx +1 -1
- package/src/Modal/GenericModal/_docs/GenericModal.mdx +1 -1
- package/src/Modal/InputEditModal/_docs/InputEditModal.mdx +1 -1
- package/src/MultiSelect/_docs/MultiSelect.mdx +1 -1
- package/src/Notification/GlobalNotification/_docs/GlobalNotification.mdx +1 -1
- package/src/Notification/InlineNotification/_docs/InlineNotification.mdx +1 -1
- package/src/Notification/ToastNotification/_docs/ToastNotification.mdx +1 -1
- package/src/Pagination/_docs/Pagination.mdx +1 -1
- package/src/Pagination/subcomponents/DirectionalLink/_docs/DirectionalLink.mdx +1 -1
- package/src/Pagination/subcomponents/PaginationLink/_docs/PaginationLink.mdx +1 -1
- package/src/Popover/_docs/Popover.mdx +1 -1
- package/src/ProgressBar/_docs/ProgressBar.mdx +1 -1
- package/src/Radio/Radio/_docs/Radio.mdx +1 -1
- package/src/Radio/RadioField/_docs/RadioField.mdx +1 -1
- package/src/Radio/RadioGroup/_docs/RadioGroup.mdx +1 -1
- package/src/RichTextEditor/EditableRichTextContent/_docs/EditableRichTextContent.mdx +1 -1
- package/src/RichTextEditor/RichTextContent/_docs/RichTextContent.mdx +1 -1
- package/src/RichTextEditor/RichTextEditor/_docs/RichTextEditor.mdx +1 -1
- package/src/RichTextEditor/RichTextEditor/subcomponents/ToggleIconButton/_docs/ToggleIconButton.mdx +1 -1
- package/src/RichTextEditor/RichTextEditor/subcomponents/Toolbar/_docs/Toolbar.mdx +1 -1
- package/src/SearchField/_docs/SearchField.mdx +1 -1
- package/src/Select/_docs/Select.mdx +1 -1
- package/src/Skirt/_docs/Skirt.mdx +1 -1
- package/src/Slider/_docs/Slider.mdx +1 -1
- package/src/SplitButton/SplitButton.spec.tsx +11 -6
- package/src/SplitButton/_docs/SplitButton.mdx +1 -1
- package/src/SplitButton/subcomponents/DropdownButton/DropdownButton.spec.tsx +15 -10
- package/src/Table/_docs/Table.mdx +1 -1
- package/src/Tabs/_docs/Tabs.mdx +1 -1
- package/src/Tag/_docs/Tag.mdx +1 -1
- package/src/Text/_docs/Text.mdx +1 -1
- package/src/TextArea/_docs/TextArea.mdx +1 -1
- package/src/TextAreaField/_docs/TextAreaField.mdx +1 -1
- package/src/TextField/_docs/TextField.mdx +1 -1
- package/src/Tile/InformationTile/_docs/InformationTile.mdx +1 -1
- package/src/Tile/MultiActionTile/_docs/MultiActionTile.mdx +1 -1
- package/src/Tile/TileGrid/_docs/TileGrid.mdx +1 -1
- package/src/TimeField/_docs/TimeField.mdx +1 -1
- package/src/TitleBlockZen/_docs/TitleBlockZen.mdx +1 -1
- package/src/ToggleSwitch/ToggleSwitch/_docs/ToggleSwitch.mdx +1 -1
- package/src/ToggleSwitch/ToggleSwitchField/_docs/ToggleSwitchField.mdx +1 -1
- package/src/VisuallyHidden/_docs/VisuallyHidden.mdx +1 -1
- package/src/Well/_docs/Well.mdx +1 -1
- package/src/Workflow/_docs/ProgressStepper.mdx +1 -1
- package/src/Workflow/_docs/Workflow.mdx +1 -1
- package/src/Workflow/_docs/WorkflowFooter.mdx +1 -1
- package/src/Workflow/_docs/WorkflowHeader.mdx +1 -1
- package/src/__future__/Select/_docs/Select.mdx +1 -1
- package/src/__future__/Tag/Tag/_docs/Tag.mdx +1 -1
- package/src/__future__/Workflow/_docs/ProgressStepper.mdx +1 -1
- package/src/__future__/Workflow/_docs/Workflow.mdx +1 -1
- package/src/__future__/Workflow/_docs/WorkflowFooter.mdx +1 -1
- package/src/__future__/Workflow/_docs/WorkflowHeader.mdx +1 -1
- package/src/__overlays__/Tooltip/v1/_docs/Tooltip.mdx +1 -1
- package/src/__overlays__/Tooltip/v3/_docs/ApiSpecification.mdx +0 -1
- package/src/__overlays__/Tooltip/v3/_docs/Tooltip.docs.stories.tsx +52 -0
- package/src/__overlays__/Tooltip/v3/_docs/Tooltip.mdx +40 -61
- package/src/__overlays__/Tooltip/v3/_docs/assets/tooltip_spec.png +0 -0
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React, { useState } from "react"
|
|
2
|
+
import { StaticIntlProvider } from "@cultureamp/i18n-react-intl"
|
|
2
3
|
import { Selection } from "@react-types/shared"
|
|
3
|
-
import {
|
|
4
|
+
import { screen, waitFor } from "@testing-library/react"
|
|
4
5
|
import userEvent from "@testing-library/user-event"
|
|
6
|
+
import { renderWithIntl } from "~tests"
|
|
5
7
|
import { FilterMultiSelect } from "../../FilterMultiSelect"
|
|
6
8
|
import { ListBox } from "../../subcomponents/ListBox"
|
|
7
9
|
import { SearchInput } from "../../subcomponents/SearchInput"
|
|
@@ -98,391 +100,470 @@ const SelectionProviderWrapper = ({
|
|
|
98
100
|
)
|
|
99
101
|
}
|
|
100
102
|
|
|
101
|
-
describe("<
|
|
102
|
-
describe("
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
describe("<SelectionProvider>", () => {
|
|
104
|
+
describe("<SelectionProviderWrapper /> - Visual content", () => {
|
|
105
|
+
describe("Given no selectedKeys", () => {
|
|
106
|
+
it("shows all the options unselected", async () => {
|
|
107
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
108
|
+
await waitFor(() => {
|
|
109
|
+
expect(
|
|
110
|
+
screen.getByRole("option", {
|
|
111
|
+
name: "option-1-label-mock",
|
|
112
|
+
selected: false,
|
|
113
|
+
})
|
|
114
|
+
).toBeVisible()
|
|
115
|
+
expect(
|
|
116
|
+
screen.getByRole("option", {
|
|
117
|
+
name: "option-2-label-mock",
|
|
118
|
+
selected: false,
|
|
119
|
+
})
|
|
120
|
+
).toBeVisible()
|
|
121
|
+
expect(
|
|
122
|
+
screen.getByRole("option", {
|
|
123
|
+
name: "option-3-label-mock",
|
|
124
|
+
selected: false,
|
|
125
|
+
})
|
|
126
|
+
).toBeVisible()
|
|
109
127
|
})
|
|
110
|
-
)
|
|
111
|
-
expect(
|
|
112
|
-
screen.getByRole("option", {
|
|
113
|
-
name: "option-2-label-mock",
|
|
114
|
-
selected: false,
|
|
115
|
-
})
|
|
116
|
-
).toBeVisible()
|
|
117
|
-
expect(
|
|
118
|
-
screen.getByRole("option", {
|
|
119
|
-
name: "option-3-label-mock",
|
|
120
|
-
selected: false,
|
|
121
|
-
})
|
|
122
|
-
).toBeVisible()
|
|
123
|
-
})
|
|
128
|
+
})
|
|
124
129
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
130
|
+
it("labels the listbox with the provided label", async () => {
|
|
131
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
132
|
+
await waitFor(() => {
|
|
133
|
+
const listBox = screen.getByLabelText("selection-label-mock", {
|
|
134
|
+
selector: "ul",
|
|
135
|
+
})
|
|
136
|
+
expect(listBox).toBeInTheDocument()
|
|
137
|
+
})
|
|
129
138
|
})
|
|
130
|
-
expect(listBox).toBeInTheDocument()
|
|
131
139
|
})
|
|
132
|
-
})
|
|
133
140
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
141
|
+
describe("Given selectedKeys is [option-2-value-mock]", () => {
|
|
142
|
+
it("shows only option 2 is selected", async () => {
|
|
143
|
+
renderWithIntl(
|
|
144
|
+
<SelectionProviderWrapper
|
|
145
|
+
selectedKeys={new Set(["option-2-value-mock"])}
|
|
146
|
+
/>
|
|
147
|
+
)
|
|
148
|
+
await waitFor(() => {
|
|
149
|
+
expect(
|
|
150
|
+
screen.getByRole("option", {
|
|
151
|
+
name: "option-1-label-mock",
|
|
152
|
+
selected: false,
|
|
153
|
+
})
|
|
154
|
+
).toBeVisible()
|
|
155
|
+
expect(
|
|
156
|
+
screen.getByRole("option", {
|
|
157
|
+
name: "option-2-label-mock",
|
|
158
|
+
selected: true,
|
|
159
|
+
})
|
|
160
|
+
).toBeVisible()
|
|
161
|
+
expect(
|
|
162
|
+
screen.getByRole("option", {
|
|
163
|
+
name: "option-3-label-mock",
|
|
164
|
+
selected: false,
|
|
165
|
+
})
|
|
166
|
+
).toBeVisible()
|
|
145
167
|
})
|
|
146
|
-
)
|
|
147
|
-
expect(
|
|
148
|
-
screen.getByRole("option", {
|
|
149
|
-
name: "option-2-label-mock",
|
|
150
|
-
selected: true,
|
|
151
|
-
})
|
|
152
|
-
).toBeVisible()
|
|
153
|
-
expect(
|
|
154
|
-
screen.getByRole("option", {
|
|
155
|
-
name: "option-3-label-mock",
|
|
156
|
-
selected: false,
|
|
157
|
-
})
|
|
158
|
-
).toBeVisible()
|
|
168
|
+
})
|
|
159
169
|
})
|
|
160
|
-
})
|
|
161
170
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
171
|
+
describe("Given selectedKeys is 'all'", () => {
|
|
172
|
+
it("shows all options are selected", async () => {
|
|
173
|
+
renderWithIntl(<SelectionProviderWrapper selectedKeys="all" />)
|
|
174
|
+
await waitFor(() => {
|
|
175
|
+
expect(
|
|
176
|
+
screen.getByRole("option", {
|
|
177
|
+
name: "option-1-label-mock",
|
|
178
|
+
selected: true,
|
|
179
|
+
})
|
|
180
|
+
).toBeVisible()
|
|
181
|
+
expect(
|
|
182
|
+
screen.getByRole("option", {
|
|
183
|
+
name: "option-2-label-mock",
|
|
184
|
+
selected: true,
|
|
185
|
+
})
|
|
186
|
+
).toBeVisible()
|
|
187
|
+
expect(
|
|
188
|
+
screen.getByRole("option", {
|
|
189
|
+
name: "option-3-label-mock",
|
|
190
|
+
selected: true,
|
|
191
|
+
})
|
|
192
|
+
).toBeVisible()
|
|
175
193
|
})
|
|
176
|
-
)
|
|
177
|
-
expect(
|
|
178
|
-
screen.getByRole("option", {
|
|
179
|
-
name: "option-3-label-mock",
|
|
180
|
-
selected: true,
|
|
181
|
-
})
|
|
182
|
-
).toBeVisible()
|
|
194
|
+
})
|
|
183
195
|
})
|
|
184
196
|
})
|
|
185
|
-
})
|
|
186
197
|
|
|
187
|
-
describe("<SelectionProviderWrapper /> - Mouse interaction", () => {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
198
|
+
describe("<SelectionProviderWrapper /> - Mouse interaction", () => {
|
|
199
|
+
it("selects the option when clicks on a non-selected option", async () => {
|
|
200
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
201
|
+
const option1 = screen.getByRole("option", {
|
|
202
|
+
name: "option-1-label-mock",
|
|
203
|
+
})
|
|
193
204
|
|
|
194
|
-
|
|
205
|
+
await user.click(option1)
|
|
195
206
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
207
|
+
await waitFor(() => {
|
|
208
|
+
expect(
|
|
209
|
+
screen.getByRole("option", {
|
|
210
|
+
name: "option-1-label-mock",
|
|
211
|
+
selected: true,
|
|
212
|
+
})
|
|
213
|
+
).toBeVisible()
|
|
214
|
+
})
|
|
203
215
|
})
|
|
204
|
-
})
|
|
205
216
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
217
|
+
it("fires onSelectionChange when clicks on a option", async () => {
|
|
218
|
+
const spy = jest.fn()
|
|
219
|
+
renderWithIntl(<SelectionProviderWrapper onSelectionChange={spy} />)
|
|
220
|
+
const option1 = screen.getByRole("option", {
|
|
221
|
+
name: "option-1-label-mock",
|
|
222
|
+
})
|
|
212
223
|
|
|
213
|
-
|
|
224
|
+
await user.click(option1)
|
|
214
225
|
|
|
215
|
-
|
|
216
|
-
|
|
226
|
+
await waitFor(() => {
|
|
227
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
|
228
|
+
})
|
|
217
229
|
})
|
|
218
|
-
})
|
|
219
230
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
231
|
+
it("selects all options when clicks on Select all button", async () => {
|
|
232
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
233
|
+
const selectAll = screen.getByRole("button", {
|
|
234
|
+
name: "Select all",
|
|
235
|
+
})
|
|
225
236
|
|
|
226
|
-
|
|
237
|
+
await user.click(selectAll)
|
|
227
238
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
239
|
+
await waitFor(() => {
|
|
240
|
+
expect(
|
|
241
|
+
screen.getByRole("option", {
|
|
242
|
+
name: "option-1-label-mock",
|
|
243
|
+
selected: true,
|
|
244
|
+
})
|
|
245
|
+
).toBeVisible()
|
|
235
246
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
247
|
+
expect(
|
|
248
|
+
screen.getByRole("option", {
|
|
249
|
+
name: "option-2-label-mock",
|
|
250
|
+
selected: true,
|
|
251
|
+
})
|
|
252
|
+
).toBeVisible()
|
|
242
253
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
254
|
+
expect(
|
|
255
|
+
screen.getByRole("option", {
|
|
256
|
+
name: "option-3-label-mock",
|
|
257
|
+
selected: true,
|
|
258
|
+
})
|
|
259
|
+
).toBeVisible()
|
|
260
|
+
})
|
|
249
261
|
})
|
|
250
|
-
})
|
|
251
262
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
263
|
+
it("fires onSelectionChange when clicks on Select all button", async () => {
|
|
264
|
+
const spy = jest.fn()
|
|
265
|
+
renderWithIntl(<SelectionProviderWrapper onSelectionChange={spy} />)
|
|
266
|
+
const selectAll = screen.getByRole("button", {
|
|
267
|
+
name: "Select all",
|
|
268
|
+
})
|
|
258
269
|
|
|
259
|
-
|
|
270
|
+
await user.click(selectAll)
|
|
260
271
|
|
|
261
|
-
|
|
262
|
-
|
|
272
|
+
await waitFor(() => {
|
|
273
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
|
274
|
+
})
|
|
263
275
|
})
|
|
264
|
-
})
|
|
265
276
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
277
|
+
it("clears all the selection when clicks on Clear button", async () => {
|
|
278
|
+
renderWithIntl(
|
|
279
|
+
<SelectionProviderWrapper
|
|
280
|
+
selectedKeys={new Set(["option-2-value-mock"])}
|
|
281
|
+
/>
|
|
282
|
+
)
|
|
283
|
+
const clear = screen.getByRole("button", {
|
|
284
|
+
name: "Clear selections",
|
|
285
|
+
})
|
|
275
286
|
|
|
276
|
-
|
|
287
|
+
await user.click(clear)
|
|
277
288
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
289
|
+
await waitFor(() => {
|
|
290
|
+
expect(
|
|
291
|
+
screen.getByRole("option", {
|
|
292
|
+
name: "option-1-label-mock",
|
|
293
|
+
selected: false,
|
|
294
|
+
})
|
|
295
|
+
).toBeVisible()
|
|
296
|
+
expect(
|
|
297
|
+
screen.getByRole("option", {
|
|
298
|
+
name: "option-2-label-mock",
|
|
299
|
+
selected: false,
|
|
300
|
+
})
|
|
301
|
+
).toBeVisible()
|
|
302
|
+
expect(
|
|
303
|
+
screen.getByRole("option", {
|
|
304
|
+
name: "option-3-label-mock",
|
|
305
|
+
selected: false,
|
|
306
|
+
})
|
|
307
|
+
).toBeVisible()
|
|
308
|
+
})
|
|
297
309
|
})
|
|
298
|
-
})
|
|
299
310
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
311
|
+
it("fires onSelectionChange when clicks on Clear all button", async () => {
|
|
312
|
+
const spy = jest.fn()
|
|
313
|
+
renderWithIntl(
|
|
314
|
+
<SelectionProviderWrapper
|
|
315
|
+
onSelectionChange={spy}
|
|
316
|
+
selectedKeys={new Set(["option-2-value-mock"])}
|
|
317
|
+
/>
|
|
318
|
+
)
|
|
319
|
+
const clear = screen.getByRole("button", {
|
|
320
|
+
name: "Clear selections",
|
|
321
|
+
})
|
|
322
|
+
|
|
323
|
+
await user.click(clear)
|
|
324
|
+
|
|
325
|
+
await waitFor(() => {
|
|
326
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
|
327
|
+
})
|
|
310
328
|
})
|
|
311
329
|
|
|
312
|
-
|
|
330
|
+
it("de-selects the option when clicks on a selected option", async () => {
|
|
331
|
+
renderWithIntl(
|
|
332
|
+
<SelectionProviderWrapper
|
|
333
|
+
selectedKeys={new Set(["option-2-value-mock"])}
|
|
334
|
+
/>
|
|
335
|
+
)
|
|
336
|
+
const option2 = screen.getByRole("option", {
|
|
337
|
+
name: "option-2-label-mock",
|
|
338
|
+
selected: true,
|
|
339
|
+
})
|
|
340
|
+
|
|
341
|
+
await user.click(option2)
|
|
313
342
|
|
|
314
|
-
|
|
315
|
-
|
|
343
|
+
await waitFor(() => {
|
|
344
|
+
expect(
|
|
345
|
+
screen.getByRole("option", {
|
|
346
|
+
name: "option-2-label-mock",
|
|
347
|
+
selected: false,
|
|
348
|
+
})
|
|
349
|
+
).toBeVisible()
|
|
350
|
+
})
|
|
316
351
|
})
|
|
317
352
|
})
|
|
318
353
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
)
|
|
325
|
-
const option2 = screen.getByRole("option", {
|
|
326
|
-
name: "option-2-label-mock",
|
|
327
|
-
selected: true,
|
|
328
|
-
})
|
|
354
|
+
describe("<SelectionProviderWrapper /> - Keyboard interaction", () => {
|
|
355
|
+
describe("Given no selectedKeys", () => {
|
|
356
|
+
it("focuses on the frist option when tabs onto the list", async () => {
|
|
357
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
358
|
+
await user.tab()
|
|
329
359
|
|
|
330
|
-
|
|
360
|
+
await waitFor(() => {
|
|
361
|
+
expect(
|
|
362
|
+
screen.getByRole("option", { name: "option-1-label-mock" })
|
|
363
|
+
).toHaveFocus()
|
|
364
|
+
})
|
|
365
|
+
})
|
|
366
|
+
})
|
|
331
367
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
368
|
+
describe("Given selectedKeys is [option-2-value-mock, option-3-value-mock]", () => {
|
|
369
|
+
it("focuses the frist selected option when tabs onto the list", async () => {
|
|
370
|
+
renderWithIntl(
|
|
371
|
+
<SelectionProviderWrapper
|
|
372
|
+
selectedKeys={new Set(["option-2-value-mock"])}
|
|
373
|
+
/>
|
|
374
|
+
)
|
|
375
|
+
await user.tab()
|
|
376
|
+
|
|
377
|
+
await waitFor(() => {
|
|
378
|
+
expect(
|
|
379
|
+
screen.getByRole("option", { name: "option-2-label-mock" })
|
|
380
|
+
).toHaveFocus()
|
|
337
381
|
})
|
|
338
|
-
)
|
|
382
|
+
})
|
|
339
383
|
})
|
|
340
|
-
})
|
|
341
|
-
})
|
|
342
384
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
it("focuses on the frist option when tabs onto the list", async () => {
|
|
346
|
-
render(<SelectionProviderWrapper />)
|
|
385
|
+
it("moves the focus down when hits arrow down key", async () => {
|
|
386
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
347
387
|
await user.tab()
|
|
388
|
+
await user.keyboard("{ArrowDown}")
|
|
348
389
|
|
|
349
390
|
await waitFor(() => {
|
|
350
391
|
expect(
|
|
351
|
-
screen.getByRole("option", { name: "option-
|
|
392
|
+
screen.getByRole("option", { name: "option-2-label-mock" })
|
|
352
393
|
).toHaveFocus()
|
|
353
394
|
})
|
|
354
395
|
})
|
|
355
|
-
})
|
|
356
396
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
render(
|
|
397
|
+
it("keeps the focus at the last element when hits arrow down key on it", async () => {
|
|
398
|
+
renderWithIntl(
|
|
360
399
|
<SelectionProviderWrapper
|
|
361
|
-
selectedKeys={new Set(["option-
|
|
400
|
+
selectedKeys={new Set(["option-3-value-mock"])}
|
|
362
401
|
/>
|
|
363
402
|
)
|
|
364
403
|
await user.tab()
|
|
404
|
+
await user.keyboard("{ArrowDown}")
|
|
365
405
|
|
|
366
406
|
await waitFor(() => {
|
|
367
407
|
expect(
|
|
368
|
-
screen.getByRole("option", { name: "option-
|
|
408
|
+
screen.getByRole("option", { name: "option-3-label-mock" })
|
|
369
409
|
).toHaveFocus()
|
|
370
410
|
})
|
|
371
411
|
})
|
|
372
|
-
})
|
|
373
412
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
413
|
+
it("moves the focus up when hits arrow up key", async () => {
|
|
414
|
+
renderWithIntl(
|
|
415
|
+
<SelectionProviderWrapper
|
|
416
|
+
selectedKeys={new Set(["option-3-value-mock"])}
|
|
417
|
+
/>
|
|
418
|
+
)
|
|
419
|
+
await user.tab()
|
|
420
|
+
await user.keyboard("{ArrowUp}")
|
|
378
421
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
422
|
+
await waitFor(() => {
|
|
423
|
+
expect(
|
|
424
|
+
screen.getByRole("option", { name: "option-2-label-mock" })
|
|
425
|
+
).toHaveFocus()
|
|
426
|
+
})
|
|
383
427
|
})
|
|
384
|
-
})
|
|
385
428
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
expect(
|
|
397
|
-
screen.getByRole("option", { name: "option-3-label-mock" })
|
|
398
|
-
).toHaveFocus()
|
|
429
|
+
it("keeps the focus ring at the first element when hits arrow up key on it", async () => {
|
|
430
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
431
|
+
await user.tab()
|
|
432
|
+
await user.keyboard("{ArrowUp}")
|
|
433
|
+
|
|
434
|
+
await waitFor(() => {
|
|
435
|
+
expect(
|
|
436
|
+
screen.getByRole("option", { name: "option-1-label-mock" })
|
|
437
|
+
).toHaveFocus()
|
|
438
|
+
})
|
|
399
439
|
})
|
|
400
|
-
})
|
|
401
440
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
441
|
+
it("selects the option when hits enter on a non-selected option", async () => {
|
|
442
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
443
|
+
|
|
444
|
+
await user.tab()
|
|
445
|
+
await user.keyboard("{Enter}")
|
|
446
|
+
|
|
447
|
+
await waitFor(() => {
|
|
448
|
+
expect(
|
|
449
|
+
screen.getByRole("option", {
|
|
450
|
+
name: "option-1-label-mock",
|
|
451
|
+
selected: true,
|
|
452
|
+
})
|
|
453
|
+
).toBeVisible()
|
|
454
|
+
})
|
|
415
455
|
})
|
|
416
|
-
})
|
|
417
456
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
457
|
+
it("de-selects the option when hits enter on a selected option", async () => {
|
|
458
|
+
renderWithIntl(
|
|
459
|
+
<SelectionProviderWrapper
|
|
460
|
+
selectedKeys={new Set(["option-2-value-mock"])}
|
|
461
|
+
/>
|
|
462
|
+
)
|
|
463
|
+
|
|
464
|
+
await user.tab()
|
|
465
|
+
await user.keyboard("{Enter}")
|
|
422
466
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
467
|
+
await waitFor(() => {
|
|
468
|
+
expect(
|
|
469
|
+
screen.getByRole("option", {
|
|
470
|
+
name: "option-2-label-mock",
|
|
471
|
+
selected: false,
|
|
472
|
+
})
|
|
473
|
+
).toBeVisible()
|
|
474
|
+
})
|
|
427
475
|
})
|
|
428
|
-
})
|
|
429
476
|
|
|
430
|
-
|
|
431
|
-
|
|
477
|
+
it("fires onSelectionChange when hits enter on a option", async () => {
|
|
478
|
+
const spy = jest.fn()
|
|
479
|
+
renderWithIntl(<SelectionProviderWrapper onSelectionChange={spy} />)
|
|
432
480
|
|
|
433
|
-
|
|
434
|
-
|
|
481
|
+
await user.tab()
|
|
482
|
+
await user.keyboard("{Enter}")
|
|
435
483
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
name: "option-1-label-mock",
|
|
440
|
-
selected: true,
|
|
441
|
-
})
|
|
442
|
-
).toBeVisible()
|
|
484
|
+
await waitFor(() => {
|
|
485
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
|
486
|
+
})
|
|
443
487
|
})
|
|
444
488
|
})
|
|
445
489
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
490
|
+
describe("<SelectionProviderWrapper /> - Search Filtering", () => {
|
|
491
|
+
describe("With no onSearchInputChange callback", () => {
|
|
492
|
+
it("shows only the matched options", async () => {
|
|
493
|
+
renderWithIntl(<SelectionProviderWrapper />)
|
|
494
|
+
const searchInput = screen.getByRole("searchbox")
|
|
495
|
+
await user.type(searchInput, "1")
|
|
496
|
+
|
|
497
|
+
await waitFor(() => {
|
|
498
|
+
expect(
|
|
499
|
+
screen.getByRole("option", {
|
|
500
|
+
name: "option-1-label-mock",
|
|
501
|
+
})
|
|
502
|
+
).toBeVisible()
|
|
503
|
+
expect(
|
|
504
|
+
screen.queryByRole("option", {
|
|
505
|
+
name: "option-2-label-mock",
|
|
506
|
+
})
|
|
507
|
+
).not.toBeInTheDocument()
|
|
508
|
+
expect(
|
|
509
|
+
screen.queryByRole("option", {
|
|
510
|
+
name: "option-3-label-mock",
|
|
511
|
+
})
|
|
512
|
+
).not.toBeInTheDocument()
|
|
461
513
|
})
|
|
462
|
-
)
|
|
514
|
+
})
|
|
463
515
|
})
|
|
464
|
-
|
|
516
|
+
describe("With a onSearchInputChange callback", () => {
|
|
517
|
+
it("Does not filter the matched options", async () => {
|
|
518
|
+
const onSearchInputChange = jest.fn()
|
|
519
|
+
|
|
520
|
+
renderWithIntl(
|
|
521
|
+
<SelectionProviderWrapper onSearchInputChange={onSearchInputChange} />
|
|
522
|
+
)
|
|
523
|
+
const searchInput = screen.getByRole("searchbox")
|
|
524
|
+
const searchString = "1"
|
|
525
|
+
await user.type(searchInput, searchString)
|
|
526
|
+
|
|
527
|
+
await waitFor(() => {
|
|
528
|
+
expect(
|
|
529
|
+
screen.getByRole("option", {
|
|
530
|
+
name: "option-1-label-mock",
|
|
531
|
+
})
|
|
532
|
+
).toBeVisible()
|
|
533
|
+
expect(
|
|
534
|
+
screen.getByRole("option", {
|
|
535
|
+
name: "option-2-label-mock",
|
|
536
|
+
})
|
|
537
|
+
).toBeVisible()
|
|
538
|
+
expect(
|
|
539
|
+
screen.getByRole("option", {
|
|
540
|
+
name: "option-3-label-mock",
|
|
541
|
+
})
|
|
542
|
+
).toBeVisible()
|
|
543
|
+
})
|
|
544
|
+
})
|
|
465
545
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
render(<SelectionProviderWrapper onSelectionChange={spy} />)
|
|
546
|
+
it("Calls back to the consumer with the search text", async () => {
|
|
547
|
+
const onSearchInputChange = jest.fn()
|
|
469
548
|
|
|
470
|
-
|
|
471
|
-
|
|
549
|
+
renderWithIntl(
|
|
550
|
+
<SelectionProviderWrapper onSearchInputChange={onSearchInputChange} />
|
|
551
|
+
)
|
|
552
|
+
const searchInput = screen.getByRole("searchbox")
|
|
553
|
+
const searchString = "1"
|
|
554
|
+
await user.type(searchInput, searchString)
|
|
472
555
|
|
|
473
|
-
|
|
474
|
-
|
|
556
|
+
await waitFor(() => {
|
|
557
|
+
expect(onSearchInputChange).toBeCalledTimes(2)
|
|
558
|
+
expect(onSearchInputChange).toBeCalledWith(searchString)
|
|
559
|
+
})
|
|
560
|
+
})
|
|
475
561
|
})
|
|
476
562
|
})
|
|
477
|
-
})
|
|
478
|
-
|
|
479
|
-
describe("<SelectionProviderWrapper /> - Search Filtering", () => {
|
|
480
|
-
describe("With no onSearchInputChange callback", () => {
|
|
481
|
-
it("shows only the matched options", async () => {
|
|
482
|
-
render(<SelectionProviderWrapper />)
|
|
483
|
-
const searchInput = screen.getByRole("searchbox")
|
|
484
|
-
await user.type(searchInput, "1")
|
|
485
563
|
|
|
564
|
+
describe("<SelectionProviderWrapper /> - controlling items from the consumer", () => {
|
|
565
|
+
it("renders only items passed", async () => {
|
|
566
|
+
const { rerender } = renderWithIntl(<SelectionProviderWrapper />)
|
|
486
567
|
await waitFor(() => {
|
|
487
568
|
expect(
|
|
488
569
|
screen.getByRole("option", {
|
|
@@ -490,40 +571,33 @@ describe("<SelectionProviderWrapper /> - Search Filtering", () => {
|
|
|
490
571
|
})
|
|
491
572
|
).toBeVisible()
|
|
492
573
|
expect(
|
|
493
|
-
screen.
|
|
574
|
+
screen.getByRole("option", {
|
|
494
575
|
name: "option-2-label-mock",
|
|
495
576
|
})
|
|
496
|
-
).
|
|
577
|
+
).toBeVisible()
|
|
497
578
|
expect(
|
|
498
|
-
screen.
|
|
579
|
+
screen.getByRole("option", {
|
|
499
580
|
name: "option-3-label-mock",
|
|
500
581
|
})
|
|
501
|
-
).
|
|
582
|
+
).toBeVisible()
|
|
502
583
|
})
|
|
503
|
-
})
|
|
504
|
-
})
|
|
505
|
-
describe("With a onSearchInputChange callback", () => {
|
|
506
|
-
it("Does not filter the matched options", async () => {
|
|
507
|
-
const onSearchInputChange = jest.fn()
|
|
508
584
|
|
|
509
|
-
|
|
510
|
-
<
|
|
585
|
+
rerender(
|
|
586
|
+
<StaticIntlProvider locale="en">
|
|
587
|
+
<SelectionProviderWrapper items={itemsMock.slice(2)} />
|
|
588
|
+
</StaticIntlProvider>
|
|
511
589
|
)
|
|
512
|
-
const searchInput = screen.getByRole("searchbox")
|
|
513
|
-
const searchString = "1"
|
|
514
|
-
await user.type(searchInput, searchString)
|
|
515
|
-
|
|
516
590
|
await waitFor(() => {
|
|
517
591
|
expect(
|
|
518
|
-
screen.
|
|
592
|
+
screen.queryByRole("option", {
|
|
519
593
|
name: "option-1-label-mock",
|
|
520
594
|
})
|
|
521
|
-
).
|
|
595
|
+
).not.toBeInTheDocument()
|
|
522
596
|
expect(
|
|
523
|
-
screen.
|
|
597
|
+
screen.queryByRole("option", {
|
|
524
598
|
name: "option-2-label-mock",
|
|
525
599
|
})
|
|
526
|
-
).
|
|
600
|
+
).not.toBeInTheDocument()
|
|
527
601
|
expect(
|
|
528
602
|
screen.getByRole("option", {
|
|
529
603
|
name: "option-3-label-mock",
|
|
@@ -531,59 +605,5 @@ describe("<SelectionProviderWrapper /> - Search Filtering", () => {
|
|
|
531
605
|
).toBeVisible()
|
|
532
606
|
})
|
|
533
607
|
})
|
|
534
|
-
|
|
535
|
-
it("Calls back to the consumer with the search text", async () => {
|
|
536
|
-
const onSearchInputChange = jest.fn()
|
|
537
|
-
|
|
538
|
-
render(
|
|
539
|
-
<SelectionProviderWrapper onSearchInputChange={onSearchInputChange} />
|
|
540
|
-
)
|
|
541
|
-
const searchInput = screen.getByRole("searchbox")
|
|
542
|
-
const searchString = "1"
|
|
543
|
-
await user.type(searchInput, searchString)
|
|
544
|
-
|
|
545
|
-
await waitFor(() => {
|
|
546
|
-
expect(onSearchInputChange).toBeCalledTimes(2)
|
|
547
|
-
expect(onSearchInputChange).toBeCalledWith(searchString)
|
|
548
|
-
})
|
|
549
|
-
})
|
|
550
|
-
})
|
|
551
|
-
})
|
|
552
|
-
|
|
553
|
-
describe("<SelectionProviderWrapper /> - controlling items from the consumer", () => {
|
|
554
|
-
it("renders only items passed", () => {
|
|
555
|
-
const { rerender } = render(<SelectionProviderWrapper />)
|
|
556
|
-
expect(
|
|
557
|
-
screen.getByRole("option", {
|
|
558
|
-
name: "option-1-label-mock",
|
|
559
|
-
})
|
|
560
|
-
).toBeVisible()
|
|
561
|
-
expect(
|
|
562
|
-
screen.getByRole("option", {
|
|
563
|
-
name: "option-2-label-mock",
|
|
564
|
-
})
|
|
565
|
-
).toBeVisible()
|
|
566
|
-
expect(
|
|
567
|
-
screen.getByRole("option", {
|
|
568
|
-
name: "option-3-label-mock",
|
|
569
|
-
})
|
|
570
|
-
).toBeVisible()
|
|
571
|
-
|
|
572
|
-
rerender(<SelectionProviderWrapper items={itemsMock.slice(2)} />)
|
|
573
|
-
expect(
|
|
574
|
-
screen.queryByRole("option", {
|
|
575
|
-
name: "option-1-label-mock",
|
|
576
|
-
})
|
|
577
|
-
).not.toBeInTheDocument()
|
|
578
|
-
expect(
|
|
579
|
-
screen.queryByRole("option", {
|
|
580
|
-
name: "option-2-label-mock",
|
|
581
|
-
})
|
|
582
|
-
).not.toBeInTheDocument()
|
|
583
|
-
expect(
|
|
584
|
-
screen.getByRole("option", {
|
|
585
|
-
name: "option-3-label-mock",
|
|
586
|
-
})
|
|
587
|
-
).toBeVisible()
|
|
588
608
|
})
|
|
589
609
|
})
|