@arco-design/mobile-react 2.30.10 → 2.31.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.
Files changed (142) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.en-US.md +2 -2
  3. package/README.md +2 -2
  4. package/cjs/form/form-item.d.ts +3 -0
  5. package/cjs/form/form-item.js +38 -10
  6. package/cjs/form/style/css/index.css +13 -0
  7. package/cjs/form/style/index.less +18 -0
  8. package/cjs/icon/IconCheck/index.js +1 -2
  9. package/cjs/icon/IconDownload/index.d.ts +7 -0
  10. package/cjs/icon/IconDownload/index.js +41 -0
  11. package/cjs/icon/IconFile/index.d.ts +7 -0
  12. package/cjs/icon/IconFile/index.js +41 -0
  13. package/cjs/icon/IconKeyboard/index.js +1 -0
  14. package/cjs/icon/IconQuestionCircle/index.js +1 -2
  15. package/cjs/icon/IconUpload/index.js +6 -4
  16. package/cjs/icon/IconUserFill/index.js +1 -2
  17. package/cjs/icon/index.d.ts +3 -1
  18. package/cjs/icon/index.js +17 -7
  19. package/cjs/icon/type.d.ts +3 -1
  20. package/cjs/image-picker/index.js +15 -161
  21. package/cjs/image-picker/type.d.ts +4 -73
  22. package/cjs/index.d.ts +1 -0
  23. package/cjs/index.js +6 -2
  24. package/cjs/input/hooks.js +2 -2
  25. package/cjs/input/props.d.ts +2 -2
  26. package/cjs/picker/index.js +59 -19
  27. package/cjs/picker/type.d.ts +6 -1
  28. package/cjs/style.d.ts +1 -0
  29. package/cjs/style.js +3 -1
  30. package/cjs/tabs/tab-cell.js +1 -1
  31. package/cjs/uploader/index.d.ts +16 -0
  32. package/cjs/uploader/index.js +180 -0
  33. package/cjs/uploader/style/css/index.css +650 -0
  34. package/cjs/uploader/style/css/index.d.ts +4 -0
  35. package/cjs/uploader/style/css/index.js +9 -0
  36. package/cjs/uploader/style/index.d.ts +4 -0
  37. package/cjs/uploader/style/index.js +9 -0
  38. package/cjs/uploader/style/index.less +161 -0
  39. package/cjs/uploader/type.d.ts +108 -0
  40. package/cjs/uploader/type.js +3 -0
  41. package/cjs/uploader/upload/index.d.ts +2 -0
  42. package/cjs/uploader/upload/index.js +19 -0
  43. package/cjs/uploader/upload/type.d.ts +107 -0
  44. package/cjs/uploader/upload/type.js +3 -0
  45. package/cjs/uploader/upload/upload.d.ts +20 -0
  46. package/cjs/uploader/upload/upload.js +189 -0
  47. package/dist/index.js +580 -265
  48. package/dist/index.min.js +4 -4
  49. package/dist/style.css +593 -0
  50. package/dist/style.min.css +1 -1
  51. package/esm/form/form-item.d.ts +3 -0
  52. package/esm/form/form-item.js +36 -10
  53. package/esm/form/style/css/index.css +13 -0
  54. package/esm/form/style/index.less +18 -0
  55. package/esm/icon/IconCheck/index.js +1 -2
  56. package/esm/icon/IconDownload/index.d.ts +7 -0
  57. package/esm/icon/IconDownload/index.js +30 -0
  58. package/esm/icon/IconFile/index.d.ts +7 -0
  59. package/esm/icon/IconFile/index.js +30 -0
  60. package/esm/icon/IconKeyboard/index.js +1 -0
  61. package/esm/icon/IconQuestionCircle/index.js +1 -2
  62. package/esm/icon/IconUpload/index.js +6 -4
  63. package/esm/icon/IconUserFill/index.js +1 -2
  64. package/esm/icon/index.d.ts +3 -1
  65. package/esm/icon/index.js +3 -1
  66. package/esm/icon/type.d.ts +3 -1
  67. package/esm/image-picker/index.js +14 -160
  68. package/esm/image-picker/type.d.ts +4 -73
  69. package/esm/index.d.ts +1 -0
  70. package/esm/index.js +2 -1
  71. package/esm/input/hooks.js +2 -2
  72. package/esm/input/props.d.ts +2 -2
  73. package/esm/picker/index.js +60 -20
  74. package/esm/picker/type.d.ts +6 -1
  75. package/esm/style.d.ts +1 -0
  76. package/esm/style.js +2 -1
  77. package/esm/tabs/tab-cell.js +2 -2
  78. package/esm/uploader/index.d.ts +16 -0
  79. package/esm/uploader/index.js +150 -0
  80. package/esm/uploader/style/css/index.css +650 -0
  81. package/esm/uploader/style/css/index.d.ts +4 -0
  82. package/esm/uploader/style/css/index.js +4 -0
  83. package/esm/uploader/style/index.d.ts +4 -0
  84. package/esm/uploader/style/index.js +4 -0
  85. package/esm/uploader/style/index.less +161 -0
  86. package/esm/uploader/type.d.ts +108 -0
  87. package/esm/uploader/type.js +1 -0
  88. package/esm/uploader/upload/index.d.ts +2 -0
  89. package/esm/uploader/upload/index.js +2 -0
  90. package/esm/uploader/upload/type.d.ts +107 -0
  91. package/esm/uploader/upload/type.js +1 -0
  92. package/esm/uploader/upload/upload.d.ts +20 -0
  93. package/esm/uploader/upload/upload.js +175 -0
  94. package/package.json +3 -3
  95. package/tokens/app/arcodesign/default/css-variables.less +27 -0
  96. package/tokens/app/arcodesign/default/index.d.ts +27 -0
  97. package/tokens/app/arcodesign/default/index.js +28 -1
  98. package/tokens/app/arcodesign/default/index.json +292 -0
  99. package/tokens/app/arcodesign/default/index.less +27 -0
  100. package/umd/form/form-item.d.ts +3 -0
  101. package/umd/form/form-item.js +38 -10
  102. package/umd/form/style/css/index.css +13 -0
  103. package/umd/form/style/index.less +18 -0
  104. package/umd/icon/IconCheck/index.js +1 -2
  105. package/umd/icon/IconDownload/index.d.ts +7 -0
  106. package/umd/icon/IconDownload/index.js +49 -0
  107. package/umd/icon/IconFile/index.d.ts +7 -0
  108. package/umd/icon/IconFile/index.js +49 -0
  109. package/umd/icon/IconKeyboard/index.js +1 -0
  110. package/umd/icon/IconQuestionCircle/index.js +1 -2
  111. package/umd/icon/IconUpload/index.js +6 -4
  112. package/umd/icon/IconUserFill/index.js +1 -2
  113. package/umd/icon/index.d.ts +3 -1
  114. package/umd/icon/index.js +15 -9
  115. package/umd/icon/type.d.ts +3 -1
  116. package/umd/image-picker/index.js +17 -163
  117. package/umd/image-picker/type.d.ts +4 -73
  118. package/umd/index.d.ts +1 -0
  119. package/umd/index.js +7 -5
  120. package/umd/input/hooks.js +2 -2
  121. package/umd/input/props.d.ts +2 -2
  122. package/umd/picker/index.js +59 -19
  123. package/umd/picker/type.d.ts +6 -1
  124. package/umd/style.d.ts +1 -0
  125. package/umd/style.js +4 -4
  126. package/umd/tabs/tab-cell.js +1 -1
  127. package/umd/uploader/index.d.ts +16 -0
  128. package/umd/uploader/index.js +178 -0
  129. package/umd/uploader/style/css/index.css +650 -0
  130. package/umd/uploader/style/css/index.d.ts +4 -0
  131. package/umd/uploader/style/css/index.js +15 -0
  132. package/umd/uploader/style/index.d.ts +4 -0
  133. package/umd/uploader/style/index.js +15 -0
  134. package/umd/uploader/style/index.less +161 -0
  135. package/umd/uploader/type.d.ts +108 -0
  136. package/umd/uploader/type.js +17 -0
  137. package/umd/uploader/upload/index.d.ts +2 -0
  138. package/umd/uploader/upload/index.js +27 -0
  139. package/umd/uploader/upload/type.d.ts +107 -0
  140. package/umd/uploader/upload/type.js +17 -0
  141. package/umd/uploader/upload/upload.d.ts +20 -0
  142. package/umd/uploader/upload/upload.js +200 -0
