@transferwise/components 0.0.0-experimental-696128b → 0.0.0-experimental-328f2cc

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.
Files changed (159) hide show
  1. package/build/avatarLayout/AvatarLayout.js +4 -10
  2. package/build/avatarLayout/AvatarLayout.js.map +1 -1
  3. package/build/avatarLayout/AvatarLayout.mjs +4 -10
  4. package/build/avatarLayout/AvatarLayout.mjs.map +1 -1
  5. package/build/button/Button.js +79 -81
  6. package/build/button/Button.js.map +1 -1
  7. package/build/button/Button.mjs +80 -82
  8. package/build/button/Button.mjs.map +1 -1
  9. package/build/criticalBanner/CriticalCommsBanner.js +2 -2
  10. package/build/criticalBanner/CriticalCommsBanner.js.map +1 -1
  11. package/build/criticalBanner/CriticalCommsBanner.mjs +1 -1
  12. package/build/header/Header.js +2 -2
  13. package/build/header/Header.js.map +1 -1
  14. package/build/header/Header.mjs +1 -1
  15. package/build/index.js +4 -2
  16. package/build/index.js.map +1 -1
  17. package/build/index.mjs +2 -1
  18. package/build/index.mjs.map +1 -1
  19. package/build/link/Link.js +3 -8
  20. package/build/link/Link.js.map +1 -1
  21. package/build/link/Link.mjs +3 -8
  22. package/build/link/Link.mjs.map +1 -1
  23. package/build/main.css +13 -224
  24. package/build/nudge/Nudge.js.map +1 -1
  25. package/build/nudge/Nudge.mjs.map +1 -1
  26. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.js +3 -1
  27. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.js.map +1 -1
  28. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.mjs +3 -1
  29. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.mjs.map +1 -1
  30. package/build/primitives/PrimitiveButton/src/PrimitiveButton.js +4 -1
  31. package/build/primitives/PrimitiveButton/src/PrimitiveButton.js.map +1 -1
  32. package/build/primitives/PrimitiveButton/src/PrimitiveButton.mjs +4 -1
  33. package/build/primitives/PrimitiveButton/src/PrimitiveButton.mjs.map +1 -1
  34. package/build/select/Select.js +2 -2
  35. package/build/select/Select.js.map +1 -1
  36. package/build/select/Select.mjs +1 -1
  37. package/build/styles/avatarLayout/AvatarLayout.css +2 -12
  38. package/build/styles/button/Button.css +15 -204
  39. package/build/styles/main.css +13 -224
  40. package/build/styles/nudge/Nudge.css +11 -0
  41. package/build/table/Table.js +166 -0
  42. package/build/table/Table.js.map +1 -0
  43. package/build/table/Table.messages.js +24 -0
  44. package/build/table/Table.messages.js.map +1 -0
  45. package/build/table/Table.messages.mjs +22 -0
  46. package/build/table/Table.messages.mjs.map +1 -0
  47. package/build/table/Table.mjs +164 -0
  48. package/build/table/Table.mjs.map +1 -0
  49. package/build/table/TableCell.js +86 -0
  50. package/build/table/TableCell.js.map +1 -0
  51. package/build/table/TableCell.mjs +84 -0
  52. package/build/table/TableCell.mjs.map +1 -0
  53. package/build/table/TableHeader.js +57 -0
  54. package/build/table/TableHeader.js.map +1 -0
  55. package/build/table/TableHeader.mjs +55 -0
  56. package/build/table/TableHeader.mjs.map +1 -0
  57. package/build/table/TableRow.js +85 -0
  58. package/build/table/TableRow.js.map +1 -0
  59. package/build/table/TableRow.mjs +83 -0
  60. package/build/table/TableRow.mjs.map +1 -0
  61. package/build/table/TableStatusText.js +54 -0
  62. package/build/table/TableStatusText.js.map +1 -0
  63. package/build/table/TableStatusText.mjs +52 -0
  64. package/build/table/TableStatusText.mjs.map +1 -0
  65. package/build/types/avatarLayout/AvatarLayout.d.ts.map +1 -1
  66. package/build/types/button/Button.d.ts +23 -2
  67. package/build/types/button/Button.d.ts.map +1 -1
  68. package/build/types/button/index.d.ts +2 -2
  69. package/build/types/button/index.d.ts.map +1 -1
  70. package/build/types/index.d.ts +2 -0
  71. package/build/types/index.d.ts.map +1 -1
  72. package/build/types/link/Link.d.ts +2 -2
  73. package/build/types/link/Link.d.ts.map +1 -1
  74. package/build/types/nudge/Nudge.d.ts +1 -1
  75. package/build/types/nudge/Nudge.d.ts.map +1 -1
  76. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.d.ts.map +1 -1
  77. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.d.ts +2 -6
  78. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.d.ts.map +1 -1
  79. package/build/types/primitives/PrimitiveButton/src/PrimitiveButton.d.ts.map +1 -1
  80. package/build/types/test-utils/story-config.d.ts +1 -1
  81. package/build/types/test-utils/story-config.d.ts.map +1 -1
  82. package/build/types/uploadInput/uploadButton/getAllowedFileTypes.d.ts.map +1 -1
  83. package/build/upload/steps/completeStep/completeStep.js +2 -2
  84. package/build/upload/steps/completeStep/completeStep.js.map +1 -1
  85. package/build/upload/steps/completeStep/completeStep.mjs +1 -1
  86. package/build/upload/steps/processingStep/processingStep.js +2 -2
  87. package/build/upload/steps/processingStep/processingStep.js.map +1 -1
  88. package/build/upload/steps/processingStep/processingStep.mjs +1 -1
  89. package/build/uploadInput/UploadInput.js +3 -3
  90. package/build/uploadInput/UploadInput.js.map +1 -1
  91. package/build/uploadInput/UploadInput.mjs +1 -1
  92. package/build/uploadInput/uploadButton/getAllowedFileTypes.js +23 -3
  93. package/build/uploadInput/uploadButton/getAllowedFileTypes.js.map +1 -1
  94. package/build/uploadInput/uploadButton/getAllowedFileTypes.mjs +23 -3
  95. package/build/uploadInput/uploadButton/getAllowedFileTypes.mjs.map +1 -1
  96. package/package.json +3 -3
  97. package/src/alert/Alert.tests.story.tsx +1 -1
  98. package/src/avatarLayout/AvatarLayout.css +2 -12
  99. package/src/avatarLayout/AvatarLayout.less +2 -19
  100. package/src/avatarLayout/AvatarLayout.tsx +3 -10
  101. package/src/button/Button.css +15 -204
  102. package/src/button/Button.less +14 -211
  103. package/src/button/Button.spec.tsx +227 -75
  104. package/src/button/Button.story.tsx +135 -728
  105. package/src/button/Button.tsx +131 -94
  106. package/src/button/__snapshots__/Button.spec.tsx.snap +309 -0
  107. package/src/button/index.ts +3 -2
  108. package/src/drawer/Drawer.spec.tsx +93 -0
  109. package/src/field/Field.story.tsx +1 -1
  110. package/src/flowNavigation/__snapshots__/FlowNavigation.spec.js.snap +1 -1
  111. package/src/index.ts +12 -0
  112. package/src/inputs/SelectInput.story.tsx +1 -1
  113. package/src/label/Label.story.tsx +1 -1
  114. package/src/link/Link.tsx +6 -15
  115. package/src/main.css +13 -224
  116. package/src/main.less +0 -1
  117. package/src/nudge/Nudge.css +11 -0
  118. package/src/nudge/Nudge.less +3 -0
  119. package/src/nudge/Nudge.story.tsx +10 -0
  120. package/src/nudge/Nudge.tsx +2 -1
  121. package/src/primitives/PrimitiveAnchor/src/PrimitiveAnchor.tsx +7 -1
  122. package/src/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.ts +2 -7
  123. package/src/primitives/PrimitiveAnchor/test/PrimitiveAnchor.spec.tsx +3 -1
  124. package/src/primitives/PrimitiveButton/src/PrimitiveButton.tsx +8 -1
  125. package/src/primitives/PrimitiveButton/test/PrimitiveButton.spec.tsx +5 -2
  126. package/src/test-utils/Parameters.d.ts +1 -9
  127. package/src/test-utils/story-config.ts +1 -10
  128. package/src/uploadInput/UploadInput.tests.story.tsx +5 -5
  129. package/src/uploadInput/uploadButton/getAllowedFileTypes.spec.ts +12 -0
  130. package/src/uploadInput/uploadButton/getAllowedFileTypes.ts +33 -7
  131. package/build/button/Button.resolver.js +0 -74
  132. package/build/button/Button.resolver.js.map +0 -1
  133. package/build/button/Button.resolver.mjs +0 -72
  134. package/build/button/Button.resolver.mjs.map +0 -1
  135. package/build/button/LegacyButton.js +0 -114
  136. package/build/button/LegacyButton.js.map +0 -1
  137. package/build/button/LegacyButton.mjs +0 -112
  138. package/build/button/LegacyButton.mjs.map +0 -1
  139. package/build/styles/button/Button.vars.css +0 -39
  140. package/build/styles/button/LegacyButton.css +0 -23
  141. package/build/types/button/Button.resolver.d.ts +0 -33
  142. package/build/types/button/Button.resolver.d.ts.map +0 -1
  143. package/build/types/button/Button.types.d.ts +0 -58
  144. package/build/types/button/Button.types.d.ts.map +0 -1
  145. package/build/types/button/LegacyButton.d.ts +0 -30
  146. package/build/types/button/LegacyButton.d.ts.map +0 -1
  147. package/src/button/Button.resolver.tsx +0 -73
  148. package/src/button/Button.tests.story.tsx +0 -27
  149. package/src/button/Button.types.ts +0 -74
  150. package/src/button/Button.vars.css +0 -39
  151. package/src/button/Button.vars.less +0 -50
  152. package/src/button/LegacyButton.css +0 -23
  153. package/src/button/LegacyButton.less +0 -24
  154. package/src/button/LegacyButton.spec.tsx +0 -147
  155. package/src/button/LegacyButton.story.tsx +0 -225
  156. package/src/button/LegacyButton.tsx +0 -160
  157. package/src/drawer/Drawer.rtl.spec.tsx +0 -59
  158. package/src/drawer/Drawer.spec.js +0 -101
  159. package/src/drawer/__snapshots__/Drawer.rtl.spec.tsx.snap +0 -55
