@patternfly/react-core 4.198.16 → 4.198.19

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 (93) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/esm/components/AlertGroup/AlertGroup.d.ts +4 -0
  3. package/dist/esm/components/AlertGroup/AlertGroup.d.ts.map +1 -1
  4. package/dist/esm/components/AlertGroup/AlertGroup.js +2 -2
  5. package/dist/esm/components/AlertGroup/AlertGroup.js.map +1 -1
  6. package/dist/esm/components/AlertGroup/AlertGroupInline.d.ts.map +1 -1
  7. package/dist/esm/components/AlertGroup/AlertGroupInline.js +5 -2
  8. package/dist/esm/components/AlertGroup/AlertGroupInline.js.map +1 -1
  9. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.d.ts +10 -2
  10. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.d.ts.map +1 -1
  11. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.js +9 -2
  12. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.js.map +1 -1
  13. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.d.ts +1 -1
  14. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.d.ts.map +1 -1
  15. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.js +21 -2
  16. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.js.map +1 -1
  17. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatusItem.js.map +1 -1
  18. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitle.d.ts +6 -2
  19. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitle.d.ts.map +1 -1
  20. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitle.js +9 -2
  21. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitle.js.map +1 -1
  22. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitleIcon.d.ts +2 -0
  23. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitleIcon.d.ts.map +1 -1
  24. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitleIcon.js +2 -4
  25. package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitleIcon.js.map +1 -1
  26. package/dist/esm/components/MultipleFileUpload/index.d.ts +0 -6
  27. package/dist/esm/components/MultipleFileUpload/index.d.ts.map +1 -1
  28. package/dist/esm/components/MultipleFileUpload/index.js +0 -6
  29. package/dist/esm/components/MultipleFileUpload/index.js.map +1 -1
  30. package/dist/esm/components/NumberInput/NumberInput.d.ts.map +1 -1
  31. package/dist/esm/components/NumberInput/NumberInput.js +2 -2
  32. package/dist/esm/components/NumberInput/NumberInput.js.map +1 -1
  33. package/dist/js/components/AlertGroup/AlertGroup.d.ts +4 -0
  34. package/dist/js/components/AlertGroup/AlertGroup.d.ts.map +1 -1
  35. package/dist/js/components/AlertGroup/AlertGroup.js +2 -2
  36. package/dist/js/components/AlertGroup/AlertGroup.js.map +1 -1
  37. package/dist/js/components/AlertGroup/AlertGroupInline.d.ts.map +1 -1
  38. package/dist/js/components/AlertGroup/AlertGroupInline.js +5 -2
  39. package/dist/js/components/AlertGroup/AlertGroupInline.js.map +1 -1
  40. package/dist/js/components/MultipleFileUpload/MultipleFileUploadMain.d.ts +10 -2
  41. package/dist/js/components/MultipleFileUpload/MultipleFileUploadMain.d.ts.map +1 -1
  42. package/dist/js/components/MultipleFileUpload/MultipleFileUploadMain.js +9 -2
  43. package/dist/js/components/MultipleFileUpload/MultipleFileUploadMain.js.map +1 -1
  44. package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatus.d.ts +1 -1
  45. package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatus.d.ts.map +1 -1
  46. package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatus.js +21 -2
  47. package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatus.js.map +1 -1
  48. package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatusItem.js.map +1 -1
  49. package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitle.d.ts +6 -2
  50. package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitle.d.ts.map +1 -1
  51. package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitle.js +9 -2
  52. package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitle.js.map +1 -1
  53. package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitleIcon.d.ts +2 -0
  54. package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitleIcon.d.ts.map +1 -1
  55. package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitleIcon.js +2 -4
  56. package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitleIcon.js.map +1 -1
  57. package/dist/js/components/MultipleFileUpload/index.d.ts +0 -6
  58. package/dist/js/components/MultipleFileUpload/index.d.ts.map +1 -1
  59. package/dist/js/components/MultipleFileUpload/index.js +0 -6
  60. package/dist/js/components/MultipleFileUpload/index.js.map +1 -1
  61. package/dist/js/components/NumberInput/NumberInput.d.ts.map +1 -1
  62. package/dist/js/components/NumberInput/NumberInput.js +2 -2
  63. package/dist/js/components/NumberInput/NumberInput.js.map +1 -1
  64. package/dist/styles/assets/images/img_pie-chart-with-legend.png +0 -0
  65. package/dist/styles/assets/images/status-icon-sprite.svg +38 -0
  66. package/dist/umd/react-core.css +244 -47
  67. package/dist/umd/react-core.js +77 -49
  68. package/dist/umd/react-core.min.css +316 -119
  69. package/dist/umd/react-core.min.js +4 -4
  70. package/package.json +6 -6
  71. package/src/components/AlertGroup/AlertGroup.tsx +13 -2
  72. package/src/components/AlertGroup/AlertGroupInline.tsx +9 -0
  73. package/src/components/AlertGroup/__tests__/AlertGroup.test.tsx +15 -0
  74. package/src/components/AlertGroup/__tests__/__snapshots__/AlertGroup.test.tsx.snap +93 -1
  75. package/src/components/AlertGroup/examples/AlertGroup.md +147 -0
  76. package/src/components/MultipleFileUpload/MultipleFileUploadMain.tsx +29 -8
  77. package/src/components/MultipleFileUpload/MultipleFileUploadStatus.tsx +24 -4
  78. package/src/components/MultipleFileUpload/MultipleFileUploadStatusItem.tsx +1 -1
  79. package/src/components/MultipleFileUpload/MultipleFileUploadTitle.tsx +19 -5
  80. package/src/components/MultipleFileUpload/MultipleFileUploadTitleIcon.tsx +4 -3
  81. package/src/components/MultipleFileUpload/__tests__/MultipleFileUploadMain.test.tsx +19 -2
  82. package/src/components/MultipleFileUpload/__tests__/MultipleFileUploadTitle.test.tsx +17 -2
  83. package/src/components/MultipleFileUpload/__tests__/MultipleFileUploadTitleIcon.test.tsx +1 -1
  84. package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUploadMain.test.tsx.snap +198 -2
  85. package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUploadTitle.test.tsx.snap +62 -4
  86. package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUploadTitleIcon.test.tsx.snap +2 -50
  87. package/src/components/MultipleFileUpload/examples/MultipleFileUpload.md +7 -60
  88. package/src/components/MultipleFileUpload/examples/MultipleFileUploadBasic.tsx +48 -74
  89. package/src/components/MultipleFileUpload/index.ts +0 -6
  90. package/src/components/NumberInput/NumberInput.tsx +3 -2
  91. package/src/components/NumberInput/examples/NumberInput.md +78 -5
  92. package/src/demos/MultipleFileUploadDemos.md +16 -0
  93. package/src/{components/MultipleFileUpload/examples/MultipleFileUploadHorizontal.tsx → demos/examples/MultipleFileUpload/MultipleFileUploadRejectedFile.tsx} +60 -64
