@rainbow-oh/yee-c 0.9.2 → 0.11.0
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/dist/cjs/Button/demo/icon.js +1 -1
- package/dist/cjs/Input/style/index.less +1 -0
- package/dist/cjs/Table/demo/resizable.d.ts +3 -0
- package/dist/cjs/Table/demo/resizable.js +143 -0
- package/dist/cjs/Table/hooks/useColumnResize.d.ts +30 -0
- package/dist/cjs/Table/hooks/useColumnResize.js +217 -0
- package/dist/cjs/Table/hooks/useColumns.d.ts +3 -1
- package/dist/cjs/Table/hooks/useColumns.js +14 -3
- package/dist/cjs/Table/interface.d.ts +49 -0
- package/dist/cjs/Table/style/index.less +42 -0
- package/dist/cjs/Table/table.js +62 -9
- package/dist/cjs/Table/theader/cell.js +46 -4
- package/dist/cjs/Table/util/index.d.ts +19 -1
- package/dist/cjs/Table/util/index.js +22 -0
- package/dist/cjs/Tabs/demo/overflow-center.d.ts +3 -0
- package/dist/cjs/Tabs/demo/overflow-center.js +54 -0
- package/dist/cjs/Tabs/hooks/useNavListMove.d.ts +2 -1
- package/dist/cjs/Tabs/hooks/useNavListMove.js +51 -16
- package/dist/cjs/Tabs/hooks/useTabScroll.d.ts +1 -0
- package/dist/cjs/Tabs/hooks/useTabScroll.js +5 -1
- package/dist/cjs/Tabs/interface.d.ts +10 -1
- package/dist/cjs/Tabs/style/index.less +5 -0
- package/dist/cjs/Tabs/tab-header/index.d.ts +1 -0
- package/dist/cjs/Tabs/tab-header/index.js +11 -3
- package/dist/cjs/Tabs/tabs.js +4 -1
- package/dist/cjs/Upload/demo/auto-upload.d.ts +3 -0
- package/dist/cjs/Upload/demo/auto-upload.js +65 -0
- package/dist/cjs/Upload/demo/basic.js +5 -10
- package/dist/cjs/Upload/demo/controlled.js +4 -4
- package/dist/cjs/Upload/demo/pictureWall.js +14 -13
- package/dist/cjs/Upload/dragger.d.ts +2 -1
- package/dist/cjs/Upload/dragger.js +32 -21
- package/dist/cjs/Upload/index.d.ts +1 -1
- package/dist/cjs/Upload/interface.d.ts +67 -120
- package/dist/cjs/Upload/style/index.less +40 -13
- package/dist/cjs/Upload/upload.d.ts +2 -2
- package/dist/cjs/Upload/upload.js +435 -185
- package/dist/cjs/Upload/uploaded-list/index.d.ts +2 -1
- package/dist/cjs/Upload/uploaded-list/index.js +6 -3
- package/dist/cjs/Upload/uploaded-list/uploaded-item.d.ts +6 -3
- package/dist/cjs/Upload/uploaded-list/uploaded-item.js +127 -138
- package/dist/cjs/locale/interface.d.ts +1 -0
- package/dist/cjs/locale/lang/en_US.js +2 -1
- package/dist/cjs/locale/lang/ja_JP.js +2 -1
- package/dist/cjs/locale/lang/zh_CN.js +2 -1
- package/dist/cjs/locale/lang/zh_TW.js +2 -1
- package/dist/cjs/style/size.css +2 -1
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +3 -2
- package/dist/cjs/utils/ax/core.d.ts +3 -1
- package/dist/cjs/utils/ax/core.js +24 -37
- package/dist/cjs/utils/ax/index.d.ts +3 -1
- package/dist/cjs/utils/folder-scanner.d.ts +1 -1
- package/dist/cjs/utils/folder-scanner.js +43 -34
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Button/demo/icon.js +7 -4
- package/dist/esm/Input/style/index.less +1 -0
- package/dist/esm/Table/demo/resizable.d.ts +3 -0
- package/dist/esm/Table/demo/resizable.js +110 -0
- package/dist/esm/Table/hooks/useColumnResize.d.ts +30 -0
- package/dist/esm/Table/hooks/useColumnResize.js +206 -0
- package/dist/esm/Table/hooks/useColumns.d.ts +3 -1
- package/dist/esm/Table/hooks/useColumns.js +9 -4
- package/dist/esm/Table/interface.d.ts +49 -0
- package/dist/esm/Table/style/index.less +42 -0
- package/dist/esm/Table/table.js +83 -13
- package/dist/esm/Table/theader/cell.js +38 -3
- package/dist/esm/Table/util/index.d.ts +19 -1
- package/dist/esm/Table/util/index.js +37 -0
- package/dist/esm/Tabs/demo/overflow-center.d.ts +3 -0
- package/dist/esm/Tabs/demo/overflow-center.js +61 -0
- package/dist/esm/Tabs/hooks/useNavListMove.d.ts +2 -1
- package/dist/esm/Tabs/hooks/useNavListMove.js +62 -25
- package/dist/esm/Tabs/hooks/useTabScroll.d.ts +1 -0
- package/dist/esm/Tabs/hooks/useTabScroll.js +9 -0
- package/dist/esm/Tabs/interface.d.ts +10 -1
- package/dist/esm/Tabs/style/index.less +5 -0
- package/dist/esm/Tabs/tab-header/index.d.ts +1 -0
- package/dist/esm/Tabs/tab-header/index.js +15 -3
- package/dist/esm/Tabs/tabs.js +4 -2
- package/dist/esm/Upload/demo/auto-upload.d.ts +3 -0
- package/dist/esm/Upload/demo/auto-upload.js +42 -0
- package/dist/esm/Upload/demo/basic.js +5 -11
- package/dist/esm/Upload/demo/controlled.js +8 -6
- package/dist/esm/Upload/demo/pictureWall.js +17 -14
- package/dist/esm/Upload/dragger.d.ts +2 -1
- package/dist/esm/Upload/dragger.js +10 -5
- package/dist/esm/Upload/index.d.ts +1 -1
- package/dist/esm/Upload/interface.d.ts +67 -120
- package/dist/esm/Upload/style/index.less +40 -13
- package/dist/esm/Upload/upload.d.ts +2 -2
- package/dist/esm/Upload/upload.js +573 -271
- package/dist/esm/Upload/uploaded-list/index.d.ts +2 -1
- package/dist/esm/Upload/uploaded-list/index.js +9 -4
- package/dist/esm/Upload/uploaded-list/uploaded-item.d.ts +6 -3
- package/dist/esm/Upload/uploaded-list/uploaded-item.js +145 -150
- package/dist/esm/locale/interface.d.ts +1 -0
- package/dist/esm/locale/lang/en_US.js +2 -1
- package/dist/esm/locale/lang/ja_JP.js +2 -1
- package/dist/esm/locale/lang/zh_CN.js +2 -1
- package/dist/esm/locale/lang/zh_TW.js +2 -1
- package/dist/esm/style/size.css +2 -1
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +3 -2
- package/dist/esm/utils/ax/core.d.ts +3 -1
- package/dist/esm/utils/ax/core.js +32 -40
- package/dist/esm/utils/ax/index.d.ts +3 -1
- package/dist/esm/utils/folder-scanner.d.ts +1 -1
- package/dist/esm/utils/folder-scanner.js +76 -75
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.css +2 -2
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Button/demo/icon.tsx +5 -3
- package/src/Input/style/index.less +1 -0
- package/src/Table/demo/resizable.tsx +106 -0
- package/src/Table/hooks/useColumnResize.ts +224 -0
- package/src/Table/hooks/useColumns.ts +18 -3
- package/src/Table/index.en-US.md +7 -0
- package/src/Table/index.zh-CN.md +7 -0
- package/src/Table/interface.ts +52 -0
- package/src/Table/style/index.less +42 -0
- package/src/Table/table-resize.test.tsx +234 -0
- package/src/Table/table.tsx +90 -13
- package/src/Table/theader/cell.tsx +52 -2
- package/src/Table/util/index.ts +44 -1
- package/src/Tabs/demo/overflow-center.tsx +35 -0
- package/src/Tabs/hooks/useNavListMove.ts +60 -18
- package/src/Tabs/hooks/useTabScroll.ts +7 -1
- package/src/Tabs/index.en-US.md +33 -31
- package/src/Tabs/index.zh-CN.md +33 -31
- package/src/Tabs/interface.ts +10 -1
- package/src/Tabs/style/index.less +5 -0
- package/src/Tabs/tab-header/index.tsx +14 -3
- package/src/Tabs/tabs.tsx +2 -0
- package/src/Upload/demo/auto-upload.tsx +35 -0
- package/src/Upload/demo/basic.tsx +7 -11
- package/src/Upload/demo/controlled.tsx +12 -8
- package/src/Upload/demo/directory.tsx +3 -4
- package/src/Upload/demo/drag.tsx +5 -12
- package/src/Upload/demo/multiple.tsx +3 -4
- package/src/Upload/demo/pictureWall.tsx +22 -21
- package/src/Upload/dragger.tsx +47 -34
- package/src/Upload/index.en-US.md +63 -43
- package/src/Upload/index.ts +8 -1
- package/src/Upload/index.zh-CN.md +62 -42
- package/src/Upload/interface.ts +68 -120
- package/src/Upload/style/index.less +40 -13
- package/src/Upload/upload.tsx +546 -215
- package/src/Upload/uploaded-list/index.tsx +9 -5
- package/src/Upload/uploaded-list/uploaded-item.tsx +199 -228
- package/src/locale/interface.ts +1 -0
- package/src/locale/lang/en_US.ts +1 -0
- package/src/locale/lang/ja_JP.ts +1 -0
- package/src/locale/lang/zh_CN.ts +1 -0
- package/src/locale/lang/zh_TW.ts +1 -0
- package/src/style/size.css +2 -1
- package/src/utils/ax/core.ts +28 -41
- package/src/utils/folder-scanner.ts +51 -37
- package/src/version.ts +1 -1
|
@@ -1,38 +1,39 @@
|
|
|
1
|
-
import { Upload } from '@rainbow-oh/yee-c';
|
|
1
|
+
import { Upload, type UploadFile, type UploadProps } from '@rainbow-oh/yee-c';
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
const imageUrl =
|
|
5
|
+
'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png';
|
|
4
6
|
|
|
5
7
|
export default () => {
|
|
6
8
|
const [fileList, setFileList] = useState<UploadFile[]>([
|
|
7
9
|
{
|
|
8
10
|
uid: '-1',
|
|
9
|
-
name: 'image.png',
|
|
10
|
-
status: '
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
name: 'image-1.png',
|
|
12
|
+
status: 'success',
|
|
13
|
+
type: 'image/png',
|
|
14
|
+
url: imageUrl,
|
|
15
|
+
},
|
|
13
16
|
{
|
|
14
17
|
uid: '-2',
|
|
15
|
-
name: 'image.png',
|
|
16
|
-
status: '
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
name: 'image-2.png',
|
|
19
|
+
status: 'success',
|
|
20
|
+
type: 'image/png',
|
|
21
|
+
url: imageUrl,
|
|
22
|
+
},
|
|
19
23
|
{
|
|
20
24
|
uid: '-3',
|
|
21
|
-
name: 'image.png',
|
|
22
|
-
status: '
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
name: 'image-3.png',
|
|
26
|
+
status: 'success',
|
|
27
|
+
type: 'image/png',
|
|
28
|
+
url: imageUrl,
|
|
29
|
+
},
|
|
25
30
|
]);
|
|
26
31
|
|
|
27
|
-
const
|
|
28
|
-
setFileList(fileList);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const props = {
|
|
32
|
+
const props: UploadProps = {
|
|
32
33
|
action: 'https://www.mocky.io/v2/5cc8019d300000980a055e76',
|
|
33
|
-
listType: 'picture-wall'
|
|
34
|
+
listType: 'picture-wall',
|
|
34
35
|
fileList,
|
|
35
|
-
onChange:
|
|
36
|
+
onChange: ({ fileList: nextFileList }) => setFileList(nextFileList),
|
|
36
37
|
};
|
|
37
38
|
|
|
38
39
|
return <Upload {...props} />;
|
package/src/Upload/dragger.tsx
CHANGED
|
@@ -2,45 +2,58 @@ import clsx from 'clsx';
|
|
|
2
2
|
import { Upload as UploadIcon } from 'lucide-react';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { useLocale } from '../locale';
|
|
5
|
+
import type { UploadDraggerProps, UploadInstance } from './interface';
|
|
5
6
|
import Upload from './upload';
|
|
6
7
|
|
|
7
|
-
const Dragger = React.forwardRef
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const Dragger = React.forwardRef<UploadInstance, UploadDraggerProps>(
|
|
9
|
+
(props, ref) => {
|
|
10
|
+
const {
|
|
11
|
+
prefixCls = 'yee-upload-dragger',
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
hint,
|
|
15
|
+
} = props;
|
|
16
|
+
const { t } = useLocale();
|
|
17
|
+
|
|
18
|
+
const renderChildren = () => {
|
|
19
|
+
return (
|
|
20
|
+
children ?? (
|
|
21
|
+
<>
|
|
22
|
+
<span className={`${prefixCls}-icon`} aria-hidden="true">
|
|
23
|
+
<UploadIcon size={22} />
|
|
24
|
+
</span>
|
|
25
|
+
<span className={`${prefixCls}-hint`}>
|
|
26
|
+
{hint ?? t('upload.draggerHint')}
|
|
27
|
+
</span>
|
|
28
|
+
</>
|
|
29
|
+
)
|
|
30
|
+
);
|
|
31
|
+
};
|
|
10
32
|
|
|
11
|
-
const renderChildren = () => {
|
|
12
33
|
return (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
34
|
+
<Upload {...props} type="drag" ref={ref}>
|
|
35
|
+
<div
|
|
36
|
+
className={clsx(prefixCls, {
|
|
37
|
+
[`${prefixCls}-disabled`]: disabled,
|
|
38
|
+
})}
|
|
39
|
+
role="button"
|
|
40
|
+
aria-disabled={disabled}
|
|
41
|
+
tabIndex={disabled ? -1 : 0}
|
|
42
|
+
onKeyDown={(event) => {
|
|
43
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
event.currentTarget.parentElement
|
|
46
|
+
?.querySelector<HTMLInputElement>('input[type="file"]')
|
|
47
|
+
?.click();
|
|
48
|
+
}
|
|
49
|
+
}}
|
|
50
|
+
>
|
|
51
|
+
{renderChildren()}
|
|
52
|
+
</div>
|
|
53
|
+
</Upload>
|
|
23
54
|
);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return (
|
|
27
|
-
<Upload {...props} type="drag" ref={ref}>
|
|
28
|
-
<div
|
|
29
|
-
className={clsx(`${prefixCls}`, {
|
|
30
|
-
[`${prefixCls}-disabled`]: disabled,
|
|
31
|
-
})}
|
|
32
|
-
tabIndex={disabled ? -1 : 0}
|
|
33
|
-
onKeyDown={function (e) {
|
|
34
|
-
if (e.key === 'Enter') {
|
|
35
|
-
(e.target as HTMLDivElement).click();
|
|
36
|
-
}
|
|
37
|
-
}}
|
|
38
|
-
>
|
|
39
|
-
{renderChildren()}
|
|
40
|
-
</div>
|
|
41
|
-
</Upload>
|
|
42
|
-
);
|
|
43
|
-
});
|
|
55
|
+
},
|
|
56
|
+
);
|
|
44
57
|
|
|
45
58
|
Dragger.displayName = 'Dragger';
|
|
46
59
|
|
|
@@ -10,7 +10,7 @@ toc: 'content'
|
|
|
10
10
|
|
|
11
11
|
# Upload <span class="yee-mobile-badge" />
|
|
12
12
|
|
|
13
|
-
Upload
|
|
13
|
+
Upload files by selecting or dragging them.
|
|
14
14
|
|
|
15
15
|
## Code Demo
|
|
16
16
|
|
|
@@ -20,56 +20,76 @@ Upload file by selecting or dragging.
|
|
|
20
20
|
<code src="./demo/directory.tsx" title="Directory" description="Upload directory"></code>
|
|
21
21
|
<code src="./demo/multiple.tsx" title="Multiple" description="Multiple files upload"></code>
|
|
22
22
|
<code src="./demo/controlled.tsx" title="Controlled" description="Controlled upload"></code>
|
|
23
|
+
<code src="./demo/auto-upload.tsx" title="Manual Upload" description="Collect files with autoUpload=false and trigger batch upload from an external button via the instance method upload()"></code>
|
|
23
24
|
|
|
24
25
|
## API
|
|
25
26
|
|
|
26
27
|
### UploadProps
|
|
27
28
|
|
|
28
|
-
| Property
|
|
29
|
-
|
|
|
30
|
-
| name
|
|
31
|
-
| children
|
|
32
|
-
| type
|
|
33
|
-
| prefixCls
|
|
34
|
-
| className
|
|
35
|
-
| style
|
|
36
|
-
| progress
|
|
37
|
-
| withCredentials | `boolean`
|
|
38
|
-
| accept
|
|
39
|
-
| action
|
|
40
|
-
| data
|
|
41
|
-
| directory
|
|
42
|
-
| multiple
|
|
43
|
-
| disabled
|
|
44
|
-
| headers
|
|
45
|
-
| maxFileSize
|
|
46
|
-
| maxCount
|
|
47
|
-
| listType
|
|
48
|
-
| showUploadList
|
|
49
|
-
| itemRender
|
|
50
|
-
| defaultFileList | `
|
|
51
|
-
| fileList
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
29
|
+
| Property | Type | Description | Default |
|
|
30
|
+
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- |
|
|
31
|
+
| name | `string` | File field name sent to the server | `'file'` |
|
|
32
|
+
| children | `React.ReactNode` | Child nodes | - |
|
|
33
|
+
| type | `'drag' \| 'select'` | Upload type | - |
|
|
34
|
+
| prefixCls | `string` | Custom class name prefix | - |
|
|
35
|
+
| className | `string` | Custom class name | - |
|
|
36
|
+
| style | `React.CSSProperties` | Custom inline style | - |
|
|
37
|
+
| progress | `boolean` | Show upload progress | `true` |
|
|
38
|
+
| withCredentials | `boolean` | Send cookies with the upload | - |
|
|
39
|
+
| accept | `string` | Accepted file types; enforced for selection and drop | - |
|
|
40
|
+
| action | `string \| (() => string)` | Upload URL; required without `customRequest` | - |
|
|
41
|
+
| data | `Record<string, any> \| ((file: File) => Record<string, any>)` | Additional upload parameters | - |
|
|
42
|
+
| directory | `boolean` | Support directory upload | - |
|
|
43
|
+
| multiple | `boolean` | Support multiple files | - |
|
|
44
|
+
| disabled | `boolean` | Disable upload | - |
|
|
45
|
+
| headers | `Record<string, any>` | Request headers | - |
|
|
46
|
+
| maxFileSize | `number` | Maximum file size in bytes | - |
|
|
47
|
+
| maxCount | `number` | Maximum file count | - |
|
|
48
|
+
| listType | `'text' \| 'picture-list' \| 'picture-wall'` | Upload list type | `'text'` |
|
|
49
|
+
| showUploadList | `boolean \| { showTooltip?: boolean; showRemoveIcon?: boolean; showReload?: boolean; showPreviewIcon?: boolean; removeIcon?: React.ReactNode; reloadIcon?: React.ReactNode; previewIcon?: React.ReactNode; }` | Show upload file list | `true` |
|
|
50
|
+
| itemRender | `(file: UploadFile, fileList: UploadFile[]) => React.ReactNode` | Custom action content for a list item | - |
|
|
51
|
+
| defaultFileList | `UploadFile[]` | Default uploaded files | - |
|
|
52
|
+
| fileList | `UploadFile[]` | Uploaded files in controlled mode | - |
|
|
53
|
+
| autoUpload | `boolean` | Whether to upload automatically after selection; when `false` files only join the list and are uploaded later via the instance method `upload()` | `true` |
|
|
54
|
+
| beforeUpload | `(file: File, fileList: File[]) => boolean \| File \| PromiseLike<File \| boolean>` | Callback before upload | - |
|
|
55
|
+
| customRequest | `(options: UploadRequestOptions) => void \| (() => void) \| { abort: () => void }` | Custom upload implementation; return an abort handle to cancel on remove, retry, and unmount | - |
|
|
56
|
+
| onChange | `(params: { file: UploadFile; fileList: UploadFile[]; event?: any }) => void` | Upload state callback; `fileList` is the updated list | - |
|
|
57
|
+
| onPreview | `(file: UploadFile) => void` | File preview callback | - |
|
|
58
|
+
| onRemove | `(file: UploadFile) => boolean \| PromiseLike<boolean>` | File removal callback | - |
|
|
59
|
+
| data-\* | `string` | - | Supports all data-\* attributes and forwards them to the root element |
|
|
58
60
|
|
|
59
61
|
### UploadFile
|
|
60
62
|
|
|
61
|
-
| Property | Type
|
|
62
|
-
|
|
|
63
|
-
| status
|
|
64
|
-
| uid
|
|
65
|
-
| name
|
|
66
|
-
| size
|
|
67
|
-
| percent
|
|
68
|
-
| raw
|
|
69
|
-
| type
|
|
70
|
-
|
|
|
71
|
-
|
|
|
63
|
+
| Property | Type | Description | Default |
|
|
64
|
+
| -------- | ------------------------------------------------ | ----------------------------------------------------------- | ------- |
|
|
65
|
+
| status | `'uploading' \| 'error' \| 'success' \| 'ready'` | File upload status | - |
|
|
66
|
+
| uid | `string` | Unique file ID; generated for files selected through Upload | - |
|
|
67
|
+
| name | `string` | File name | - |
|
|
68
|
+
| size | `number` | File size; optional for remote files | - |
|
|
69
|
+
| percent | `number` | Upload progress | - |
|
|
70
|
+
| raw | `File` | Source file; optional for remote files | - |
|
|
71
|
+
| type | `string` | MIME type or file extension | - |
|
|
72
|
+
| url | `string` | Preview URL for a remote file | - |
|
|
73
|
+
| response | `any` | Upload response data | - |
|
|
74
|
+
| error | `Error` | Upload error | - |
|
|
75
|
+
|
|
76
|
+
### UploadRequestOptions
|
|
77
|
+
|
|
78
|
+
| Property | Type | Description |
|
|
79
|
+
| ---------- | --------------------------- | ----------------------------- |
|
|
80
|
+
| file | `File` | Source file to upload |
|
|
81
|
+
| onProgress | `(percent: number) => void` | Update upload progress |
|
|
82
|
+
| onError | `(error: Error) => void` | Mark the upload as failed |
|
|
83
|
+
| onSuccess | `(response: any) => void` | Mark the upload as successful |
|
|
84
|
+
|
|
85
|
+
### Instance Methods (Ref)
|
|
86
|
+
|
|
87
|
+
Access via `ref` as `UploadInstance` (root DOM element plus the methods below):
|
|
88
|
+
|
|
89
|
+
| Method | Type | Description |
|
|
90
|
+
| ------ | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
91
|
+
| upload | `(file?: UploadFile \| UploadFile[]) => void` | Upload files waiting in the list (`status` of `ready`); without arguments uploads all of them, or pass a single file or a list. Combine with `autoUpload={false}` to trigger uploads manually |
|
|
72
92
|
|
|
73
93
|
## Notes
|
|
74
94
|
|
|
75
|
-
- Adapted for mobile
|
|
95
|
+
- Adapted for mobile with reduced Dragger padding, always-visible picture-wall actions, and 44px list-item touch targets.
|
package/src/Upload/index.ts
CHANGED
|
@@ -9,6 +9,13 @@ const Upload = InternalUpload as UploadType;
|
|
|
9
9
|
|
|
10
10
|
Upload.Dragger = Dragger;
|
|
11
11
|
|
|
12
|
-
export type {
|
|
12
|
+
export type {
|
|
13
|
+
UploadDraggerProps,
|
|
14
|
+
UploadFile,
|
|
15
|
+
UploadInstance,
|
|
16
|
+
UploadProps,
|
|
17
|
+
UploadRequestAbort,
|
|
18
|
+
UploadRequestOptions,
|
|
19
|
+
} from './interface';
|
|
13
20
|
|
|
14
21
|
export default Upload;
|
|
@@ -20,56 +20,76 @@ toc: 'content'
|
|
|
20
20
|
<code src="./demo/directory.tsx" title="文件夹上传" description="上传文件夹"></code>
|
|
21
21
|
<code src="./demo/multiple.tsx" title="多文件上传" description="上传多个文件"></code>
|
|
22
22
|
<code src="./demo/controlled.tsx" title="受控" description="受控的上传"></code>
|
|
23
|
+
<code src="./demo/auto-upload.tsx" title="手动上传" description="autoUpload=false 先收集文件,通过实例方法 upload() 在外部按钮触发批量上传"></code>
|
|
23
24
|
|
|
24
25
|
## API
|
|
25
26
|
|
|
26
27
|
### UploadProps
|
|
27
28
|
|
|
28
|
-
| 属性名
|
|
29
|
-
|
|
|
30
|
-
| name
|
|
31
|
-
| children
|
|
32
|
-
| type
|
|
33
|
-
| prefixCls
|
|
34
|
-
| className
|
|
35
|
-
| style
|
|
36
|
-
| progress
|
|
37
|
-
| withCredentials | `boolean`
|
|
38
|
-
| accept
|
|
39
|
-
| action
|
|
40
|
-
| data
|
|
41
|
-
| directory
|
|
42
|
-
| multiple
|
|
43
|
-
| disabled
|
|
44
|
-
| headers
|
|
45
|
-
| maxFileSize
|
|
46
|
-
| maxCount
|
|
47
|
-
| listType
|
|
48
|
-
| showUploadList
|
|
49
|
-
| itemRender
|
|
50
|
-
| defaultFileList | `
|
|
51
|
-
| fileList
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
29
|
+
| 属性名 | 类型 | 描述 | 默认值 |
|
|
30
|
+
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------- |
|
|
31
|
+
| name | `string` | 传递到后台的文件名 | `'file'` |
|
|
32
|
+
| children | `React.ReactNode` | 子节点 | - |
|
|
33
|
+
| type | `'drag' \| 'select'` | 上传类型 | - |
|
|
34
|
+
| prefixCls | `string` | 自定义类名前缀 | - |
|
|
35
|
+
| className | `string` | 自定义类名 | - |
|
|
36
|
+
| style | `React.CSSProperties` | 自定义行内样式 | - |
|
|
37
|
+
| progress | `boolean` | 是否显示上传进度 | `true` |
|
|
38
|
+
| withCredentials | `boolean` | 上传是否携带 cookie | - |
|
|
39
|
+
| accept | `string` | 接受上传的文件类型;选择和拖放均会校验 | - |
|
|
40
|
+
| action | `string \| (() => string)` | 上传地址;未设置 `customRequest` 时必填 | - |
|
|
41
|
+
| data | `Record<string, any> \| ((file: File) => Record<string, any>)` | 上传额外需要的参数 | - |
|
|
42
|
+
| directory | `boolean` | 是否支持上传文件夹 | - |
|
|
43
|
+
| multiple | `boolean` | 是否支持多选文件 | - |
|
|
44
|
+
| disabled | `boolean` | 是否被禁用 | - |
|
|
45
|
+
| headers | `Record<string, any>` | 设置上传请求头 | - |
|
|
46
|
+
| maxFileSize | `number` | 文件最大大小限制,单位字节 | - |
|
|
47
|
+
| maxCount | `number` | 最大文件数量限制 | - |
|
|
48
|
+
| listType | `'text' \| 'picture-list' \| 'picture-wall'` | 设置上传列表类型 | `'text'` |
|
|
49
|
+
| showUploadList | `boolean \| { showTooltip?: boolean; showRemoveIcon?: boolean; showReload?: boolean; showPreviewIcon?: boolean; removeIcon?: React.ReactNode; reloadIcon?: React.ReactNode; previewIcon?: React.ReactNode; }` | 是否显示上传文件列表 | `true` |
|
|
50
|
+
| itemRender | `(file: UploadFile, fileList: UploadFile[]) => React.ReactNode` | 自定义上传列表项操作内容 | - |
|
|
51
|
+
| defaultFileList | `UploadFile[]` | 默认上传文件 | - |
|
|
52
|
+
| fileList | `UploadFile[]` | 受控状态的上传文件 | - |
|
|
53
|
+
| autoUpload | `boolean` | 选择文件后是否自动上传;为 `false` 时文件仅进入列表,稍后通过实例方法 `upload()` 触发上传 | `true` |
|
|
54
|
+
| beforeUpload | `(file: File, fileList: File[]) => boolean \| File \| PromiseLike<File \| boolean>` | 上传文件之前的回调 | - |
|
|
55
|
+
| customRequest | `(options: UploadRequestOptions) => void \| (() => void) \| { abort: () => void }` | 自定义上传实现;返回取消句柄后,删除、重试和卸载会取消请求 | - |
|
|
56
|
+
| onChange | `(params: { file: UploadFile; fileList: UploadFile[]; event?: any }) => void` | 上传状态变化回调,`fileList` 为变化后的列表 | - |
|
|
57
|
+
| onPreview | `(file: UploadFile) => void` | 文件预览回调 | - |
|
|
58
|
+
| onRemove | `(file: UploadFile) => boolean \| PromiseLike<boolean>` | 删除文件的回调 | - |
|
|
59
|
+
| data-\* | `string` | - | 支持所有 data-\* 属性,透传到组件根 DOM 元素 |
|
|
58
60
|
|
|
59
61
|
### UploadFile
|
|
60
62
|
|
|
61
|
-
| 属性名
|
|
62
|
-
|
|
|
63
|
-
| status
|
|
64
|
-
| uid
|
|
65
|
-
| name
|
|
66
|
-
| size
|
|
67
|
-
| percent
|
|
68
|
-
| raw
|
|
69
|
-
| type
|
|
70
|
-
|
|
|
71
|
-
|
|
|
63
|
+
| 属性名 | 类型 | 描述 | 默认值 |
|
|
64
|
+
| -------- | ------------------------------------------------ | ------------------------------------- | ------ |
|
|
65
|
+
| status | `'uploading' \| 'error' \| 'success' \| 'ready'` | 文件上传状态 | - |
|
|
66
|
+
| uid | `string` | 文件唯一 ID;组件选择的文件会自动生成 | - |
|
|
67
|
+
| name | `string` | 文件名 | - |
|
|
68
|
+
| size | `number` | 文件大小;服务端文件可省略 | - |
|
|
69
|
+
| percent | `number` | 上传进度 | - |
|
|
70
|
+
| raw | `File` | 源文件;服务端文件可省略 | - |
|
|
71
|
+
| type | `string` | MIME 类型或文件扩展名 | - |
|
|
72
|
+
| url | `string` | 服务端文件的预览地址 | - |
|
|
73
|
+
| response | `any` | 上传响应数据 | - |
|
|
74
|
+
| error | `Error` | 上传错误信息 | - |
|
|
75
|
+
|
|
76
|
+
### UploadRequestOptions
|
|
77
|
+
|
|
78
|
+
| 属性名 | 类型 | 描述 |
|
|
79
|
+
| ---------- | --------------------------- | ------------ |
|
|
80
|
+
| file | `File` | 待上传源文件 |
|
|
81
|
+
| onProgress | `(percent: number) => void` | 更新上传进度 |
|
|
82
|
+
| onError | `(error: Error) => void` | 标记上传失败 |
|
|
83
|
+
| onSuccess | `(response: any) => void` | 标记上传成功 |
|
|
84
|
+
|
|
85
|
+
### 实例方法(Ref)
|
|
86
|
+
|
|
87
|
+
通过 `ref` 获取 `UploadInstance`(根 DOM 元素 + 以下方法):
|
|
88
|
+
|
|
89
|
+
| 方法 | 类型 | 描述 |
|
|
90
|
+
| ------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
91
|
+
| upload | `(file?: UploadFile \| UploadFile[]) => void` | 上传列表中等待的文件(`status` 为 `ready`);不传参数上传全部,也可指定单个或多个。配合 `autoUpload={false}` 手动触发上传 |
|
|
72
92
|
|
|
73
93
|
## 注意事项
|
|
74
94
|
|
|
75
|
-
- 已适配移动端(减小 Dragger 内边距、图片墙操作按钮常显、列表项触控区域 44px)
|
|
95
|
+
- 已适配移动端(减小 Dragger 内边距、图片墙操作按钮常显、列表项触控区域 44px)
|