@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
|
@@ -159,9 +159,20 @@ class UnitThresholdNumberInput extends React.Component {
|
|
|
159
159
|
this.minValue = 0;
|
|
160
160
|
this.maxValue = 10;
|
|
161
161
|
|
|
162
|
+
this.normalizeBetween = (value, min, max) => {
|
|
163
|
+
if (min !== undefined && max !== undefined) {
|
|
164
|
+
return Math.max(Math.min(value, max), min);
|
|
165
|
+
} else if (value <= min) {
|
|
166
|
+
return min;
|
|
167
|
+
} else if (value >= max) {
|
|
168
|
+
return max;
|
|
169
|
+
}
|
|
170
|
+
return value;
|
|
171
|
+
};
|
|
172
|
+
|
|
162
173
|
this.onMinus = () => {
|
|
163
174
|
this.setState({
|
|
164
|
-
value: this.state.value - 1
|
|
175
|
+
value: this.normalizeBetween(this.state.value - 1, this.minValue, this.maxValue)
|
|
165
176
|
});
|
|
166
177
|
};
|
|
167
178
|
|
|
@@ -174,7 +185,7 @@ class UnitThresholdNumberInput extends React.Component {
|
|
|
174
185
|
|
|
175
186
|
this.onPlus = () => {
|
|
176
187
|
this.setState({
|
|
177
|
-
value: this.state.value + 1
|
|
188
|
+
value: this.normalizeBetween(this.state.value + 1, this.minValue, this.maxValue)
|
|
178
189
|
});
|
|
179
190
|
};
|
|
180
191
|
}
|
|
@@ -369,12 +380,12 @@ class CustomStepNumberInput extends React.Component {
|
|
|
369
380
|
super(props);
|
|
370
381
|
this.state = {
|
|
371
382
|
value: 90,
|
|
372
|
-
step: 3
|
|
383
|
+
step: 3
|
|
373
384
|
};
|
|
374
385
|
|
|
375
386
|
this.stepper = step => () => {
|
|
376
|
-
this.setState(prev => ({...prev, value: prev.value + step }))
|
|
377
|
-
}
|
|
387
|
+
this.setState(prev => ({ ...prev, value: prev.value + step }));
|
|
388
|
+
};
|
|
378
389
|
|
|
379
390
|
this.onChange = event => {
|
|
380
391
|
this.setState({
|
|
@@ -400,3 +411,65 @@ class CustomStepNumberInput extends React.Component {
|
|
|
400
411
|
}
|
|
401
412
|
}
|
|
402
413
|
```
|
|
414
|
+
|
|
415
|
+
### Custom increment/decrement and thresholds
|
|
416
|
+
|
|
417
|
+
```js
|
|
418
|
+
import React from 'react';
|
|
419
|
+
import { NumberInput } from '@patternfly/react-core';
|
|
420
|
+
|
|
421
|
+
class CustomStepNumberInput extends React.Component {
|
|
422
|
+
constructor(props) {
|
|
423
|
+
super(props);
|
|
424
|
+
this.state = {
|
|
425
|
+
value: 90,
|
|
426
|
+
step: 3
|
|
427
|
+
};
|
|
428
|
+
this.minValue = 90;
|
|
429
|
+
this.maxValue = 100;
|
|
430
|
+
|
|
431
|
+
this.normalizeBetween = (value, min, max) => {
|
|
432
|
+
if (min !== undefined && max !== undefined) {
|
|
433
|
+
return Math.max(Math.min(value, max), min);
|
|
434
|
+
} else if (value <= min) {
|
|
435
|
+
return min;
|
|
436
|
+
} else if (value >= max) {
|
|
437
|
+
return max;
|
|
438
|
+
}
|
|
439
|
+
return value;
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
this.stepper = step => () => {
|
|
443
|
+
this.setState(prev => ({
|
|
444
|
+
...prev,
|
|
445
|
+
value: this.normalizeBetween(prev.value + step, this.minValue, this.maxValue)
|
|
446
|
+
}));
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
this.onChange = event => {
|
|
450
|
+
const newValue = isNaN(event.target.value) ? 0 : Number(event.target.value);
|
|
451
|
+
this.setState({
|
|
452
|
+
value: newValue > this.maxValue ? this.maxValue : newValue < this.minValue ? this.minValue : newValue
|
|
453
|
+
});
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
render() {
|
|
458
|
+
const { value } = this.state;
|
|
459
|
+
return (
|
|
460
|
+
<NumberInput
|
|
461
|
+
value={value}
|
|
462
|
+
min={this.minValue}
|
|
463
|
+
max={this.maxValue}
|
|
464
|
+
onMinus={this.stepper(-3)}
|
|
465
|
+
onChange={this.onChange}
|
|
466
|
+
onPlus={this.stepper(3)}
|
|
467
|
+
inputName="input"
|
|
468
|
+
inputAriaLabel="number input"
|
|
469
|
+
minusBtnAriaLabel="minus"
|
|
470
|
+
plusBtnAriaLabel="plus"
|
|
471
|
+
/>
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: File upload - multiple
|
|
3
|
+
section: components
|
|
4
|
+
beta: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
import UploadIcon from '@patternfly/react-icons/dist/esm/icons/upload-icon';
|
|
8
|
+
|
|
9
|
+
## Demos
|
|
10
|
+
|
|
11
|
+
### Rejected file handling
|
|
12
|
+
|
|
13
|
+
This demo shows how to add a modal to alert users that the file(s) they attempted to drop was of a non-acceptable type.
|
|
14
|
+
|
|
15
|
+
```ts file="./examples/MultipleFileUpload/MultipleFileUploadRejectedFile.tsx"
|
|
16
|
+
```
|
|
@@ -1,20 +1,13 @@
|
|
|
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
|
+
Modal,
|
|
8
|
+
Checkbox
|
|
14
9
|
} 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';
|
|
10
|
+
import UploadIcon from '@patternfly/react-icons/dist/esm/icons/upload-icon';
|
|
18
11
|
|
|
19
12
|
interface readFile {
|
|
20
13
|
fileName: string;
|
|
@@ -24,9 +17,11 @@ interface readFile {
|
|
|
24
17
|
}
|
|
25
18
|
|
|
26
19
|
export const MultipleFileUploadBasic: React.FunctionComponent = () => {
|
|
20
|
+
const [isHorizontal, setIsHorizontal] = React.useState(false);
|
|
27
21
|
const [currentFiles, setCurrentFiles] = React.useState<File[]>([]);
|
|
28
22
|
const [readFileData, setReadFileData] = React.useState<readFile[]>([]);
|
|
29
23
|
const [showStatus, setShowStatus] = React.useState(false);
|
|
24
|
+
const [statusIcon, setStatusIcon] = React.useState('inProgress');
|
|
30
25
|
const [modalText, setModalText] = React.useState('');
|
|
31
26
|
|
|
32
27
|
// only show the status component once a file has been uploaded, but keep the status list component itself even if all files are removed
|
|
@@ -35,17 +30,15 @@ export const MultipleFileUploadBasic: React.FunctionComponent = () => {
|
|
|
35
30
|
}
|
|
36
31
|
|
|
37
32
|
// determine the icon that should be shown for the overall status list
|
|
38
|
-
|
|
33
|
+
React.useEffect(() => {
|
|
39
34
|
if (readFileData.length < currentFiles.length) {
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
setStatusIcon('inProgress');
|
|
36
|
+
} else if (readFileData.every(file => file.loadResult === 'success')) {
|
|
37
|
+
setStatusIcon('success');
|
|
38
|
+
} else {
|
|
39
|
+
setStatusIcon('danger');
|
|
45
40
|
}
|
|
46
|
-
|
|
47
|
-
return <TimesCircleIcon />;
|
|
48
|
-
};
|
|
41
|
+
}, [readFileData, currentFiles]);
|
|
49
42
|
|
|
50
43
|
// remove files from both state arrays based on their name
|
|
51
44
|
const removeFiles = (namesOfFilesToRemove: string[]) => {
|
|
@@ -101,51 +94,54 @@ export const MultipleFileUploadBasic: React.FunctionComponent = () => {
|
|
|
101
94
|
const successfullyReadFileCount = readFileData.filter(fileData => fileData.loadResult === 'success').length;
|
|
102
95
|
|
|
103
96
|
return (
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
<MultipleFileUploadMain>
|
|
113
|
-
<MultipleFileUploadTitle>
|
|
114
|
-
<MultipleFileUploadTitleIcon />
|
|
115
|
-
<MultipleFileUploadTitleText>
|
|
116
|
-
Drag and drop files here
|
|
117
|
-
<MultipleFileUploadTitleTextSeparator>or</MultipleFileUploadTitleTextSeparator>
|
|
118
|
-
</MultipleFileUploadTitleText>
|
|
119
|
-
</MultipleFileUploadTitle>
|
|
120
|
-
<MultipleFileUploadButton />
|
|
121
|
-
<MultipleFileUploadInfo>Accepted file types: JPEG, Doc, PDF, PNG</MultipleFileUploadInfo>
|
|
122
|
-
</MultipleFileUploadMain>
|
|
123
|
-
{showStatus && (
|
|
124
|
-
<MultipleFileUploadStatus
|
|
125
|
-
statusToggleText={`${successfullyReadFileCount} of ${currentFiles.length} files uploaded`}
|
|
126
|
-
statusToggleIcon={getStatusIcon()}
|
|
127
|
-
>
|
|
128
|
-
{currentFiles.map(file => (
|
|
129
|
-
<MultipleFileUploadStatusItem
|
|
130
|
-
file={file}
|
|
131
|
-
key={file.name}
|
|
132
|
-
onClearClick={() => removeFiles([file.name])}
|
|
133
|
-
onReadSuccess={handleReadSuccess}
|
|
134
|
-
onReadFail={handleReadFail}
|
|
135
|
-
/>
|
|
136
|
-
))}
|
|
137
|
-
</MultipleFileUploadStatus>
|
|
138
|
-
)}
|
|
139
|
-
<Modal
|
|
140
|
-
isOpen={!!modalText}
|
|
141
|
-
title="Unsupported file"
|
|
142
|
-
titleIconVariant="warning"
|
|
143
|
-
showClose
|
|
144
|
-
aria-label="unsupported file upload attempted"
|
|
145
|
-
onClose={() => setModalText('')}
|
|
97
|
+
<>
|
|
98
|
+
<MultipleFileUpload
|
|
99
|
+
onFileDrop={handleFileDrop}
|
|
100
|
+
dropzoneProps={{
|
|
101
|
+
accept: 'image/jpeg, application/msword, application/pdf, image/png',
|
|
102
|
+
onDropRejected: handleDropRejected
|
|
103
|
+
}}
|
|
104
|
+
isHorizontal={isHorizontal}
|
|
146
105
|
>
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
106
|
+
<MultipleFileUploadMain
|
|
107
|
+
titleIcon={<UploadIcon />}
|
|
108
|
+
titleText="Drag and drop files here"
|
|
109
|
+
titleTextSeparator="or"
|
|
110
|
+
infoText="Accepted file types: JPEG, Doc, PDF, PNG"
|
|
111
|
+
/>
|
|
112
|
+
{showStatus && (
|
|
113
|
+
<MultipleFileUploadStatus
|
|
114
|
+
statusToggleText={`${successfullyReadFileCount} of ${currentFiles.length} files uploaded`}
|
|
115
|
+
statusToggleIcon={statusIcon}
|
|
116
|
+
>
|
|
117
|
+
{currentFiles.map(file => (
|
|
118
|
+
<MultipleFileUploadStatusItem
|
|
119
|
+
file={file}
|
|
120
|
+
key={file.name}
|
|
121
|
+
onClearClick={() => removeFiles([file.name])}
|
|
122
|
+
onReadSuccess={handleReadSuccess}
|
|
123
|
+
onReadFail={handleReadFail}
|
|
124
|
+
/>
|
|
125
|
+
))}
|
|
126
|
+
</MultipleFileUploadStatus>
|
|
127
|
+
)}
|
|
128
|
+
<Modal
|
|
129
|
+
isOpen={!!modalText}
|
|
130
|
+
title="Unsupported file"
|
|
131
|
+
titleIconVariant="warning"
|
|
132
|
+
showClose
|
|
133
|
+
aria-label="unsupported file upload attempted"
|
|
134
|
+
onClose={() => setModalText('')}
|
|
135
|
+
>
|
|
136
|
+
{modalText}
|
|
137
|
+
</Modal>
|
|
138
|
+
</MultipleFileUpload>
|
|
139
|
+
<Checkbox
|
|
140
|
+
id="horizontal-checkbox"
|
|
141
|
+
label="Show as horizontal"
|
|
142
|
+
isChecked={isHorizontal}
|
|
143
|
+
onChange={() => setIsHorizontal(!isHorizontal)}
|
|
144
|
+
/>
|
|
145
|
+
</>
|
|
150
146
|
);
|
|
151
147
|
};
|