@@ -1,5 +1,129 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`MultipleFileUploadMain passes props to the info component as expected 1`] = `
4
+ <MultipleFileUploadMain
5
+ infoText="info text"
6
+ >
7
+ <div
8
+ className="pf-c-multiple-file-upload__main"
9
+ >
10
+ <MultipleFileUploadButton>
11
+ <div
12
+ className="pf-c-multiple-file-upload__upload"
13
+ >
14
+ <Button
15
+ onClick={[Function]}
16
+ variant="secondary"
17
+ >
18
+ <ButtonBase
19
+ innerRef={null}
20
+ onClick={[Function]}
21
+ variant="secondary"
22
+ >
23
+ <button
24
+ aria-disabled={false}
25
+ aria-label={null}
26
+ className="pf-c-button pf-m-secondary"
27
+ data-ouia-component-id="OUIA-Generated-Button-secondary-4"
28
+ data-ouia-component-type="PF4/Button"
29
+ data-ouia-safe={true}
30
+ disabled={false}
31
+ onClick={[Function]}
32
+ role={null}
33
+ type="button"
34
+ >
35
+ Upload
36
+ </button>
37
+ </ButtonBase>
38
+ </Button>
39
+ </div>
40
+ </MultipleFileUploadButton>
41
+ <MultipleFileUploadInfo>
42
+ <div
43
+ className="pf-c-multiple-file-upload__info"
44
+ >
45
+ info text
46
+ </div>
47
+ </MultipleFileUploadInfo>
48
+ </div>
49
+ </MultipleFileUploadMain>
50
+ `;
51
+
52
+ exports[`MultipleFileUploadMain passes props to the title as expected 1`] = `
53
+ <MultipleFileUploadMain
54
+ titleIcon="icon"
55
+ titleText="title text"
56
+ titleTextSeparator="title test separator"
57
+ >
58
+ <div
59
+ className="pf-c-multiple-file-upload__main"
60
+ >
61
+ <MultipleFileUploadTitle
62
+ icon="icon"
63
+ text="title text"
64
+ textSeparator="title test separator"
65
+ >
66
+ <div
67
+ className="pf-c-multiple-file-upload__title"
68
+ >
69
+ <MultipleFileUploadTitleIcon>
70
+ <div
71
+ className="pf-c-multiple-file-upload__title-icon"
72
+ >
73
+ icon
74
+ </div>
75
+ </MultipleFileUploadTitleIcon>
76
+ <MultipleFileUploadTitleText>
77
+ <div
78
+ className="pf-c-multiple-file-upload__title-text"
79
+ >
80
+ title text
81
+ <MultipleFileUploadTitleTextSeparator>
82
+ <div
83
+ className="pf-c-multiple-file-upload__title-text-separator"
84
+ >
85
+ title test separator
86
+ </div>
87
+ </MultipleFileUploadTitleTextSeparator>
88
+ </div>
89
+ </MultipleFileUploadTitleText>
90
+ </div>
91
+ </MultipleFileUploadTitle>
92
+ <MultipleFileUploadButton>
93
+ <div
94
+ className="pf-c-multiple-file-upload__upload"
95
+ >
96
+ <Button
97
+ onClick={[Function]}
98
+ variant="secondary"
99
+ >
100
+ <ButtonBase
101
+ innerRef={null}
102
+ onClick={[Function]}
103
+ variant="secondary"
104
+ >
105
+ <button
106
+ aria-disabled={false}
107
+ aria-label={null}
108
+ className="pf-c-button pf-m-secondary"
109
+ data-ouia-component-id="OUIA-Generated-Button-secondary-3"
110
+ data-ouia-component-type="PF4/Button"
111
+ data-ouia-safe={true}
112
+ disabled={false}
113
+ onClick={[Function]}
114
+ role={null}
115
+ type="button"
116
+ >
117
+ Upload
118
+ </button>
119
+ </ButtonBase>
120
+ </Button>
121
+ </div>
122
+ </MultipleFileUploadButton>
123
+ </div>
124
+ </MultipleFileUploadMain>
125
+ `;
126
+
3
127
  exports[`MultipleFileUploadMain renders custom class names 1`] = `
4
128
  <MultipleFileUploadMain
5
129
  className="test"
@@ -7,7 +131,37 @@ exports[`MultipleFileUploadMain renders custom class names 1`] = `
7
131
  <div
