@patternfly/react-core 4.198.16 → 4.198.17
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 +8 -0
- 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/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/umd/react-core.css +10 -10
- package/dist/umd/react-core.js +59 -42
- package/dist/umd/react-core.min.css +82 -82
- package/dist/umd/react-core.min.js +4 -4
- package/package.json +5 -5
- 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/demos/MultipleFileUploadDemos.md +16 -0
- package/src/{components/MultipleFileUpload/examples/MultipleFileUploadHorizontal.tsx → demos/examples/MultipleFileUpload/MultipleFileUploadRejectedFile.tsx} +60 -64
|
@@ -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';
|
|
@@ -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
|
};
|