@nypl/design-system-react-components 0.23.4 → 0.25.1
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/CHANGELOG.md +98 -1
- package/README.md +46 -11
- package/dist/components/Accordion/Accordion.d.ts +14 -14
- package/dist/components/Autosuggest/Autosuggest.stories.d.ts +1 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
- package/dist/components/Button/Button.d.ts +6 -13
- package/dist/components/Button/ButtonTypes.d.ts +5 -3
- package/dist/components/Card/Card.d.ts +59 -10
- package/dist/components/Card/CardTypes.d.ts +19 -0
- package/dist/components/CardEdition/CardEdition.d.ts +21 -0
- package/dist/components/{StyleGuide/Colors.stories.d.ts → CardEdition/CardEdition.stories.d.ts} +5 -2
- package/dist/components/Checkbox/Checkbox.d.ts +21 -16
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
- package/dist/components/DatePicker/DatePicker.d.ts +79 -0
- package/dist/components/DatePicker/DatePickerTypes.d.ts +5 -0
- package/dist/components/Form/Form.d.ts +16 -8
- package/dist/components/Form/FormTypes.d.ts +2 -0
- package/dist/components/Grid/GridTypes.d.ts +9 -0
- package/dist/components/Grid/SimpleGrid.d.ts +14 -0
- package/dist/components/Heading/Heading.d.ts +9 -11
- package/dist/components/Heading/{HeadingDisplaySizes.d.ts → HeadingTypes.d.ts} +8 -0
- package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +2 -1
- package/dist/components/Hero/Hero.d.ts +19 -14
- package/dist/components/Hero/HeroTypes.d.ts +10 -5
- package/dist/components/Icons/Icon.d.ts +13 -16
- package/dist/components/Icons/IconSvgs.d.ts +4 -0
- package/dist/components/Icons/IconTypes.d.ts +78 -60
- package/dist/components/Image/Image.stories.d.ts +2 -1
- package/dist/components/Label/Label.d.ts +10 -26
- package/dist/components/Link/Link.d.ts +8 -12
- package/dist/components/List/List.stories.d.ts +1 -0
- package/dist/components/Radio/Radio.d.ts +30 -24
- package/dist/components/RadioGroup/RadioGroup.d.ts +40 -0
- package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +4 -0
- package/dist/components/SearchBar/SearchBar.d.ts +45 -27
- package/dist/components/Select/Select.d.ts +34 -35
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
- package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
- package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
- package/dist/components/Tabs/Tabs.d.ts +25 -0
- package/dist/components/Template/Template.d.ts +91 -0
- package/dist/components/Text/Text.d.ts +16 -0
- package/dist/components/Text/TextTypes.d.ts +6 -0
- package/dist/components/TextInput/TextInput.d.ts +37 -30
- package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
- package/dist/design-system-react-components.cjs.development.js +4102 -917
- package/dist/design-system-react-components.cjs.development.js.map +1 -1
- package/dist/design-system-react-components.cjs.production.min.js +1 -1
- package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
- package/dist/design-system-react-components.esm.js +4023 -920
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +23 -5
- package/dist/resources.scss +133 -24
- package/dist/styles.css +1 -1
- package/dist/theme/components/accordion.d.ts +25 -0
- package/dist/theme/components/breadcrumb.d.ts +90 -0
- package/dist/theme/components/button.d.ts +109 -0
- package/dist/theme/components/checkbox.d.ts +91 -0
- package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
- package/dist/theme/components/customRadioGroup.d.ts +18 -0
- package/dist/theme/components/global.d.ts +55 -0
- package/dist/theme/components/globalMixins.d.ts +15 -0
- package/dist/theme/components/heading.d.ts +110 -0
- package/dist/theme/components/hero.d.ts +492 -0
- package/dist/theme/components/icon.d.ts +13 -0
- package/dist/theme/components/label.d.ts +16 -0
- package/dist/theme/components/link.d.ts +45 -0
- package/dist/theme/components/radio.d.ts +95 -0
- package/dist/theme/components/searchBar.d.ts +20 -0
- package/dist/theme/components/select.d.ts +58 -0
- package/dist/theme/components/statusBadge.d.ts +25 -0
- package/dist/theme/components/tabs.d.ts +85 -0
- package/dist/theme/components/template.d.ts +105 -0
- package/dist/theme/components/text.d.ts +20 -0
- package/dist/theme/components/textInput.d.ts +105 -0
- package/dist/theme/foundations/breakpoints.d.ts +23 -0
- package/dist/theme/foundations/colors.d.ts +3 -0
- package/dist/theme/foundations/global.d.ts +23 -0
- package/dist/theme/foundations/shadows.d.ts +4 -0
- package/dist/theme/foundations/spacing.d.ts +77 -0
- package/dist/theme/foundations/typography.d.ts +8 -0
- package/dist/theme/index.d.ts +20 -0
- package/dist/theme/provider.d.ts +5 -0
- package/dist/theme/types.d.ts +1 -0
- package/dist/utils/utils.d.ts +6 -0
- package/package.json +9 -2
- package/src/components/Accordion/Accordion.stories.mdx +233 -33
- package/src/components/Accordion/Accordion.test.tsx +135 -19
- package/src/components/Accordion/Accordion.tsx +81 -56
- package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
- package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
- package/src/components/Autosuggest/_Autosuggest.scss +2 -2
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +57 -56
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
- package/src/components/Button/Button.stories.mdx +125 -138
- package/src/components/Button/Button.test.tsx +65 -11
- package/src/components/Button/Button.tsx +72 -68
- package/src/components/Button/ButtonTypes.tsx +4 -2
- package/src/components/Button/_Button.scss +7 -92
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +58 -3
- package/src/components/Card/Card.stories.mdx +694 -0
- package/src/components/Card/Card.test.tsx +97 -102
- package/src/components/Card/Card.tsx +182 -31
- package/src/components/Card/CardTypes.tsx +21 -0
- package/src/components/Card/_Card.scss +234 -49
- package/src/components/{Card/Card.stories.tsx → CardEdition/CardEdition.stories.tsx} +32 -22
- package/src/components/CardEdition/CardEdition.test.tsx +395 -0
- package/src/components/CardEdition/CardEdition.tsx +60 -0
- package/src/components/CardEdition/_CardEdition.scss +138 -0
- package/src/components/Chakra/Box.stories.mdx +57 -0
- package/src/components/Chakra/Center.stories.mdx +99 -0
- package/src/components/Chakra/Grid.stories.mdx +79 -0
- package/src/components/Chakra/Stack.stories.mdx +93 -0
- package/src/components/Checkbox/Checkbox.stories.mdx +57 -35
- package/src/components/Checkbox/Checkbox.test.tsx +117 -147
- package/src/components/Checkbox/Checkbox.tsx +76 -50
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +325 -0
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
- package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
- package/src/components/DatePicker/DatePicker.stories.mdx +284 -0
- package/src/components/DatePicker/DatePicker.test.tsx +657 -0
- package/src/components/DatePicker/DatePicker.tsx +396 -0
- package/src/components/DatePicker/DatePickerTypes.tsx +5 -0
- package/src/components/DatePicker/_DatePicker.scss +76 -0
- package/src/components/Form/Form.stories.mdx +130 -27
- package/src/components/Form/Form.test.tsx +78 -36
- package/src/components/Form/Form.tsx +53 -19
- package/src/components/Form/FormTypes.tsx +3 -0
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +38 -0
- package/src/components/Grid/GridTypes.tsx +9 -0
- package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
- package/src/components/Grid/SimpleGrid.test.tsx +66 -0
- package/src/components/Grid/SimpleGrid.tsx +37 -0
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
- package/src/components/Heading/Heading.stories.mdx +63 -33
- package/src/components/Heading/Heading.test.tsx +24 -16
- package/src/components/Heading/Heading.tsx +54 -38
- package/src/components/Heading/{HeadingDisplaySizes.tsx → HeadingTypes.tsx} +9 -0
- package/src/components/HelperErrorText/HelperErrorText.stories.tsx +2 -1
- package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
- package/src/components/Hero/Hero.stories.mdx +195 -85
- package/src/components/Hero/Hero.test.tsx +544 -113
- package/src/components/Hero/Hero.tsx +80 -93
- package/src/components/Hero/HeroTypes.tsx +17 -5
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +6 -1
- package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
- package/src/components/Icons/Icon.stories.mdx +89 -74
- package/src/components/Icons/Icon.test.tsx +30 -22
- package/src/components/Icons/Icon.tsx +63 -61
- package/src/components/Icons/IconSvgs.tsx +8 -0
- package/src/components/Icons/IconTypes.tsx +80 -60
- package/src/components/Image/Image.stories.tsx +2 -1
- package/src/components/Input/_Input.scss +2 -2
- package/src/components/Label/Label.stories.mdx +77 -0
- package/src/components/Label/Label.test.tsx +43 -12
- package/src/components/Label/Label.tsx +28 -45
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
- package/src/components/Link/Link.stories.mdx +47 -41
- package/src/components/Link/Link.test.tsx +33 -44
- package/src/components/Link/Link.tsx +114 -100
- package/src/components/List/List.stories.mdx +7 -3
- package/src/components/List/List.stories.tsx +14 -9
- package/src/components/List/List.test.tsx +12 -8
- package/src/components/List/List.tsx +9 -7
- package/src/components/List/_List.scss +3 -3
- package/src/components/Modal/Modal.stories.mdx +7 -3
- package/src/components/Modal/_Modal.scss +1 -1
- package/src/components/Notification/Notification.stories.mdx +99 -65
- package/src/components/Notification/Notification.test.tsx +3 -16
- package/src/components/Notification/Notification.tsx +12 -12
- package/src/components/Notification/_Notification.scss +5 -4
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +1 -1
- package/src/components/Pagination/Pagination.stories.mdx +7 -1
- package/src/components/Pagination/Pagination.test.tsx +16 -10
- package/src/components/Radio/Radio.stories.mdx +57 -46
- package/src/components/Radio/Radio.test.tsx +92 -138
- package/src/components/Radio/Radio.tsx +70 -69
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +250 -0
- package/src/components/RadioGroup/RadioGroup.stories.mdx +247 -0
- package/src/components/RadioGroup/RadioGroup.test.tsx +327 -0
- package/src/components/RadioGroup/RadioGroup.tsx +154 -0
- package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +4 -0
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1101 -0
- package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
- package/src/components/SearchBar/SearchBar.stories.mdx +196 -224
- package/src/components/SearchBar/SearchBar.tsx +151 -46
- package/src/components/Select/Select.stories.mdx +193 -168
- package/src/components/Select/Select.test.tsx +129 -324
- package/src/components/Select/Select.tsx +120 -160
- package/src/components/Select/SelectTypes.tsx +4 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +18 -29
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
- package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
- package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
- package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
- package/src/components/StatusBadge/StatusBadge.tsx +24 -25
- package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +112 -90
- package/src/components/StyleGuide/Buttons.stories.mdx +98 -100
- package/src/components/StyleGuide/Colors.stories.mdx +336 -0
- package/src/components/StyleGuide/Forms.stories.mdx +85 -0
- package/src/components/StyleGuide/Iconography.stories.mdx +86 -93
- package/src/components/StyleGuide/Spacing.stories.mdx +0 -1
- package/src/components/StyleGuide/Typography.stories.mdx +164 -166
- package/src/components/StyleGuide/UIDocCard.tsx +4 -4
- package/src/components/Tabs/Tabs.stories.mdx +221 -0
- package/src/components/Tabs/Tabs.test.tsx +264 -0
- package/src/components/Tabs/Tabs.tsx +220 -0
- package/src/components/Template/Template.stories.mdx +574 -0
- package/src/components/Template/Template.test.tsx +124 -0
- package/src/components/Template/Template.tsx +226 -0
- package/src/components/Text/Text.stories.mdx +70 -0
- package/src/components/Text/Text.test.tsx +63 -0
- package/src/components/Text/Text.tsx +55 -0
- package/src/components/Text/TextTypes.tsx +6 -0
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
- package/src/components/TextInput/TextInput.stories.mdx +90 -90
- package/src/components/TextInput/TextInput.test.tsx +103 -83
- package/src/components/TextInput/TextInput.tsx +108 -91
- package/src/components/TextInput/TextInputTypes.tsx +6 -0
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +2 -1
- package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
- package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
- package/src/docs/Chakra.stories.mdx +341 -0
- package/src/docs/Intro.stories.mdx +31 -24
- package/src/index.ts +70 -5
- package/src/styles/01-colors/_colors-brand.scss +6 -4
- package/src/styles/01-colors/_colors-utility.scss +14 -15
- package/src/styles/03-space/_space-inline.scss +47 -7
- package/src/styles/03-space/_space-inset.scss +33 -5
- package/src/styles/03-space/_space-stack.scss +48 -8
- package/src/styles/base/_02-breakpoints.scss +5 -4
- package/src/styles/base/_04-base.scss +2 -1
- package/src/styles/base/_place-holder.scss +1 -1
- package/src/styles/base/_typography.scss +1 -29
- package/src/styles.scss +22 -25
- package/src/theme/components/accordion.ts +30 -0
- package/src/theme/components/breadcrumb.ts +77 -0
- package/src/theme/components/button.ts +125 -0
- package/src/theme/components/checkbox.ts +107 -0
- package/src/theme/components/customCheckboxGroup.ts +12 -0
- package/src/theme/components/customRadioGroup.ts +12 -0
- package/src/theme/components/global.ts +71 -0
- package/src/theme/components/globalMixins.ts +16 -0
- package/src/theme/components/heading.ts +72 -0
- package/src/theme/components/hero.ts +239 -0
- package/src/theme/components/icon.ts +79 -0
- package/src/theme/components/label.ts +17 -0
- package/src/theme/components/link.ts +47 -0
- package/src/theme/components/radio.ts +106 -0
- package/src/theme/components/searchBar.ts +21 -0
- package/src/theme/components/select.ts +50 -0
- package/src/theme/components/statusBadge.ts +27 -0
- package/src/theme/components/tabs.ts +79 -0
- package/src/theme/components/template.ts +114 -0
- package/src/theme/components/text.ts +31 -0
- package/src/theme/components/textInput.ts +61 -0
- package/src/theme/foundations/breakpoints.ts +24 -0
- package/src/theme/foundations/colors.ts +208 -0
- package/src/theme/foundations/global.ts +26 -0
- package/src/theme/foundations/shadows.ts +5 -0
- package/src/theme/foundations/spacing.ts +85 -0
- package/src/theme/foundations/typography.ts +35 -0
- package/src/theme/index.ts +88 -0
- package/src/theme/provider.tsx +9 -0
- package/src/theme/types.ts +1 -0
- package/src/utils/componentCategories.ts +56 -21
- package/src/utils/utils.ts +13 -0
- package/dist/components/Accordion/Accordion.stories.d.ts +0 -5
- package/dist/components/Card/Card.stories.d.ts +0 -27
- package/dist/components/Label/Label.stories.d.ts +0 -12
- package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
- package/dist/components/Template/Template.stories.d.ts +0 -29
- package/src/components/Accordion/Accordion.stories.tsx +0 -65
- package/src/components/Accordion/_Accordion.scss +0 -81
- package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
- package/src/components/Checkbox/_Checkbox.scss +0 -97
- package/src/components/Form/_Form.scss +0 -28
- package/src/components/Heading/_Heading.scss +0 -163
- package/src/components/Hero/_Hero.scss +0 -256
- package/src/components/Icons/_Icons.scss +0 -116
- package/src/components/Label/Label.stories.tsx +0 -30
- package/src/components/Label/_Label.scss +0 -22
- package/src/components/Link/_Link.scss +0 -73
- package/src/components/Radio/_Radio.scss +0 -84
- package/src/components/SearchBar/_SearchBar.scss +0 -16
- package/src/components/Select/_Select.scss +0 -82
- package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -33
- package/src/components/StatusBadge/_StatusBadge.scss +0 -23
- package/src/components/StyleGuide/Colors.stories.tsx +0 -288
- package/src/components/Template/Template.stories.tsx +0 -85
- package/src/components/Template/_Template.scss +0 -63
- package/src/components/TextInput/_TextInput.scss +0 -59
|
@@ -2,15 +2,46 @@ import * as React from "react";
|
|
|
2
2
|
import { render, screen } from "@testing-library/react";
|
|
3
3
|
import { axe } from "jest-axe";
|
|
4
4
|
import userEvent from "@testing-library/user-event";
|
|
5
|
+
import renderer from "react-test-renderer";
|
|
5
6
|
|
|
6
|
-
import Button from "../Button/Button";
|
|
7
|
-
import { ButtonTypes } from "../Button/ButtonTypes";
|
|
8
7
|
import SearchBar from "./SearchBar";
|
|
9
8
|
|
|
9
|
+
const optionsGroup = [
|
|
10
|
+
"Art",
|
|
11
|
+
"Bushes",
|
|
12
|
+
"Clothing",
|
|
13
|
+
"Flowers",
|
|
14
|
+
"Fossils",
|
|
15
|
+
"Fruits",
|
|
16
|
+
"Furniture",
|
|
17
|
+
"Songs",
|
|
18
|
+
"Tools",
|
|
19
|
+
"Villagers",
|
|
20
|
+
];
|
|
21
|
+
const selectProps = {
|
|
22
|
+
name: "nhItemSearch",
|
|
23
|
+
labelText: "Select a category",
|
|
24
|
+
optionsData: optionsGroup,
|
|
25
|
+
};
|
|
26
|
+
const textInputProps = {
|
|
27
|
+
labelText: "Item Search",
|
|
28
|
+
placeholder: "Item Search",
|
|
29
|
+
};
|
|
30
|
+
const helperErrorText = "Search for items in Animal Crossing New Horizons";
|
|
31
|
+
const invalidText = "Could not find the item :(";
|
|
32
|
+
|
|
10
33
|
describe("SearchBar Accessibility", () => {
|
|
11
34
|
it("passes axe accessibility test", async () => {
|
|
12
35
|
const { container } = render(
|
|
13
|
-
<SearchBar
|
|
36
|
+
<SearchBar
|
|
37
|
+
id="id"
|
|
38
|
+
labelText="Searchbar"
|
|
39
|
+
onSubmit={jest.fn()}
|
|
40
|
+
selectProps={selectProps}
|
|
41
|
+
textInputProps={textInputProps}
|
|
42
|
+
helperErrorText={helperErrorText}
|
|
43
|
+
invalidText={invalidText}
|
|
44
|
+
/>
|
|
14
45
|
);
|
|
15
46
|
expect(await axe(container)).toHaveNoViolations();
|
|
16
47
|
});
|
|
@@ -20,32 +51,136 @@ describe("SearchBar", () => {
|
|
|
20
51
|
const searchBarSubmit = jest.fn();
|
|
21
52
|
const buttonCallback = jest.fn();
|
|
22
53
|
|
|
23
|
-
it("
|
|
54
|
+
it("renders the basic form", () => {
|
|
24
55
|
render(
|
|
25
|
-
<SearchBar
|
|
56
|
+
<SearchBar
|
|
57
|
+
id="id"
|
|
58
|
+
labelText="searchbar"
|
|
59
|
+
onSubmit={searchBarSubmit}
|
|
60
|
+
textInputProps={textInputProps}
|
|
61
|
+
helperErrorText={helperErrorText}
|
|
62
|
+
/>
|
|
26
63
|
);
|
|
27
64
|
expect(screen.getByRole("search")).toBeInTheDocument();
|
|
28
65
|
expect(screen.getByRole("search")).toHaveAttribute(
|
|
29
66
|
"aria-label",
|
|
30
67
|
"searchbar"
|
|
31
68
|
);
|
|
69
|
+
expect(screen.getByPlaceholderText("Item Search")).toBeInTheDocument();
|
|
70
|
+
expect(screen.getByRole("button")).toBeInTheDocument();
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("renders an optional Select component", () => {
|
|
74
|
+
render(
|
|
75
|
+
<SearchBar
|
|
76
|
+
id="id"
|
|
77
|
+
labelText="searchbar"
|
|
78
|
+
onSubmit={searchBarSubmit}
|
|
79
|
+
selectProps={selectProps}
|
|
80
|
+
textInputProps={textInputProps}
|
|
81
|
+
helperErrorText={helperErrorText}
|
|
82
|
+
/>
|
|
83
|
+
);
|
|
84
|
+
expect(screen.getByRole("combobox")).toBeInTheDocument();
|
|
85
|
+
expect(screen.getByLabelText("Select a category")).toBeInTheDocument();
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("renders the invalid text in the invalid state", () => {
|
|
89
|
+
render(
|
|
90
|
+
<SearchBar
|
|
91
|
+
id="id"
|
|
92
|
+
labelText="searchbar"
|
|
93
|
+
onSubmit={searchBarSubmit}
|
|
94
|
+
selectProps={selectProps}
|
|
95
|
+
textInputProps={textInputProps}
|
|
96
|
+
helperErrorText={helperErrorText}
|
|
97
|
+
invalidText={invalidText}
|
|
98
|
+
isInvalid
|
|
99
|
+
/>
|
|
100
|
+
);
|
|
101
|
+
expect(screen.getByText(invalidText)).toBeInTheDocument();
|
|
102
|
+
expect(screen.queryByText(helperErrorText)).not.toBeInTheDocument();
|
|
32
103
|
});
|
|
33
104
|
|
|
34
|
-
it("
|
|
105
|
+
it("calls the callback function on submit ", () => {
|
|
35
106
|
render(
|
|
36
|
-
<SearchBar
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
</Button>
|
|
45
|
-
</SearchBar>
|
|
107
|
+
<SearchBar
|
|
108
|
+
labelText="searchBar"
|
|
109
|
+
id="id"
|
|
110
|
+
onSubmit={searchBarSubmit}
|
|
111
|
+
selectProps={selectProps}
|
|
112
|
+
textInputProps={textInputProps}
|
|
113
|
+
helperErrorText={helperErrorText}
|
|
114
|
+
/>
|
|
46
115
|
);
|
|
47
116
|
expect(searchBarSubmit).toHaveBeenCalledTimes(0);
|
|
117
|
+
expect(buttonCallback).toHaveBeenCalledTimes(0);
|
|
48
118
|
userEvent.click(screen.getByRole("button"));
|
|
49
119
|
expect(searchBarSubmit).toHaveBeenCalledTimes(1);
|
|
120
|
+
expect(buttonCallback).toHaveBeenCalledTimes(1);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("Renders the UI snapshot correctly", () => {
|
|
124
|
+
const basic = renderer
|
|
125
|
+
.create(
|
|
126
|
+
<SearchBar
|
|
127
|
+
id="id"
|
|
128
|
+
labelText="searchbar"
|
|
129
|
+
onSubmit={jest.fn()}
|
|
130
|
+
textInputProps={textInputProps}
|
|
131
|
+
helperErrorText={helperErrorText}
|
|
132
|
+
/>
|
|
133
|
+
)
|
|
134
|
+
.toJSON();
|
|
135
|
+
const withSelect = renderer
|
|
136
|
+
.create(
|
|
137
|
+
<SearchBar
|
|
138
|
+
id="id"
|
|
139
|
+
labelText="searchbar"
|
|
140
|
+
onSubmit={jest.fn()}
|
|
141
|
+
selectProps={selectProps}
|
|
142
|
+
textInputProps={textInputProps}
|
|
143
|
+
helperErrorText={helperErrorText}
|
|
144
|
+
/>
|
|
145
|
+
)
|
|
146
|
+
.toJSON();
|
|
147
|
+
const withoutHelperText = renderer
|
|
148
|
+
.create(
|
|
149
|
+
<SearchBar
|
|
150
|
+
id="id"
|
|
151
|
+
labelText="searchbar"
|
|
152
|
+
onSubmit={jest.fn()}
|
|
153
|
+
textInputProps={textInputProps}
|
|
154
|
+
/>
|
|
155
|
+
)
|
|
156
|
+
.toJSON();
|
|
157
|
+
const invalidState = renderer
|
|
158
|
+
.create(
|
|
159
|
+
<SearchBar
|
|
160
|
+
id="id"
|
|
161
|
+
labelText="searchbar"
|
|
162
|
+
onSubmit={jest.fn()}
|
|
163
|
+
textInputProps={textInputProps}
|
|
164
|
+
isInvalid
|
|
165
|
+
/>
|
|
166
|
+
)
|
|
167
|
+
.toJSON();
|
|
168
|
+
const disabledState = renderer
|
|
169
|
+
.create(
|
|
170
|
+
<SearchBar
|
|
171
|
+
id="id"
|
|
172
|
+
labelText="searchbar"
|
|
173
|
+
onSubmit={jest.fn()}
|
|
174
|
+
textInputProps={textInputProps}
|
|
175
|
+
isDisabled
|
|
176
|
+
/>
|
|
177
|
+
)
|
|
178
|
+
.toJSON();
|
|
179
|
+
|
|
180
|
+
expect(basic).toMatchSnapshot();
|
|
181
|
+
expect(withSelect).toMatchSnapshot();
|
|
182
|
+
expect(withoutHelperText).toMatchSnapshot();
|
|
183
|
+
expect(invalidState).toMatchSnapshot();
|
|
184
|
+
expect(disabledState).toMatchSnapshot();
|
|
50
185
|
});
|
|
51
186
|
});
|
|
@@ -2,21 +2,15 @@ import {
|
|
|
2
2
|
Meta,
|
|
3
3
|
Story,
|
|
4
4
|
ArgsTable,
|
|
5
|
-
|
|
5
|
+
Canvas,
|
|
6
6
|
Description,
|
|
7
7
|
} from "@storybook/addon-docs/blocks";
|
|
8
8
|
import { withDesign } from "storybook-addon-designs";
|
|
9
|
+
|
|
9
10
|
import SearchBar from "./SearchBar";
|
|
10
|
-
import Select from "../Select/Select";
|
|
11
|
-
import HelperErrorText from "../HelperErrorText/HelperErrorText";
|
|
12
|
-
import Button from "../Button/Button";
|
|
13
|
-
import { ButtonTypes } from "../Button/ButtonTypes";
|
|
14
|
-
import Icon from "../Icons/Icon";
|
|
15
|
-
import { IconNames } from "../Icons/IconTypes";
|
|
16
|
-
import Input from "../Input/Input";
|
|
17
|
-
import { InputTypes } from "../Input/InputTypes";
|
|
18
11
|
import * as stories from "../Autosuggest/Autosuggest.stories.tsx";
|
|
19
12
|
import { getCategory } from "../../utils/componentCategories";
|
|
13
|
+
import DSProvider from "../../theme/provider";
|
|
20
14
|
|
|
21
15
|
<Meta
|
|
22
16
|
title={getCategory("SearchBar")}
|
|
@@ -31,9 +25,16 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
31
25
|
jest: ["SearchBar.test.tsx"],
|
|
32
26
|
}}
|
|
33
27
|
argTypes={{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
},
|
|
28
|
+
action: { table: { disable: true } },
|
|
29
|
+
ariaLabel: { table: { disable: true } },
|
|
30
|
+
buttonOnClick: { table: { disable: true } },
|
|
31
|
+
className: { table: { disable: true } },
|
|
32
|
+
id: { table: { disable: true } },
|
|
33
|
+
method: { table: { disable: true } },
|
|
34
|
+
onSubmit: { table: { disable: true } },
|
|
35
|
+
selectProps: { table: { disable: true } },
|
|
36
|
+
textInputProps: { table: { disable: true } },
|
|
37
|
+
textInputElement: { table: { disable: true } },
|
|
37
38
|
}}
|
|
38
39
|
/>
|
|
39
40
|
|
|
@@ -41,178 +42,183 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
41
42
|
|
|
42
43
|
<Description of={SearchBar} />
|
|
43
44
|
|
|
44
|
-
The main wrapper element that is rendered is `<form>` DOM element. All the
|
|
45
|
-
passed to `SearchBar` will apply to the `<form>` element
|
|
46
|
-
|
|
45
|
+
The main wrapper element that is rendered is a `<form>` DOM element. All the
|
|
46
|
+
props passed to `SearchBar` will apply to the `<form>` element and its children.
|
|
47
|
+
The `SearchBar` component will render a `Select` component (optional),
|
|
48
|
+
`TextInput` component, `Button` component, and `HelperErrorText` component
|
|
49
|
+
based on the required props.
|
|
47
50
|
|
|
48
51
|
The `Select` dropdown narrows the search within a specific category, typically
|
|
49
|
-
title or author.
|
|
50
|
-
need more options, link to the advance search page. Toggle the `Select` through
|
|
51
|
-
the Controls.
|
|
52
|
-
|
|
53
|
-
_Note: The `HelperErrorText` component should be the next direct sibling of the
|
|
54
|
-
`SearchBar` component if it will be used._
|
|
55
|
-
|
|
56
|
-
export const optionsGroup = {
|
|
57
|
-
Art: [
|
|
58
|
-
"Academic Painting",
|
|
59
|
-
"Amazing Painting",
|
|
60
|
-
"Ancient Statue",
|
|
61
|
-
"Basic Painting",
|
|
62
|
-
"Beautiful Statue",
|
|
63
|
-
],
|
|
64
|
-
Bushes: [
|
|
65
|
-
"Blue-Hydrangea Bush",
|
|
66
|
-
"Blue-Hydrangea Start",
|
|
67
|
-
"Holly Bush",
|
|
68
|
-
"Orange-Tea-Olive Bush",
|
|
69
|
-
"Pink Camellia Bush",
|
|
70
|
-
],
|
|
71
|
-
Clothing: ["3D Glasses", "Academy Uniform", "Acid-Washed Jacket"],
|
|
72
|
-
"DIY Recipes": ["Acorn Pochette", "Acoustic Guitar", "Angled Signpost"],
|
|
73
|
-
Flowers: [
|
|
74
|
-
"Black Cosmos",
|
|
75
|
-
"Blue Pansies",
|
|
76
|
-
"Gold Roses",
|
|
77
|
-
"Lily of the Valley",
|
|
78
|
-
"Orange Hyacinth",
|
|
79
|
-
],
|
|
80
|
-
Fossils: [
|
|
81
|
-
"Acanthostega",
|
|
82
|
-
"Amber",
|
|
83
|
-
"Ammonite",
|
|
84
|
-
"Ankylo Skull",
|
|
85
|
-
"Anomalocaris",
|
|
86
|
-
"Australopith",
|
|
87
|
-
],
|
|
88
|
-
Fruits: ["Apples", "Oranges", "Pears", "Coconuts", "Cherries"],
|
|
89
|
-
Furniture: [
|
|
90
|
-
"Abstract Wall",
|
|
91
|
-
"Accessories Stand",
|
|
92
|
-
"ACNH Switch",
|
|
93
|
-
"Air Circulator",
|
|
94
|
-
],
|
|
95
|
-
Materials: [
|
|
96
|
-
"Acorn",
|
|
97
|
-
"Aquaris Fragment",
|
|
98
|
-
"Bamboo Piece",
|
|
99
|
-
"Boot",
|
|
100
|
-
"Clump of Weeds",
|
|
101
|
-
],
|
|
102
|
-
NPC: ["Celeste", "Kicks", "Leif", "Redd", "Saharah"],
|
|
103
|
-
Songs: ["Agent K.K.", "Café K.K.", "Comrade K.K."],
|
|
104
|
-
Tools: [
|
|
105
|
-
"Axe",
|
|
106
|
-
"Bamboo Wand",
|
|
107
|
-
"Fishing Rod",
|
|
108
|
-
"Shovel",
|
|
109
|
-
"Slingshot",
|
|
110
|
-
"Watering Can",
|
|
111
|
-
],
|
|
112
|
-
Villagers: ["Agnes", "Alfonso", "Anchovy", "Axel", "Aurora"],
|
|
113
|
-
};
|
|
52
|
+
title or author. Toggle the `Select` through the Controls.
|
|
114
53
|
|
|
115
|
-
|
|
54
|
+
export const optionsGroup = [
|
|
55
|
+
"Art",
|
|
56
|
+
"Bushes",
|
|
57
|
+
"Clothing",
|
|
58
|
+
"Flowers",
|
|
59
|
+
"Fossils",
|
|
60
|
+
"Fruits",
|
|
61
|
+
"Furniture",
|
|
62
|
+
"Songs",
|
|
63
|
+
"Tools",
|
|
64
|
+
"Villagers",
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
<Canvas withToolbar>
|
|
116
68
|
<Story
|
|
117
69
|
name="Basic"
|
|
118
70
|
args={{
|
|
119
71
|
showHelperText: true,
|
|
120
72
|
showSelect: true,
|
|
121
|
-
|
|
122
|
-
|
|
73
|
+
invalidText: "Could not find the item :(",
|
|
74
|
+
isDisabled: false,
|
|
75
|
+
isInvalid: false,
|
|
76
|
+
isRequired: false,
|
|
77
|
+
helperErrorText: "Search for items in Animal Crossing New Horizons",
|
|
123
78
|
}}
|
|
124
79
|
>
|
|
125
80
|
{(args) => (
|
|
126
|
-
<
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
<Input
|
|
143
|
-
id="inputBasic"
|
|
144
|
-
ariaLabelledBy="buttonBasic"
|
|
145
|
-
placeholder="Item Search"
|
|
146
|
-
required={true}
|
|
147
|
-
type={InputTypes.text}
|
|
148
|
-
attributes={{
|
|
149
|
-
["aria-describedby"]: "helperTextBasic",
|
|
150
|
-
}}
|
|
151
|
-
errored={args.isErrorState}
|
|
152
|
-
/>
|
|
153
|
-
<Button
|
|
154
|
-
buttonType={ButtonTypes.Primary}
|
|
155
|
-
id="buttonBasic"
|
|
156
|
-
type="submit"
|
|
157
|
-
disabled={args.disabledButton}
|
|
158
|
-
>
|
|
159
|
-
<Icon
|
|
160
|
-
name={IconNames.search}
|
|
161
|
-
decorative={true}
|
|
162
|
-
modifiers={["small", "icon-left"]}
|
|
163
|
-
/>
|
|
164
|
-
Search
|
|
165
|
-
</Button>
|
|
166
|
-
</SearchBar>
|
|
167
|
-
{args.showHelperText && (
|
|
168
|
-
<HelperErrorText id="helperTextBasic" isError={args.isErrorState}>
|
|
169
|
-
Search for items in Animal Crossing New Horizons
|
|
170
|
-
</HelperErrorText>
|
|
171
|
-
)}
|
|
172
|
-
</div>
|
|
81
|
+
<SearchBar
|
|
82
|
+
onSubmit={() => {}}
|
|
83
|
+
{...args}
|
|
84
|
+
selectProps={
|
|
85
|
+
args.showSelect && {
|
|
86
|
+
name: "nhItemSearch",
|
|
87
|
+
labelText: "Select a category",
|
|
88
|
+
optionsData: optionsGroup,
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
textInputProps={{
|
|
92
|
+
labelText: "Item Search",
|
|
93
|
+
placeholder: "Item Search",
|
|
94
|
+
}}
|
|
95
|
+
helperErrorText={args.showHelperText && args.helperErrorText}
|
|
96
|
+
/>
|
|
173
97
|
)}
|
|
174
98
|
</Story>
|
|
175
|
-
</
|
|
99
|
+
</Canvas>
|
|
176
100
|
|
|
177
101
|
<ArgsTable story="Basic" />
|
|
178
102
|
|
|
103
|
+
## Component Props
|
|
104
|
+
|
|
105
|
+
### Select Component
|
|
106
|
+
|
|
107
|
+
To render an optional `Select` component, an object must be passed to the
|
|
108
|
+
`selectProps` prop. It _must_ include `name`, `labelText`, and `optionsData`
|
|
109
|
+
properties. The `labelText` value won't be rendered but will be used for its
|
|
110
|
+
`aria-label` attribute.
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
const selectProps = {
|
|
114
|
+
name: "select-form-name",
|
|
115
|
+
labelText: "Select a category",
|
|
116
|
+
optionsData: optionsGroup,
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// ...
|
|
120
|
+
<SearchBar
|
|
121
|
+
onSubmit={() => {}}
|
|
122
|
+
selectProps={selectProps}
|
|
123
|
+
// ...
|
|
124
|
+
/>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### TextInput Component
|
|
128
|
+
|
|
129
|
+
To render the `TextInput` component, an object must be passed to the
|
|
130
|
+
`textInputProps` prop. It _must_ include `labelText` and `placeholder`
|
|
131
|
+
properties. The `labelText` value won't be rendered but will be used for its
|
|
132
|
+
`aria-label` attribute.
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
const textInputProps = {
|
|
136
|
+
labelText: "Item Search",
|
|
137
|
+
placeholder: "Item Search",
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// ...
|
|
141
|
+
<SearchBar
|
|
142
|
+
onSubmit={() => {}}
|
|
143
|
+
textInputProps={textInputProps}
|
|
144
|
+
// ...
|
|
145
|
+
/>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Custom Input Component
|
|
149
|
+
|
|
150
|
+
To render a custom input component, pass the component to the `textInputElement`
|
|
151
|
+
prop. This will render your custom input component such as an `Autocomplete`
|
|
152
|
+
component. Check the "Search Autocomplete" example for more details.
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
const textInputElement = <CustomInput {...props} />;
|
|
156
|
+
|
|
157
|
+
// ...
|
|
158
|
+
<SearchBar
|
|
159
|
+
onSubmit={() => {}}
|
|
160
|
+
textInputElement={textInputElement}
|
|
161
|
+
// ...
|
|
162
|
+
/>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Button Component
|
|
166
|
+
|
|
167
|
+
A `Button` component will automatically be rendered for the `SearchBar`
|
|
168
|
+
component. If you want to pass a callback function to the `Button`, use the
|
|
169
|
+
`buttonOnClick` prop.
|
|
170
|
+
|
|
171
|
+
### HelperErrorText Component
|
|
172
|
+
|
|
173
|
+
To render the `HelperErrorText` component, pass a string value to the
|
|
174
|
+
`helperErrorText` prop. For the invalid state when `isInvalid` is true, pass the
|
|
175
|
+
error string in the `invalidText` prop.
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
const helperErrorText = "";
|
|
179
|
+
|
|
180
|
+
// ...
|
|
181
|
+
<SearchBar
|
|
182
|
+
onSubmit={() => {}}
|
|
183
|
+
helperErrorText="Search for items in Animal Crossing New Horizons"
|
|
184
|
+
// ...
|
|
185
|
+
/>
|
|
186
|
+
```
|
|
187
|
+
|
|
179
188
|
## Search Autocomplete
|
|
180
189
|
|
|
181
190
|
While the Design System does not implement an `Autosuggest` or `Autocomplete`
|
|
182
191
|
component, it does show a pattern for using the `react-autosuggest` package.
|
|
183
192
|
In this example, we're using the `react-autosuggest` example found in the
|
|
184
193
|
[Basic Autosuggest story](https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/autosuggest--autosuggest-library)
|
|
185
|
-
as the main component inside the `SearchBar` component.
|
|
186
|
-
|
|
187
|
-
|
|
194
|
+
as the main component inside the `SearchBar` component.
|
|
195
|
+
|
|
196
|
+
In order to render this custom input element in the `SearchBar` component, pass
|
|
197
|
+
it in the `textInputElement` prop. Do not pass an object to the `textInputProps`
|
|
198
|
+
prop since the custom input component passed in `textInputElement` will take
|
|
199
|
+
precedence.
|
|
188
200
|
|
|
189
|
-
<
|
|
190
|
-
<Story
|
|
201
|
+
<Canvas withToolbar>
|
|
202
|
+
<Story
|
|
203
|
+
name="Search Autocomplete"
|
|
204
|
+
args={{
|
|
205
|
+
isInvalid: false,
|
|
206
|
+
isDisabled: false,
|
|
207
|
+
isRequired: false,
|
|
208
|
+
}}
|
|
209
|
+
>
|
|
191
210
|
{(args) => (
|
|
192
211
|
<div style={{ minHeight: "150px" }}>
|
|
193
|
-
<SearchBar
|
|
194
|
-
{
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
>
|
|
200
|
-
<Icon
|
|
201
|
-
name={IconNames.search}
|
|
202
|
-
decorative={true}
|
|
203
|
-
modifiers={["small", "icon-left"]}
|
|
204
|
-
/>
|
|
205
|
-
Search
|
|
206
|
-
</Button>
|
|
207
|
-
</SearchBar>
|
|
208
|
-
<HelperErrorText id="autosuggest-helperText" isError={false}>
|
|
209
|
-
Select your home library. Start by typing the name of the library. Try{" "}
|
|
210
|
-
{'"'}ba{'"'}.
|
|
211
|
-
</HelperErrorText>
|
|
212
|
+
<SearchBar
|
|
213
|
+
onSubmit={() => {}}
|
|
214
|
+
textInputElement={stories.SearchBarExample()}
|
|
215
|
+
helperErrorText="Select your home library. Start by typing the name of the library. Try 'ba'."
|
|
216
|
+
{...args}
|
|
217
|
+
/>
|
|
212
218
|
</div>
|
|
213
219
|
)}
|
|
214
220
|
</Story>
|
|
215
|
-
</
|
|
221
|
+
</Canvas>
|
|
216
222
|
|
|
217
223
|
## Other Examples
|
|
218
224
|
|
|
@@ -221,75 +227,41 @@ Here are the same possible states of the `SearchBar` component in static example
|
|
|
221
227
|
|
|
222
228
|
### Error State
|
|
223
229
|
|
|
224
|
-
For the error state,
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
<Preview>
|
|
228
|
-
<div>
|
|
229
|
-
<SearchBar>
|
|
230
|
-
<Input
|
|
231
|
-
ariaLabelledBy="button-error-state"
|
|
232
|
-
id="input-error"
|
|
233
|
-
placeholder="Item Search"
|
|
234
|
-
required={true}
|
|
235
|
-
type={InputTypes.text}
|
|
236
|
-
errored={true}
|
|
237
|
-
attributes={{
|
|
238
|
-
["aria-describedby"]: "error-helperText",
|
|
239
|
-
}}
|
|
240
|
-
/>
|
|
241
|
-
<Button
|
|
242
|
-
buttonType={ButtonTypes.Primary}
|
|
243
|
-
id="button-error-state"
|
|
244
|
-
type="submit"
|
|
245
|
-
>
|
|
246
|
-
<Icon
|
|
247
|
-
name={IconNames.search}
|
|
248
|
-
decorative={true}
|
|
249
|
-
modifiers={["small", "icon-left"]}
|
|
250
|
-
/>
|
|
251
|
-
Search
|
|
252
|
-
</Button>
|
|
253
|
-
</SearchBar>
|
|
254
|
-
<HelperErrorText id="error-helperText" isError={true}>
|
|
255
|
-
Sorry, we can't find that item!
|
|
256
|
-
</HelperErrorText>
|
|
257
|
-
</div>
|
|
258
|
-
</Preview>
|
|
230
|
+
For the error state, set the `isInvalid` prop to `true`. This will update the
|
|
231
|
+
state for all its children. If you passed a custom input element, you must
|
|
232
|
+
handle the error state yourself.
|
|
259
233
|
|
|
260
|
-
<
|
|
234
|
+
<Canvas>
|
|
235
|
+
<DSProvider>
|
|
236
|
+
<SearchBar
|
|
237
|
+
onSubmit={() => {}}
|
|
238
|
+
textInputProps={{
|
|
239
|
+
labelText: "Item Search",
|
|
240
|
+
placeholder: "Item Search",
|
|
241
|
+
}}
|
|
242
|
+
helperErrorText="Sorry, we can't find that item!"
|
|
243
|
+
invalidText="Could not find the item :("
|
|
244
|
+
isInvalid
|
|
245
|
+
/>
|
|
246
|
+
</DSProvider>
|
|
247
|
+
</Canvas>
|
|
261
248
|
|
|
262
249
|
### Disabled State
|
|
263
250
|
|
|
264
|
-
For the disabled state,
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
disabled={true}
|
|
282
|
-
>
|
|
283
|
-
<Icon
|
|
284
|
-
name={IconNames.search}
|
|
285
|
-
decorative={true}
|
|
286
|
-
modifiers={["small", "icon-left"]}
|
|
287
|
-
/>
|
|
288
|
-
Search
|
|
289
|
-
</Button>
|
|
290
|
-
</SearchBar>
|
|
291
|
-
<HelperErrorText id="error-disabled">
|
|
292
|
-
Reason for disabled state.
|
|
293
|
-
</HelperErrorText>
|
|
294
|
-
</div>
|
|
295
|
-
</Preview>
|
|
251
|
+
For the disabled state, set the `isDisabled` prop to `true`. This will update
|
|
252
|
+
the state for all its children. If you passed a custom input element, you must
|
|
253
|
+
handle the disabled state yourself.
|
|
254
|
+
|
|
255
|
+
<Canvas>
|
|
256
|
+
<DSProvider>
|
|
257
|
+
<SearchBar
|
|
258
|
+
obSubmit={() => {}}
|
|
259
|
+
textInputProps={{
|
|
260
|
+
labelText: "Item Search",
|
|
261
|
+
placeholder: "Item Search",
|
|
262
|
+
}}
|
|
263
|
+
helperErrorText="Reason for disabled state."
|
|
264
|
+
isDisabled
|
|
265
|
+
/>
|
|
266
|
+
</DSProvider>
|
|
267
|
+
</Canvas>
|