8
132
  className="pf-c-multiple-file-upload__main test"
9
133
  >
10
- Foo
134
+ <MultipleFileUploadButton>
135
+ <div
136
+ className="pf-c-multiple-file-upload__upload"
137
+ >
138
+ <Button
139
+ onClick={[Function]}
140
+ variant="secondary"
141
+ >
142
+ <ButtonBase
143
+ innerRef={null}
144
+ onClick={[Function]}
145
+ variant="secondary"
146
+ >
147
+ <button
148
+ aria-disabled={false}
149
+ aria-label={null}
150
+ className="pf-c-button pf-m-secondary"
151
+ data-ouia-component-id="OUIA-Generated-Button-secondary-2"
152
+ data-ouia-component-type="PF4/Button"
153
+ data-ouia-safe={true}
154
+ disabled={false}
155
+ onClick={[Function]}
156
+ role={null}
157
+ type="button"
158
+ >
159
+ Upload
160
+ </button>
161
+ </ButtonBase>
162
+ </Button>
163
+ </div>
164
+ </MultipleFileUploadButton>
11
165
  </div>
12
166
  </MultipleFileUploadMain>
13
167
  `;
@@ -17,7 +171,49 @@ exports[`MultipleFileUploadMain renders with expected class names 1`] = `
17
171
  <div
