Skip to content

Commit 27cd976

Browse files
committed
chore: compatible
1 parent 4c0d24a commit 27cd976

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

src/AjaxUploader.tsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ class AjaxUploader extends Component<UploadProps> {
3131

3232
private _isMounted: boolean;
3333

34-
private getFilterFn = () => {
34+
private filterFile = (file: RcFile | File, force = false) => {
3535
const { accept, directory } = this.props;
3636

37-
let filterFn: AcceptConfig['filter'];
37+
let filterFn: Exclude<AcceptConfig['filter'], 'native'>;
3838
let acceptFormat: string | undefined;
3939

4040
if (typeof accept === 'string') {
@@ -50,15 +50,17 @@ class AjaxUploader extends Component<UploadProps> {
5050
}
5151
}
5252

53-
return filterFn || (directory ? (file: RcFile) => attrAccept(file, acceptFormat) : () => true);
53+
const mergedFilter =
54+
filterFn ||
55+
(directory || force
56+
? (currentFile: RcFile) => attrAccept(currentFile, acceptFormat)
57+
: () => true);
58+
return mergedFilter(file as RcFile);
5459
};
5560

5661
onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
57-
const { accept, directory } = this.props;
5862
const { files } = e.target;
59-
const acceptedFiles = [...files].filter(
60-
(file: RcFile) => !directory || attrAccept(file, accept),
61-
);
63+
const acceptedFiles = [...files].filter(file => this.filterFile(file));
6264
this.uploadFiles(acceptedFiles);
6365
this.reset();
6466
};
@@ -90,7 +92,7 @@ class AjaxUploader extends Component<UploadProps> {
9092
};
9193

9294
onDataTransferFiles = async (dataTransfer: DataTransfer, existFileCallback?: () => void) => {
93-
const { multiple, accept, directory } = this.props;
95+
const { multiple, directory } = this.props;
9496

9597
const items: DataTransferItem[] = [...(dataTransfer.items || [])];
9698
let files: File[] = [...(dataTransfer.files || [])];
@@ -100,12 +102,10 @@ class AjaxUploader extends Component<UploadProps> {
100102
}
101103

102104
if (directory) {
103-
files = await traverseFileTree(Array.prototype.slice.call(items), (_file: RcFile) =>
104-
attrAccept(_file, this.props.accept),
105-
);
105+
files = await traverseFileTree(Array.prototype.slice.call(items), this.filterFile);
106106
this.uploadFiles(files);
107107
} else {
108-
let acceptFiles = [...files].filter((file: RcFile) => attrAccept(file, accept));
108+
let acceptFiles = [...files].filter(file => this.filterFile(file, true));
109109

110110
if (multiple === false) {
111111
acceptFiles = files.slice(0, 1);
@@ -351,6 +351,9 @@ class AjaxUploader extends Component<UploadProps> {
351351
hasControlInside,
352352
...otherProps
353353
} = this.props;
354+
355+
// Extract accept format for input element
356+
const acceptFormat = typeof accept === 'string' ? accept : accept?.format;
354357
const cls = clsx(prefixCls, { [`${prefixCls}-disabled`]: disabled, [className]: className });
355358
// because input don't have directory/webkitdirectory type declaration
356359
const dirProps: any = directory
@@ -384,7 +387,7 @@ class AjaxUploader extends Component<UploadProps> {
384387
key={this.state.uid}
385388
style={{ display: 'none', ...styles.input }}
386389
className={classNames.input}
387-
accept={accept}
390+
accept={acceptFormat}
388391
{...dirProps}
389392
multiple={multiple}
390393
onChange={this.onChange}

0 commit comments

Comments
 (0)