@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
|
@@ -1,108 +1,109 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import {
|
|
3
|
+
Box,
|
|
4
|
+
Radio as ChakraRadio,
|
|
5
|
+
useMultiStyleConfig,
|
|
6
|
+
} from "@chakra-ui/react";
|
|
7
|
+
|
|
5
8
|
import generateUUID from "../../helpers/generateUUID";
|
|
9
|
+
import HelperErrorText from "../HelperErrorText/HelperErrorText";
|
|
6
10
|
|
|
7
11
|
export interface RadioProps {
|
|
8
|
-
/**
|
|
9
|
-
labelText: string;
|
|
10
|
-
/** Additional attributes to pass to the `<input>` tag */
|
|
11
|
-
attributes?: { [key: string]: any };
|
|
12
|
-
/** When using the Radio as a "controlled" form element, you can specify the Radio's checked state using this prop. Learn more about controlled and uncontrolled form fields: https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ */
|
|
13
|
-
checked?: boolean;
|
|
14
|
-
/** className you can add in addition to 'input' */
|
|
12
|
+
/** Additional class name. */
|
|
15
13
|
className?: string;
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
/** Optional string to populate the HelperErrorText for
|
|
21
|
-
errorText?: string;
|
|
22
|
-
/** Optional string to populate the HelperErrorText for standard state */
|
|
14
|
+
/** Optional string to populate the HelperErrorText for the error state
|
|
15
|
+
* when `isInvalid` is true.
|
|
16
|
+
*/
|
|
17
|
+
invalidText?: string;
|
|
18
|
+
/** Optional string to populate the HelperErrorText for the standard state. */
|
|
23
19
|
helperText?: string;
|
|
24
20
|
/** ID that other components can cross reference for accessibility purposes */
|
|
25
21
|
id?: string;
|
|
26
|
-
/**
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
/** When using the Radio as a "controlled" form element, you can specify the
|
|
23
|
+
* `Radio`'s checked state using this prop. You must also pass an onChange prop.
|
|
24
|
+
* Learn more about controlled and uncontrolled form fields: https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ */
|
|
25
|
+
isChecked?: boolean;
|
|
26
|
+
/** Adds the 'disabled' and `aria-disabled` attributes to the input when true.
|
|
27
|
+
* This also makes the text italic and color scheme gray.
|
|
28
|
+
*/
|
|
29
|
+
isDisabled?: boolean;
|
|
30
|
+
/** Adds the 'aria-invalid' attribute to the input when true. This also makes
|
|
31
|
+
* the color theme "NYPL error" red for the button and text.
|
|
32
|
+
*/
|
|
33
|
+
isInvalid?: boolean;
|
|
34
|
+
/** Adds the 'required' attribute to the input when true. */
|
|
35
|
+
isRequired?: boolean;
|
|
36
|
+
/** The radio button's label. This will serve as the text content for the
|
|
37
|
+
* `<label>` element if `showlabel` is true, or an "aria-label" if `showLabel`
|
|
38
|
+
* is false. */
|
|
39
|
+
labelText: string;
|
|
40
|
+
/** Used to reference the input element in forms. */
|
|
29
41
|
name?: string;
|
|
30
|
-
/**
|
|
42
|
+
/** Should be passed along with `isChecked` for controlled components. */
|
|
31
43
|
onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
32
|
-
/** Offers the ability to show the radio's label onscreen or hide it. Refer
|
|
33
|
-
|
|
34
|
-
|
|
44
|
+
/** Offers the ability to show the radio's label onscreen or hide it. Refer
|
|
45
|
+
* to the `labelText` property for more information. */
|
|
46
|
+
showLabel?: boolean;
|
|
47
|
+
/** Populates the value of the input. */
|
|
35
48
|
value?: string;
|
|
36
49
|
}
|
|
37
50
|
|
|
38
|
-
export const onChangeDefault = () => {
|
|
39
|
-
return;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
51
|
const Radio = React.forwardRef<HTMLInputElement, RadioProps>((props, ref?) => {
|
|
43
52
|
const {
|
|
44
|
-
checked,
|
|
45
53
|
className,
|
|
46
|
-
|
|
47
|
-
errored,
|
|
48
|
-
errorText,
|
|
54
|
+
invalidText,
|
|
49
55
|
helperText,
|
|
50
|
-
id,
|
|
56
|
+
id = generateUUID(),
|
|
57
|
+
isChecked,
|
|
58
|
+
isDisabled = false,
|
|
59
|
+
isInvalid = false,
|
|
60
|
+
isRequired = false,
|
|
51
61
|
labelText,
|
|
52
62
|
name,
|
|
53
|
-
|
|
63
|
+
onChange,
|
|
64
|
+
showLabel = true,
|
|
54
65
|
value,
|
|
55
66
|
} = props;
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const radioID = id || generateUUID();
|
|
60
|
-
const onChange = props.onChange || onChangeDefault;
|
|
61
|
-
|
|
62
|
-
const footnote = errored ? errorText : helperText;
|
|
67
|
+
const styles = useMultiStyleConfig("Radio", {});
|
|
68
|
+
const footnote = isInvalid ? invalidText : helperText;
|
|
69
|
+
const attributes = {};
|
|
63
70
|
|
|
64
71
|
if (!showLabel) {
|
|
65
72
|
attributes["aria-label"] =
|
|
66
73
|
labelText && footnote ? `${labelText} - ${footnote}` : labelText;
|
|
67
74
|
} else {
|
|
68
|
-
if (footnote)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (errored) {
|
|
72
|
-
modifiers.push("error");
|
|
75
|
+
if (footnote) {
|
|
76
|
+
attributes["aria-describedby"] = `${id}-helperText`;
|
|
77
|
+
}
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
return (
|
|
76
81
|
<>
|
|
77
|
-
<
|
|
78
|
-
{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
})}
|
|
86
|
-
className={bem("radio", modifiers, "", [className])}
|
|
87
|
-
disabled={disabled}
|
|
88
|
-
id={radioID}
|
|
89
|
-
name={name || "default"}
|
|
90
|
-
ref={ref}
|
|
91
|
-
type="radio"
|
|
92
|
-
value={value}
|
|
82
|
+
<ChakraRadio
|
|
83
|
+
className={className}
|
|
84
|
+
id={id}
|
|
85
|
+
isChecked={isChecked}
|
|
86
|
+
isDisabled={isDisabled}
|
|
87
|
+
isInvalid={isInvalid}
|
|
88
|
+
isRequired={isRequired}
|
|
89
|
+
name={name}
|
|
93
90
|
onChange={onChange}
|
|
91
|
+
value={value}
|
|
92
|
+
ref={ref}
|
|
93
|
+
__css={styles}
|
|
94
94
|
{...attributes}
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
>
|
|
96
|
+
{showLabel && labelText}
|
|
97
|
+
</ChakraRadio>
|
|
97
98
|
{footnote && showLabel && (
|
|
98
|
-
<
|
|
99
|
-
{
|
|
100
|
-
|
|
99
|
+
<Box __css={styles.helper} aria-disabled={isDisabled}>
|
|
100
|
+
<HelperErrorText isError={isInvalid} id={`${id}-helperText`}>
|
|
101
|
+
{footnote}
|
|
102
|
+
</HelperErrorText>
|
|
103
|
+
</Box>
|
|
101
104
|
)}
|
|
102
105
|
</>
|
|
103
106
|
);
|
|
104
107
|
});
|
|
105
108
|
|
|
106
|
-
Radio.displayName = "Radio";
|
|
107
|
-
|
|
108
109
|
export default Radio;
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`Radio Button renders the UI snapshot correctly 1`] = `
|
|
4
|
+
<label
|
|
5
|
+
className="chakra-radio css-78joka"
|
|
6
|
+
>
|
|
7
|
+
<input
|
|
8
|
+
checked={false}
|
|
9
|
+
className="chakra-radio__input"
|
|
10
|
+
disabled={false}
|
|
11
|
+
id="inputID"
|
|
12
|
+
onBlur={[Function]}
|
|
13
|
+
onChange={[Function]}
|
|
14
|
+
onFocus={[Function]}
|
|
15
|
+
onKeyDown={[Function]}
|
|
16
|
+
onKeyUp={[Function]}
|
|
17
|
+
required={false}
|
|
18
|
+
style={
|
|
19
|
+
Object {
|
|
20
|
+
"border": "0px",
|
|
21
|
+
"clip": "rect(0px, 0px, 0px, 0px)",
|
|
22
|
+
"height": "1px",
|
|
23
|
+
"margin": "-1px",
|
|
24
|
+
"overflow": "hidden",
|
|
25
|
+
"padding": "0px",
|
|
26
|
+
"position": "absolute",
|
|
27
|
+
"whiteSpace": "nowrap",
|
|
28
|
+
"width": "1px",
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
type="radio"
|
|
32
|
+
/>
|
|
33
|
+
<span
|
|
34
|
+
aria-hidden={true}
|
|
35
|
+
className="css-ssalds"
|
|
36
|
+
onMouseDown={[Function]}
|
|
37
|
+
onMouseEnter={[Function]}
|
|
38
|
+
onMouseLeave={[Function]}
|
|
39
|
+
onMouseUp={[Function]}
|
|
40
|
+
/>
|
|
41
|
+
<span
|
|
42
|
+
className="chakra-radio__label css-1y8kf23"
|
|
43
|
+
onMouseDown={[Function]}
|
|
44
|
+
onTouchStart={[Function]}
|
|
45
|
+
>
|
|
46
|
+
Test Label
|
|
47
|
+
</span>
|
|
48
|
+
</label>
|
|
49
|
+
`;
|
|
50
|
+
|
|
51
|
+
exports[`Radio Button renders the UI snapshot correctly 2`] = `
|
|
52
|
+
<label
|
|
53
|
+
className="chakra-radio css-78joka"
|
|
54
|
+
>
|
|
55
|
+
<input
|
|
56
|
+
checked={true}
|
|
57
|
+
className="chakra-radio__input"
|
|
58
|
+
disabled={false}
|
|
59
|
+
id="radio-checked"
|
|
60
|
+
onBlur={[Function]}
|
|
61
|
+
onChange={[Function]}
|
|
62
|
+
onFocus={[Function]}
|
|
63
|
+
onKeyDown={[Function]}
|
|
64
|
+
onKeyUp={[Function]}
|
|
65
|
+
required={false}
|
|
66
|
+
style={
|
|
67
|
+
Object {
|
|
68
|
+
"border": "0px",
|
|
69
|
+
"clip": "rect(0px, 0px, 0px, 0px)",
|
|
70
|
+
"height": "1px",
|
|
71
|
+
"margin": "-1px",
|
|
72
|
+
"overflow": "hidden",
|
|
73
|
+
"padding": "0px",
|
|
74
|
+
"position": "absolute",
|
|
75
|
+
"whiteSpace": "nowrap",
|
|
76
|
+
"width": "1px",
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
type="radio"
|
|
80
|
+
/>
|
|
81
|
+
<span
|
|
82
|
+
aria-hidden={true}
|
|
83
|
+
className="css-ssalds"
|
|
84
|
+
data-checked=""
|
|
85
|
+
onMouseDown={[Function]}
|
|
86
|
+
onMouseEnter={[Function]}
|
|
87
|
+
onMouseLeave={[Function]}
|
|
88
|
+
onMouseUp={[Function]}
|
|
89
|
+
/>
|
|
90
|
+
<span
|
|
91
|
+
className="chakra-radio__label css-1y8kf23"
|
|
92
|
+
data-checked=""
|
|
93
|
+
onMouseDown={[Function]}
|
|
94
|
+
onTouchStart={[Function]}
|
|
95
|
+
>
|
|
96
|
+
Test Label
|
|
97
|
+
</span>
|
|
98
|
+
</label>
|
|
99
|
+
`;
|
|
100
|
+
|
|
101
|
+
exports[`Radio Button renders the UI snapshot correctly 3`] = `
|
|
102
|
+
<label
|
|
103
|
+
className="chakra-radio css-78joka"
|
|
104
|
+
>
|
|
105
|
+
<input
|
|
106
|
+
aria-required={true}
|
|
107
|
+
checked={false}
|
|
108
|
+
className="chakra-radio__input"
|
|
109
|
+
disabled={false}
|
|
110
|
+
id="radio-required"
|
|
111
|
+
onBlur={[Function]}
|
|
112
|
+
onChange={[Function]}
|
|
113
|
+
onFocus={[Function]}
|
|
114
|
+
onKeyDown={[Function]}
|
|
115
|
+
onKeyUp={[Function]}
|
|
116
|
+
required={true}
|
|
117
|
+
style={
|
|
118
|
+
Object {
|
|
119
|
+
"border": "0px",
|
|
120
|
+
"clip": "rect(0px, 0px, 0px, 0px)",
|
|
121
|
+
"height": "1px",
|
|
122
|
+
"margin": "-1px",
|
|
123
|
+
"overflow": "hidden",
|
|
124
|
+
"padding": "0px",
|
|
125
|
+
"position": "absolute",
|
|
126
|
+
"whiteSpace": "nowrap",
|
|
127
|
+
"width": "1px",
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
type="radio"
|
|
131
|
+
/>
|
|
132
|
+
<span
|
|
133
|
+
aria-hidden={true}
|
|
134
|
+
className="css-ssalds"
|
|
135
|
+
onMouseDown={[Function]}
|
|
136
|
+
onMouseEnter={[Function]}
|
|
137
|
+
onMouseLeave={[Function]}
|
|
138
|
+
onMouseUp={[Function]}
|
|
139
|
+
/>
|
|
140
|
+
<span
|
|
141
|
+
className="chakra-radio__label css-1y8kf23"
|
|
142
|
+
onMouseDown={[Function]}
|
|
143
|
+
onTouchStart={[Function]}
|
|
144
|
+
>
|
|
145
|
+
Test Label
|
|
146
|
+
</span>
|
|
147
|
+
</label>
|
|
148
|
+
`;
|
|
149
|
+
|
|
150
|
+
exports[`Radio Button renders the UI snapshot correctly 4`] = `
|
|
151
|
+
<label
|
|
152
|
+
className="chakra-radio css-78joka"
|
|
153
|
+
>
|
|
154
|
+
<input
|
|
155
|
+
aria-invalid={true}
|
|
156
|
+
checked={false}
|
|
157
|
+
className="chakra-radio__input"
|
|
158
|
+
disabled={false}
|
|
159
|
+
id="radio-invalid"
|
|
160
|
+
onBlur={[Function]}
|
|
161
|
+
onChange={[Function]}
|
|
162
|
+
onFocus={[Function]}
|
|
163
|
+
onKeyDown={[Function]}
|
|
164
|
+
onKeyUp={[Function]}
|
|
165
|
+
required={false}
|
|
166
|
+
style={
|
|
167
|
+
Object {
|
|
168
|
+
"border": "0px",
|
|
169
|
+
"clip": "rect(0px, 0px, 0px, 0px)",
|
|
170
|
+
"height": "1px",
|
|
171
|
+
"margin": "-1px",
|
|
172
|
+
"overflow": "hidden",
|
|
173
|
+
"padding": "0px",
|
|
174
|
+
"position": "absolute",
|
|
175
|
+
"whiteSpace": "nowrap",
|
|
176
|
+
"width": "1px",
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
type="radio"
|
|
180
|
+
/>
|
|
181
|
+
<span
|
|
182
|
+
aria-hidden={true}
|
|
183
|
+
className="css-ssalds"
|
|
184
|
+
data-invalid=""
|
|
185
|
+
onMouseDown={[Function]}
|
|
186
|
+
onMouseEnter={[Function]}
|
|
187
|
+
onMouseLeave={[Function]}
|
|
188
|
+
onMouseUp={[Function]}
|
|
189
|
+
/>
|
|
190
|
+
<span
|
|
191
|
+
className="chakra-radio__label css-1y8kf23"
|
|
192
|
+
data-invalid=""
|
|
193
|
+
onMouseDown={[Function]}
|
|
194
|
+
onTouchStart={[Function]}
|
|
195
|
+
>
|
|
196
|
+
Test Label
|
|
197
|
+
</span>
|
|
198
|
+
</label>
|
|
199
|
+
`;
|
|
200
|
+
|
|
201
|
+
exports[`Radio Button renders the UI snapshot correctly 5`] = `
|
|
202
|
+
<label
|
|
203
|
+
className="chakra-radio css-78joka"
|
|
204
|
+
>
|
|
205
|
+
<input
|
|
206
|
+
aria-disabled={true}
|
|
207
|
+
checked={false}
|
|
208
|
+
className="chakra-radio__input"
|
|
209
|
+
disabled={true}
|
|
210
|
+
id="radio-disabled"
|
|
211
|
+
onBlur={[Function]}
|
|
212
|
+
onChange={[Function]}
|
|
213
|
+
onFocus={[Function]}
|
|
214
|
+
onKeyDown={[Function]}
|
|
215
|
+
onKeyUp={[Function]}
|
|
216
|
+
required={false}
|
|
217
|
+
style={
|
|
218
|
+
Object {
|
|
219
|
+
"border": "0px",
|
|
220
|
+
"clip": "rect(0px, 0px, 0px, 0px)",
|
|
221
|
+
"height": "1px",
|
|
222
|
+
"margin": "-1px",
|
|
223
|
+
"overflow": "hidden",
|
|
224
|
+
"padding": "0px",
|
|
225
|
+
"position": "absolute",
|
|
226
|
+
"whiteSpace": "nowrap",
|
|
227
|
+
"width": "1px",
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
type="radio"
|
|
231
|
+
/>
|
|
232
|
+
<span
|
|
233
|
+
aria-hidden={true}
|
|
234
|
+
className="css-ssalds"
|
|
235
|
+
data-disabled=""
|
|
236
|
+
onMouseDown={[Function]}
|
|
237
|
+
onMouseEnter={[Function]}
|
|
238
|
+
onMouseLeave={[Function]}
|
|
239
|
+
onMouseUp={[Function]}
|
|
240
|
+
/>
|
|
241
|
+
<span
|
|
242
|
+
className="chakra-radio__label css-1y8kf23"
|
|
243
|
+
data-disabled=""
|
|
244
|
+
onMouseDown={[Function]}
|
|
245
|
+
onTouchStart={[Function]}
|
|
246
|
+
>
|
|
247
|
+
Test Label
|
|
248
|
+
</span>
|
|
249
|
+
</label>
|
|
250
|
+
`;
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Meta,
|
|
3
|
+
Story,
|
|
4
|
+
Canvas,
|
|
5
|
+
ArgsTable,
|
|
6
|
+
Preview,
|
|
7
|
+
Description,
|
|
8
|
+
} from "@storybook/addon-docs/blocks";
|
|
9
|
+
import { withDesign } from "storybook-addon-designs";
|
|
10
|
+
|
|
11
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
12
|
+
import DSProvider from "../../theme/provider";
|
|
13
|
+
import RadioGroup, { onChangeDefault } from "./RadioGroup";
|
|
14
|
+
import { RadioGroupLayoutTypes } from "./RadioGroupLayoutTypes";
|
|
15
|
+
import Radio from "../Radio/Radio";
|
|
16
|
+
|
|
17
|
+
<Meta
|
|
18
|
+
title={getCategory("RadioGroup")}
|
|
19
|
+
component={RadioGroup}
|
|
20
|
+
decorators={[withDesign]}
|
|
21
|
+
parameters={{
|
|
22
|
+
design: {
|
|
23
|
+
type: "figma",
|
|
24
|
+
url:
|
|
25
|
+
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A742",
|
|
26
|
+
},
|
|
27
|
+
jest: ["RadioGroup.test.tsx"],
|
|
28
|
+
}}
|
|
29
|
+
argTypes={{
|
|
30
|
+
children: { table: { disable: true } },
|
|
31
|
+
className: { table: { disable: true } },
|
|
32
|
+
onChange: { table: { disable: true } },
|
|
33
|
+
id: { table: { disable: true } },
|
|
34
|
+
}}
|
|
35
|
+
/>
|
|
36
|
+
|
|
37
|
+
# RadioGroup
|
|
38
|
+
|
|
39
|
+
| Component Version | DS Version |
|
|
40
|
+
| ----------------- | ---------- |
|
|
41
|
+
| Added | `0.25.0` |
|
|
42
|
+
| Latest | `0.25.0` |
|
|
43
|
+
|
|
44
|
+
<Description of={RadioGroup} />
|
|
45
|
+
|
|
46
|
+
<Preview withToolbar>
|
|
47
|
+
<Story
|
|
48
|
+
name="RadioGroup"
|
|
49
|
+
args={{
|
|
50
|
+
defaultValue: "4",
|
|
51
|
+
invalidText: "error!",
|
|
52
|
+
helperText: "This is the helper text for the full group.",
|
|
53
|
+
isDisabled: false,
|
|
54
|
+
isInvalid: false,
|
|
55
|
+
isRequired: false,
|
|
56
|
+
labelText: "Standard Radio Group",
|
|
57
|
+
layout: RadioGroupLayoutTypes.Column,
|
|
58
|
+
name: "radio-story",
|
|
59
|
+
optReqFlag: true,
|
|
60
|
+
showLabel: true,
|
|
61
|
+
}}
|
|
62
|
+
>
|
|
63
|
+
{(args) => (
|
|
64
|
+
<RadioGroup {...args}>
|
|
65
|
+
<Radio value="2" labelText="Radio 2" />
|
|
66
|
+
<Radio value="3" labelText="Radio 3" />
|
|
67
|
+
<Radio value="4" labelText="Radio 4" />
|
|
68
|
+
<Radio value="5" labelText="Radio 5" />
|
|
69
|
+
</RadioGroup>
|
|
70
|
+
)}
|
|
71
|
+
</Story>
|
|
72
|
+
</Preview>
|
|
73
|
+
|
|
74
|
+
<ArgsTable story="RadioGroup" />
|
|
75
|
+
|
|
76
|
+
## Layout Patterns
|
|
77
|
+
|
|
78
|
+
Use the `layout` prop to set the `Radio` buttons to display in a column or in
|
|
79
|
+
a row.
|
|
80
|
+
|
|
81
|
+
<Canvas>
|
|
82
|
+
<DSProvider>
|
|
83
|
+
<RadioGroup
|
|
84
|
+
labelText="Column (default)"
|
|
85
|
+
name="column-example"
|
|
86
|
+
optReqFlag={false}
|
|
87
|
+
>
|
|
88
|
+
<Radio value="2" labelText="Radio 2" />
|
|
89
|
+
<Radio value="3" labelText="Radio 3" />
|
|
90
|
+
<Radio value="4" labelText="Radio 4" />
|
|
91
|
+
<Radio value="5" labelText="Radio 5" />
|
|
92
|
+
</RadioGroup>
|
|
93
|
+
<br />
|
|
94
|
+
<RadioGroup
|
|
95
|
+
labelText="Row"
|
|
96
|
+
name="row-example"
|
|
97
|
+
layout={RadioGroupLayoutTypes.Row}
|
|
98
|
+
optReqFlag={false}
|
|
99
|
+
>
|
|
100
|
+
<Radio value="2" labelText="Radio 2" />
|
|
101
|
+
<Radio value="3" labelText="Radio 3" />
|
|
102
|
+
<Radio value="4" labelText="Radio 4" />
|
|
103
|
+
<Radio value="5" labelText="Radio 5" />
|
|
104
|
+
</RadioGroup>
|
|
105
|
+
</DSProvider>
|
|
106
|
+
</Canvas>
|
|
107
|
+
|
|
108
|
+
## Errored
|
|
109
|
+
|
|
110
|
+
<Canvas>
|
|
111
|
+
<DSProvider>
|
|
112
|
+
<RadioGroup
|
|
113
|
+
labelText="Errored Radio Group"
|
|
114
|
+
name="errored-example"
|
|
115
|
+
optReqFlag={false}
|
|
116
|
+
invalidText="Error message for the full group."
|
|
117
|
+
isInvalid
|
|
118
|
+
>
|
|
119
|
+
<Radio value="2" labelText="Radio 2" />
|
|
120
|
+
<Radio value="3" labelText="Radio 3" />
|
|
121
|
+
<Radio value="4" labelText="Radio 4" />
|
|
122
|
+
<Radio value="5" labelText="Radio 5" />
|
|
123
|
+
</RadioGroup>
|
|
124
|
+
</DSProvider>
|
|
125
|
+
</Canvas>
|
|
126
|
+
|
|
127
|
+
## Disabled
|
|
128
|
+
|
|
129
|
+
<Canvas>
|
|
130
|
+
<DSProvider>
|
|
131
|
+
<RadioGroup
|
|
132
|
+
labelText="Disabled Radio Group"
|
|
133
|
+
name="disabled-example"
|
|
134
|
+
optReqFlag={false}
|
|
135
|
+
helperText="The reason for being disabled."
|
|
136
|
+
isDisabled
|
|
137
|
+
>
|
|
138
|
+
<Radio value="2" labelText="Radio 2" />
|
|
139
|
+
<Radio value="3" labelText="Radio 3" />
|
|
140
|
+
<Radio value="4" labelText="Radio 4" />
|
|
141
|
+
<Radio value="5" labelText="Radio 5" />
|
|
142
|
+
</RadioGroup>
|
|
143
|
+
</DSProvider>
|
|
144
|
+
</Canvas>
|
|
145
|
+
|
|
146
|
+
## Getting Radio Data Values
|
|
147
|
+
|
|
148
|
+
### Controlled Component using `name` and `onChange` props
|
|
149
|
+
|
|
150
|
+
If your application uses controlled React components and the DS RadioGroup must
|
|
151
|
+
be controlled, you can extract the data through the `name` and `onChange` props.
|
|
152
|
+
This will be called every time a new `Radio` value is selected.
|
|
153
|
+
|
|
154
|
+
```jsx
|
|
155
|
+
const onChange = (data) => {
|
|
156
|
+
// This will return the value selected as a string.
|
|
157
|
+
console.log(data);
|
|
158
|
+
};
|
|
159
|
+
// ...
|
|
160
|
+
|
|
161
|
+
// Example of the DS RadioGroup instance with the function above:
|
|
162
|
+
<RadioGroup
|
|
163
|
+
id="controlled-example"
|
|
164
|
+
labelText="Radio Group"
|
|
165
|
+
name="radioExample"
|
|
166
|
+
defaultValue="3"
|
|
167
|
+
onChange={onChange}
|
|
168
|
+
>
|
|
169
|
+
<Radio value="2" labelText="Radio 2" />
|
|
170
|
+
<Radio value="3" labelText="Radio 3" />
|
|
171
|
+
<Radio value="4" labelText="Radio 4" />
|
|
172
|
+
</RadioGroup>;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Uncontrolled Component using `ref`s
|
|
176
|
+
|
|
177
|
+
If your application uses uncontrolled components, you can pass React `ref` props
|
|
178
|
+
to the DS RadioGroup component to get the selected value from the DOM.
|
|
179
|
+
|
|
180
|
+
The following example is using the `register` React `ref` from the
|
|
181
|
+
`react-hook-form` package.
|
|
182
|
+
|
|
183
|
+
```jsx
|
|
184
|
+
import { useFormContext, Controller } from "react-hook-form";
|
|
185
|
+
// ...
|
|
186
|
+
const { register, handleSubmit, control } = useFormContext();
|
|
187
|
+
// ...
|
|
188
|
+
const submitForm = (formData) => {
|
|
189
|
+
// This will return an object with all the DOM element values that were
|
|
190
|
+
// registered with a `name` attribute.
|
|
191
|
+
// {
|
|
192
|
+
// radioExample: "3"
|
|
193
|
+
// }
|
|
194
|
+
console.log(formData);
|
|
195
|
+
// ...
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
<form
|
|
199
|
+
onSubmit={handleSubmit(submitForm)}
|
|
200
|
+
method="post"
|
|
201
|
+
action="/some/api/endpoint"
|
|
202
|
+
>
|
|
203
|
+
<Controller
|
|
204
|
+
as={
|
|
205
|
+
<RadioGroup
|
|
206
|
+
id="uncontrolled-example"
|
|
207
|
+
labelText="Radio Group"
|
|
208
|
+
name="radioExample"
|
|
209
|
+
defaultValue="3"
|
|
210
|
+
ref={register()}
|
|
211
|
+
>
|
|
212
|
+
<Radio value="2" labelText="Radio 2" />
|
|
213
|
+
<Radio value="3" labelText="Radio 3" />
|
|
214
|
+
<Radio value="4" labelText="Radio 4" />
|
|
215
|
+
</RadioGroup>
|
|
216
|
+
}
|
|
217
|
+
name="radioExample"
|
|
218
|
+
control={control}
|
|
219
|
+
/>
|
|
220
|
+
</form>;
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
The above is specific to `react-hook-form` but a similar pattern can be used
|
|
224
|
+
with normal React `ref` values.
|
|
225
|
+
|
|
226
|
+
```jsx
|
|
227
|
+
const radioGroupRef = React.createRef<HTMLInputElement>();
|
|
228
|
+
// ...
|
|
229
|
+
<RadioGroup
|
|
230
|
+
id="uncontrolled-example"
|
|
231
|
+
labelText="Radio Group"
|
|
232
|
+
name="radioExample"
|
|
233
|
+
defaultValue="3"
|
|
234
|
+
ref={radioGroupRef}
|
|
235
|
+
>
|
|
236
|
+
<Radio value="2" labelText="Radio 2" />
|
|
237
|
+
<Radio value="3" labelText="Radio 3" />
|
|
238
|
+
<Radio value="4" labelText="Radio 4" />
|
|
239
|
+
</RadioGroup>
|
|
240
|
+
|
|
241
|
+
// ...
|
|
242
|
+
// Get the value through:
|
|
243
|
+
const onSubmit = () => {
|
|
244
|
+
// ...
|
|
245
|
+
const radioGroupValue = radioGroupRef.current.value;
|
|
246
|
+
};
|
|
247
|
+
```
|