18
172
  className="pf-c-multiple-file-upload__main"
19
173
  >
20
- Foo
174
+ <MultipleFileUploadButton>
175
+ <div
176
+ className="pf-c-multiple-file-upload__upload"
177
+ >
178
+ <Button
179
+ onClick={[Function]}
180
+ variant="secondary"
181
+ >
182
+ <ButtonBase
183
+ innerRef={null}
184
+ onClick={[Function]}
185
+ variant="secondary"
186
+ >
187
+ <button
188
+ aria-disabled={false}
189
+ aria-label={null}
190
+ className="pf-c-button pf-m-secondary"
191
+ data-ouia-component-id="OUIA-Generated-Button-secondary-1"
192
+ data-ouia-component-type="PF4/Button"
193
+ data-ouia-safe={true}
194
+ disabled={false}
195
+ onClick={[Function]}
196
+ role={null}
197
+ type="button"
198
+ >
199
+ Upload
200
+ </button>
201
+ </ButtonBase>
202
+ </Button>
203
+ </div>
204
+ </MultipleFileUploadButton>
205
+ </div>
206
+ </MultipleFileUploadMain>
207
+ `;
208
+
209
+ exports[`MultipleFileUploadMain renders without the button when expected 1`] = `
210
+ <MultipleFileUploadMain
211
+ isUploadButtonHidden={true}
212
+ >
213
+ <div
214
+ className="pf-c-multiple-file-upload__main"
215
+ >
216
+ <Component />
21
217
  </div>
22
218
  </MultipleFileUploadMain>
23
219
  `;
@@ -6,18 +6,76 @@ exports[`MultipleFileUploadTitle renders custom class names 1`] = `
6
6
  >
7
7
  <div
8
8
  className="pf-c-multiple-file-upload__title test"
9
- >
10
- Foo
11
- </div>
9
+ />
12
10
  </MultipleFileUploadTitle>
13
11
  `;
14
12
 
15
13
  exports[`MultipleFileUploadTitle renders with expected class names 1`] = `
16
14
  <MultipleFileUploadTitle>
15
+ <div
16
+ className="pf-c-multiple-file-upload__title"
17
+ />
18
+ </MultipleFileUploadTitle>
19
+ `;
20
+
21
+ exports[`MultipleFileUploadTitle renders with title icon 1`] = `
22
+ <MultipleFileUploadTitle
23
+ icon="icon"
24
+ >
25
+ <div
26
+ className="pf-c-multiple-file-upload__title"
27
+ >
28
+ <MultipleFileUploadTitleIcon>
29
+ <div
30
+ className="pf-c-multiple-file-upload__title-icon"
31
+ >
32
+ icon
33
+ </div>
34
+ </MultipleFileUploadTitleIcon>
35
+ </div>
36
+ </MultipleFileUploadTitle>
37
+ `;
38
+
39
+ exports[`MultipleFileUploadTitle renders with title text 1`] = `
40
+ <MultipleFileUploadTitle
41
+ text="text"
42
+ >
43
+ <div
44
+ className="pf-c-multiple-file-upload__title"
45
+ >
46
+ <MultipleFileUploadTitleText>
47
+ <div
48
+ className="pf-c-multiple-file-upload__title-text"
49
+ >
50
+ text
51
+ </div>
52
+ </MultipleFileUploadTitleText>
53
+ </div>
54
+ </MultipleFileUploadTitle>
55
+ `;
56
+
57
+ exports[`MultipleFileUploadTitle renders with title text separator 1`] = `
58
+ <MultipleFileUploadTitle
59
+ text="text"
60
+ textSeparator="text separator"
61
+ >
17
62
  <div
