Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/AjaxUploader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ class AjaxUploader extends Component<UploadProps> {
const { onStart, customRequest, name, headers, withCredentials, method } = this.props;

const { uid } = origin;

const request = customRequest || defaultRequest;

const requestOption = {
Expand Down Expand Up @@ -274,7 +275,7 @@ class AjaxUploader extends Component<UploadProps> {
};

onStart(origin);
this.reqs[uid] = request(requestOption);
this.reqs[uid] = request(requestOption, { defaultRequest });
}

reset() {
Expand Down
6 changes: 5 additions & 1 deletion src/interface.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export interface UploadProps
file: RcFile,
FileList: RcFile[],
) => BeforeUploadFileType | Promise<void | BeforeUploadFileType> | void;
customRequest?: (option: UploadRequestOption) => void | { abort: () => void };
customRequest?: CustomUploadRequestOption;
withCredentials?: boolean;
openFileDialogOnClick?: boolean;
prefixCls?: string;
Expand Down Expand Up @@ -78,6 +78,10 @@ export interface UploadRequestOption<T = any> {
method: UploadRequestMethod;
}

export type CustomUploadRequestOption = (
option: UploadRequestOption,
info: { defaultRequest: (option: UploadRequestOption) => { abort: () => void } | void },
) => void | { abort: () => void };
export interface RcFile extends File {
uid: string;
}
27 changes: 27 additions & 0 deletions tests/uploader.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1266,4 +1266,31 @@ describe('uploader', () => {
expect(container.querySelector('span')!.tabIndex).not.toBe(0);
expect(container.querySelector('span')!).not.toHaveAttribute('role', 'button');
});
it('should support defaultRequest in customRequest', done => {
const customRequest = jest.fn(({ file, onSuccess, onError }, { defaultRequest }) => {
Comment thread
EmilyyyLiu marked this conversation as resolved.
Outdated
if (file.name === 'success.png') {
defaultRequest({ file, onSuccess, onError });
} else {
onError(new Error('custom error'));
}
});
Comment thread
EmilyyyLiu marked this conversation as resolved.
Outdated
const onSuccess = jest.fn();
const onError = jest.fn();
const { container } = render(
<Upload customRequest={customRequest} onSuccess={onSuccess} onError={onError} />,
);
const input = container.querySelector('input')!;
const files = [new File([''], 'success.png', { type: 'image/png' })];
Object.defineProperty(files, 'item', {
value: i => files[i],
});
fireEvent.change(input, { target: { files } });

setTimeout(() => {
requests[0].respond(200, {}, `["","${files[0].name}"]`);
expect(customRequest).toHaveBeenCalled();
expect(onSuccess).toHaveBeenCalled();
done();
}, 100);
});
});