@@ -0,0 +1,161 @@
1
+ @import '../../../style/mixin.less';
2
+
3
+ .@{prefix}-uploader {
4
+ &-container {
5
+ display: flex;
6
+ flex-wrap: wrap;
7
+ }
8
+ &-add {
9
+ position: relative;
10
+ input {
11
+ position: absolute;
12
+ opacity: 0;
13
+ left: 0;
14
+ top: 0;
15
+ width: 100%;
16
+ height: 100%;
17
+ display: none;
18
+ }
19
+ }
20
+ &-list {
21
+ width: 100%;
22
+ &-item {
23
+ display: flex;
24
+ align-items: center;
25
+ .use-var(height, uploader-item-height);
26
+ .use-var(margin-top, uploader-item-margin-top);
27
+ &-container {
28
+ flex: 1;
29
+ display: flex;
30
+ align-items: center;
31
+ height: 100%;
32
+ .use-var(border-radius, uploader-item-border-radius);
33
+ .use-var(background-color, uploader-item-background-color);
34
+ .use-var(padding, uploader-item-padding);
35
+ }
36
+ &-wrapper {
37
+ display: flex;
38
+ flex: 1;
39
+ align-items: center;
40
+ }
41
+ &-file {
42
+ display: flex;
43
+ .use-var(font-size, uploader-file-icon-font-size);
44
+ .use-var-with-rtl(margin-right, uploader-file-icon-margin-right);
45
+ &-icon {
46
+ .use-var(color, uploader-file-icon-color);
47
+ }
48
+ }
49
+ &-text {
50
+ font-weight: 400;
51
+ .use-var(font-size, uploader-item-text-font-size);
52
+ .use-var(color, uploader-item-text-color);
53
+ &-error {
54
+ .use-var(color, uploader-item-text-error-color);
55
+ }
56
+ }
57
+ &-loaded {
58
+ display: flex;
59
+ .use-var(font-size, uploader-loaded-icon-font-size);
60
+ .use-var(color, uploader-loaded-icon-color);
61
+ }
62
+ &-error {
63
+ font-weight: 400;
64
+ .use-var(font-size, uploader-error-text-font-size);
65
+ .use-var(color, uploader-error-text-color);
66
+ }
67
+ &-delete {
68
+ display: flex;
69
+ height: 100%;
70
+ align-items: center;
71
+ .use-var-with-rtl(padding-left, uploader-delete-icon-padding-left);
72
+ .use-var(font-size, uploader-delete-icon-font-size);
73
+ &-icon {
74
+ .use-var(color, uploader-delete-icon-color);
75
+ &-disabled {
76
+ .use-var(color, uploader-disabled-delete-icon-color);
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+
84
+ .@{prefix}-uploader-disabled {
85
+ pointer-events: none;
86
+ }
87
+
88
+ /***************************************************
89
+ * *
90
+ * Arco Theme Style *
91
+ * *
92
+ ***************************************************/
93
+ & when (@use-dark-mode = 1) {
94
+
95
+ .process-bg-color-with-config,
96
+ .process-custom-icon-bg-color-with-config {
97
+ @{arco-dark-mode-selector} & {
98
+ .use-var(color, dark-steps-process-with-config-item-icon-color);
99
+ .use-var(color, dark-steps-process-with-config-item-icon-color);
100
+ }
101
+ }
102
+ .wait-custom-icon-bg-color-with-config {
103
+ @{arco-dark-mode-selector} & {
104
+ .use-var(background, dark-steps-wait-icon-num-background);
105
+ .use-var(color, dark-sub-info-font-color);
106
+ .use-var(background, dark-steps-wait-icon-num-background);
107
+ .use-var(color, dark-sub-info-font-color);
108
+ }
109
+ }
110
+ .@{prefix}-uploader {
111
+ &-list {
112
+ &-item {
113
+ &-container {
114
+ @{arco-dark-mode-selector} & {
115
+ .use-var(background-color, dark-uploader-item-background-color);
116
+ }
117
+ }
118
+ &-file {
119
+ &-icon {
120
+ @{arco-dark-mode-selector} & {
121
+ .use-var(color, dark-uploader-file-icon-color);
122
+ }
123
+ }
124
+ }
125
+ &-text {
126
+ @{arco-dark-mode-selector} & {
127
+ .use-var(color, dark-uploader-item-text-color);
128
+ }
129
+ &-error {
130
+ @{arco-dark-mode-selector} & {
131
+ .use-var(color, dark-uploader-item-text-error-color);
132
+ }
133
+ }
134
+ }
135
+ &-loaded {
136
+ @{arco-dark-mode-selector} & {
137
+ .use-var(color, dark-uploader-loaded-icon-color);
138
+ }
139
+ }
140
+ &-error {
141
+ @{arco-dark-mode-selector} & {
142
+ .use-var(color, dark-uploader-error-text-color);
143
+ }
144
+ }
145
+ &-delete {
146
+ &-icon {
147
+ @{arco-dark-mode-selector} & {
148
+ .use-var(color, dark-uploader-delete-icon-color);
149
+ }
150
+ &-disabled {
151
+ @{arco-dark-mode-selector} & {
152
+ .use-var(color, dark-uploader-disabled-delete-icon-color);
153
+ }
154
+ }
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ /********************* End *************************/
@@ -0,0 +1,108 @@
1
+ import { InputHTMLAttributes } from 'react';
2
+ import { UploadCommonProps, CommonFileItem } from './upload/type';
3
+ export interface FileItem extends CommonFileItem {
4
+ /**
5
+ * 文件
6
+ * @en File
7
+ */
8
+ file: File;
9
+ }
10
+ export interface UploaderProps extends UploadCommonProps {
11
+ /**
12
+ * 自定义类名
13
+ * @en Custom className
14
+ */
15
+ className?: string;
16
+ /**
17
+ * 自定义样式
18
+ * @en Custom stylesheet
19
+ */
20
+ style?: React.CSSProperties;
21
+ /**
22
+ * 可以选择的文件类型
23
+ * @en Available file types
24
+ * @default undefined
25
+ */
26
+ accept?: InputHTMLAttributes<unknown>['accept'];
27
+ /**
28
+ * 是否支持多选
29
+ * @en Whether to support multiple selection
30
+ */
31
+ multiple?: boolean;
32
+ /**
33
+ * 文件选取模式 File selection mode [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
34
+ * @en Whether To Support Multiple Selection [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
35
+ */
36
+ capture?: InputHTMLAttributes<unknown>['capture'];
37
+ /**
38
+ * 是否隐藏文件上传状态
39
+ * @en Whether to hide file upload status
40
+ * @default false
41
+ */
42
+ hideStatus?: boolean;
43
+ /**
44
+ * 是否总是展示选择Icon,默认情况下当文件数量超出limit值时会自动隐藏选择Icon
45
+ * @en Whether to always show Select Icon
46
+ * @default false
47
+ */
48
+ alwaysShowSelect?: boolean;
49
+ /**
50
+ * 禁用选择和删除图片
51
+ * @en Disable select & delete image
52
+ */
53
+ disabled?: boolean;
54
+ /**
55
+ * 自定义删除区域
56
+ * @en Defined delete area
57
+ */
58
+ renderDeleteArea?: (fileItem: FileItem, index: number) => React.ReactNode;
59
+ /**
60
+ * 自定义上传成功区域
61
+ * @en Defined loaded area
62
+ */
63
+ renderLoadedArea?: (fileItem: FileItem, index: number) => React.ReactNode;
64
+ /**
65
+ * 自定义上传中区域
66
+ * @en Defined loading area
67
+ */
68
+ renderLoadingArea?: (fileItem: FileItem, index: number) => React.ReactNode;
69
+ /**
70
+ * 自定义上传失败区域
71
+ * @en Defined error area
72
+ */
73
+ renderErrorArea?: (fileItem: FileItem, index: number) => React.ReactNode;
74
+ /**
75
+ * 自定义文件索引区域
76
+ * @en Defined file index area
77
+ */
78
+ renderFileIndexArea?: (fileItem: FileItem, index: number) => React.ReactNode;
79
+ /**
80
+ * 自定义上传按钮区域
81
+ * @en Defined upload button area
82
+ */
83
+ renderUploadArea?: () => React.ReactNode;
84
+ /**
85
+ * 自定义上传文件列表展示
86
+ * @en Defined file list display
87
+ */
88
+ renderFileList?: (methods: FileListMethods) => React.ReactNode;
89
+ }
90
+ export interface UploaderRef {
91
+ /**
92
+ * 最外层 DOM 元素
93
+ * @en The outer DOM element of the component
94
+ */
95
+ dom: HTMLDivElement | null;
96
+ }
97
+ export interface FileListMethods {
98
+ /**
99
+ * 重新上传
100
+ * @en Retry to upload
101
+ */
102
+ retryUpload: (index: number) => void;
103
+ /**
104
+ * 删除文件
105
+ * @en Delete file
106
+ */
107
+ deleteFile: (index: number) => void;
108
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
@@ -0,0 +1,2 @@
1
+ export * from './type';
2
+ export * from './upload';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _type = require("./type");
6
+
7
+ Object.keys(_type).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _type[key]) return;
10
+ exports[key] = _type[key];
11
+ });
12
+
13
+ var _upload = require("./upload");
14
+
15
+ Object.keys(_upload).forEach(function (key) {
16
+ if (key === "default" || key === "__esModule") return;
17
+ if (key in exports && exports[key] === _upload[key]) return;
18
+ exports[key] = _upload[key];
19
+ });
@@ -0,0 +1,107 @@
1
+ /// <reference types="react" />
2
+ export interface AdapterFile {
3
+ /**
4
+ * 文件 url
5
+ * @en Url of file
6
+ */
7
+ url?: string;
8
+ /**
9
+ * 文件大小
10
+ * @en File size
11
+ */
12
+ size: number;
13
+ /**
14
+ * 文件名
15
+ * @en File name
16
+ */
17
+ name: string;
18
+ }
19
+ export interface SelectCallback {
20
+ /**
21
+ * 文件列表
22
+ * @en File list
23
+ */
24
+ files: AdapterFile[];
25
+ }
26
+ export interface CommonFileItem {
27
+ /**
28
+ * 文件地址
29
+ * @en file Url
30
+ */
31
+ url?: string;
32
+ /**
33
+ * 文件
34
+ * @en File
35
+ */
36
+ file?: File;
37
+ /**
38
+ * 文件状态
39
+ * @en Image Status
40
+ * @default 以文件自身加载状态而定
41
+ * @default_en According to inner status of the image
42
+ */
43
+ status?: 'loaded' | 'loading' | 'error';
44
+ }
45
+ export interface UploadCommonProps<FileItem extends CommonFileItem = CommonFileItem> {
46
+ /**
47
+ * 上传方法
48
+ * @en Upload function
49
+ */
50
+ upload?: (file: FileItem) => Promise<FileItem | null>;
51
+ /**
52
+ * 已选文件列表发生变化
53
+ * @en The list of selected files changes
54
+ */
55
+ onChange?: (fileList: FileItem[]) => void;
56
+ /**
57
+ * 文件大小限制,单位为K
58
+ * @en File size limit, in K
59
+ */
60
+ maxSize?: number;
61
+ /**
62
+ * 文件超过限制大小
63
+ * @en Image exceeds size limit
64
+ */
65
+ onMaxSizeExceed?: (file: File) => void;
66
+ /**
67
+ * 最多选择文件数,超出数量自动隐藏上传按钮,0表示不做限制
68
+ * @en Max pictures can choose, 0 means no restriction
69
+ * @default 0
70
+ */
71
+ limit?: number;
72
+ /**
73
+ * 选择文件数超过限制
74
+ * @en The number of pictures exceeds the limit
75
+ */
76
+ onLimitExceed?: (files: File[]) => void;
77
+ /**
78
+ * 已选择文件列表
79
+ * @en Selected files list
80
+ */
81
+ files: FileItem[];
82
+ /**
83
+ * 删除点击事件
84
+ * @en Delete area click event
85
+ */
86
+ onDeleteClick?: (index: number) => void;
87
+ /**
88
+ * 上传文件点击事件
89
+ * @en Upload area click event
90
+ */
91
+ onUploadClick?: () => void;
92
+ /**
93
+ * 文件选择适配器
94
+ * @en Select adaptor
95
+ */
96
+ selectAdapter?: () => Promise<SelectCallback>;
97
+ /**
98
+ * 文件点击
99
+ * @en click event
100
+ */
101
+ onClick?: (e: React.MouseEvent<HTMLElement, MouseEvent>, file: FileItem, index: number) => void;
102
+ /**
103
+ * 文件长按事件
104
+ * @en long press event
105
+ */
106
+ onLongPress?: (e: React.TouchEvent<HTMLElement>, file: FileItem, index: number) => void;
107
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
@@ -0,0 +1,20 @@
1
+ /// <reference types="node" />
2
+ import React from 'react';
3
+ import { Promise } from 'es6-promise';
4
+ import { AdapterFile, CommonFileItem, UploadCommonProps } from './type';
5
+ export declare class Upload<FileItem extends CommonFileItem = CommonFileItem> {
6
+ props: UploadCommonProps<FileItem>;
7
+ fileRef: React.MutableRefObject<HTMLInputElement | null>;
8
+ cacheRef: React.MutableRefObject<FileItem[]>;
9
+ timeOutEvent: NodeJS.Timeout | number;
10
+ constructor(props: UploadCommonProps<FileItem>, fileRef: React.MutableRefObject<HTMLInputElement | null>, cacheRef: React.MutableRefObject<FileItem[]>);
11
+ init(): void;
12
+ handleFile: (newFiles: File[]) => void;
13
+ handleChange: (event: any, fromAdapter?: boolean | undefined) => void;
14
+ deleteFile: (index: number) => void;
15
+ retryUpload: (index: number) => void;
16
+ handleSelect: (e: React.MouseEvent) => void;
17
+ handleClick: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, file: FileItem, index: number) => void;
18
+ handleTouchStart: (e: React.TouchEvent<HTMLDivElement>, image: FileItem, index: number) => void;
19
+ }
20
+ export declare const parseFile: (file: AdapterFile) => Promise<unknown>;
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.parseFile = exports.Upload = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _es6Promise = require("es6-promise");
11
+
12
+ var Upload = /*#__PURE__*/function () {
13
+ // click && longPress
14
+ function Upload(props, fileRef, cacheRef) {
15
+ var _this = this;
16
+
17
+ this.props = void 0;
18
+ this.fileRef = void 0;
19
+ this.cacheRef = void 0;
20
+ this.timeOutEvent = void 0;
21
+
22
+ this.handleFile = function (newFiles) {
23
+ _es6Promise.Promise.all(newFiles.map(function (file) {
24
+ return parseFile(file);
25
+ })).then(function (parseFiles) {
26
+ var res = parseFiles.map(function (url, index) {
27
+ return {
28
+ url: url,
29
+ status: typeof _this.props.upload === 'function' ? 'loading' : 'loaded',
30
+ file: newFiles[index]
31
+ };
32
+ });
33
+ _this.cacheRef.current = [].concat(_this.cacheRef.current, res);
34
+
35
+ _this.props.onChange([].concat(_this.cacheRef.current)); // 执行upload
36
+
37
+
38
+ if (typeof _this.props.upload === 'function') {
39
+ newFiles.forEach(function (_file) {
40
+ _this.props.upload(_this.cacheRef.current.find(function (_ref) {
41
+ var file = _ref.file;
42
+ return file === _file;
43
+ })).then(function (data) {
44
+ var index = _this.cacheRef.current.findIndex(function (_ref2) {
45
+ var file = _ref2.file;
46
+ return file === _file;
47
+ });
48
+
49
+ if (index !== -1) {
50
+ _this.cacheRef.current[index] = (0, _extends2.default)({}, _this.cacheRef.current[index], data, {
51
+ status: 'loaded'
52
+ });
53
+ }
54
+ }).catch(function () {
55
+ var index = _this.cacheRef.current.findIndex(function (_ref3) {
56
+ var file = _ref3.file;
57
+ return file === _file;
58
+ });
59
+
60
+ if (index !== -1) {
61
+ _this.cacheRef.current[index].status = 'error';
62
+ }
63
+ }).finally(function () {
64
+ _this.props.onChange([].concat(_this.cacheRef.current));
65
+ });
66
+ });
67
+ }
68
+ });
69
+ };
70
+
71
+ this.handleChange = function (event, fromAdapter) {
72
+ var newFiles = Array.prototype.filter.call(event.target.files || [], function (file) {
73
+ // 过滤maxSize
74
+ if (_this.props.maxSize && file.size > _this.props.maxSize * 1024) {
75
+ _this.props.onMaxSizeExceed && _this.props.onMaxSizeExceed(file);
76
+ return false;
77
+ }
78
+
79
+ return true;
80
+ }) || [];
81
+
82
+ if (!fromAdapter) {
83
+ event.target.value = '';
84
+ } // 截断limit
85
+
86
+
87
+ if (_this.props.limit !== 0 && newFiles.length + _this.props.files.length > _this.props.limit) {
88
+ _this.props.onLimitExceed && _this.props.onLimitExceed(newFiles);
89
+ newFiles.length = _this.props.limit - _this.props.files.length;
90
+ }
91
+
92
+ _this.handleFile(newFiles);
93
+ };
94
+
95
+ this.deleteFile = function (index) {
96
+ _this.props.onDeleteClick && _this.props.onDeleteClick(index);
97
+
98
+ _this.props.onChange(_this.props.files.filter(function (_i, j) {
99
+ return j !== index;
100
+ }));
101
+ };
102
+
103
+ this.retryUpload = function (index) {
104
+ _this.deleteFile(index);
105
+
106
+ _this.handleFile([_this.props.files[index].file]);
107
+ };
108
+
109
+ this.handleSelect = function (e) {
110
+ if (e.target !== _this.fileRef.current) {
111
+ var _this$fileRef$current;
112
+
113
+ _this.props.onUploadClick && _this.props.onUploadClick();
114
+ _this.props.selectAdapter ? _this.props.selectAdapter().then(function (value) {
115
+ return _this.handleChange({
116
+ target: {
117
+ files: value.files
118
+ }
119
+ }, true);
120
+ }) : (_this$fileRef$current = _this.fileRef.current) == null ? void 0 : _this$fileRef$current.click();
121
+ }
122
+ };
123
+
124
+ this.handleClick = function (e, file, index) {
125
+ clearTimeout(_this.timeOutEvent);
126
+
127
+ if (_this.timeOutEvent !== 0) {
128
+ _this.props.onClick == null ? void 0 : _this.props.onClick(e, file, index);
129
+ }
130
+ };
131
+
132
+ this.handleTouchStart = function (e, image, index) {
133
+ _this.timeOutEvent = setTimeout(function () {
134
+ _this.timeOutEvent = 0;
135
+ _this.props.onLongPress == null ? void 0 : _this.props.onLongPress(e, image, index);
136
+ }, 750);
137
+ };
138
+
139
+ this.props = (0, _extends2.default)({}, props);
140
+ this.fileRef = fileRef;
141
+ this.cacheRef = cacheRef;
142
+ this.init();
143
+ }
144
+
145
+ var _proto = Upload.prototype;
146
+
147
+ _proto.init = function init() {
148
+ !this.props.files && (this.props.files = []);
149
+ !this.props.limit && (this.props.limit = 0);
150
+ !this.props.onChange && (this.props.onChange = function () {
151
+ return null;
152
+ });
153
+ } // 解析文件生成预览
154
+ ;
155
+
156
+ return Upload;
157
+ }();
158
+
159
+ exports.Upload = Upload;
160
+
161
+ var parseFile = function parseFile(file) {
162
+ return new _es6Promise.Promise(function (resolve, reject) {
163
+ if (file.url) {
164
+ resolve(file.url);
165
+ } else {
166
+ var reader = new FileReader();
167
+
168
+ reader.onload = function (e) {
169
+ var _e$target;
170
+
171
+ var dataURL = (_e$target = e.target) == null ? void 0 : _e$target.result;
172
+
173
+ if (!dataURL) {
174
+ reject(new Error('file parse error'));
175
+ }
176
+
177
+ resolve(dataURL);
178
+ };
179
+
180
+ reader.onerror = function () {
181
+ reject(new Error('file parse error'));
182
+ };
183
+
184
+ reader.readAsDataURL(file);
185
+ }
186
+ });
187
+ };
188
+
189
+ exports.parseFile = parseFile;