18
63
  className="pf-c-multiple-file-upload__title"
19
64
  >
20
- Foo
65
+ <MultipleFileUploadTitleText>
66
+ <div
67
+ className="pf-c-multiple-file-upload__title-text"
68
+ >
69
+ text
70
+ <MultipleFileUploadTitleTextSeparator>
71
+ <div
72
+ className="pf-c-multiple-file-upload__title-text-separator"
73
+ >
74
+ text separator
75
+ </div>
76
+ </MultipleFileUploadTitleTextSeparator>
77
+ </div>
78
+ </MultipleFileUploadTitleText>
21
79
  </div>
22
80
  </MultipleFileUploadTitle>
23
81
  `;
@@ -6,32 +6,7 @@ exports[`MultipleFileUploadTitleIcon renders custom class names 1`] = `
6
6
  >
7
7
  <div
8
8
  className="pf-c-multiple-file-upload__title-icon test"
9
- >
10
- <UploadIcon
11
- color="currentColor"
12
- noVerticalAlign={false}
13
- size="sm"
14
- >
15
- <svg
16
- aria-hidden={true}
17
- aria-labelledby={null}
18
- fill="currentColor"
19
- height="1em"
20
- role="img"
21
- style={
22
- Object {
23
- "verticalAlign": "-0.125em",
24
- }
25
- }
26
- viewBox="0 0 512 512"
27
- width="1em"
28
- >
29
- <path
30
- d="M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"
31
- />
32
- </svg>
33
- </UploadIcon>
34
- </div>
9
+ />
35
10
  </MultipleFileUploadTitleIcon>
36
11
  `;
37
12
 
@@ -40,30 +15,7 @@ exports[`MultipleFileUploadTitleIcon renders with expected class names 1`] = `
40
15
  <div
41
16
  className="pf-c-multiple-file-upload__title-icon"
42
17
  >
43
- <UploadIcon
44
- color="currentColor"
45
- noVerticalAlign={false}
46
- size="sm"
47
- >
48
- <svg
49
- aria-hidden={true}
50
- aria-labelledby={null}
51
- fill="currentColor"
52
- height="1em"
53
- role="img"
54
- style={
55
- Object {
56
- "verticalAlign": "-0.125em",
57
- }
58
- }
59
- viewBox="0 0 512 512"
60
- width="1em"
61
- >
62
- <path
63
- d="M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"
64
- />
65
- </svg>
66
- </UploadIcon>
18
+ Foo
67
19
  </div>
68
20
  </MultipleFileUploadTitleIcon>
