@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
@@ -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 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';
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
- const getStatusIcon = () => {
33
+ React.useEffect(() => {
39
34
  if (readFileData.length < currentFiles.length) {
40
- return <InProgressIcon />;
41
- }
42
-
43
- if (readFileData.every(file => file.loadResult === 'success')) {
44
- return <CheckCircleIcon />;
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
- <MultipleFileUpload
105
- onFileDrop={handleFileDrop}
106
- dropzoneProps={{
107
- accept: 'image/jpeg, application/msword, application/pdf, image/png',
108
- onDropRejected: handleDropRejected
109
- }}
110
- isHorizontal
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
- {modalText}
148
- </Modal>
149
- </MultipleFileUpload>
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
  };