@nypl/design-system-react-components 1.0.0 → 1.0.3-beta
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 +3 -5
- package/dist/components/Checkbox/Checkbox.d.ts +0 -1
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -0
- package/dist/components/Heading/Heading.d.ts +2 -0
- package/dist/components/Logo/Logo.d.ts +1 -1
- package/dist/components/Logo/LogoSvgs.d.ts +4 -0
- package/dist/components/Slider/Slider.d.ts +1 -2
- package/dist/components/TextInput/TextInput.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +1038 -674
- 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 +1039 -675
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/{tests → __tests__}/useCarouselStyles.test.d.ts +0 -0
- package/dist/theme/components/button.d.ts +1 -0
- package/dist/theme/components/card.d.ts +98 -13
- package/dist/theme/components/checkboxGroup.d.ts +1 -1
- package/dist/theme/components/global.d.ts +2 -2
- package/dist/theme/components/heading.d.ts +4 -16
- package/dist/theme/components/image.d.ts +6 -0
- package/dist/theme/components/radio.d.ts +8 -0
- package/dist/theme/components/radioGroup.d.ts +1 -1
- package/dist/theme/components/skipNavigation.d.ts +3 -0
- package/dist/theme/components/structuredContent.d.ts +0 -5
- package/dist/theme/components/template.d.ts +4 -1
- package/dist/utils/utils.d.ts +15 -0
- package/package.json +6 -7
- package/CHANGELOG.md +0 -1399
- package/src/__tests__/fileMock.ts +0 -6
- package/src/__tests__/setup.ts +0 -27
- package/src/__tests__/utils/utils.test.ts +0 -18
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +0 -42
- package/src/components/Accordion/Accordion.stories.mdx +0 -361
- package/src/components/Accordion/Accordion.test.tsx +0 -237
- package/src/components/Accordion/Accordion.tsx +0 -136
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +0 -734
- package/src/components/Autosuggest/Autosuggest.stories.mdx +0 -75
- package/src/components/Autosuggest/Autosuggest.stories.tsx +0 -211
- package/src/components/Autosuggest/_Autosuggest.scss +0 -51
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +0 -231
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +0 -144
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -98
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +0 -695
- package/src/components/Button/Button.stories.mdx +0 -320
- package/src/components/Button/Button.test.tsx +0 -184
- package/src/components/Button/Button.tsx +0 -95
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -106
- package/src/components/ButtonGroup/ButtonGroup.stories.mdx +0 -147
- package/src/components/ButtonGroup/ButtonGroup.test.tsx +0 -141
- package/src/components/ButtonGroup/ButtonGroup.tsx +0 -99
- package/src/components/ButtonGroup/__snapshots__/ButtonGroup.test.tsx.snap +0 -117
- package/src/components/Card/Card.stories.mdx +0 -1043
- package/src/components/Card/Card.test.tsx +0 -388
- package/src/components/Card/Card.tsx +0 -345
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +0 -568
- package/src/components/Chakra/Box.stories.mdx +0 -52
- package/src/components/Chakra/Center.stories.mdx +0 -96
- package/src/components/Chakra/Flex.stories.mdx +0 -111
- package/src/components/Chakra/Grid.stories.mdx +0 -89
- package/src/components/Chakra/Stack.stories.mdx +0 -109
- package/src/components/Checkbox/Checkbox.stories.mdx +0 -243
- package/src/components/Checkbox/Checkbox.test.tsx +0 -319
- package/src/components/Checkbox/Checkbox.tsx +0 -166
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +0 -616
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +0 -462
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +0 -492
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +0 -173
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +0 -1722
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +0 -163
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +0 -67
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +0 -98
- package/src/components/DatePicker/DatePicker.stories.mdx +0 -452
- package/src/components/DatePicker/DatePicker.test.tsx +0 -940
- package/src/components/DatePicker/DatePicker.tsx +0 -450
- package/src/components/DatePicker/_DatePicker.scss +0 -100
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +0 -889
- package/src/components/Fieldset/Fieldset.stories.mdx +0 -96
- package/src/components/Fieldset/Fieldset.test.tsx +0 -155
- package/src/components/Fieldset/Fieldset.tsx +0 -55
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +0 -89
- package/src/components/Form/Form.stories.mdx +0 -426
- package/src/components/Form/Form.test.tsx +0 -234
- package/src/components/Form/Form.tsx +0 -124
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -115
- package/src/components/Grid/SimpleGrid.stories.mdx +0 -338
- package/src/components/Grid/SimpleGrid.test.tsx +0 -79
- package/src/components/Grid/SimpleGrid.tsx +0 -49
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +0 -23
- package/src/components/Heading/Heading.stories.mdx +0 -184
- package/src/components/Heading/Heading.test.tsx +0 -171
- package/src/components/Heading/Heading.tsx +0 -101
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +0 -90
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +0 -172
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +0 -114
- package/src/components/HelperErrorText/HelperErrorText.tsx +0 -62
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +0 -93
- package/src/components/Hero/Hero.stories.mdx +0 -378
- package/src/components/Hero/Hero.test.tsx +0 -611
- package/src/components/Hero/Hero.tsx +0 -203
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +0 -379
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +0 -73
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +0 -54
- package/src/components/HorizontalRule/HorizontalRule.tsx +0 -27
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +0 -44
- package/src/components/Icons/Icon.stories.mdx +0 -413
- package/src/components/Icons/Icon.test.tsx +0 -120
- package/src/components/Icons/Icon.tsx +0 -187
- package/src/components/Icons/IconSvgs.tsx +0 -64
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +0 -129
- package/src/components/Image/Image.stories.mdx +0 -332
- package/src/components/Image/Image.test.tsx +0 -155
- package/src/components/Image/Image.tsx +0 -171
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +0 -269
- package/src/components/Label/Label.stories.mdx +0 -100
- package/src/components/Label/Label.test.tsx +0 -116
- package/src/components/Label/Label.tsx +0 -55
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +0 -45
- package/src/components/Link/Link.stories.mdx +0 -249
- package/src/components/Link/Link.test.tsx +0 -224
- package/src/components/Link/Link.tsx +0 -178
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +0 -286
- package/src/components/List/List.stories.mdx +0 -393
- package/src/components/List/List.test.tsx +0 -265
- package/src/components/List/List.tsx +0 -156
- package/src/components/List/__snapshots__/List.test.tsx.snap +0 -213
- package/src/components/Logo/Logo.stories.mdx +0 -290
- package/src/components/Logo/Logo.test.tsx +0 -116
- package/src/components/Logo/Logo.tsx +0 -147
- package/src/components/Logo/LogoSvgs.tsx +0 -82
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +0 -142
- package/src/components/Modal/Modal.stories.mdx +0 -301
- package/src/components/Modal/Modal.test.tsx +0 -157
- package/src/components/Modal/Modal.tsx +0 -154
- package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +0 -25
- package/src/components/Notification/Notification.stories.mdx +0 -358
- package/src/components/Notification/Notification.test.tsx +0 -279
- package/src/components/Notification/Notification.tsx +0 -224
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +0 -525
- package/src/components/Pagination/Pagination.stories.mdx +0 -184
- package/src/components/Pagination/Pagination.test.tsx +0 -419
- package/src/components/Pagination/Pagination.tsx +0 -269
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +0 -544
- package/src/components/Placeholder/Placeholder.tsx +0 -19
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +0 -360
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +0 -298
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +0 -132
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +0 -434
- package/src/components/Radio/Radio.stories.mdx +0 -216
- package/src/components/Radio/Radio.test.tsx +0 -247
- package/src/components/Radio/Radio.tsx +0 -128
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +0 -411
- package/src/components/RadioGroup/RadioGroup.stories.mdx +0 -478
- package/src/components/RadioGroup/RadioGroup.test.tsx +0 -471
- package/src/components/RadioGroup/RadioGroup.tsx +0 -170
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +0 -1430
- package/src/components/SearchBar/SearchBar.stories.mdx +0 -518
- package/src/components/SearchBar/SearchBar.test.tsx +0 -435
- package/src/components/SearchBar/SearchBar.tsx +0 -210
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +0 -1027
- package/src/components/Select/Select.stories.mdx +0 -439
- package/src/components/Select/Select.test.tsx +0 -358
- package/src/components/Select/Select.tsx +0 -181
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +0 -885
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +0 -142
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +0 -116
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +0 -123
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +0 -898
- package/src/components/SkipNavigation/SkipNavigation.stories.mdx +0 -90
- package/src/components/SkipNavigation/SkipNavigation.test.tsx +0 -63
- package/src/components/SkipNavigation/SkipNavigation.tsx +0 -51
- package/src/components/SkipNavigation/__snapshots__/SkipNavigation.test.tsx.snap +0 -130
- package/src/components/Slider/Slider.stories.mdx +0 -628
- package/src/components/Slider/Slider.test.tsx +0 -736
- package/src/components/Slider/Slider.tsx +0 -322
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +0 -2153
- package/src/components/StatusBadge/StatusBadge.stories.mdx +0 -109
- package/src/components/StatusBadge/StatusBadge.test.tsx +0 -70
- package/src/components/StatusBadge/StatusBadge.tsx +0 -35
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +0 -47
- package/src/components/StructuredContent/StructuredContent.stories.mdx +0 -567
- package/src/components/StructuredContent/StructuredContent.test.tsx +0 -435
- package/src/components/StructuredContent/StructuredContent.tsx +0 -139
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +0 -368
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +0 -206
- package/src/components/StyleGuide/Breakpoints.stories.mdx +0 -55
- package/src/components/StyleGuide/Buttons.stories.mdx +0 -194
- package/src/components/StyleGuide/ColorCard.tsx +0 -43
- package/src/components/StyleGuide/Colors.stories.mdx +0 -201
- package/src/components/StyleGuide/DesignTokens.stories.mdx +0 -193
- package/src/components/StyleGuide/Forms.stories.mdx +0 -94
- package/src/components/StyleGuide/Iconography.stories.mdx +0 -142
- package/src/components/StyleGuide/Spacing.stories.mdx +0 -116
- package/src/components/StyleGuide/Typography.stories.mdx +0 -419
- package/src/components/Table/Table.stories.mdx +0 -276
- package/src/components/Table/Table.test.tsx +0 -208
- package/src/components/Table/Table.tsx +0 -131
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +0 -1703
- package/src/components/Tabs/Tabs.stories.mdx +0 -338
- package/src/components/Tabs/Tabs.test.tsx +0 -298
- package/src/components/Tabs/Tabs.tsx +0 -264
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +0 -584
- package/src/components/Template/Template.stories.mdx +0 -691
- package/src/components/Template/Template.test.tsx +0 -309
- package/src/components/Template/Template.tsx +0 -326
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +0 -342
- package/src/components/Text/Text.stories.mdx +0 -103
- package/src/components/Text/Text.test.tsx +0 -63
- package/src/components/Text/Text.tsx +0 -50
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +0 -50
- package/src/components/TextInput/TextInput.stories.mdx +0 -268
- package/src/components/TextInput/TextInput.test.tsx +0 -451
- package/src/components/TextInput/TextInput.tsx +0 -240
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +0 -264
- package/src/components/Toggle/Toggle.stories.mdx +0 -237
- package/src/components/Toggle/Toggle.test.tsx +0 -170
- package/src/components/Toggle/Toggle.tsx +0 -126
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +0 -442
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +0 -211
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +0 -308
- package/src/components/VideoPlayer/VideoPlayer.tsx +0 -188
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +0 -187
- package/src/docs/Chakra.stories.mdx +0 -563
- package/src/docs/Welcome.stories.mdx +0 -148
- package/src/helpers/types.ts +0 -1
- package/src/hooks/tests/useCarouselStyles.test.ts +0 -140
- package/src/hooks/tests/useNYPLTheme.test.tsx +0 -36
- package/src/hooks/useCarouselStyles.stories.mdx +0 -30
- package/src/hooks/useCarouselStyles.ts +0 -35
- package/src/hooks/useNYPLTheme.stories.mdx +0 -98
- package/src/hooks/useNYPLTheme.ts +0 -91
- package/src/hooks/useWindowSize.stories.mdx +0 -23
- package/src/hooks/useWindowSize.ts +0 -40
- package/src/index.ts +0 -136
- package/src/resources.scss +0 -6
- package/src/styles/base/_01-breakpoints.scss +0 -27
- package/src/styles/base/_02-mixins.scss +0 -103
- package/src/styles/base/_place-holder.scss +0 -33
- package/src/styles/space/_space-inline.scss +0 -79
- package/src/styles/space/_space-inset.scss +0 -57
- package/src/styles/space/_space-stack.scss +0 -116
- package/src/styles.scss +0 -23
- package/src/theme/components/accordion.ts +0 -25
- package/src/theme/components/breadcrumb.ts +0 -94
- package/src/theme/components/button.ts +0 -132
- package/src/theme/components/buttonGroup.ts +0 -10
- package/src/theme/components/card.ts +0 -231
- package/src/theme/components/checkbox.ts +0 -110
- package/src/theme/components/checkboxGroup.ts +0 -10
- package/src/theme/components/componentWrapper.ts +0 -14
- package/src/theme/components/customTable.ts +0 -77
- package/src/theme/components/datePicker.ts +0 -17
- package/src/theme/components/fieldset.ts +0 -23
- package/src/theme/components/global.ts +0 -91
- package/src/theme/components/globalMixins.ts +0 -24
- package/src/theme/components/heading.ts +0 -79
- package/src/theme/components/helperErrorText.ts +0 -14
- package/src/theme/components/hero.ts +0 -238
- package/src/theme/components/horizontalRule.ts +0 -17
- package/src/theme/components/icon.ts +0 -88
- package/src/theme/components/image.ts +0 -135
- package/src/theme/components/label.ts +0 -15
- package/src/theme/components/link.ts +0 -63
- package/src/theme/components/list.ts +0 -88
- package/src/theme/components/logo.ts +0 -58
- package/src/theme/components/notification.ts +0 -132
- package/src/theme/components/pagination.ts +0 -17
- package/src/theme/components/progressIndicator.ts +0 -67
- package/src/theme/components/radio.ts +0 -103
- package/src/theme/components/radioGroup.ts +0 -10
- package/src/theme/components/searchBar.ts +0 -19
- package/src/theme/components/select.ts +0 -72
- package/src/theme/components/skeletonLoader.ts +0 -113
- package/src/theme/components/skipNavigation.ts +0 -26
- package/src/theme/components/slider.ts +0 -95
- package/src/theme/components/statusBadge.ts +0 -26
- package/src/theme/components/structuredContent.ts +0 -149
- package/src/theme/components/tabs.ts +0 -109
- package/src/theme/components/template.ts +0 -114
- package/src/theme/components/text.ts +0 -38
- package/src/theme/components/textInput.ts +0 -65
- package/src/theme/components/toggle.ts +0 -109
- package/src/theme/components/videoPlayer.ts +0 -47
- package/src/theme/foundations/breakpoints.ts +0 -24
- package/src/theme/foundations/colors.ts +0 -212
- package/src/theme/foundations/global.ts +0 -43
- package/src/theme/foundations/radii.ts +0 -7
- package/src/theme/foundations/shadows.ts +0 -5
- package/src/theme/foundations/spacing.ts +0 -136
- package/src/theme/foundations/typography.ts +0 -107
- package/src/theme/index.ts +0 -131
- package/src/theme/provider.tsx +0 -9
- package/src/theme/types.ts +0 -1
- package/src/utils/componentCategories.ts +0 -152
- package/src/utils/interfaces.ts +0 -5
- package/src/utils/utils.ts +0 -44
|
@@ -1,426 +0,0 @@
|
|
|
1
|
-
import { Flex, Spacer } from "@chakra-ui/react";
|
|
2
|
-
import { action } from "@storybook/addon-actions";
|
|
3
|
-
import {
|
|
4
|
-
ArgsTable,
|
|
5
|
-
Canvas,
|
|
6
|
-
Description,
|
|
7
|
-
Meta,
|
|
8
|
-
Story,
|
|
9
|
-
} from "@storybook/addon-docs";
|
|
10
|
-
import { withDesign } from "storybook-addon-designs";
|
|
11
|
-
|
|
12
|
-
import Button from "../Button/Button";
|
|
13
|
-
import ButtonGroup from "../ButtonGroup/ButtonGroup";
|
|
14
|
-
import Checkbox from "../Checkbox/Checkbox";
|
|
15
|
-
import CheckboxGroup from "../CheckboxGroup/CheckboxGroup";
|
|
16
|
-
import DatePicker from "../DatePicker/DatePicker";
|
|
17
|
-
import Form, { FormRow, FormField } from "./Form";
|
|
18
|
-
import Heading from "../Heading/Heading";
|
|
19
|
-
import HorizontalRule from "../HorizontalRule/HorizontalRule";
|
|
20
|
-
import Label from "../Label/Label";
|
|
21
|
-
import Radio from "../Radio/Radio";
|
|
22
|
-
import RadioGroup from "../RadioGroup/RadioGroup";
|
|
23
|
-
import Select from "../Select/Select";
|
|
24
|
-
import SimpleGrid from "../Grid/SimpleGrid";
|
|
25
|
-
import TextInput from "../TextInput/TextInput";
|
|
26
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
27
|
-
|
|
28
|
-
<Meta
|
|
29
|
-
title={getCategory("Form")}
|
|
30
|
-
component={Form}
|
|
31
|
-
decorators={[withDesign]}
|
|
32
|
-
parameters={{
|
|
33
|
-
design: {
|
|
34
|
-
type: "figma",
|
|
35
|
-
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
|
|
36
|
-
},
|
|
37
|
-
jest: ["Form.test.tsx"],
|
|
38
|
-
}}
|
|
39
|
-
argTypes={{
|
|
40
|
-
action: { control: false },
|
|
41
|
-
id: { control: false },
|
|
42
|
-
method: {
|
|
43
|
-
control: { type: "radio" },
|
|
44
|
-
options: ["get", "post"],
|
|
45
|
-
},
|
|
46
|
-
gap: {
|
|
47
|
-
control: { type: "select" },
|
|
48
|
-
table: { defaultValue: { summary: "grid.l" } },
|
|
49
|
-
options: [
|
|
50
|
-
"grid.xxs",
|
|
51
|
-
"grid.xs",
|
|
52
|
-
"grid.s",
|
|
53
|
-
"grid.m",
|
|
54
|
-
"grid.l",
|
|
55
|
-
"grid.xl",
|
|
56
|
-
"grid.xxl",
|
|
57
|
-
],
|
|
58
|
-
},
|
|
59
|
-
}}
|
|
60
|
-
/>
|
|
61
|
-
|
|
62
|
-
# Form
|
|
63
|
-
|
|
64
|
-
| Component Version | DS Version |
|
|
65
|
-
| ----------------- | ---------- |
|
|
66
|
-
| Added | `0.23.2` |
|
|
67
|
-
| Latest | `0.28.0` |
|
|
68
|
-
|
|
69
|
-
## Table of Contents
|
|
70
|
-
|
|
71
|
-
- [Overview](#overview)
|
|
72
|
-
- [Component Props](#component-props)
|
|
73
|
-
- [Accessibility](#accessibility)
|
|
74
|
-
- [Spacing Variants](#spacing-variants)
|
|
75
|
-
- [Example Code](#example-code)
|
|
76
|
-
|
|
77
|
-
## Overview
|
|
78
|
-
|
|
79
|
-
<Description of={Form} />
|
|
80
|
-
|
|
81
|
-
The `Form` component renders a standard `<form>` element and should be used to
|
|
82
|
-
handle layout and spacing for child input fields. `FormRow` and `FormField`
|
|
83
|
-
components should be used to build the `<form>` structure and to arrange input
|
|
84
|
-
fields as needed.
|
|
85
|
-
|
|
86
|
-
```jsx
|
|
87
|
-
<Form id="form-id">
|
|
88
|
-
<FormRow>
|
|
89
|
-
<FormField>{/* ... */}</FormField>
|
|
90
|
-
</FormRow>
|
|
91
|
-
<FormRow>
|
|
92
|
-
<FormField>{/* ... */}</FormField>
|
|
93
|
-
</FormRow>
|
|
94
|
-
</Form>
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
`FormField` should be used as a parent for all input components from the
|
|
98
|
-
Reservoir Design System (DS) (`Button`, `Select`, `TextInput`, etc.).
|
|
99
|
-
|
|
100
|
-
`FormRow` should be used as a parent of multiple `FormField` components when
|
|
101
|
-
you need to render multiple input components in a horizontal row.
|
|
102
|
-
|
|
103
|
-
## Component Props
|
|
104
|
-
|
|
105
|
-
<Canvas withToolbar>
|
|
106
|
-
<Story
|
|
107
|
-
name="Form with Controls"
|
|
108
|
-
args={{
|
|
109
|
-
action: "/end/point",
|
|
110
|
-
className: undefined,
|
|
111
|
-
id: "form-id",
|
|
112
|
-
method: "get",
|
|
113
|
-
gap: "grid.l",
|
|
114
|
-
}}
|
|
115
|
-
>
|
|
116
|
-
{(args) => (
|
|
117
|
-
<Form {...args} id="form-id">
|
|
118
|
-
<FormRow>
|
|
119
|
-
<FormField>
|
|
120
|
-
<TextInput
|
|
121
|
-
helperText="Make sure to complete this field."
|
|
122
|
-
id="first-name"
|
|
123
|
-
isRequired
|
|
124
|
-
labelText="First Name"
|
|
125
|
-
/>
|
|
126
|
-
</FormField>
|
|
127
|
-
<FormField>
|
|
128
|
-
<TextInput
|
|
129
|
-
helperText="Make sure to complete this field."
|
|
130
|
-
id="last-name"
|
|
131
|
-
isRequired
|
|
132
|
-
labelText="Last Name"
|
|
133
|
-
/>
|
|
134
|
-
</FormField>
|
|
135
|
-
<FormField>
|
|
136
|
-
<DatePicker
|
|
137
|
-
dateType="full"
|
|
138
|
-
dateFormat="yyyy-MM-dd"
|
|
139
|
-
helperTextFrom="From this date."
|
|
140
|
-
helperTextTo="To this date."
|
|
141
|
-
helperText="Select a valid date range."
|
|
142
|
-
id="date-range"
|
|
143
|
-
invalidText="Please select a valid date range."
|
|
144
|
-
isDateRange
|
|
145
|
-
labelText="Select the date range you want to visit NYPL"
|
|
146
|
-
minDate="1/1/2021"
|
|
147
|
-
maxDate="1/1/2022"
|
|
148
|
-
nameFrom="visit-dates"
|
|
149
|
-
showLabel={false}
|
|
150
|
-
/>
|
|
151
|
-
</FormField>
|
|
152
|
-
</FormRow>
|
|
153
|
-
<FormField>
|
|
154
|
-
<TextInput
|
|
155
|
-
helperText="Make sure to complete this field."
|
|
156
|
-
id="username"
|
|
157
|
-
isRequired
|
|
158
|
-
labelText="Username"
|
|
159
|
-
/>
|
|
160
|
-
</FormField>
|
|
161
|
-
<FormField>
|
|
162
|
-
<TextInput
|
|
163
|
-
helperText="Make sure to complete this field."
|
|
164
|
-
id="password"
|
|
165
|
-
isRequired
|
|
166
|
-
labelText="Password"
|
|
167
|
-
/>
|
|
168
|
-
</FormField>
|
|
169
|
-
<FormRow>
|
|
170
|
-
<FormField>
|
|
171
|
-
<TextInput
|
|
172
|
-
helperText="This one is up to you."
|
|
173
|
-
id="phone"
|
|
174
|
-
labelText="Phone Field"
|
|
175
|
-
type="tel"
|
|
176
|
-
/>
|
|
177
|
-
</FormField>
|
|
178
|
-
<FormField>
|
|
179
|
-
<TextInput
|
|
180
|
-
helperText="This one is up to you."
|
|
181
|
-
id="url"
|
|
182
|
-
labelText="URL Field"
|
|
183
|
-
type="url"
|
|
184
|
-
/>
|
|
185
|
-
</FormField>
|
|
186
|
-
<FormField>
|
|
187
|
-
<TextInput
|
|
188
|
-
helperText="This one is up to you."
|
|
189
|
-
id="age"
|
|
190
|
-
labelText="Age"
|
|
191
|
-
type="number"
|
|
192
|
-
/>
|
|
193
|
-
</FormField>
|
|
194
|
-
</FormRow>
|
|
195
|
-
<FormRow>
|
|
196
|
-
<FormField>
|
|
197
|
-
<CheckboxGroup
|
|
198
|
-
id="checkbox-group"
|
|
199
|
-
isFullWidth
|
|
200
|
-
labelText="Checkbox Group"
|
|
201
|
-
name="checkbox-example"
|
|
202
|
-
>
|
|
203
|
-
<Checkbox
|
|
204
|
-
id="arts"
|
|
205
|
-
labelText={
|
|
206
|
-
<Flex>
|
|
207
|
-
<span>Arts</span>
|
|
208
|
-
<Spacer />
|
|
209
|
-
<span>4</span>
|
|
210
|
-
</Flex>
|
|
211
|
-
}
|
|
212
|
-
value="arts"
|
|
213
|
-
/>
|
|
214
|
-
<Checkbox
|
|
215
|
-
id="english"
|
|
216
|
-
labelText={
|
|
217
|
-
<Flex>
|
|
218
|
-
<span>English</span>
|
|
219
|
-
<Spacer />
|
|
220
|
-
<span>23</span>
|
|
221
|
-
</Flex>
|
|
222
|
-
}
|
|
223
|
-
value="English"
|
|
224
|
-
/>
|
|
225
|
-
<Checkbox
|
|
226
|
-
id="science"
|
|
227
|
-
labelText={
|
|
228
|
-
<Flex>
|
|
229
|
-
<span>Science</span>
|
|
230
|
-
<Spacer />
|
|
231
|
-
<span>10</span>
|
|
232
|
-
</Flex>
|
|
233
|
-
}
|
|
234
|
-
value="Science"
|
|
235
|
-
/>
|
|
236
|
-
<Checkbox
|
|
237
|
-
id="math"
|
|
238
|
-
labelText={
|
|
239
|
-
<Flex>
|
|
240
|
-
<span>Math</span>
|
|
241
|
-
<Spacer />
|
|
242
|
-
<span>3</span>
|
|
243
|
-
</Flex>
|
|
244
|
-
}
|
|
245
|
-
value="Math"
|
|
246
|
-
/>
|
|
247
|
-
</CheckboxGroup>
|
|
248
|
-
</FormField>
|
|
249
|
-
<FormField>
|
|
250
|
-
<RadioGroup id="radio-group" labelText="Radio Group" name="rg1">
|
|
251
|
-
<Radio id="radio1" labelText="Radio 1" value="radio1" />
|
|
252
|
-
<Radio id="radio2" labelText="Radio 2" value="radio2" />
|
|
253
|
-
<Radio id="radio3" labelText="Radio 3" value="radio3" />
|
|
254
|
-
<Radio id="radio4" labelText="Radio 4" value="radio4" />
|
|
255
|
-
</RadioGroup>
|
|
256
|
-
</FormField>
|
|
257
|
-
<FormField>
|
|
258
|
-
<Select
|
|
259
|
-
helperText="The select field helper text."
|
|
260
|
-
id="select"
|
|
261
|
-
labelText="Select Field"
|
|
262
|
-
showLabel={true}
|
|
263
|
-
>
|
|
264
|
-
<option>Option 1</option>
|
|
265
|
-
<option>Option 2</option>
|
|
266
|
-
<option>Option 3</option>
|
|
267
|
-
<option>Option 4</option>
|
|
268
|
-
<option>Option 5</option>
|
|
269
|
-
</Select>
|
|
270
|
-
</FormField>
|
|
271
|
-
</FormRow>
|
|
272
|
-
<FormRow>
|
|
273
|
-
<FormField>
|
|
274
|
-
<ButtonGroup>
|
|
275
|
-
<Button id="submit">Submit</Button>
|
|
276
|
-
</ButtonGroup>
|
|
277
|
-
</FormField>
|
|
278
|
-
</FormRow>
|
|
279
|
-
</Form>
|
|
280
|
-
)}
|
|
281
|
-
</Story>
|
|
282
|
-
</Canvas>
|
|
283
|
-
|
|
284
|
-
<ArgsTable story="Form with Controls" />
|
|
285
|
-
|
|
286
|
-
## Accessibility
|
|
287
|
-
|
|
288
|
-
The `Form` component renders a standard `<form>` element and should be used to
|
|
289
|
-
wrap all form elements. A `Form` should have a `Button` component with a `type`
|
|
290
|
-
of `submit` to submit the form to a server through the `Form`'s `action` prop.
|
|
291
|
-
|
|
292
|
-
Resources:
|
|
293
|
-
|
|
294
|
-
- [WebAIM Creating Accessible Forms](https://webaim.org/techniques/forms/)
|
|
295
|
-
- [Deque The Anatomy of Accessible Forms: Best Practices](https://www.deque.com/blog/anatomy-of-accessible-forms-best-practices/)
|
|
296
|
-
|
|
297
|
-
## Spacing Variants
|
|
298
|
-
|
|
299
|
-
export const formRow = (gapValue) => {
|
|
300
|
-
const labelText = `Size: ${gapValue}`;
|
|
301
|
-
return (
|
|
302
|
-
<li key={gapValue}>
|
|
303
|
-
<Heading level="three">{labelText}</Heading>
|
|
304
|
-
<Form gap={gapValue} id={`form-spacing-${gapValue}`}>
|
|
305
|
-
<FormRow>
|
|
306
|
-
<FormField>
|
|
307
|
-
<Select
|
|
308
|
-
helperText="The select field helper text."
|
|
309
|
-
id={`select-spacing-${gapValue}-1`}
|
|
310
|
-
labelText="Select Field"
|
|
311
|
-
showLabel={true}
|
|
312
|
-
>
|
|
313
|
-
<option>Option 1</option>
|
|
314
|
-
<option>Option 2</option>
|
|
315
|
-
<option>Option 3</option>
|
|
316
|
-
<option>Option 4</option>
|
|
317
|
-
</Select>
|
|
318
|
-
</FormField>
|
|
319
|
-
<FormField>
|
|
320
|
-
<Select
|
|
321
|
-
helperText="The select field helper text."
|
|
322
|
-
id={`select-spacing-${gapValue}-2`}
|
|
323
|
-
labelText="Select Field"
|
|
324
|
-
showLabel={true}
|
|
325
|
-
>
|
|
326
|
-
<option>Option 1</option>
|
|
327
|
-
<option>Option 2</option>
|
|
328
|
-
<option>Option 3</option>
|
|
329
|
-
<option>Option 4</option>
|
|
330
|
-
</Select>
|
|
331
|
-
</FormField>
|
|
332
|
-
<FormField>
|
|
333
|
-
<Select
|
|
334
|
-
helperText="The select field helper text."
|
|
335
|
-
id={`select-spacing-${gapValue}-3`}
|
|
336
|
-
labelText="Select Field"
|
|
337
|
-
showLabel={true}
|
|
338
|
-
>
|
|
339
|
-
<option>Option 1</option>
|
|
340
|
-
<option>Option 2</option>
|
|
341
|
-
<option>Option 3</option>
|
|
342
|
-
<option>Option 4</option>
|
|
343
|
-
</Select>
|
|
344
|
-
</FormField>
|
|
345
|
-
</FormRow>
|
|
346
|
-
</Form>
|
|
347
|
-
<HorizontalRule />
|
|
348
|
-
</li>
|
|
349
|
-
);
|
|
350
|
-
};
|
|
351
|
-
export const sizes = [];
|
|
352
|
-
export const gapValues = [
|
|
353
|
-
"grid.xxs",
|
|
354
|
-
"grid.xs",
|
|
355
|
-
"grid.s",
|
|
356
|
-
"grid.m",
|
|
357
|
-
"grid.l",
|
|
358
|
-
"grid.xl",
|
|
359
|
-
"grid.xxl",
|
|
360
|
-
];
|
|
361
|
-
for (const gap in gapValues) {
|
|
362
|
-
sizes.push(formRow(gapValues[gap]));
|
|
363
|
-
}
|
|
364
|
-
export const getForms = (list) => <ul style={{ listStyle: "none" }}>{list}</ul>;
|
|
365
|
-
|
|
366
|
-
By default, the `Form` component will handle the NYPL spacing around form input
|
|
367
|
-
elements. The default spacing value is large `grid.l`, which corresponds to the
|
|
368
|
-
CSS variable `--nypl-space-l` (2rem / 32px).
|
|
369
|
-
|
|
370
|
-
**IMPORTANT:** The default spacing should not be overwritten without a very
|
|
371
|
-
good reason.
|
|
372
|
-
|
|
373
|
-
Below are examples of the spacing values available to use in the `gap` prop of
|
|
374
|
-
the `Form` component: `"grid.xxs"`, `"grid.xs"`, `"grid.s"`, `"grid.m"`,
|
|
375
|
-
`"grid.l"`, `"grid.xl"`, `"grid.xxl"`.
|
|
376
|
-
|
|
377
|
-
<Canvas>
|
|
378
|
-
<Story name="Spacing Variants">{getForms(sizes)}</Story>
|
|
379
|
-
</Canvas>
|
|
380
|
-
|
|
381
|
-
## Example Code
|
|
382
|
-
|
|
383
|
-
```jsx
|
|
384
|
-
<Form action="/end/point" method="get" gap="grid.l" id="example-form">
|
|
385
|
-
<FormField>
|
|
386
|
-
<TextInput
|
|
387
|
-
labelText="Username"
|
|
388
|
-
helperText="Make sure to complete this field."
|
|
389
|
-
isRequired
|
|
390
|
-
/>
|
|
391
|
-
</FormField>
|
|
392
|
-
<FormField>
|
|
393
|
-
<TextInput
|
|
394
|
-
labelText="Password"
|
|
395
|
-
helperText="Make sure to complete this field."
|
|
396
|
-
isRequired
|
|
397
|
-
/>
|
|
398
|
-
</FormField>
|
|
399
|
-
<FormRow>
|
|
400
|
-
<FormField>
|
|
401
|
-
<TextInput
|
|
402
|
-
labelText="Phone Field"
|
|
403
|
-
helperText="This one is up to you."
|
|
404
|
-
type="tel"
|
|
405
|
-
/>
|
|
406
|
-
</FormField>
|
|
407
|
-
<FormField>
|
|
408
|
-
<TextInput
|
|
409
|
-
labelText="URL Field"
|
|
410
|
-
helperText="This one is up to you."
|
|
411
|
-
type="url"
|
|
412
|
-
/>
|
|
413
|
-
</FormField>
|
|
414
|
-
<FormField>
|
|
415
|
-
<TextInput
|
|
416
|
-
labelText="Age"
|
|
417
|
-
helperText="This one is up to you."
|
|
418
|
-
type="number"
|
|
419
|
-
/>
|
|
420
|
-
</FormField>
|
|
421
|
-
</FormRow>
|
|
422
|
-
<FormField>
|
|
423
|
-
<Button>Submit</Button>
|
|
424
|
-
</FormField>
|
|
425
|
-
</Form>
|
|
426
|
-
```
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { fireEvent, render, screen } from "@testing-library/react";
|
|
3
|
-
import { axe } from "jest-axe";
|
|
4
|
-
import renderer from "react-test-renderer";
|
|
5
|
-
|
|
6
|
-
import Form, { FormRow, FormField } from "./Form";
|
|
7
|
-
import TextInput from "../TextInput/TextInput";
|
|
8
|
-
|
|
9
|
-
describe("Form Accessibility", () => {
|
|
10
|
-
it("passes axe accessibility test", async () => {
|
|
11
|
-
const { container } = render(<Form id="form" />);
|
|
12
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it("passes axe accessibility test for the full hierachy", async () => {
|
|
16
|
-
const { container } = render(
|
|
17
|
-
<Form id="form">
|
|
18
|
-
<FormRow>
|
|
19
|
-
<FormField>Form Field 1</FormField>
|
|
20
|
-
<FormField>Form Field 2</FormField>
|
|
21
|
-
<FormField>Form Field 3</FormField>
|
|
22
|
-
</FormRow>
|
|
23
|
-
</Form>
|
|
24
|
-
);
|
|
25
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe("Form Snapshot", () => {
|
|
30
|
-
it("Renders the UI snapshot correctly", () => {
|
|
31
|
-
const tree = renderer
|
|
32
|
-
.create(
|
|
33
|
-
<Form id="snapshot-form">
|
|
34
|
-
<FormRow>
|
|
35
|
-
<FormField>Form Field 1</FormField>
|
|
36
|
-
<FormField>Form Field 2</FormField>
|
|
37
|
-
<FormField>Form Field 3</FormField>
|
|
38
|
-
</FormRow>
|
|
39
|
-
</Form>
|
|
40
|
-
)
|
|
41
|
-
.toJSON();
|
|
42
|
-
const withChakraProps = renderer
|
|
43
|
-
.create(
|
|
44
|
-
<Form id="chakra" p="20px" color="ui.error.primary">
|
|
45
|
-
<FormRow>
|
|
46
|
-
<FormField>Form Field 1</FormField>
|
|
47
|
-
<FormField>Form Field 2</FormField>
|
|
48
|
-
<FormField>Form Field 3</FormField>
|
|
49
|
-
</FormRow>
|
|
50
|
-
</Form>
|
|
51
|
-
)
|
|
52
|
-
.toJSON();
|
|
53
|
-
const withOtherProps = renderer
|
|
54
|
-
.create(
|
|
55
|
-
<Form id="props" data-testid="props">
|
|
56
|
-
<FormRow>
|
|
57
|
-
<FormField>Form Field 1</FormField>
|
|
58
|
-
<FormField>Form Field 2</FormField>
|
|
59
|
-
<FormField>Form Field 3</FormField>
|
|
60
|
-
</FormRow>
|
|
61
|
-
</Form>
|
|
62
|
-
)
|
|
63
|
-
.toJSON();
|
|
64
|
-
|
|
65
|
-
expect(tree).toMatchSnapshot();
|
|
66
|
-
expect(withChakraProps).toMatchSnapshot();
|
|
67
|
-
expect(withOtherProps).toMatchSnapshot();
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
describe("Form", () => {
|
|
72
|
-
it("Renders a <form> element", () => {
|
|
73
|
-
render(<Form id="form" />);
|
|
74
|
-
expect(screen.getByRole("form")).toBeInTheDocument();
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it("Renders a <form> element with child FormRow element", () => {
|
|
78
|
-
render(
|
|
79
|
-
<Form id="form">
|
|
80
|
-
<FormRow />
|
|
81
|
-
</Form>
|
|
82
|
-
);
|
|
83
|
-
const form = screen.getByRole("form");
|
|
84
|
-
const formRow = form.firstChild;
|
|
85
|
-
expect(form).toBeInTheDocument();
|
|
86
|
-
expect(formRow).toBeInTheDocument();
|
|
87
|
-
expect(formRow).toHaveStyle({
|
|
88
|
-
display: "grid",
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it("Renders a <form> element with child FormField element", () => {
|
|
93
|
-
render(
|
|
94
|
-
<Form id="form">
|
|
95
|
-
<FormField />
|
|
96
|
-
</Form>
|
|
97
|
-
);
|
|
98
|
-
const form = screen.getByRole("form");
|
|
99
|
-
const formField = form.firstChild;
|
|
100
|
-
expect(form).toBeInTheDocument();
|
|
101
|
-
expect(formField).toBeInTheDocument();
|
|
102
|
-
expect(formField).toHaveStyle({
|
|
103
|
-
display: "grid",
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it("Renders a <form> element with FormRow, FormField and input elements properly nested", () => {
|
|
108
|
-
render(
|
|
109
|
-
<Form id="form">
|
|
110
|
-
<FormRow>
|
|
111
|
-
<FormField>
|
|
112
|
-
<TextInput id="textInput" labelText="Input Field" />
|
|
113
|
-
</FormField>
|
|
114
|
-
</FormRow>
|
|
115
|
-
</Form>
|
|
116
|
-
);
|
|
117
|
-
const form = screen.getByRole("form");
|
|
118
|
-
const formRow = form.firstChild;
|
|
119
|
-
const formField = formRow?.firstChild;
|
|
120
|
-
const textInput = screen.getByRole("textbox");
|
|
121
|
-
expect(form).toBeInTheDocument();
|
|
122
|
-
expect(formRow).toBeInTheDocument();
|
|
123
|
-
expect(formRow).toHaveStyle({
|
|
124
|
-
display: "grid",
|
|
125
|
-
});
|
|
126
|
-
expect(formField).toBeInTheDocument();
|
|
127
|
-
expect(formField).toHaveStyle({
|
|
128
|
-
display: "grid",
|
|
129
|
-
});
|
|
130
|
-
expect(textInput).toBeInTheDocument();
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it("Renders a <form> element with custom `action` and `method` attributes", () => {
|
|
134
|
-
render(<Form id="form" action="/end/point" method="get" />);
|
|
135
|
-
const form = screen.getByRole("form");
|
|
136
|
-
expect(form).toBeInTheDocument();
|
|
137
|
-
expect(form).toHaveAttribute("action", "/end/point");
|
|
138
|
-
expect(form).toHaveAttribute("method", "get");
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
it("passes down the `Form`'s id down to its children", () => {
|
|
142
|
-
const { container } = render(
|
|
143
|
-
<Form id="formId">
|
|
144
|
-
<FormRow>
|
|
145
|
-
<FormField>
|
|
146
|
-
<TextInput id="textInput" labelText="Input Field" />
|
|
147
|
-
</FormField>
|
|
148
|
-
<FormField>
|
|
149
|
-
<TextInput id="textInput" labelText="Input Field" />
|
|
150
|
-
</FormField>
|
|
151
|
-
</FormRow>
|
|
152
|
-
<FormRow>
|
|
153
|
-
<FormField>
|
|
154
|
-
<TextInput id="textInput" labelText="Input Field" />
|
|
155
|
-
</FormField>
|
|
156
|
-
<FormField>
|
|
157
|
-
<TextInput id="textInput" labelText="Input Field" />
|
|
158
|
-
</FormField>
|
|
159
|
-
</FormRow>
|
|
160
|
-
</Form>
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
expect(container.querySelector("#formId")).toBeInTheDocument();
|
|
164
|
-
// The first `FormRow` adds "child0" to its id
|
|
165
|
-
expect(container.querySelector("#formId-child0")).toBeInTheDocument();
|
|
166
|
-
// The first `FormRow`'s first `FormField` adds "grandchild0" to its id
|
|
167
|
-
expect(
|
|
168
|
-
container.querySelector("#formId-child0-grandchild0")
|
|
169
|
-
).toBeInTheDocument();
|
|
170
|
-
// The first `FormRow`'s second `FormField` adds "grandchild1" to its id
|
|
171
|
-
expect(
|
|
172
|
-
container.querySelector("#formId-child0-grandchild1")
|
|
173
|
-
).toBeInTheDocument();
|
|
174
|
-
// The second `FormRow` adds "child1" to its id
|
|
175
|
-
expect(container.querySelector("#formId-child1")).toBeInTheDocument();
|
|
176
|
-
// The second `FormRow`'s first `FormField` adds "grandchild0" to its id
|
|
177
|
-
expect(
|
|
178
|
-
container.querySelector("#formId-child1-grandchild0")
|
|
179
|
-
).toBeInTheDocument();
|
|
180
|
-
// The second `FormRow`'s second `FormField` adds "grandchild1" to its id
|
|
181
|
-
expect(
|
|
182
|
-
container.querySelector("#formId-child1-grandchild1")
|
|
183
|
-
).toBeInTheDocument();
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it("logs a warning if a child of `FormRow` is not a `FormField`", () => {
|
|
187
|
-
const warn = jest.spyOn(console, "warn");
|
|
188
|
-
render(
|
|
189
|
-
<Form id="form">
|
|
190
|
-
<FormRow>
|
|
191
|
-
<div>Not a FormField</div>
|
|
192
|
-
</FormRow>
|
|
193
|
-
</Form>
|
|
194
|
-
);
|
|
195
|
-
expect(warn).toHaveBeenCalledWith(
|
|
196
|
-
"NYPL Reservoir FormRow: Children must be `FormField` components."
|
|
197
|
-
);
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
it("calls the onSubmit function", () => {
|
|
201
|
-
const onSubmit = jest.fn();
|
|
202
|
-
render(
|
|
203
|
-
<Form id="form" onSubmit={onSubmit}>
|
|
204
|
-
<FormRow>
|
|
205
|
-
<FormField>
|
|
206
|
-
<TextInput id="textInput" labelText="Input Field" />
|
|
207
|
-
</FormField>
|
|
208
|
-
</FormRow>
|
|
209
|
-
</Form>
|
|
210
|
-
);
|
|
211
|
-
const form = screen.getByRole("form");
|
|
212
|
-
expect(onSubmit).toHaveBeenCalledTimes(0);
|
|
213
|
-
fireEvent.submit(form);
|
|
214
|
-
expect(onSubmit).toHaveBeenCalledTimes(1);
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
it("Logs a warning when there is no `id` passed", () => {
|
|
218
|
-
const warn = jest.spyOn(console, "warn");
|
|
219
|
-
render(
|
|
220
|
-
// @ts-ignore: Typescript complains when a required prop is not passed, but
|
|
221
|
-
// here we don't want to pass the required prop to make sure the warning appears.
|
|
222
|
-
<Form>
|
|
223
|
-
<FormRow>
|
|
224
|
-
<FormField>
|
|
225
|
-
<TextInput id="textInput" labelText="Input Field" />
|
|
226
|
-
</FormField>
|
|
227
|
-
</FormRow>
|
|
228
|
-
</Form>
|
|
229
|
-
);
|
|
230
|
-
expect(warn).toHaveBeenCalledWith(
|
|
231
|
-
"NYPL Reservoir Form: This component's required `id` prop was not passed."
|
|
232
|
-
);
|
|
233
|
-
});
|
|
234
|
-
});
|