69
21
  `;
@@ -6,70 +6,22 @@ propComponents:
6
6
  [
7
7
  'MultipleFileUpload',
8
8
  'MultipleFileUploadMain',
9
- 'MultipleFileUploadTitle',
10
- 'MultipleFileUploadTitleIcon',
11
- 'MultipleFileUploadTitleText',
12
- 'MultipleFileUploadTitleTextSeparator',
13
- 'MultipleFileUploadButton',
14
- 'MultipleFileUploadInfo',
15
9
  'MultipleFileUploadStatus',
16
10
  'MultipleFileUploadStatusItem',
17
11
  ]
18
12
  beta: true
19
13
  ---
20
14
 
21
- import InProgressIcon from '@patternfly/react-icons/dist/esm/icons/in-progress-icon';
22
- import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon';
23
- import TimesCircleIcon from '@patternfly/react-icons/dist/esm/icons/times-circle-icon';
15
+ import UploadIcon from '@patternfly/react-icons/dist/esm/icons/upload-icon';
24
16
 
25
17
  File upload - multiple is able to:
26
18
 
27
- - accept one or more files via browse or drag-and-drop
28
- - provide their data to you using file objects via the `onFileDrop` callback prop
29
- - read files as dataURLs, calling provided callbacks as needed when files start/finish being read, as well as when the read succeeds or fails
30
- - display (in real time) the upload progress/status of each file
31
- - uploaded files are represented by the `MultipleFileUploadStatusItem` component, this component includes the aforementioned built-in file reading logic
32
- - if you prefer to supply your own file reading logic and strictly use `MultipleFileUploadStatusItem` as a display component, the `customFileHandler`, `fileName`, `fileSize`, `progressValue`, and `progressVariant` props exist to allow you to do that
33
-
34
- ### General intended structure
35
-
36
- File upload - multiple is designed in a composable manner to maximize flexibility. The general intended component relationships are arranged similarly to:
37
-
38
- ```js noLive
39
- import {
40
- MultipleFileUpload,
41
- MultipleFileUploadInfo,
42
- MultipleFileUploadMain,
43
- MultipleFileUploadTitle,
44
- MultipleFileUploadTitleIcon,
45
- MultipleFileUploadTitleText,
46
- MultipleFileUploadTitleTextSeparator,
47
- MultipleFileUploadButton,
48
- MultipleFileUploadStatus,
49
- MultipleFileUploadStatusItem
50
- } from '@patternfly/react-core';
51
-
52
- <MultipleFileUpload>
53
- <MultipleFileUploadMain>
54
- <MultipleFileUploadTitle>
55
- <MultipleFileUploadTitleIcon />
56
-
57
- <MultipleFileUploadTitleText>
58
- main title text
59
- <MultipleFileUploadTitleTextSeparator>title text separator</MultipleFileUploadTitleTextSeparator>
60
- </MultipleFileUploadTitleText>
61
- </MultipleFileUploadTitle>
62
-
63
- <MultipleFileUploadButton />
64
-
65
- <MultipleFileUploadInfo>Accepted file types: x, y, z</MultipleFileUploadInfo>
66
- </MultipleFileUploadMain>
67
-
68
- <MultipleFileUploadStatus>
69
- <MultipleFileUploadStatusItem />
70
- </MultipleFileUploadStatus>
71
- </MultipleFileUpload>
72
- ```
19
+ - Accept one or more files via browse or drag-and-drop
20
+ - Provide their data to you using file objects via the `onFileDrop` callback prop
21
+ - Read files as dataURLs, calling provided callbacks as needed when files start/finish being read, as well as when the read succeeds or fails
22
+ - Display (in real time) the upload progress/status of each file
23
+ - Uploaded files are represented by the multiple file upload status item component, this component includes the aforementioned built-in file reading logic
24
+ - If you prefer to supply your own file reading logic and strictly use multiple file upload status item as a display component, the `customFileHandler`, `fileName`, `fileSize`, `progressValue`, and `progressVariant` props exist to allow you to do that
73
25
 
74
26
  ### Restricting file size and type
75
27
 
@@ -85,8 +37,3 @@ Restricting file sizes and types in this way is for user convenience only, and i
85
37
 
86
38
  ```ts file="./MultipleFileUploadBasic.tsx"
