@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,940 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { render, screen } from "@testing-library/react";
|
|
3
|
-
import { axe } from "jest-axe";
|
|
4
|
-
import userEvent from "@testing-library/user-event";
|
|
5
|
-
import renderer from "react-test-renderer";
|
|
6
|
-
|
|
7
|
-
import DatePicker, { DatePickerTypes, FullDateType } from "./DatePicker";
|
|
8
|
-
import { TextInputRefType } from "../TextInput/TextInput";
|
|
9
|
-
|
|
10
|
-
/** This adds a "0" padding for date values under "10". */
|
|
11
|
-
const strPad = (n: number) => String("0" + n).slice(-2);
|
|
12
|
-
const monthArray: string[] = [
|
|
13
|
-
"January",
|
|
14
|
-
"February",
|
|
15
|
-
"March",
|
|
16
|
-
"April",
|
|
17
|
-
"May",
|
|
18
|
-
"June",
|
|
19
|
-
"July",
|
|
20
|
-
"August",
|
|
21
|
-
"September",
|
|
22
|
-
"October",
|
|
23
|
-
"November",
|
|
24
|
-
"December",
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
describe("DatePicker Accessibility", () => {
|
|
28
|
-
it("passes axe accessibility for a single date input", async () => {
|
|
29
|
-
const { container } = render(
|
|
30
|
-
<DatePicker
|
|
31
|
-
id="datePicker"
|
|
32
|
-
labelText="Select the date you want to visit NYPL"
|
|
33
|
-
/>
|
|
34
|
-
);
|
|
35
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it("passes axe accessibility for a date range", async () => {
|
|
39
|
-
const { container } = render(
|
|
40
|
-
<DatePicker
|
|
41
|
-
id="datePicker"
|
|
42
|
-
labelText="Select the date range you want to visit NYPL"
|
|
43
|
-
isDateRange
|
|
44
|
-
/>
|
|
45
|
-
);
|
|
46
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
describe("DatePicker", () => {
|
|
51
|
-
const todaysDate = new Date();
|
|
52
|
-
/** Returns today's year, month, and day values. */
|
|
53
|
-
const getTodaysValues = () => {
|
|
54
|
-
const year = todaysDate.getFullYear();
|
|
55
|
-
const month = strPad(todaysDate.getMonth() + 1);
|
|
56
|
-
const day = strPad(todaysDate.getDate());
|
|
57
|
-
return [year, month, day];
|
|
58
|
-
};
|
|
59
|
-
/** Returns today's date in string format based on the DatePicker type. */
|
|
60
|
-
const getTodaysDateDisplay = (type?: DatePickerTypes) => {
|
|
61
|
-
const [year, month, day] = getTodaysValues();
|
|
62
|
-
if ("year" === type) {
|
|
63
|
-
return `${year}`;
|
|
64
|
-
} else if ("month" === type) {
|
|
65
|
-
return `${month}-${year}`;
|
|
66
|
-
}
|
|
67
|
-
return `${year}-${month}-${day}`;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
describe("Single input", () => {
|
|
71
|
-
it("should render the basic date input field including a date", () => {
|
|
72
|
-
render(
|
|
73
|
-
<DatePicker
|
|
74
|
-
id="datePicker"
|
|
75
|
-
labelText="Select the full date you want to visit NYPL"
|
|
76
|
-
/>
|
|
77
|
-
);
|
|
78
|
-
const [year, month, day] = getTodaysValues();
|
|
79
|
-
const date = getTodaysDateDisplay();
|
|
80
|
-
const input = screen.getByLabelText(
|
|
81
|
-
/Select the full date you want to visit NYPL/i
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
expect(input).toBeInTheDocument();
|
|
85
|
-
expect(input).not.toHaveAttribute("aria-label");
|
|
86
|
-
// Date format based on component specification yyyy-mm-dd.
|
|
87
|
-
expect(date).toEqual(`${year}-${month}-${day}`);
|
|
88
|
-
expect(screen.getByDisplayValue(date)).toBeInTheDocument();
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it("should render with an initial date", () => {
|
|
92
|
-
render(
|
|
93
|
-
<DatePicker
|
|
94
|
-
id="datePicker"
|
|
95
|
-
labelText="Select the full date you want to visit NYPL"
|
|
96
|
-
initialDate="1/2/1988"
|
|
97
|
-
/>
|
|
98
|
-
);
|
|
99
|
-
const date = screen.getByDisplayValue("1988-01-02");
|
|
100
|
-
|
|
101
|
-
expect(date).toBeInTheDocument();
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
it("should render the 'month' DatePicker type", () => {
|
|
105
|
-
render(
|
|
106
|
-
<DatePicker
|
|
107
|
-
id="datePicker"
|
|
108
|
-
dateType="month"
|
|
109
|
-
labelText="Select the month you want to visit NYPL"
|
|
110
|
-
/>
|
|
111
|
-
);
|
|
112
|
-
const [year, month] = getTodaysValues();
|
|
113
|
-
const date = getTodaysDateDisplay("month");
|
|
114
|
-
|
|
115
|
-
expect(
|
|
116
|
-
screen.getByLabelText(/Select the month you want to visit NYPL/i)
|
|
117
|
-
).toBeInTheDocument();
|
|
118
|
-
// Date format based on component specification mm-yyyy.
|
|
119
|
-
expect(date).toEqual(`${month}-${year}`);
|
|
120
|
-
expect(screen.getByDisplayValue(date)).toBeInTheDocument();
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it("should render the 'year' DatePicker type", () => {
|
|
124
|
-
render(
|
|
125
|
-
<DatePicker
|
|
126
|
-
id="datePicker"
|
|
127
|
-
dateType="year"
|
|
128
|
-
labelText="Select the month you want to visit NYPL"
|
|
129
|
-
/>
|
|
130
|
-
);
|
|
131
|
-
const [year] = getTodaysValues();
|
|
132
|
-
const date = getTodaysDateDisplay("year");
|
|
133
|
-
|
|
134
|
-
expect(
|
|
135
|
-
screen.getByLabelText(/Select the month you want to visit NYPL/i)
|
|
136
|
-
).toBeInTheDocument();
|
|
137
|
-
// Date format based on component specification yyyy.
|
|
138
|
-
expect(date).toEqual(`${year}`);
|
|
139
|
-
expect(screen.getByDisplayValue(date)).toBeInTheDocument();
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it("should render a custom date format", () => {
|
|
143
|
-
const customDateFormat1 = "yyyy/dd/MM";
|
|
144
|
-
const customDateFormat2 = "MM/dd/yyyy";
|
|
145
|
-
const { rerender } = render(
|
|
146
|
-
<DatePicker
|
|
147
|
-
id="datePicker"
|
|
148
|
-
labelText="Select the date you want to visit NYPL"
|
|
149
|
-
dateFormat={customDateFormat1}
|
|
150
|
-
/>
|
|
151
|
-
);
|
|
152
|
-
const [year, month, day] = getTodaysValues();
|
|
153
|
-
const dateFormat1 = `${year}/${day}/${month}`;
|
|
154
|
-
|
|
155
|
-
expect(screen.getByDisplayValue(dateFormat1)).toBeInTheDocument();
|
|
156
|
-
|
|
157
|
-
const dateFormat2 = `${month}/${day}/${year}`;
|
|
158
|
-
rerender(
|
|
159
|
-
<DatePicker
|
|
160
|
-
id="datePicker"
|
|
161
|
-
labelText="Select the date you want to visit NYPL"
|
|
162
|
-
dateFormat={customDateFormat2}
|
|
163
|
-
/>
|
|
164
|
-
);
|
|
165
|
-
expect(screen.getByDisplayValue(dateFormat2)).toBeInTheDocument();
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
it("should hide the input label but add an aria-label", () => {
|
|
169
|
-
render(
|
|
170
|
-
<DatePicker
|
|
171
|
-
id="datePicker"
|
|
172
|
-
labelText="Select the date you want to visit NYPL"
|
|
173
|
-
showLabel={false}
|
|
174
|
-
/>
|
|
175
|
-
);
|
|
176
|
-
const input = screen.getByLabelText(
|
|
177
|
-
/Select the date you want to visit NYPL/i
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
expect(
|
|
181
|
-
screen.queryByDisplayValue(/Select the date you want to visit NYPL/i)
|
|
182
|
-
).not.toBeInTheDocument();
|
|
183
|
-
expect(input).toHaveAttribute("aria-label");
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it("should render with helper text and error text", () => {
|
|
187
|
-
const { rerender } = render(
|
|
188
|
-
<DatePicker
|
|
189
|
-
id="datePicker"
|
|
190
|
-
labelText="Select the date you want to visit NYPL"
|
|
191
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
192
|
-
invalidText="Please select a valid date."
|
|
193
|
-
/>
|
|
194
|
-
);
|
|
195
|
-
|
|
196
|
-
// When not errored, we expect only the helper text to appear.
|
|
197
|
-
expect(
|
|
198
|
-
screen.getByLabelText(/Select the date you want to visit NYPL/i)
|
|
199
|
-
).toBeInTheDocument();
|
|
200
|
-
expect(
|
|
201
|
-
screen.getByText("Note that the Library may be closed on Sundays.")
|
|
202
|
-
).toBeInTheDocument();
|
|
203
|
-
expect(
|
|
204
|
-
screen.queryByText("Please select a valid date.")
|
|
205
|
-
).not.toBeInTheDocument();
|
|
206
|
-
|
|
207
|
-
rerender(
|
|
208
|
-
<DatePicker
|
|
209
|
-
id="datePicker"
|
|
210
|
-
labelText="Select the date you want to visit NYPL"
|
|
211
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
212
|
-
invalidText="Please select a valid date."
|
|
213
|
-
isInvalid
|
|
214
|
-
/>
|
|
215
|
-
);
|
|
216
|
-
// When errored, we expect only the error text to appear.
|
|
217
|
-
expect(
|
|
218
|
-
screen.queryByText("Note that the Library may be closed on Sundays.")
|
|
219
|
-
).not.toBeInTheDocument();
|
|
220
|
-
expect(
|
|
221
|
-
screen.getByText("Please select a valid date.")
|
|
222
|
-
).toBeInTheDocument();
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
it("should not render the helper text or invalid text when 'showHelperInvalidText' is false", () => {
|
|
226
|
-
const { rerender } = render(
|
|
227
|
-
<DatePicker
|
|
228
|
-
id="datePicker"
|
|
229
|
-
labelText="Select the date you want to visit NYPL"
|
|
230
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
231
|
-
invalidText="Please select a valid date."
|
|
232
|
-
showHelperInvalidText={false}
|
|
233
|
-
/>
|
|
234
|
-
);
|
|
235
|
-
expect(
|
|
236
|
-
screen.queryByText("Note that the Library may be closed on Sundays.")
|
|
237
|
-
).not.toBeInTheDocument();
|
|
238
|
-
expect(
|
|
239
|
-
screen.queryByText("Please select a valid date.")
|
|
240
|
-
).not.toBeInTheDocument();
|
|
241
|
-
|
|
242
|
-
rerender(
|
|
243
|
-
<DatePicker
|
|
244
|
-
id="datePicker"
|
|
245
|
-
labelText="Select the date you want to visit NYPL"
|
|
246
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
247
|
-
invalidText="Please select a valid date."
|
|
248
|
-
showHelperInvalidText={false}
|
|
249
|
-
isInvalid
|
|
250
|
-
/>
|
|
251
|
-
);
|
|
252
|
-
expect(
|
|
253
|
-
screen.queryByText("Note that the Library may be closed on Sundays.")
|
|
254
|
-
).not.toBeInTheDocument();
|
|
255
|
-
expect(
|
|
256
|
-
screen.queryByText("Please select a valid date.")
|
|
257
|
-
).not.toBeInTheDocument();
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
it("should render a disabled input field", () => {
|
|
261
|
-
render(
|
|
262
|
-
<DatePicker
|
|
263
|
-
id="datePicker"
|
|
264
|
-
labelText="Select the date you want to visit NYPL"
|
|
265
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
266
|
-
isDisabled
|
|
267
|
-
/>
|
|
268
|
-
);
|
|
269
|
-
|
|
270
|
-
expect(
|
|
271
|
-
screen.getByLabelText(/Select the date you want to visit NYPL/i)
|
|
272
|
-
).toHaveAttribute("disabled");
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
it("should render a required label", () => {
|
|
276
|
-
render(
|
|
277
|
-
<DatePicker
|
|
278
|
-
id="datePicker"
|
|
279
|
-
labelText="Select the date you want to visit NYPL"
|
|
280
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
281
|
-
isRequired
|
|
282
|
-
/>
|
|
283
|
-
);
|
|
284
|
-
|
|
285
|
-
expect(screen.getByText(/required/i)).toBeInTheDocument();
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
it("should hide the (Required) text in the label with `showRequiredLabel`", () => {
|
|
289
|
-
const { rerender } = render(
|
|
290
|
-
<DatePicker
|
|
291
|
-
id="datePicker"
|
|
292
|
-
labelText="Select the date you want to visit NYPL"
|
|
293
|
-
/>
|
|
294
|
-
);
|
|
295
|
-
expect(screen.queryByText(/Required/i)).not.toBeInTheDocument();
|
|
296
|
-
|
|
297
|
-
rerender(
|
|
298
|
-
<DatePicker
|
|
299
|
-
id="datePicker"
|
|
300
|
-
labelText="Select the date you want to visit NYPL"
|
|
301
|
-
isRequired
|
|
302
|
-
/>
|
|
303
|
-
);
|
|
304
|
-
expect(screen.getByText(/Required/i)).toBeInTheDocument();
|
|
305
|
-
|
|
306
|
-
rerender(
|
|
307
|
-
<DatePicker
|
|
308
|
-
id="datePicker"
|
|
309
|
-
labelText="Select the date you want to visit NYPL"
|
|
310
|
-
showRequiredLabel={false}
|
|
311
|
-
isRequired
|
|
312
|
-
/>
|
|
313
|
-
);
|
|
314
|
-
expect(screen.queryByText(/Required/i)).not.toBeInTheDocument();
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
it("should pass the value to the `onChange` function", () => {
|
|
318
|
-
let dateObject: FullDateType = {
|
|
319
|
-
startDate: new Date(),
|
|
320
|
-
endDate: new Date(),
|
|
321
|
-
};
|
|
322
|
-
const onChange = (data: FullDateType) => {
|
|
323
|
-
dateObject = data;
|
|
324
|
-
};
|
|
325
|
-
render(
|
|
326
|
-
<DatePicker
|
|
327
|
-
id="datePicker"
|
|
328
|
-
labelText="Select the date you want to visit NYPL"
|
|
329
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
330
|
-
onChange={onChange}
|
|
331
|
-
isRequired
|
|
332
|
-
/>
|
|
333
|
-
);
|
|
334
|
-
|
|
335
|
-
const input = screen.getByLabelText(
|
|
336
|
-
/Select the date you want to visit NYPL/i
|
|
337
|
-
);
|
|
338
|
-
const date = getTodaysDateDisplay();
|
|
339
|
-
const midMonthDay = "15";
|
|
340
|
-
|
|
341
|
-
// Let's select a new day.
|
|
342
|
-
userEvent.click(input);
|
|
343
|
-
// The popup displays.
|
|
344
|
-
userEvent.click(screen.getByText(midMonthDay));
|
|
345
|
-
|
|
346
|
-
const newDayValue = date.slice(0, -2) + midMonthDay;
|
|
347
|
-
expect(screen.getByDisplayValue(newDayValue)).toBeInTheDocument();
|
|
348
|
-
|
|
349
|
-
const { startDate } = dateObject;
|
|
350
|
-
const valueFromOnChange = `${startDate.getFullYear()}-${strPad(
|
|
351
|
-
startDate.getMonth() + 1
|
|
352
|
-
)}-${strPad(startDate.getDate())}`;
|
|
353
|
-
expect(newDayValue).toEqual(valueFromOnChange);
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
it("should throw a warning when refs are used but not `name` props", () => {
|
|
357
|
-
const warn = jest.spyOn(console, "warn");
|
|
358
|
-
const ref = React.createRef<TextInputRefType>();
|
|
359
|
-
render(
|
|
360
|
-
<DatePicker
|
|
361
|
-
id="datePicker"
|
|
362
|
-
labelText="Select the date you want to visit NYPL"
|
|
363
|
-
ref={ref}
|
|
364
|
-
/>
|
|
365
|
-
);
|
|
366
|
-
expect(warn).toHaveBeenCalledWith(
|
|
367
|
-
"NYPL Reservoir DatePicker: A `ref` or `refTo` prop was passed but " +
|
|
368
|
-
"not the equivalent `nameFrom` or `nameTo` prop."
|
|
369
|
-
);
|
|
370
|
-
});
|
|
371
|
-
|
|
372
|
-
it("should throw a warning when `onChange` is passed as well as a `ref` prop.", () => {
|
|
373
|
-
const warn = jest.spyOn(console, "warn");
|
|
374
|
-
const ref = React.createRef<TextInputRefType>();
|
|
375
|
-
const onChange = (_data: {}) => {};
|
|
376
|
-
render(
|
|
377
|
-
<DatePicker
|
|
378
|
-
id="datePicker"
|
|
379
|
-
labelText="Select the date you want to visit NYPL"
|
|
380
|
-
ref={ref}
|
|
381
|
-
nameFrom="start-date"
|
|
382
|
-
onChange={onChange}
|
|
383
|
-
/>
|
|
384
|
-
);
|
|
385
|
-
expect(warn).toHaveBeenCalledWith(
|
|
386
|
-
"NYPL Reservoir DatePicker: A `ref`, `refTo`, `nameFrom`, or `nameTo` " +
|
|
387
|
-
"prop was passed and an `onChange` prop as well. Use whichever is best " +
|
|
388
|
-
"for your app but not both."
|
|
389
|
-
);
|
|
390
|
-
});
|
|
391
|
-
|
|
392
|
-
// Note: Have to add an initial date so that the snapshot tests always
|
|
393
|
-
// pass. Otherwise, it'll use the _current_ date which changes
|
|
394
|
-
// based on the day it is tested and is not what we want.
|
|
395
|
-
it("renders the UI snapshot correctly", () => {
|
|
396
|
-
const basic = renderer
|
|
397
|
-
.create(
|
|
398
|
-
<DatePicker
|
|
399
|
-
id="basic"
|
|
400
|
-
labelText="Select the full date you want to visit NYPL"
|
|
401
|
-
initialDate="1/2/1988"
|
|
402
|
-
/>
|
|
403
|
-
)
|
|
404
|
-
.toJSON();
|
|
405
|
-
const withoutLabel = renderer
|
|
406
|
-
.create(
|
|
407
|
-
<DatePicker
|
|
408
|
-
id="no-label"
|
|
409
|
-
labelText="Select the date you want to visit NYPL"
|
|
410
|
-
initialDate="1/2/1988"
|
|
411
|
-
showLabel={false}
|
|
412
|
-
/>
|
|
413
|
-
)
|
|
414
|
-
.toJSON();
|
|
415
|
-
const withCustomFormat = renderer
|
|
416
|
-
.create(
|
|
417
|
-
<DatePicker
|
|
418
|
-
id="custom-format"
|
|
419
|
-
labelText="Select the date you want to visit NYPL"
|
|
420
|
-
dateFormat="yyyy/dd/MM"
|
|
421
|
-
initialDate="1/2/1988"
|
|
422
|
-
/>
|
|
423
|
-
)
|
|
424
|
-
.toJSON();
|
|
425
|
-
const invalid = renderer
|
|
426
|
-
.create(
|
|
427
|
-
<DatePicker
|
|
428
|
-
id="invalid"
|
|
429
|
-
labelText="Select the date you want to visit NYPL"
|
|
430
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
431
|
-
invalidText="Please select a valid date."
|
|
432
|
-
initialDate="1/2/1988"
|
|
433
|
-
isInvalid
|
|
434
|
-
/>
|
|
435
|
-
)
|
|
436
|
-
.toJSON();
|
|
437
|
-
const disabled = renderer
|
|
438
|
-
.create(
|
|
439
|
-
<DatePicker
|
|
440
|
-
id="disabled"
|
|
441
|
-
labelText="Select the date you want to visit NYPL"
|
|
442
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
443
|
-
invalidText="Please select a valid date."
|
|
444
|
-
initialDate="1/2/1988"
|
|
445
|
-
isDisabled
|
|
446
|
-
/>
|
|
447
|
-
)
|
|
448
|
-
.toJSON();
|
|
449
|
-
const withChakraProps = renderer
|
|
450
|
-
.create(
|
|
451
|
-
<DatePicker
|
|
452
|
-
id="chakra"
|
|
453
|
-
labelText="Select the date you want to visit NYPL"
|
|
454
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
455
|
-
invalidText="Please select a valid date."
|
|
456
|
-
initialDate="1/2/1988"
|
|
457
|
-
p="20px"
|
|
458
|
-
color="ui.error.primary"
|
|
459
|
-
/>
|
|
460
|
-
)
|
|
461
|
-
.toJSON();
|
|
462
|
-
const withOtherProps = renderer
|
|
463
|
-
.create(
|
|
464
|
-
<DatePicker
|
|
465
|
-
id="props"
|
|
466
|
-
labelText="Select the date you want to visit NYPL"
|
|
467
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
468
|
-
invalidText="Please select a valid date."
|
|
469
|
-
initialDate="1/2/1988"
|
|
470
|
-
data-testid="datepicker"
|
|
471
|
-
/>
|
|
472
|
-
)
|
|
473
|
-
.toJSON();
|
|
474
|
-
|
|
475
|
-
expect(basic).toMatchSnapshot();
|
|
476
|
-
expect(withoutLabel).toMatchSnapshot();
|
|
477
|
-
expect(withCustomFormat).toMatchSnapshot();
|
|
478
|
-
expect(invalid).toMatchSnapshot();
|
|
479
|
-
expect(disabled).toMatchSnapshot();
|
|
480
|
-
expect(withChakraProps).toMatchSnapshot();
|
|
481
|
-
expect(withOtherProps).toMatchSnapshot();
|
|
482
|
-
});
|
|
483
|
-
});
|
|
484
|
-
|
|
485
|
-
describe("Date Range", () => {
|
|
486
|
-
it("should render the date range with two input fields", () => {
|
|
487
|
-
render(
|
|
488
|
-
<DatePicker
|
|
489
|
-
id="datePicker"
|
|
490
|
-
labelText="Select the date range you want to visit NYPL"
|
|
491
|
-
isDateRange
|
|
492
|
-
/>
|
|
493
|
-
);
|
|
494
|
-
const [year, month, day] = getTodaysValues();
|
|
495
|
-
const date = getTodaysDateDisplay();
|
|
496
|
-
|
|
497
|
-
expect(
|
|
498
|
-
screen.getByText(/Select the date range you want to visit NYPL/i)
|
|
499
|
-
).toBeInTheDocument();
|
|
500
|
-
// Date format based on component specification yyyy-mm-dd.
|
|
501
|
-
expect(date).toEqual(`${year}-${month}-${day}`);
|
|
502
|
-
// There are two input fields with the date displaying.
|
|
503
|
-
expect(screen.getAllByDisplayValue(date)).toHaveLength(2);
|
|
504
|
-
});
|
|
505
|
-
|
|
506
|
-
it("should render the initial dates", () => {
|
|
507
|
-
render(
|
|
508
|
-
<DatePicker
|
|
509
|
-
id="datePicker"
|
|
510
|
-
labelText="Select the full date you want to visit NYPL"
|
|
511
|
-
isDateRange
|
|
512
|
-
initialDate="1/2/1988"
|
|
513
|
-
initialDateTo="3/4/1990"
|
|
514
|
-
/>
|
|
515
|
-
);
|
|
516
|
-
const dateFrom = screen.getByDisplayValue("1988-01-02");
|
|
517
|
-
const dateTo = screen.getByDisplayValue("1990-03-04");
|
|
518
|
-
|
|
519
|
-
expect(dateFrom).toBeInTheDocument();
|
|
520
|
-
expect(dateTo).toBeInTheDocument();
|
|
521
|
-
});
|
|
522
|
-
|
|
523
|
-
it("should render two input labels and three separate helper text", () => {
|
|
524
|
-
render(
|
|
525
|
-
<DatePicker
|
|
526
|
-
id="datePicker"
|
|
527
|
-
labelText="Select the date range you want to visit NYPL"
|
|
528
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
529
|
-
helperTextFrom="Note for the 'from' field."
|
|
530
|
-
helperTextTo="Note for the 'to' field."
|
|
531
|
-
invalidText="Please select a valid date range."
|
|
532
|
-
isDateRange
|
|
533
|
-
/>
|
|
534
|
-
);
|
|
535
|
-
// There are two labels for each input.
|
|
536
|
-
expect(screen.getByText("From")).toBeInTheDocument();
|
|
537
|
-
expect(screen.getByText("To")).toBeInTheDocument();
|
|
538
|
-
// Helper text for the component
|
|
539
|
-
expect(
|
|
540
|
-
screen.getByText(/Note that the Library may be closed on Sundays./i)
|
|
541
|
-
).toBeInTheDocument();
|
|
542
|
-
// Helper text for the "From" input
|
|
543
|
-
expect(
|
|
544
|
-
screen.getByText(/Note for the 'from' field./i)
|
|
545
|
-
).toBeInTheDocument();
|
|
546
|
-
// Helper text for the "To" input
|
|
547
|
-
expect(screen.getByText(/Note for the 'to' field./i)).toBeInTheDocument();
|
|
548
|
-
});
|
|
549
|
-
|
|
550
|
-
it("should render different states based on respective props", () => {
|
|
551
|
-
const { rerender } = render(
|
|
552
|
-
<DatePicker
|
|
553
|
-
id="datePicker"
|
|
554
|
-
labelText="Select the date range you want to visit NYPL"
|
|
555
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
556
|
-
helperTextTo="Note for the 'to' field."
|
|
557
|
-
invalidText="Please select a valid date range."
|
|
558
|
-
isDateRange
|
|
559
|
-
isInvalid
|
|
560
|
-
/>
|
|
561
|
-
);
|
|
562
|
-
|
|
563
|
-
// The invalid text displays under each input field.
|
|
564
|
-
expect(
|
|
565
|
-
screen.getAllByText("Please select a valid date range.")
|
|
566
|
-
).toHaveLength(2);
|
|
567
|
-
|
|
568
|
-
rerender(
|
|
569
|
-
<DatePicker
|
|
570
|
-
id="datePicker"
|
|
571
|
-
labelText="Select the date range you want to visit NYPL"
|
|
572
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
573
|
-
helperTextTo="Note for the 'to' field."
|
|
574
|
-
invalidText="Please select a valid date range."
|
|
575
|
-
isDisabled
|
|
576
|
-
isDateRange
|
|
577
|
-
/>
|
|
578
|
-
);
|
|
579
|
-
// Both input fields are disabled.
|
|
580
|
-
expect(screen.getByLabelText(/From/i)).toHaveAttribute("disabled");
|
|
581
|
-
expect(screen.getByLabelText(/To/i)).toHaveAttribute("disabled");
|
|
582
|
-
|
|
583
|
-
rerender(
|
|
584
|
-
<DatePicker
|
|
585
|
-
id="datePicker"
|
|
586
|
-
labelText="Select the date range you want to visit NYPL"
|
|
587
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
588
|
-
helperTextTo="Note for the 'to' field."
|
|
589
|
-
invalidText="Please select a valid date range."
|
|
590
|
-
isRequired
|
|
591
|
-
isDateRange
|
|
592
|
-
/>
|
|
593
|
-
);
|
|
594
|
-
// Both input fields are required.
|
|
595
|
-
// The "Required" text is only displayed once in the `legend`.
|
|
596
|
-
expect(screen.getAllByText(/Required/i)).toHaveLength(1);
|
|
597
|
-
expect(screen.getByLabelText(/From/i)).toHaveAttribute("required");
|
|
598
|
-
expect(screen.getByLabelText(/To/i)).toHaveAttribute("required");
|
|
599
|
-
});
|
|
600
|
-
|
|
601
|
-
// Note: Have to add initial dates so that the snapshot tests always
|
|
602
|
-
// pass. Otherwise, it'll use the _current_ date which changes
|
|
603
|
-
// based on the day it is tested and is not what we want.
|
|
604
|
-
it("renders the UI snapshot correctly", () => {
|
|
605
|
-
const basic = renderer
|
|
606
|
-
.create(
|
|
607
|
-
<DatePicker
|
|
608
|
-
id="basic"
|
|
609
|
-
labelText="Select the full date you want to visit NYPL"
|
|
610
|
-
initialDate="1/2/1988"
|
|
611
|
-
initialDateTo="2/2/1988"
|
|
612
|
-
isDateRange
|
|
613
|
-
/>
|
|
614
|
-
)
|
|
615
|
-
.toJSON();
|
|
616
|
-
const withoutLabel = renderer
|
|
617
|
-
.create(
|
|
618
|
-
<DatePicker
|
|
619
|
-
id="no-label"
|
|
620
|
-
labelText="Select the date you want to visit NYPL"
|
|
621
|
-
showLabel={false}
|
|
622
|
-
initialDate="1/2/1988"
|
|
623
|
-
initialDateTo="2/2/1988"
|
|
624
|
-
isDateRange
|
|
625
|
-
/>
|
|
626
|
-
)
|
|
627
|
-
.toJSON();
|
|
628
|
-
const withCustomFormat = renderer
|
|
629
|
-
.create(
|
|
630
|
-
<DatePicker
|
|
631
|
-
id="custom-format"
|
|
632
|
-
labelText="Select the date you want to visit NYPL"
|
|
633
|
-
dateFormat="yyyy/dd/MM"
|
|
634
|
-
initialDate="1/2/1988"
|
|
635
|
-
initialDateTo="2/2/1988"
|
|
636
|
-
isDateRange
|
|
637
|
-
/>
|
|
638
|
-
)
|
|
639
|
-
.toJSON();
|
|
640
|
-
const invalid = renderer
|
|
641
|
-
.create(
|
|
642
|
-
<DatePicker
|
|
643
|
-
id="invalid"
|
|
644
|
-
labelText="Select the date you want to visit NYPL"
|
|
645
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
646
|
-
invalidText="Please select a valid date."
|
|
647
|
-
initialDate="1/2/1988"
|
|
648
|
-
initialDateTo="2/2/1988"
|
|
649
|
-
isInvalid
|
|
650
|
-
isDateRange
|
|
651
|
-
/>
|
|
652
|
-
)
|
|
653
|
-
.toJSON();
|
|
654
|
-
const disabled = renderer
|
|
655
|
-
.create(
|
|
656
|
-
<DatePicker
|
|
657
|
-
id="disabled"
|
|
658
|
-
labelText="Select the date you want to visit NYPL"
|
|
659
|
-
helperText="Note that the Library may be closed on Sundays."
|
|
660
|
-
invalidText="Please select a valid date."
|
|
661
|
-
initialDate="1/2/1988"
|
|
662
|
-
initialDateTo="2/2/1988"
|
|
663
|
-
isDisabled
|
|
664
|
-
isDateRange
|
|
665
|
-
/>
|
|
666
|
-
)
|
|
667
|
-
.toJSON();
|
|
668
|
-
expect(basic).toMatchSnapshot();
|
|
669
|
-
expect(withoutLabel).toMatchSnapshot();
|
|
670
|
-
expect(withCustomFormat).toMatchSnapshot();
|
|
671
|
-
expect(invalid).toMatchSnapshot();
|
|
672
|
-
expect(disabled).toMatchSnapshot();
|
|
673
|
-
});
|
|
674
|
-
|
|
675
|
-
it("should select two new dates", () => {
|
|
676
|
-
render(
|
|
677
|
-
<DatePicker
|
|
678
|
-
id="datePicker"
|
|
679
|
-
initialDate="3/2/1988"
|
|
680
|
-
initialDateTo="3/28/1988"
|
|
681
|
-
isDateRange
|
|
682
|
-
labelText="Select the date range you want to visit NYPL"
|
|
683
|
-
/>
|
|
684
|
-
);
|
|
685
|
-
const fromInput = screen.getByLabelText(/From/i);
|
|
686
|
-
const toInput = screen.getByLabelText(/To/i);
|
|
687
|
-
|
|
688
|
-
expect(fromInput).toHaveValue("1988-03-02");
|
|
689
|
-
expect(toInput).toHaveValue("1988-03-28");
|
|
690
|
-
// expect(screen.getAllByDisplayValue(date)).toHaveLength(2);
|
|
691
|
-
|
|
692
|
-
// Let's select a new day.
|
|
693
|
-
userEvent.click(fromInput);
|
|
694
|
-
// The popup displays. Select a new day.
|
|
695
|
-
const newDateFrom = 5;
|
|
696
|
-
const newDateTo = 25;
|
|
697
|
-
userEvent.click(screen.getByText(newDateFrom));
|
|
698
|
-
|
|
699
|
-
// We selected a new day but kept everything else the same.
|
|
700
|
-
// Example: 2021-03-02 -> 5 is selected -> 2021-03-05
|
|
701
|
-
expect(screen.getByDisplayValue("1988-03-05")).toBeInTheDocument();
|
|
702
|
-
// The "To" input should only have the older value now.
|
|
703
|
-
// expect(screen.getAllByDisplayValue(date)).toHaveLength(1);
|
|
704
|
-
|
|
705
|
-
// Now select the "To" date.
|
|
706
|
-
userEvent.click(toInput);
|
|
707
|
-
// The popup displays.
|
|
708
|
-
userEvent.click(screen.getByText(newDateTo));
|
|
709
|
-
|
|
710
|
-
expect(screen.getByDisplayValue("1988-03-25")).toBeInTheDocument();
|
|
711
|
-
// The original date values are no longer in display.
|
|
712
|
-
expect(screen.queryByDisplayValue("1988-03-02")).not.toBeInTheDocument();
|
|
713
|
-
expect(screen.queryByDisplayValue("1988-03-28")).not.toBeInTheDocument();
|
|
714
|
-
// The "From" date value wasn't affected by this!
|
|
715
|
-
expect(screen.getByDisplayValue("1988-03-05")).toBeInTheDocument();
|
|
716
|
-
});
|
|
717
|
-
});
|
|
718
|
-
|
|
719
|
-
describe("Popup Calendar", () => {
|
|
720
|
-
it("should render a popup calendar for the full date", () => {
|
|
721
|
-
render(
|
|
722
|
-
<DatePicker
|
|
723
|
-
id="datePicker"
|
|
724
|
-
labelText="Select the date you want to visit NYPL"
|
|
725
|
-
/>
|
|
726
|
-
);
|
|
727
|
-
const input = screen.getByLabelText(
|
|
728
|
-
/Select the date you want to visit NYPL/i
|
|
729
|
-
);
|
|
730
|
-
const [year] = getTodaysValues();
|
|
731
|
-
const monthFullName = monthArray[todaysDate.getMonth()];
|
|
732
|
-
|
|
733
|
-
expect(
|
|
734
|
-
screen.queryByText(`${monthFullName} ${year}`)
|
|
735
|
-
).not.toBeInTheDocument();
|
|
736
|
-
expect(screen.queryByText("Su")).not.toBeInTheDocument();
|
|
737
|
-
|
|
738
|
-
userEvent.click(input);
|
|
739
|
-
|
|
740
|
-
// In the display, the calendar displays "Month Year" such as
|
|
741
|
-
// "August 2021" for example.
|
|
742
|
-
expect(screen.getByText(`${monthFullName} ${year}`)).toBeInTheDocument();
|
|
743
|
-
// This calendar displays columns with the days of the week.
|
|
744
|
-
expect(screen.getByText("Su")).toBeInTheDocument();
|
|
745
|
-
expect(screen.getByText("Mo")).toBeInTheDocument();
|
|
746
|
-
expect(screen.getByText("Tu")).toBeInTheDocument();
|
|
747
|
-
expect(screen.getByText("We")).toBeInTheDocument();
|
|
748
|
-
expect(screen.getByText("Th")).toBeInTheDocument();
|
|
749
|
-
expect(screen.getByText("Fr")).toBeInTheDocument();
|
|
750
|
-
expect(screen.getByText("Sa")).toBeInTheDocument();
|
|
751
|
-
});
|
|
752
|
-
|
|
753
|
-
it("should select a new date from the calendar", () => {
|
|
754
|
-
render(
|
|
755
|
-
<DatePicker
|
|
756
|
-
id="datePicker"
|
|
757
|
-
labelText="Select the date you want to visit NYPL"
|
|
758
|
-
initialDate="08/01/2021"
|
|
759
|
-
/>
|
|
760
|
-
);
|
|
761
|
-
const input = screen.getByLabelText(
|
|
762
|
-
/Select the date you want to visit NYPL/i
|
|
763
|
-
);
|
|
764
|
-
const date = "2021-08-01";
|
|
765
|
-
const midMonthDay = "15";
|
|
766
|
-
|
|
767
|
-
expect(screen.getByDisplayValue(date)).toBeInTheDocument();
|
|
768
|
-
|
|
769
|
-
// Let's select a new day.
|
|
770
|
-
userEvent.click(input);
|
|
771
|
-
// The popup displays.
|
|
772
|
-
userEvent.click(screen.getByText(midMonthDay));
|
|
773
|
-
|
|
774
|
-
// We selected a new day but kept everything else the same. So we just
|
|
775
|
-
// need to remove the older day with the new "15" selected date.
|
|
776
|
-
// Example: 2021-08-01 -> 15 is selected -> 2021-08-15
|
|
777
|
-
const newDayValue = date.slice(0, -2) + midMonthDay;
|
|
778
|
-
expect(screen.getByDisplayValue(newDayValue)).toBeInTheDocument();
|
|
779
|
-
|
|
780
|
-
// Let's select a new month
|
|
781
|
-
userEvent.click(input);
|
|
782
|
-
// The popup displays. We are currently on 08/15/2021.
|
|
783
|
-
expect(
|
|
784
|
-
screen.getByText(monthArray["7"], { exact: false })
|
|
785
|
-
).toBeInTheDocument();
|
|
786
|
-
userEvent.click(screen.getByLabelText("Next Month"));
|
|
787
|
-
userEvent.click(screen.getByLabelText("Next Month"));
|
|
788
|
-
|
|
789
|
-
// We are two months ahead but still selecting the midmonth day.
|
|
790
|
-
userEvent.click(screen.getByText(midMonthDay));
|
|
791
|
-
// So only the month should change accordingly.
|
|
792
|
-
const newMonthValue = `${newDayValue.substr(0, 5)}${strPad(
|
|
793
|
-
10
|
|
794
|
-
)}${newDayValue.substr(7)}`;
|
|
795
|
-
expect(screen.getByDisplayValue(newMonthValue)).toBeInTheDocument();
|
|
796
|
-
});
|
|
797
|
-
|
|
798
|
-
it("should render a popup calendar for the month date", () => {
|
|
799
|
-
render(
|
|
800
|
-
<DatePicker
|
|
801
|
-
id="datePicker"
|
|
802
|
-
dateType="month"
|
|
803
|
-
labelText="Select the month you want to visit NYPL"
|
|
804
|
-
/>
|
|
805
|
-
);
|
|
806
|
-
const input = screen.getByLabelText(
|
|
807
|
-
/Select the month you want to visit NYPL/i
|
|
808
|
-
);
|
|
809
|
-
const [year] = getTodaysValues();
|
|
810
|
-
|
|
811
|
-
expect(screen.queryByText(year)).not.toBeInTheDocument();
|
|
812
|
-
expect(screen.queryByText("Jan")).not.toBeInTheDocument();
|
|
813
|
-
|
|
814
|
-
userEvent.click(input);
|
|
815
|
-
|
|
816
|
-
// In the display, the calendar displays "Year" such as "2021".
|
|
817
|
-
expect(screen.getByText(year)).toBeInTheDocument();
|
|
818
|
-
// This calendar displays all 12 months but only the first three
|
|
819
|
-
// characters such as "Jan", "Feb", and so on.
|
|
820
|
-
monthArray.forEach((month) => {
|
|
821
|
-
expect(screen.getByText(month.slice(0, 3))).toBeInTheDocument();
|
|
822
|
-
});
|
|
823
|
-
});
|
|
824
|
-
|
|
825
|
-
it("should select a new month from the calendar", () => {
|
|
826
|
-
render(
|
|
827
|
-
<DatePicker
|
|
828
|
-
id="datePicker"
|
|
829
|
-
dateType="month"
|
|
830
|
-
initialDate="4/1/1988"
|
|
831
|
-
labelText="Select the month you want to visit NYPL"
|
|
832
|
-
/>
|
|
833
|
-
);
|
|
834
|
-
const input = screen.getByLabelText(
|
|
835
|
-
/Select the month you want to visit NYPL/i
|
|
836
|
-
);
|
|
837
|
-
// In the "month" format.
|
|
838
|
-
const date = "04-1988";
|
|
839
|
-
// Let's select May as the new month.
|
|
840
|
-
let currentMonthSelected = monthArray[4];
|
|
841
|
-
let currentMonthSelectedDisplay = currentMonthSelected.slice(0, 3);
|
|
842
|
-
|
|
843
|
-
// We start off with April being displayed as "4-1988".
|
|
844
|
-
expect(screen.getByDisplayValue(date)).toBeInTheDocument();
|
|
845
|
-
expect(
|
|
846
|
-
screen.queryByText(currentMonthSelectedDisplay)
|
|
847
|
-
).not.toBeInTheDocument();
|
|
848
|
-
|
|
849
|
-
// Let's select a new day by first clicking on the input to open
|
|
850
|
-
// the calendar popup.
|
|
851
|
-
userEvent.click(input);
|
|
852
|
-
|
|
853
|
-
// Now "May" appears as the next month in the calendar popup.
|
|
854
|
-
expect(screen.getByText(currentMonthSelectedDisplay)).toBeInTheDocument();
|
|
855
|
-
|
|
856
|
-
userEvent.click(screen.getByText(currentMonthSelectedDisplay));
|
|
857
|
-
|
|
858
|
-
// We selected a new month but kept the year the same.
|
|
859
|
-
// Example: 04-2021 -> "May" -> 05-2021
|
|
860
|
-
expect(
|
|
861
|
-
screen.getByDisplayValue(`05-${date.substr(3)}`)
|
|
862
|
-
).toBeInTheDocument();
|
|
863
|
-
});
|
|
864
|
-
|
|
865
|
-
it("should render a popup calendar for the year date", () => {
|
|
866
|
-
render(
|
|
867
|
-
<DatePicker
|
|
868
|
-
id="datePicker"
|
|
869
|
-
dateType="year"
|
|
870
|
-
labelText="Select the year you want to visit NYPL"
|
|
871
|
-
/>
|
|
872
|
-
);
|
|
873
|
-
const input = screen.getByLabelText(
|
|
874
|
-
/Select the year you want to visit NYPL/i
|
|
875
|
-
);
|
|
876
|
-
const mockYear = 2021;
|
|
877
|
-
|
|
878
|
-
expect(
|
|
879
|
-
screen.queryByText(
|
|
880
|
-
`${(mockYear as any) - 4} - ${(mockYear as any) + 7}`
|
|
881
|
-
)
|
|
882
|
-
).not.toBeInTheDocument();
|
|
883
|
-
|
|
884
|
-
userEvent.click(input);
|
|
885
|
-
|
|
886
|
-
// In the display, the calendar displays a date range from four years
|
|
887
|
-
// before the current year to seven years after the current year. For year
|
|
888
|
-
// 2021, it will display 2017 - 2028.
|
|
889
|
-
expect(
|
|
890
|
-
screen.getByText(`${(mockYear as any) - 4} - ${(mockYear as any) + 7}`)
|
|
891
|
-
).toBeInTheDocument();
|
|
892
|
-
// This calendar displays 12 years to select from.
|
|
893
|
-
// It should display the four previous years from the current year.
|
|
894
|
-
for (let i = 4; i > 0; i--) {
|
|
895
|
-
expect(screen.getByText((mockYear as any) - i)).toBeInTheDocument();
|
|
896
|
-
}
|
|
897
|
-
// It should display the eight next years from the current year.
|
|
898
|
-
for (let i = 0; i < 8; i++) {
|
|
899
|
-
expect(screen.getByText((mockYear as any) + i)).toBeInTheDocument();
|
|
900
|
-
}
|
|
901
|
-
});
|
|
902
|
-
|
|
903
|
-
it("should select a new year from the calendar", () => {
|
|
904
|
-
render(
|
|
905
|
-
<DatePicker
|
|
906
|
-
id="datePicker"
|
|
907
|
-
dateType="year"
|
|
908
|
-
labelText="Select the year you want to visit NYPL"
|
|
909
|
-
/>
|
|
910
|
-
);
|
|
911
|
-
const input = screen.getByLabelText(
|
|
912
|
-
/Select the year you want to visit NYPL/i
|
|
913
|
-
);
|
|
914
|
-
const [year] = getTodaysValues();
|
|
915
|
-
|
|
916
|
-
expect(screen.getByDisplayValue(year)).toBeInTheDocument();
|
|
917
|
-
|
|
918
|
-
// Let's select a new day.
|
|
919
|
-
userEvent.click(input);
|
|
920
|
-
// The popup displays.
|
|
921
|
-
|
|
922
|
-
// Select a new year
|
|
923
|
-
userEvent.click(screen.getByText("2024"));
|
|
924
|
-
|
|
925
|
-
expect(screen.getByDisplayValue("2024")).toBeInTheDocument();
|
|
926
|
-
});
|
|
927
|
-
|
|
928
|
-
it("logs a warning when there is no `id` passed", () => {
|
|
929
|
-
const warn = jest.spyOn(console, "warn");
|
|
930
|
-
render(
|
|
931
|
-
// @ts-ignore: Typescript complains when a required prop is not passed, but
|
|
932
|
-
// here we don't want to pass the required prop to make sure the warning appears.
|
|
933
|
-
<DatePicker labelText="Select the year you want to visit NYPL" />
|
|
934
|
-
);
|
|
935
|
-
expect(warn).toHaveBeenCalledWith(
|
|
936
|
-
"NYPL Reservoir DatePicker: This component's required `id` prop was not passed."
|
|
937
|
-
);
|
|
938
|
-
});
|
|
939
|
-
});
|
|
940
|
-
});
|