@@ -1,225 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { userEvent, within, fn, expect } from '@storybook/test';
3
- import { useState } from 'react';
4
-
5
- import Button from '.';
6
-
7
- const withContainer = (Story: any) => (
8
- <div
9
- style={{
10
- display: 'flex',
11
- flexDirection: 'initial',
12
- justifyContent: 'center',
13
- flexFlow: 'column',
14
- alignItems: 'center',
15
- }}
16
- >
17
- <Story />
18
- </div>
19
- );
20
-
21
- const meta: Meta<typeof Button> = {
22
- component: Button,
23
- title: 'Actions/Button/Legacy',
24
- args: {
25
- children: 'Button text',
26
- loading: false,
27
- type: undefined,
28
- onClick: fn(),
29
- onBlur: fn(),
30
- onFocus: fn(),
31
- href: 'https://example.com',
32
- as: undefined,
33
- },
34
- argTypes: {
35
- as: {
36
- control: {
37
- name: 'enum',
38
- options: ['button', 'a'],
39
- },
40
- },
41
- type: {
42
- type: {
43
- name: 'enum',
44
- value: ['accent', 'positive', 'negative'],
45
- },
46
- },
47
- size: {
48
- type: {
49
- name: 'enum',
50
- value: ['xs', 'sm', 'md', 'lg'],
51
- },
52
- },
53
- priority: {
54
- type: {
55
- name: 'enum',
56
- value: ['primary', 'secondary', 'tertiary'],
57
- },
58
- },
59
- sentiment: {
60
- table: {
61
- disable: true,
62
- },
63
- },
64
- iconStart: {
65
- table: {
66
- disable: true,
67
- },
68
- },
69
- iconEnd: {
70
- table: {
71
- disable: true,
72
- },
73
- },
74
- avatars: {
75
- table: {
76
- disable: true,
77
- },
78
- },
79
- 'data-testid': {
80
- table: {
81
- disable: true,
82
- },
83
- },
84
- },
85
- tags: ['autodocs'],
86
- decorators: [withContainer],
87
- };
88
-
89
- export default meta;
90
-
91
- type Story = StoryObj<typeof Button>;
92
-
93
- export const Basic: Story = {};
94
-
95
- export const Secondary: Story = {
96
- args: {
97
- type: 'accent',
98
- priority: 'secondary',
99
- },
100
- };
101
-
102
- export const Tertiary: Story = {
103
- args: {
104
- type: 'accent',
105
- priority: 'tertiary',
106
- },
107
- };
108
-
109
- export const Negative: Story = {
110
- args: {
111
- type: 'negative',
112
- priority: 'primary',
113
- },
114
- };
115
-
116
- export const Loading: Story = {
117
- args: {
118
- loading: true,
119
- },
120
- };
121
-
122
- export const Variants: Story = {
123
- render: () => {
124
- return (
125
- <div className="d-flex flex-column p-b-2 align-items-start">
126
- <div className="d-flex flex-row p-b-2" style={{ gap: 'var(--size-16)' }}>
127
- <Button type="accent" priority="primary">
128
- Primary Accent
129
- </Button>
130
- <Button type="accent" priority="secondary">
131
- Secondary Accent
132
- </Button>
133
- <Button type="accent" priority="tertiary">
134
- Tertiary Accent
135
- </Button>
136
- </div>
137
- <div className="d-flex flex-row p-b-2" style={{ gap: 'var(--size-16)' }}>
138
- <Button type="positive" priority="primary">
139
- Primary Positive
140
- </Button>
141
- <Button type="positive" priority="secondary">
142
- Secondary Accent
143
- </Button>
144
- </div>
145
- <div className="d-flex flex-row flex- p-b-2" style={{ gap: 'var(--size-16)' }}>
146
- <Button type="negative" priority="primary">
147
- Primary Negative
148
- </Button>
149
- <Button type="negative" priority="secondary">
150
- Secondary Negative
151
- </Button>
152
- </div>
153
- <div className="d-flex flex-row p-b-1" style={{ gap: 'var(--size-16)' }}>
154
- <Button type="accent" priority="primary" disabled>
155
- Button Disabled
156
- </Button>
157
- <Button type="accent" priority="secondary" disabled>
158
- Button Disabled
159
- </Button>
160
- <Button type="accent" priority="tertiary" disabled>
161
- Button Disabled
162
- </Button>
163
- </div>
164
- </div>
165
- );
166
- },
167
- };
168
-
169
- const wait = async (duration = 500) =>
170
- new Promise<void>((resolve) => {
171
- setTimeout(resolve, duration);
172
- });
173
-
174
- export const Focused: Story = {
175
- play: async ({ canvasElement }: { canvasElement: HTMLElement }) => {
176
- const canvas = within(canvasElement);
177
- const button = canvas.getByRole('button');
178
- await userEvent.tab();
179
- await expect(button).toHaveFocus();
180
- await expect(button).toHaveTextContent('Focused!');
181
- },
182
- render: function Render(args: React.ComponentProps<typeof Button>) {
183
- const [focused, setFocused] = useState(false);
184
-
185
- return (
186
- <Button {...args} onFocus={() => setFocused(true)}>
187
- {focused ? 'Focused!' : 'Button text'}
188
- </Button>
189
- );
190
- },
191
- };
192
-
193
- export const SocialMedia: Story = {
194
- render: () => {
195
- return (
196
- <>
197
- <div className="m-b-2">
198
- <button type="button" className="btn btn-google">
199
- Login with Google
200
- </button>
201
- </div>
202
- <div className="m-b-2">
203
- <button type="button" className="btn btn-facebook">
204
- Login with Facebook
205
- </button>
206
- </div>
207
- <div className="m-b-2">
208
- <button type="button" className="btn btn-lg btn-facebook">
209
- Large Button
210
- </button>
211
- </div>
212
- <div className="m-b-2">
213
- <button type="button" className="btn btn-block btn-facebook">
214
- Block Button
215
- </button>
216
- </div>
217
- <div className="m-b-2">
218
- <button type="button" className="btn btn-lg btn-block btn-facebook">
219
- Large Block Button
220
- </button>
221
- </div>
222
- </>
223
- );
224
- },
225
- };
@@ -1,160 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { ElementType, forwardRef, MouseEvent } from 'react';
3
- import { useIntl } from 'react-intl';
4
-
5
- import {
6
- Size,
7
- ControlType,
8
- Priority,
9
- ControlTypeAccent,
10
- ControlTypeNegative,
11
- ControlTypePositive,
12
- PriorityPrimary,
13
- PrioritySecondary,
14
- PriorityTertiary,
15
- SizeExtraSmall,
16
- SizeSmall,
17
- SizeMedium,
18
- SizeLarge,
19
- } from '../common';
20
- import ProcessIndicator from '../processIndicator';
21
-
22
- import messages from '../i18n/commonMessages/Button.messages';
23
- import { typeClassMap, priorityClassMap } from './classMap';
24
- import { establishNewPriority, establishNewType, logDeprecationNotices } from './legacyUtils';
25
- import { ButtonReferenceType } from './Button.types';
26
-
27
- /** @deprecated */
28
- type DeprecatedTypes = 'primary' | 'pay' | 'secondary' | 'danger' | 'link';
29
-
30
- /** @deprecated */
31
- type DeprecatedSizes = SizeExtraSmall;
32
-
33
- type CommonProps = {
34
- v2?: false;
35
- block?: boolean;
36
- disabled?: boolean;
37
- loading?: boolean;
38
- type?: ControlTypeAccent | ControlTypeNegative | ControlTypePositive | DeprecatedTypes | null;
39
- priority?: PriorityPrimary | PrioritySecondary | PriorityTertiary | null;
40
- size?: SizeSmall | SizeMedium | SizeLarge | DeprecatedSizes;
41
- htmlType?: 'submit' | 'reset' | 'button';
42
- };
43
-
44
- type ButtonProps = CommonProps &
45
- Omit<React.ComponentPropsWithRef<'button'>, 'type'> & {
46
- as?: 'button';
47
- };
48
-
49
- type AnchorProps = CommonProps &
50
- Omit<React.ComponentPropsWithRef<'a'>, 'type'> & {
51
- as?: 'a';
52
- href?: string;
53
- };
54
-
55
- export type LegacyButtonProps = ButtonProps | AnchorProps;
56
-
57
- /**
58
- * @deprecated make sure you use new Button component via `<Button v2 .. />` and new props
59
- */
60
- const LegacyButton = forwardRef<ButtonReferenceType, LegacyButtonProps>(
61
- (
62
- {
63
- as: component = 'button',
64
- block = false,
65
- children,
66
- className,
67
- disabled,
68
- loading = false,
69
- priority = Priority.PRIMARY,
70
- size = Size.MEDIUM,
71
- type = ControlType.ACCENT,
72
- onClick,
73
- ...rest
74
- }: LegacyButtonProps,
75
- ref,
76
- ) => {
77
- const intl = useIntl();
78
-
79
- logDeprecationNotices({ size, type });
80
-
81
- const newType = establishNewType(type);
82
- const newPriority = establishNewPriority(priority, type);
83
-
84
- const classes = clsx(
85
- `btn btn-${size}`,
86
- `np-btn np-btn-${size}`,
87
- {
88
- 'btn-loading': loading,
89
- 'btn-block np-btn-block': block,
90
- disabled,
91
- },
92
- // @ts-expect-error fix when refactor `typeClassMap` to TypeScript
93
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
94
- typeClassMap[newType],
95
- // @ts-expect-error fix when refactor `typeClassMap` to TypeScript
96
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
97
- priorityClassMap[newPriority],
98
- className,
99
- );
100
-
101
- function processIndicatorSize() {
102
- return ['sm', 'xs'].includes(size) ? 'xxs' : 'xs';
103
- }
104
-
105
- const Element = (component as ElementType) ?? 'button';
106
- let props;
107
-
108
- if (Element === 'button') {
109
- const { htmlType = 'button', ...restProps } = rest as ButtonProps;
110
- props = {
111
- ...restProps,
112
- disabled,
113
- 'aria-disabled': loading,
114
- type: htmlType,
115
- };
116
- } else {
117
- props = {
118
- ...rest,
119
- 'aria-disabled': loading,
120
- } as AnchorProps;
121
- }
122
-
123
- /**
124
- * Ensures that the button cannot be activated in loading or disabled mode,
125
- * when `aria-disabled` might be used over the `disabled` HTML attribute
126
- */
127
- const handleClick =
128
- (handler: LegacyButtonProps['onClick']) =>
129
- (event: MouseEvent<HTMLButtonElement> & MouseEvent<HTMLAnchorElement>) => {
130
- if (disabled || loading) {
131
- event.preventDefault();
132
- } else if (typeof handler === 'function') {
133
- handler(event);
134
- }
135
- };
136
-
137
- return (
138
- <Element
139
- ref={ref as React.Ref<ButtonReferenceType>}
140
- className={classes}
141
- onClick={handleClick(onClick)}
142
- {...props}
143
- aria-live={loading ? 'polite' : 'off'}
144
- aria-busy={loading}
145
- aria-label={loading ? intl.formatMessage(messages.loadingAriaLabel) : rest['aria-label']}
146
- >
147
- {children}
148
- {loading && (
149
- <ProcessIndicator
150
- size={processIndicatorSize()}
151
- className="btn-loader"
152
- data-testid="ButtonProgressIndicator"
153
- />
154
- )}
155
- </Element>
156
- );
157
- },
158
- );
159
-
160
- export default LegacyButton;
@@ -1,59 +0,0 @@
1
- import { DimmerProps } from '../dimmer';
2
- import { SlidingPanelProps } from '../slidingPanel';
3
- import { mockMatchMedia, render, screen, userEvent } from '../test-utils';
4
-
5
- import Drawer from './Drawer';
6
-
7
- mockMatchMedia();
8
-
9
- jest.mock(
10
- '../dimmer',
11
- () =>
12
- function Dimmer({ open, children }: DimmerProps) {
13
- return open ? <div className="dimmer">{children}</div> : null;
14
- },
15
- );
16
-
17
- jest.mock(
18
- '../slidingPanel',
19
- () =>
20
- function SlidingPanel({ open, children }: SlidingPanelProps) {
21
- return open ? <div className="sliding-panel">{children}</div> : null;
22
- },
23
- );
24
-
25
- describe('Drawer', () => {
26
- const props = {
27
- onClose: jest.fn(),
28
- open: true,
29
- };
30
-
31
- afterEach(() => {
32
- jest.clearAllMocks();
33
- });
34
-
35
- it('renders content when open', () => {
36
- const { container } = render(<Drawer {...props}>content</Drawer>);
37
-
38
- expect(container).toMatchSnapshot();
39
- });
40
-
41
- it("doesn't render content when closed", () => {
42
- const { container } = render(
43
- <Drawer {...props} open={false}>
44
- content
45
- </Drawer>,
46
- );
47
-
48
- expect(container).toMatchSnapshot();
49
- });
50
-
51
- it('calls onClose when user clicks close button', async () => {
52
- render(<Drawer {...props}>content</Drawer>);
53
- expect(props.onClose).not.toHaveBeenCalled();
54
- await userEvent.click(getCloseButton());
55
- expect(props.onClose).toHaveBeenCalledTimes(1);
56
- });
57
-
58
- const getCloseButton = () => screen.getByLabelText('Close');
59
- });
@@ -1,101 +0,0 @@
1
- import { mount } from 'enzyme';
2
-
3
- import { mockMatchMedia } from '../test-utils';
4
- import Title from '../title/Title';
5
-
6
- import Drawer from '.';
7
-
8
- mockMatchMedia();
9
- jest.mock('../common');
10
- jest.useFakeTimers();
11
-
12
- jest.mock(
13
- '../dimmer',
14
- () =>
15
- function Dimmer({ open, children }) {
16
- return open ? <div className="dimmer">{children}</div> : null;
17
- },
18
- );
19
-
20
- jest.mock(
21
- '../slidingPanel',
22
- () =>
23
- function SlidingPanel({ open, children }) {
24
- return open ? <div className="sliding-panel">{children}</div> : null;
25
- },
26
- );
27
-
28
- const defaultLocale = 'en-GB';
29
-
30
- jest.mock('react-intl', () => ({
31
- injectIntl: (Component) =>
32
- function InjectedComponent(props) {
33
- return <Component {...props} intl={{ locale: defaultLocale }} />;
34
- },
35
- useIntl: () => ({ locale: defaultLocale, formatMessage: (id) => String(id) }),
36
- defineMessages: (translations) => translations,
37
- }));
38
-
39
- describe('Drawer', () => {
40
- let component;
41
- const props = {
42
- open: true,
43
- position: 'left',
44
- onClose: jest.fn(),
45
- children: null,
46
- headerTitle: null,
47
- footerContent: null,
48
- };
49
-
50
- beforeEach(() => {
51
- component = mount(<Drawer {...props} />);
52
- });
53
-
54
- afterEach(() => {
55
- jest.clearAllMocks();
56
- component.unmount();
57
- });
58
-
59
- it('renders drawer header if title is provided', () => {
60
- expect(component.find('.np-drawer-header--title')).toHaveLength(0);
61
- component.setProps({ headerTitle: 'A title' });
62
- expect(component.find(Title)).toHaveLength(1);
63
- expect(component.find(Title).props().children).toBe('A title');
64
- });
65
-
66
- it('renders header with or without borders', () => {
67
- expect(component.find('.np-drawer-header--withborder')).toHaveLength(0);
68
- component.setProps({ headerTitle: 'A title' });
69
- expect(component.find('.np-drawer-header--withborder')).toHaveLength(1);
70
- });
71
-
72
- it('renders content if children are provided', () => {
73
- expect(component.find('.np-drawer-content')).toHaveLength(0);
74
- component.setProps({ children: 'SomeChildren' });
75
- expect(component.find('.np-drawer-content')).toHaveLength(1);
76
- });
77
-
78
- it('renders drawer footer if footerContent is provided', () => {
79
- expect(component.find('.np-drawer-footer')).toHaveLength(0);
80
- component.setProps({ footerContent: 'SomeContent' });
81
- expect(component.find('.np-drawer-footer')).toHaveLength(1);
82
- });
83
-
84
- it('passes onUnmount to Dimmer onExited prop', () => {
85
- const onUnmount = jest.fn();
86
- component.setProps({ onUnmount });
87
- component.setProps({ open: true });
88
- expect(component.find('Dimmer').prop('onExited')).toBe(onUnmount);
89
- });
90
-
91
- it('calls onUnmount when the component unmounts', () => {
92
- const onUnmount = jest.fn();
93
- component.setProps({ onUnmount });
94
- component.setProps({ open: true });
95
- expect(onUnmount).not.toHaveBeenCalled();
96
- jest.runAllTimers();
97
- component.setProps({ open: false });
98
- component.find('Dimmer').prop('onExited')();
99
- expect(onUnmount).toHaveBeenCalledTimes(1);
100
- });
101
- });
@@ -1,55 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`Drawer doesn't render content when closed 1`] = `<div />`;
4
-
5
- exports[`Drawer renders content when open 1`] = `
6
- <div>
7
- <div
8
- class="dimmer"
9
- >
10
- <div
11
- class="sliding-panel"
12
- >
13
- <div
14
- aria-modal="true"
15
- class="np-drawer"
16
- role="dialog"
17
- >
18
- <div
19
- class="np-drawer-header"
20
- >
21
- <button
22
- aria-label="Close"
23
- class="np-close-button close btn-link text-no-decoration np-close-button--large"
24
- type="button"
25
- >
26
- <span
27
- class="tw-icon tw-icon-cross "
28
- data-testid="cross-icon"
29
- >
30
- <svg
31
- aria-hidden="true"
32
- fill="currentColor"
33
- focusable="false"
34
- height="24"
35
- role="none"
36
- viewBox="0 0 24 24"
37
- width="24"
38
- >
39
- <path
40
- d="m19.629 5.915-1.2-1.2-6.257 6.257-6.258-6.257-1.2 1.2 6.258 6.257-6.258 6.257 1.2 1.2 6.258-6.257 6.257 6.257 1.2-1.2-6.258-6.257 6.258-6.257Z"
41
- />
42
- </svg>
43
- </span>
44
- </button>
45
- </div>
46
- <div
47
- class="np-drawer-content"
48
- >
49
- content
50
- </div>
51
- </div>
52
- </div>
53
- </div>
54
- </div>
55
- `;