@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.
- package/CHANGELOG.md +24 -0
- package/dist/esm/components/AlertGroup/AlertGroup.d.ts +4 -0
- package/dist/esm/components/AlertGroup/AlertGroup.d.ts.map +1 -1
- package/dist/esm/components/AlertGroup/AlertGroup.js +2 -2
- package/dist/esm/components/AlertGroup/AlertGroup.js.map +1 -1
- package/dist/esm/components/AlertGroup/AlertGroupInline.d.ts.map +1 -1
- package/dist/esm/components/AlertGroup/AlertGroupInline.js +5 -2
- package/dist/esm/components/AlertGroup/AlertGroupInline.js.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.d.ts +10 -2
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.d.ts.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.js +9 -2
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.js.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.d.ts +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.d.ts.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.js +21 -2
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.js.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatusItem.js.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitle.d.ts +6 -2
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitle.d.ts.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitle.js +9 -2
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitle.js.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitleIcon.d.ts +2 -0
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitleIcon.d.ts.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitleIcon.js +2 -4
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadTitleIcon.js.map +1 -1
- package/dist/esm/components/MultipleFileUpload/index.d.ts +0 -6
- package/dist/esm/components/MultipleFileUpload/index.d.ts.map +1 -1
- package/dist/esm/components/MultipleFileUpload/index.js +0 -6
- package/dist/esm/components/MultipleFileUpload/index.js.map +1 -1
- package/dist/esm/components/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/esm/components/NumberInput/NumberInput.js +2 -2
- package/dist/esm/components/NumberInput/NumberInput.js.map +1 -1
- package/dist/js/components/AlertGroup/AlertGroup.d.ts +4 -0
- package/dist/js/components/AlertGroup/AlertGroup.d.ts.map +1 -1
- package/dist/js/components/AlertGroup/AlertGroup.js +2 -2
- package/dist/js/components/AlertGroup/AlertGroup.js.map +1 -1
- package/dist/js/components/AlertGroup/AlertGroupInline.d.ts.map +1 -1
- package/dist/js/components/AlertGroup/AlertGroupInline.js +5 -2
- package/dist/js/components/AlertGroup/AlertGroupInline.js.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadMain.d.ts +10 -2
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadMain.d.ts.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadMain.js +9 -2
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadMain.js.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatus.d.ts +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatus.d.ts.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatus.js +21 -2
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatus.js.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatusItem.js.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitle.d.ts +6 -2
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitle.d.ts.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitle.js +9 -2
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitle.js.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitleIcon.d.ts +2 -0
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitleIcon.d.ts.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitleIcon.js +2 -4
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadTitleIcon.js.map +1 -1
- package/dist/js/components/MultipleFileUpload/index.d.ts +0 -6
- package/dist/js/components/MultipleFileUpload/index.d.ts.map +1 -1
- package/dist/js/components/MultipleFileUpload/index.js +0 -6
- package/dist/js/components/MultipleFileUpload/index.js.map +1 -1
- package/dist/js/components/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/js/components/NumberInput/NumberInput.js +2 -2
- package/dist/js/components/NumberInput/NumberInput.js.map +1 -1
- package/dist/styles/assets/images/img_pie-chart-with-legend.png +0 -0
- package/dist/styles/assets/images/status-icon-sprite.svg +38 -0
- package/dist/umd/react-core.css +244 -47
- package/dist/umd/react-core.js +77 -49
- package/dist/umd/react-core.min.css +316 -119
- package/dist/umd/react-core.min.js +4 -4
- package/package.json +6 -6
- package/src/components/AlertGroup/AlertGroup.tsx +13 -2
- package/src/components/AlertGroup/AlertGroupInline.tsx +9 -0
- package/src/components/AlertGroup/__tests__/AlertGroup.test.tsx +15 -0
- package/src/components/AlertGroup/__tests__/__snapshots__/AlertGroup.test.tsx.snap +93 -1
- package/src/components/AlertGroup/examples/AlertGroup.md +147 -0
- package/src/components/MultipleFileUpload/MultipleFileUploadMain.tsx +29 -8
- package/src/components/MultipleFileUpload/MultipleFileUploadStatus.tsx +24 -4
- package/src/components/MultipleFileUpload/MultipleFileUploadStatusItem.tsx +1 -1
- package/src/components/MultipleFileUpload/MultipleFileUploadTitle.tsx +19 -5
- package/src/components/MultipleFileUpload/MultipleFileUploadTitleIcon.tsx +4 -3
- package/src/components/MultipleFileUpload/__tests__/MultipleFileUploadMain.test.tsx +19 -2
- package/src/components/MultipleFileUpload/__tests__/MultipleFileUploadTitle.test.tsx +17 -2
- package/src/components/MultipleFileUpload/__tests__/MultipleFileUploadTitleIcon.test.tsx +1 -1
- package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUploadMain.test.tsx.snap +198 -2
- package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUploadTitle.test.tsx.snap +62 -4
- package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUploadTitleIcon.test.tsx.snap +2 -50
- package/src/components/MultipleFileUpload/examples/MultipleFileUpload.md +7 -60
- package/src/components/MultipleFileUpload/examples/MultipleFileUploadBasic.tsx +48 -74
- package/src/components/MultipleFileUpload/index.ts +0 -6
- package/src/components/NumberInput/NumberInput.tsx +3 -2
- package/src/components/NumberInput/examples/NumberInput.md +78 -5
- package/src/demos/MultipleFileUploadDemos.md +16 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
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
|
-
|
|
7
|
+
Checkbox
|
|
14
8
|
} from '@patternfly/react-core';
|
|
15
|
-
import
|
|
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 [
|
|
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
|
-
|
|
31
|
+
React.useEffect(() => {
|
|
39
32
|
if (readFileData.length < currentFiles.length) {
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
|
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
|
|
126
|
+
isDisabled={isDisabled || value >= max}
|
|
126
127
|
onClick={evt => onPlus(evt, inputName)}
|
|
127
128
|
{...plusBtnProps}
|
|
128
129
|
>
|