87
39
  ```
88
-
89
- ### Horizontal
90
-
91
- ```ts file="./MultipleFileUploadHorizontal.tsx"
92
- ```
@@ -1,20 +1,12 @@
1
1
  import React from 'react';
2
2
  import {
3
3
  MultipleFileUpload,
4
- MultipleFileUploadInfo,
5
4
  MultipleFileUploadMain,
6
- MultipleFileUploadTitle,
7
- MultipleFileUploadTitleIcon,
8
- MultipleFileUploadTitleText,
9
- MultipleFileUploadTitleTextSeparator,
10
- MultipleFileUploadButton,
11
5
  MultipleFileUploadStatus,
12
6
  MultipleFileUploadStatusItem,
13
- Modal
7
+ Checkbox
14
8
  } from '@patternfly/react-core';
15
- import InProgressIcon from '@patternfly/react-icons/dist/esm/icons/in-progress-icon';
16
- import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon';
17
- import TimesCircleIcon from '@patternfly/react-icons/dist/esm/icons/times-circle-icon';
9
+ import UploadIcon from '@patternfly/react-icons/dist/esm/icons/upload-icon';
18
10
 
19
11
  interface readFile {
20
12
  fileName: string;
@@ -24,10 +16,11 @@ interface readFile {
24
16
  }
25
17
 
26
18
  export const MultipleFileUploadBasic: React.FunctionComponent = () => {
19
+ const [isHorizontal, setIsHorizontal] = React.useState(false);
27
20
  const [currentFiles, setCurrentFiles] = React.useState<File[]>([]);
28
21
  const [readFileData, setReadFileData] = React.useState<readFile[]>([]);
29
22
  const [showStatus, setShowStatus] = React.useState(false);
30
- const [modalText, setModalText] = React.useState('');
23
+ const [statusIcon, setStatusIcon] = React.useState('inProgress');
31
24
 
32
25
  // only show the status component once a file has been uploaded, but keep the status list component itself even if all files are removed
33
26
  if (!showStatus && currentFiles.length > 0) {
@@ -35,17 +28,15 @@ export const MultipleFileUploadBasic: React.FunctionComponent = () => {
35
28
  }
36
29
 
37
30
  // determine the icon that should be shown for the overall status list
38
- const getStatusIcon = () => {
31
+ React.useEffect(() => {
39
32
  if (readFileData.length < currentFiles.length) {
40
- return <InProgressIcon />;
41
- }
42
-
43
- if (readFileData.every(file => file.loadResult === 'success')) {
44
- return <CheckCircleIcon />;
33
+ setStatusIcon('inProgress');
34
+ } else if (readFileData.every(file => file.loadResult === 'success')) {
35
+ setStatusIcon('success');
36
+ } else {
37
+ setStatusIcon('danger');
45
38
  }
46
-
47
- return <TimesCircleIcon />;
48
- };
39
+ }, [readFileData, currentFiles]);
49
40
 
50
41
  // remove files from both state arrays based on their name
51
42
  const removeFiles = (namesOfFilesToRemove: string[]) => {
@@ -88,63 +79,46 @@ export const MultipleFileUploadBasic: React.FunctionComponent = () => {
88
79
  ]);
89
80
  };
90
81
 
91
- // dropzone prop that communicates to the user that files they've attempted to upload are not an appropriate type
92
- const handleDropRejected = (files: File[], _event: React.DragEvent<HTMLElement>) => {
93
- if (files.length === 1) {
94
- setModalText(`${files[0].name} is not an accepted file type`);
95
- } else {
96
- const rejectedMessages = files.reduce((acc, file) => (acc += `${file.name}, `), '');
97
- setModalText(`${rejectedMessages}are not accepted file types`);
98
- }
99
- };
100
-
101
82
  const successfullyReadFileCount = readFileData.filter(fileData => fileData.loadResult === 'success').length;
102
83
 
103
84
  return (
104
- <MultipleFileUpload
105
- onFileDrop={handleFileDrop}
106
- dropzoneProps={{
107
- accept: 'image/jpeg, application/msword, application/pdf, image/png',
108
- onDropRejected: handleDropRejected
109
- }}
110
- >
111
- <MultipleFileUploadMain>
112
- <MultipleFileUploadTitle>
113
- <MultipleFileUploadTitleIcon />
114
- <MultipleFileUploadTitleText>
115
- Drag and drop files here
116
- <MultipleFileUploadTitleTextSeparator>or</MultipleFileUploadTitleTextSeparator>
117
- </MultipleFileUploadTitleText>
118
- </MultipleFileUploadTitle>
119
- <MultipleFileUploadButton />
120
- <MultipleFileUploadInfo>Accepted file types: JPEG, Doc, PDF, PNG</MultipleFileUploadInfo>
121
- </MultipleFileUploadMain>
122
- {showStatus && (
123
- <MultipleFileUploadStatus
124
- statusToggleText={`${successfullyReadFileCount} of ${currentFiles.length} files uploaded`}
125
- statusToggleIcon={getStatusIcon()}
126
- >
127
- {currentFiles.map(file => (
128
- <MultipleFileUploadStatusItem
129
- file={file}
130
- key={file.name}
131
- onClearClick={() => removeFiles([file.name])}
132
- onReadSuccess={handleReadSuccess}
133
- onReadFail={handleReadFail}
134
- />
135
- ))}
136
- </MultipleFileUploadStatus>
137
- )}
138
- <Modal
139
- isOpen={!!modalText}
140
- title="Unsupported file"
141
- titleIconVariant="warning"
142
- showClose
143
- aria-label="unsupported file upload attempted"
144
- onClose={() => setModalText('')}
85
+ <>
86
+ <MultipleFileUpload
87
+ onFileDrop={handleFileDrop}
88
+ dropzoneProps={{
89
+ accept: 'image/jpeg, application/msword, application/pdf, image/png'
90
+ }}
91
+ isHorizontal={isHorizontal}
145
92
  >
146
- {modalText}
147
- </Modal>
148
- </MultipleFileUpload>
93
+ <MultipleFileUploadMain
94
+ titleIcon={<UploadIcon />}
95
+ titleText="Drag and drop files here"
96
+ titleTextSeparator="or"
97
+ infoText="Accepted file types: JPEG, Doc, PDF, PNG"
98
+ />
99
+ {showStatus && (
100
+ <MultipleFileUploadStatus
101
+ statusToggleText={`${successfullyReadFileCount} of ${currentFiles.length} files uploaded`}
102
+ statusToggleIcon={statusIcon}
103
+ >
104
+ {currentFiles.map(file => (
105
+ <MultipleFileUploadStatusItem
106
+ file={file}
107
+ key={file.name}
108
+ onClearClick={() => removeFiles([file.name])}
109
+ onReadSuccess={handleReadSuccess}
110
+ onReadFail={handleReadFail}
111
+ />
112
+ ))}
113
+ </MultipleFileUploadStatus>
114
+ )}
115
+ </MultipleFileUpload>
116
+ <Checkbox
117
+ id="horizontal-checkbox"
118
+ label="Show as horizontal"
119
+ isChecked={isHorizontal}
120
+ onChange={() => setIsHorizontal(!isHorizontal)}
121
+ />
122
+ </>
149
123
  );
150
124
  };
@@ -1,10 +1,4 @@
1
1
  export * from './MultipleFileUpload';
2
- export * from './MultipleFileUploadInfo';
3
2
  export * from './MultipleFileUploadMain';
4
- export * from './MultipleFileUploadTitle';
5
- export * from './MultipleFileUploadTitleIcon';
6
- export * from './MultipleFileUploadTitleText';
7
- export * from './MultipleFileUploadTitleTextSeparator';
8
- export * from './MultipleFileUploadButton';
9
3
  export * from './MultipleFileUploadStatus';
10
4
  export * from './MultipleFileUploadStatusItem';
@@ -83,6 +83,7 @@ export const NumberInput: React.FunctionComponent<NumberInputProps> = ({
83
83
  const numberInputUnit = <div className={css(styles.numberInputUnit)}>{unit}</div>;
84
84
  const keyDownHandler =
85
85
  inputProps && inputProps.onKeyDown ? inputProps.onKeyDown : defaultKeyDownHandler({ inputName, onMinus, onPlus });
86
+
86
87
  return (
87
88
  <div
88
89
  className={css(styles.numberInput, className)}
@@ -99,7 +100,7 @@ export const NumberInput: React.FunctionComponent<NumberInputProps> = ({
99
100
  <Button
100
101
  variant="control"
101
102
  aria-label={minusBtnAriaLabel}
102
- isDisabled={isDisabled || value === min}
103
+ isDisabled={isDisabled || value <= min}
103
104
  onClick={evt => onMinus(evt, inputName)}
104
105
  {...minusBtnProps}
105
106
  >
@@ -122,7 +123,7 @@ export const NumberInput: React.FunctionComponent<NumberInputProps> = ({
122
123
  <Button
123
124
  variant="control"
124
125
  aria-label={plusBtnAriaLabel}
125
- isDisabled={isDisabled || value === max}
126
+ isDisabled={isDisabled || value >= max}
126
127
  onClick={evt => onPlus(evt, inputName)}
127
128
  {...plusBtnProps}
128
129
  >