@alfalab/core-components-file-upload-item 5.10.1 → 6.0.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 (326) hide show
  1. package/Component.d.ts +7 -92
  2. package/Component.js +41 -65
  3. package/actions-control.module-5a87c347.js +6 -0
  4. package/components/actions-control/actions-control.css +34 -0
  5. package/components/actions-control/actions.d.ts +4 -0
  6. package/components/actions-control/actions.js +24 -0
  7. package/components/actions-control/components/delete-button/delete-button.d.ts +4 -0
  8. package/components/actions-control/components/delete-button/delete-button.js +26 -0
  9. package/components/actions-control/components/delete-button/index.d.ts +1 -0
  10. package/components/actions-control/components/delete-button/index.js +9 -0
  11. package/components/actions-control/components/download-button/download-button.d.ts +4 -0
  12. package/components/actions-control/components/download-button/download-button.js +27 -0
  13. package/components/actions-control/components/download-button/index.d.ts +1 -0
  14. package/components/actions-control/components/download-button/index.js +9 -0
  15. package/components/actions-control/components/restore-button/index.d.ts +1 -0
  16. package/components/actions-control/components/restore-button/index.js +9 -0
  17. package/components/actions-control/components/restore-button/restore-button.d.ts +4 -0
  18. package/components/actions-control/components/restore-button/restore-button.js +26 -0
  19. package/components/actions-control/index.d.ts +1 -0
  20. package/components/actions-control/index.js +9 -0
  21. package/components/content/components/content-error/content-error.css +4 -0
  22. package/components/content/components/content-error/content-error.d.ts +4 -0
  23. package/components/content/components/content-error/content-error.js +27 -0
  24. package/components/content/components/content-error/index.d.ts +1 -0
  25. package/components/content/components/content-error/index.js +9 -0
  26. package/components/content/components/content-subtitle/content-subtitle.css +31 -0
  27. package/components/content/components/content-subtitle/content-subtitle.d.ts +4 -0
  28. package/components/content/components/content-subtitle/content-subtitle.js +62 -0
  29. package/components/content/content.css +50 -0
  30. package/components/content/content.d.ts +4 -0
  31. package/components/content/content.js +35 -0
  32. package/components/content/index.d.ts +1 -0
  33. package/components/content/index.js +9 -0
  34. package/components/content/utils/isError.d.ts +2 -0
  35. package/components/content/utils/isError.js +15 -0
  36. package/components/status-control/components/status-control-icon/index.d.ts +1 -0
  37. package/components/status-control/components/status-control-icon/index.js +9 -0
  38. package/components/status-control/components/status-control-icon/status-control-icon.css +37 -0
  39. package/components/status-control/components/status-control-icon/status-control-icon.d.ts +4 -0
  40. package/components/status-control/components/status-control-icon/status-control-icon.js +70 -0
  41. package/components/status-control/components/status-control-progress-bar/index.d.ts +1 -0
  42. package/components/status-control/components/status-control-progress-bar/index.js +9 -0
  43. package/components/status-control/components/status-control-progress-bar/status-control-progress-bar.d.ts +6 -0
  44. package/components/status-control/components/status-control-progress-bar/status-control-progress-bar.js +22 -0
  45. package/components/status-control/index.d.ts +1 -0
  46. package/components/status-control/index.js +9 -0
  47. package/components/status-control/status-control.css +57 -0
  48. package/components/status-control/status-control.d.ts +4 -0
  49. package/components/status-control/status-control.js +49 -0
  50. package/const/progress-bar.d.ts +3 -0
  51. package/const/progress-bar.js +9 -0
  52. package/context/file-upload-item-context.d.ts +30 -0
  53. package/context/file-upload-item-context.js +32 -0
  54. package/cssm/Component.d.ts +7 -92
  55. package/cssm/Component.js +40 -64
  56. package/cssm/components/actions-control/actions-control.module.css +33 -0
  57. package/cssm/components/actions-control/actions.d.ts +4 -0
  58. package/cssm/components/actions-control/actions.js +25 -0
  59. package/cssm/components/actions-control/components/delete-button/delete-button.d.ts +4 -0
  60. package/cssm/components/actions-control/components/delete-button/delete-button.js +27 -0
  61. package/cssm/components/actions-control/components/delete-button/index.d.ts +1 -0
  62. package/cssm/components/actions-control/components/delete-button/index.js +9 -0
  63. package/cssm/components/actions-control/components/download-button/download-button.d.ts +4 -0
  64. package/cssm/components/actions-control/components/download-button/download-button.js +28 -0
  65. package/cssm/components/actions-control/components/download-button/index.d.ts +1 -0
  66. package/cssm/components/actions-control/components/download-button/index.js +9 -0
  67. package/cssm/components/actions-control/components/restore-button/index.d.ts +1 -0
  68. package/cssm/components/actions-control/components/restore-button/index.js +9 -0
  69. package/cssm/components/actions-control/components/restore-button/restore-button.d.ts +4 -0
  70. package/cssm/components/actions-control/components/restore-button/restore-button.js +27 -0
  71. package/cssm/components/actions-control/index.d.ts +1 -0
  72. package/cssm/components/actions-control/index.js +9 -0
  73. package/cssm/components/content/components/content-error/content-error.d.ts +4 -0
  74. package/cssm/components/content/components/content-error/content-error.js +26 -0
  75. package/cssm/components/content/components/content-error/content-error.module.css +3 -0
  76. package/cssm/components/content/components/content-error/index.d.ts +1 -0
  77. package/cssm/components/content/components/content-error/index.js +9 -0
  78. package/cssm/components/content/components/content-subtitle/content-subtitle.d.ts +4 -0
  79. package/cssm/components/content/components/content-subtitle/content-subtitle.js +61 -0
  80. package/cssm/components/content/components/content-subtitle/content-subtitle.module.css +30 -0
  81. package/cssm/components/content/content.d.ts +4 -0
  82. package/cssm/components/content/content.js +34 -0
  83. package/cssm/components/content/content.module.css +49 -0
  84. package/cssm/components/content/index.d.ts +1 -0
  85. package/cssm/components/content/index.js +9 -0
  86. package/cssm/components/content/utils/isError.d.ts +2 -0
  87. package/cssm/components/content/utils/isError.js +15 -0
  88. package/cssm/components/status-control/components/status-control-icon/index.d.ts +1 -0
  89. package/cssm/components/status-control/components/status-control-icon/index.js +9 -0
  90. package/cssm/components/status-control/components/status-control-icon/status-control-icon.d.ts +4 -0
  91. package/cssm/components/status-control/components/status-control-icon/status-control-icon.js +69 -0
  92. package/cssm/components/status-control/components/status-control-icon/status-control-icon.module.css +36 -0
  93. package/cssm/components/status-control/components/status-control-progress-bar/index.d.ts +1 -0
  94. package/cssm/components/status-control/components/status-control-progress-bar/index.js +9 -0
  95. package/cssm/components/status-control/components/status-control-progress-bar/status-control-progress-bar.d.ts +6 -0
  96. package/cssm/components/status-control/components/status-control-progress-bar/status-control-progress-bar.js +22 -0
  97. package/cssm/components/status-control/index.d.ts +1 -0
  98. package/cssm/components/status-control/index.js +9 -0
  99. package/cssm/components/status-control/status-control.d.ts +4 -0
  100. package/cssm/components/status-control/status-control.js +48 -0
  101. package/cssm/components/status-control/status-control.module.css +56 -0
  102. package/cssm/const/progress-bar.d.ts +3 -0
  103. package/cssm/const/progress-bar.js +9 -0
  104. package/cssm/context/file-upload-item-context.d.ts +30 -0
  105. package/cssm/context/file-upload-item-context.js +32 -0
  106. package/cssm/index.js +1 -0
  107. package/cssm/index.module.css +5 -96
  108. package/cssm/types/file-upload-item-props.d.ts +113 -0
  109. package/cssm/types/file-upload-item-props.js +2 -0
  110. package/cssm/utils.d.ts +6 -3
  111. package/cssm/utils.js +10 -28
  112. package/esm/Component.d.ts +7 -92
  113. package/esm/Component.js +41 -66
  114. package/esm/actions-control.module-10db6600.js +4 -0
  115. package/esm/components/actions-control/actions-control.css +34 -0
  116. package/esm/components/actions-control/actions.d.ts +4 -0
  117. package/esm/components/actions-control/actions.js +16 -0
  118. package/esm/components/actions-control/components/delete-button/delete-button.d.ts +4 -0
  119. package/esm/components/actions-control/components/delete-button/delete-button.js +17 -0
  120. package/esm/components/actions-control/components/delete-button/index.d.ts +1 -0
  121. package/esm/components/actions-control/components/delete-button/index.js +1 -0
  122. package/esm/components/actions-control/components/download-button/download-button.d.ts +4 -0
  123. package/esm/components/actions-control/components/download-button/download-button.js +18 -0
  124. package/esm/components/actions-control/components/download-button/index.d.ts +1 -0
  125. package/esm/components/actions-control/components/download-button/index.js +1 -0
  126. package/esm/components/actions-control/components/restore-button/index.d.ts +1 -0
  127. package/esm/components/actions-control/components/restore-button/index.js +1 -0
  128. package/esm/components/actions-control/components/restore-button/restore-button.d.ts +4 -0
  129. package/esm/components/actions-control/components/restore-button/restore-button.js +17 -0
  130. package/esm/components/actions-control/index.d.ts +1 -0
  131. package/esm/components/actions-control/index.js +1 -0
  132. package/esm/components/content/components/content-error/content-error.css +4 -0
  133. package/esm/components/content/components/content-error/content-error.d.ts +4 -0
  134. package/esm/components/content/components/content-error/content-error.js +19 -0
  135. package/esm/components/content/components/content-error/index.d.ts +1 -0
  136. package/esm/components/content/components/content-error/index.js +1 -0
  137. package/esm/components/content/components/content-subtitle/content-subtitle.css +31 -0
  138. package/esm/components/content/components/content-subtitle/content-subtitle.d.ts +4 -0
  139. package/esm/components/content/components/content-subtitle/content-subtitle.js +53 -0
  140. package/esm/components/content/content.css +50 -0
  141. package/esm/components/content/content.d.ts +4 -0
  142. package/esm/components/content/content.js +26 -0
  143. package/esm/components/content/index.d.ts +1 -0
  144. package/esm/components/content/index.js +1 -0
  145. package/esm/components/content/utils/isError.d.ts +2 -0
  146. package/esm/components/content/utils/isError.js +11 -0
  147. package/esm/components/status-control/components/status-control-icon/index.d.ts +1 -0
  148. package/esm/components/status-control/components/status-control-icon/index.js +1 -0
  149. package/esm/components/status-control/components/status-control-icon/status-control-icon.css +37 -0
  150. package/esm/components/status-control/components/status-control-icon/status-control-icon.d.ts +4 -0
  151. package/esm/components/status-control/components/status-control-icon/status-control-icon.js +60 -0
  152. package/esm/components/status-control/components/status-control-progress-bar/index.d.ts +1 -0
  153. package/esm/components/status-control/components/status-control-progress-bar/index.js +1 -0
  154. package/esm/components/status-control/components/status-control-progress-bar/status-control-progress-bar.d.ts +6 -0
  155. package/esm/components/status-control/components/status-control-progress-bar/status-control-progress-bar.js +14 -0
  156. package/esm/components/status-control/index.d.ts +1 -0
  157. package/esm/components/status-control/index.js +1 -0
  158. package/esm/components/status-control/status-control.css +57 -0
  159. package/esm/components/status-control/status-control.d.ts +4 -0
  160. package/esm/components/status-control/status-control.js +40 -0
  161. package/esm/const/progress-bar.d.ts +3 -0
  162. package/esm/const/progress-bar.js +4 -0
  163. package/esm/context/file-upload-item-context.d.ts +30 -0
  164. package/esm/context/file-upload-item-context.js +28 -0
  165. package/esm/index.css +8 -99
  166. package/esm/index.js +1 -1
  167. package/esm/types/file-upload-item-props.d.ts +113 -0
  168. package/esm/types/file-upload-item-props.js +1 -0
  169. package/esm/utils.d.ts +6 -3
  170. package/esm/utils.js +6 -28
  171. package/index.css +8 -99
  172. package/index.js +1 -0
  173. package/modern/Component.d.ts +7 -92
  174. package/modern/Component.js +40 -66
  175. package/modern/actions-control.module-86bcd03c.js +4 -0
  176. package/modern/components/actions-control/actions-control.css +34 -0
  177. package/modern/components/actions-control/actions.d.ts +4 -0
  178. package/modern/components/actions-control/actions.js +16 -0
  179. package/modern/components/actions-control/components/delete-button/delete-button.d.ts +4 -0
  180. package/modern/components/actions-control/components/delete-button/delete-button.js +17 -0
  181. package/modern/components/actions-control/components/delete-button/index.d.ts +1 -0
  182. package/modern/components/actions-control/components/delete-button/index.js +1 -0
  183. package/modern/components/actions-control/components/download-button/download-button.d.ts +4 -0
  184. package/modern/components/actions-control/components/download-button/download-button.js +18 -0
  185. package/modern/components/actions-control/components/download-button/index.d.ts +1 -0
  186. package/modern/components/actions-control/components/download-button/index.js +1 -0
  187. package/modern/components/actions-control/components/restore-button/index.d.ts +1 -0
  188. package/modern/components/actions-control/components/restore-button/index.js +1 -0
  189. package/modern/components/actions-control/components/restore-button/restore-button.d.ts +4 -0
  190. package/modern/components/actions-control/components/restore-button/restore-button.js +17 -0
  191. package/modern/components/actions-control/index.d.ts +1 -0
  192. package/modern/components/actions-control/index.js +1 -0
  193. package/modern/components/content/components/content-error/content-error.css +4 -0
  194. package/modern/components/content/components/content-error/content-error.d.ts +4 -0
  195. package/modern/components/content/components/content-error/content-error.js +19 -0
  196. package/modern/components/content/components/content-error/index.d.ts +1 -0
  197. package/modern/components/content/components/content-error/index.js +1 -0
  198. package/modern/components/content/components/content-subtitle/content-subtitle.css +31 -0
  199. package/modern/components/content/components/content-subtitle/content-subtitle.d.ts +4 -0
  200. package/modern/components/content/components/content-subtitle/content-subtitle.js +52 -0
  201. package/modern/components/content/content.css +50 -0
  202. package/modern/components/content/content.d.ts +4 -0
  203. package/modern/components/content/content.js +25 -0
  204. package/modern/components/content/index.d.ts +1 -0
  205. package/modern/components/content/index.js +1 -0
  206. package/modern/components/content/utils/isError.d.ts +2 -0
  207. package/modern/components/content/utils/isError.js +11 -0
  208. package/modern/components/status-control/components/status-control-icon/index.d.ts +1 -0
  209. package/modern/components/status-control/components/status-control-icon/index.js +1 -0
  210. package/modern/components/status-control/components/status-control-icon/status-control-icon.css +37 -0
  211. package/modern/components/status-control/components/status-control-icon/status-control-icon.d.ts +4 -0
  212. package/modern/components/status-control/components/status-control-icon/status-control-icon.js +59 -0
  213. package/modern/components/status-control/components/status-control-progress-bar/index.d.ts +1 -0
  214. package/modern/components/status-control/components/status-control-progress-bar/index.js +1 -0
  215. package/modern/components/status-control/components/status-control-progress-bar/status-control-progress-bar.d.ts +6 -0
  216. package/modern/components/status-control/components/status-control-progress-bar/status-control-progress-bar.js +11 -0
  217. package/modern/components/status-control/index.d.ts +1 -0
  218. package/modern/components/status-control/index.js +1 -0
  219. package/modern/components/status-control/status-control.css +57 -0
  220. package/modern/components/status-control/status-control.d.ts +4 -0
  221. package/modern/components/status-control/status-control.js +36 -0
  222. package/modern/const/progress-bar.d.ts +3 -0
  223. package/modern/const/progress-bar.js +4 -0
  224. package/modern/context/file-upload-item-context.d.ts +30 -0
  225. package/modern/context/file-upload-item-context.js +28 -0
  226. package/modern/index.css +8 -99
  227. package/modern/index.js +1 -1
  228. package/modern/types/file-upload-item-props.d.ts +113 -0
  229. package/modern/types/file-upload-item-props.js +1 -0
  230. package/modern/utils.d.ts +6 -3
  231. package/modern/utils.js +6 -28
  232. package/moderncssm/Component.d.ts +7 -92
  233. package/moderncssm/Component.js +39 -65
  234. package/moderncssm/components/actions-control/actions-control.module.css +23 -0
  235. package/moderncssm/components/actions-control/actions.d.ts +4 -0
  236. package/moderncssm/components/actions-control/actions.js +16 -0
  237. package/moderncssm/components/actions-control/components/delete-button/delete-button.d.ts +4 -0
  238. package/moderncssm/components/actions-control/components/delete-button/delete-button.js +17 -0
  239. package/moderncssm/components/actions-control/components/delete-button/index.d.ts +1 -0
  240. package/moderncssm/components/actions-control/components/delete-button/index.js +1 -0
  241. package/moderncssm/components/actions-control/components/download-button/download-button.d.ts +4 -0
  242. package/moderncssm/components/actions-control/components/download-button/download-button.js +18 -0
  243. package/moderncssm/components/actions-control/components/download-button/index.d.ts +1 -0
  244. package/moderncssm/components/actions-control/components/download-button/index.js +1 -0
  245. package/moderncssm/components/actions-control/components/restore-button/index.d.ts +1 -0
  246. package/moderncssm/components/actions-control/components/restore-button/index.js +1 -0
  247. package/moderncssm/components/actions-control/components/restore-button/restore-button.d.ts +4 -0
  248. package/moderncssm/components/actions-control/components/restore-button/restore-button.js +17 -0
  249. package/moderncssm/components/actions-control/index.d.ts +1 -0
  250. package/moderncssm/components/actions-control/index.js +1 -0
  251. package/moderncssm/components/content/components/content-error/content-error.d.ts +4 -0
  252. package/moderncssm/components/content/components/content-error/content-error.js +17 -0
  253. package/moderncssm/components/content/components/content-error/content-error.module.css +3 -0
  254. package/moderncssm/components/content/components/content-error/index.d.ts +1 -0
  255. package/moderncssm/components/content/components/content-error/index.js +1 -0
  256. package/moderncssm/components/content/components/content-subtitle/content-subtitle.d.ts +4 -0
  257. package/moderncssm/components/content/components/content-subtitle/content-subtitle.js +50 -0
  258. package/moderncssm/components/content/components/content-subtitle/content-subtitle.module.css +15 -0
  259. package/moderncssm/components/content/content.d.ts +4 -0
  260. package/moderncssm/components/content/content.js +23 -0
  261. package/moderncssm/components/content/content.module.css +37 -0
  262. package/moderncssm/components/content/index.d.ts +1 -0
  263. package/moderncssm/components/content/index.js +1 -0
  264. package/moderncssm/components/content/utils/isError.d.ts +2 -0
  265. package/moderncssm/components/content/utils/isError.js +11 -0
  266. package/moderncssm/components/status-control/components/status-control-icon/index.d.ts +1 -0
  267. package/moderncssm/components/status-control/components/status-control-icon/index.js +1 -0
  268. package/moderncssm/components/status-control/components/status-control-icon/status-control-icon.d.ts +4 -0
  269. package/moderncssm/components/status-control/components/status-control-icon/status-control-icon.js +57 -0
  270. package/moderncssm/components/status-control/components/status-control-icon/status-control-icon.module.css +22 -0
  271. package/moderncssm/components/status-control/components/status-control-progress-bar/index.d.ts +1 -0
  272. package/moderncssm/components/status-control/components/status-control-progress-bar/index.js +1 -0
  273. package/moderncssm/components/status-control/components/status-control-progress-bar/status-control-progress-bar.d.ts +6 -0
  274. package/moderncssm/components/status-control/components/status-control-progress-bar/status-control-progress-bar.js +11 -0
  275. package/moderncssm/components/status-control/index.d.ts +1 -0
  276. package/moderncssm/components/status-control/index.js +1 -0
  277. package/moderncssm/components/status-control/status-control.d.ts +4 -0
  278. package/moderncssm/components/status-control/status-control.js +34 -0
  279. package/moderncssm/components/status-control/status-control.module.css +48 -0
  280. package/moderncssm/const/progress-bar.d.ts +3 -0
  281. package/moderncssm/const/progress-bar.js +4 -0
  282. package/moderncssm/context/file-upload-item-context.d.ts +30 -0
  283. package/moderncssm/context/file-upload-item-context.js +28 -0
  284. package/moderncssm/index.js +1 -1
  285. package/moderncssm/index.module.css +2 -117
  286. package/moderncssm/types/file-upload-item-props.d.ts +113 -0
  287. package/moderncssm/types/file-upload-item-props.js +1 -0
  288. package/moderncssm/utils.d.ts +6 -3
  289. package/moderncssm/utils.js +6 -28
  290. package/package.json +7 -6
  291. package/src/Component.tsx +60 -251
  292. package/src/components/actions-control/actions-control.module.css +23 -0
  293. package/src/components/actions-control/actions.tsx +23 -0
  294. package/src/components/actions-control/components/delete-button/delete-button.tsx +29 -0
  295. package/src/components/actions-control/components/delete-button/index.ts +1 -0
  296. package/src/components/actions-control/components/download-button/download-button.tsx +40 -0
  297. package/src/components/actions-control/components/download-button/index.ts +1 -0
  298. package/src/components/actions-control/components/restore-button/index.ts +1 -0
  299. package/src/components/actions-control/components/restore-button/restore-button.tsx +29 -0
  300. package/src/components/actions-control/index.ts +1 -0
  301. package/src/components/content/components/content-error/content-error.module.css +3 -0
  302. package/src/components/content/components/content-error/content-error.tsx +42 -0
  303. package/src/components/content/components/content-error/index.ts +1 -0
  304. package/src/components/content/components/content-subtitle/content-subtitle.module.css +15 -0
  305. package/src/components/content/components/content-subtitle/content-subtitle.tsx +92 -0
  306. package/src/components/content/content.module.css +37 -0
  307. package/src/components/content/content.tsx +46 -0
  308. package/src/components/content/index.ts +1 -0
  309. package/src/components/content/utils/isError.ts +11 -0
  310. package/src/components/status-control/components/status-control-icon/index.ts +1 -0
  311. package/src/components/status-control/components/status-control-icon/status-control-icon.module.css +22 -0
  312. package/src/components/status-control/components/status-control-icon/status-control-icon.tsx +75 -0
  313. package/src/components/status-control/components/status-control-progress-bar/index.ts +1 -0
  314. package/src/components/status-control/components/status-control-progress-bar/status-control-progress-bar.tsx +37 -0
  315. package/src/components/status-control/index.ts +1 -0
  316. package/src/components/status-control/status-control.module.css +45 -0
  317. package/src/components/status-control/status-control.tsx +52 -0
  318. package/src/const/progress-bar.ts +2 -0
  319. package/src/context/file-upload-item-context.tsx +51 -0
  320. package/src/index.module.css +2 -113
  321. package/src/types/file-upload-item-props.ts +133 -0
  322. package/src/utils.ts +5 -28
  323. package/types/file-upload-item-props.d.ts +113 -0
  324. package/types/file-upload-item-props.js +2 -0
  325. package/utils.d.ts +6 -3
  326. package/utils.js +10 -28
package/src/Component.tsx CHANGED
@@ -1,141 +1,25 @@
1
- import React, { ElementType, HTMLAttributeAnchorTarget, MouseEvent, ReactNode } from 'react';
1
+ import React from 'react';
2
2
  import cn from 'classnames';
3
3
 
4
- import { IconButton } from '@alfalab/core-components-icon-button';
5
- import { Link } from '@alfalab/core-components-link';
6
- import { Spinner } from '@alfalab/core-components-spinner';
7
- import { AlertCircleMIcon } from '@alfalab/icons-glyph/AlertCircleMIcon';
8
- import { CheckmarkCircleMIcon } from '@alfalab/icons-glyph/CheckmarkCircleMIcon';
9
- import { ClockMIcon } from '@alfalab/icons-glyph/ClockMIcon';
10
- import { CrossSIcon } from '@alfalab/icons-glyph/CrossSIcon';
11
- import { PointerDownSIcon } from '@alfalab/icons-glyph/PointerDownSIcon';
12
-
13
- import { fileIcon, humanFileSize } from './utils';
4
+ import { Actions } from './components/actions-control';
5
+ import { Content } from './components/content';
6
+ import { StatusControl } from './components/status-control';
7
+ import { FileUploadItemContext } from './context/file-upload-item-context';
8
+ import { FileUploadItemProps } from './types/file-upload-item-props';
14
9
 
15
10
  import styles from './index.module.css';
16
11
 
17
- export type FileStatuses = 'ERROR' | 'SUCCESS' | 'LOADING' | 'UPLOADING';
18
-
19
- export type FileUploadItemProps = {
20
- /**
21
- * Дополнительный класс
22
- */
23
- className?: string;
24
-
25
- /**
26
- * Идентификатор элемента
27
- */
28
- id?: string;
29
-
30
- /**
31
- * Имя файла с расширением
32
- */
33
- name?: string;
34
-
35
- /**
36
- * Размер файла
37
- */
38
- size?: string | number;
39
-
40
- /**
41
- * Дата загрузки файла
42
- */
43
- uploadDate?: string;
44
-
45
- /**
46
- * Ссылка на файл. Если прокидывается этот параметр, то появляется кнопка скачивания
47
- */
48
- downloadLink?: string;
49
-
50
- /**
51
- * Рекомендует браузеру скачивать контент по ссылке.
52
- * В проп может быть передано рекомендуемое название скачиваемого файла.
53
- */
54
- download?: string | true;
55
-
56
- /**
57
- * Отображение кнопки удаления
58
- */
59
- showDelete?: boolean;
60
-
61
- /**
62
- * Отображение кнопки восстановления
63
- */
64
- showRestore?: boolean;
65
-
66
- /**
67
- * Процент загрузки файла
68
- */
69
- uploadPercent?: number;
70
-
71
- /**
72
- * Статус загрузки файла
73
- */
74
- uploadStatus?: FileStatuses;
75
-
76
- /**
77
- * Сообщение об ошибке
78
- */
79
- error?: ReactNode;
80
-
81
- /**
82
- * Дочерние элементы
83
- */
84
- children?: React.ReactNode;
85
-
86
- /**
87
- * Компонент кастомной иконки
88
- */
89
- icon?: ElementType<{ className?: string }>;
90
-
91
- /**
92
- * Обработчик загрузки файла
93
- */
94
- onDownload?: (id: string) => void;
95
-
96
- /**
97
- * Обработчик удаления файла
98
- */
99
- onDelete?: (id: string, event?: MouseEvent<HTMLElement>) => void;
100
-
101
- /**
102
- * Обработчик восстановления файла
103
- */
104
- onRestore?: (id: string) => void;
105
-
106
- /**
107
- * Управление активностью кнопок
108
- */
109
- disableButtons?: boolean;
110
-
111
- /**
112
- * Разрешить многострочное название файла
113
- */
114
- multiline?: boolean;
115
-
116
- /**
117
- * Указывает, где открыть скачиваемый документ
118
- */
119
- target?: HTMLAttributeAnchorTarget;
120
-
121
- /**
122
- * Идентификатор для систем автоматизированного тестирования
123
- */
124
- dataTestId?: string;
125
- };
126
-
127
- export const FileUploadItem: React.FC<FileUploadItemProps> = ({
12
+ export const FileUploadItemComponent: React.FC<FileUploadItemProps> = ({
128
13
  className,
129
14
  children,
130
15
  id = '0',
131
- name = '',
16
+ title = '',
17
+ subtitle,
132
18
  size,
133
- icon: Icon = fileIcon(name),
134
19
  uploadDate,
135
20
  downloadLink,
136
21
  download,
137
22
  uploadStatus,
138
- uploadPercent = 0,
139
23
  error,
140
24
  showDelete,
141
25
  showRestore,
@@ -143,132 +27,57 @@ export const FileUploadItem: React.FC<FileUploadItemProps> = ({
143
27
  onDownload,
144
28
  onRestore,
145
29
  disableButtons,
146
- multiline = false,
147
30
  target,
148
31
  dataTestId,
149
- }) => {
150
- const handleDownload = (event: MouseEvent<HTMLElement>) => {
151
- if (onDownload) {
152
- event.preventDefault();
153
- onDownload(id);
154
- }
155
- };
156
-
157
- const handleDelete = (event: MouseEvent<HTMLElement>) => {
158
- if (onDelete) onDelete(id, event);
159
- };
160
-
161
- const handleRestore = () => {
162
- if (onRestore) onRestore(id);
163
- };
164
-
165
- const renderIcon = () => {
166
- if (showRestore) {
167
- return <ClockMIcon className={styles.restoreIcon} />;
168
- }
169
-
170
- switch (uploadStatus) {
171
- case 'ERROR':
172
- return <AlertCircleMIcon className={styles.errorIcon} />;
173
- case 'SUCCESS':
174
- return <CheckmarkCircleMIcon className={styles.successIcon} />;
175
- case 'LOADING':
176
- case 'UPLOADING':
177
- return (
178
- <div className={styles.spinnerWrapper}>
179
- <Spinner visible={true} className={styles.spinner} />
180
- </div>
181
- );
182
- default: {
183
- return <Icon className={styles.icon} />;
184
- }
185
- }
186
- };
187
-
188
- const renderInfoSection = () => {
189
- const shouldShownError = uploadStatus === 'ERROR' || !!error;
190
- const errorContent =
191
- uploadStatus === 'ERROR' && !error ? 'Не удалось загрузить файл' : error;
192
-
193
- return (
194
- <div className={styles.infoSection}>
195
- <div className={cn(styles.name, { [styles.rowLimit]: !multiline })}>{name}</div>
196
-
197
- {shouldShownError && (
198
- <div className={styles.errorWrapper} role='alert'>
199
- {errorContent}
200
- </div>
201
- )}
202
- </div>
203
- );
204
- };
205
-
206
- const showMeta = !showRestore && (!uploadStatus || uploadStatus === 'SUCCESS');
207
- const showDownload = Boolean(downloadLink) && !showRestore;
208
-
209
- return (
210
- <div
211
- className={cn(
212
- className,
213
- styles.component,
214
- uploadStatus && styles[uploadStatus.toLocaleLowerCase()],
215
- )}
216
- data-test-id={dataTestId}
32
+ customIcon,
33
+ iconStyle = 'gray',
34
+ progressBar = 0,
35
+ customContent,
36
+ truncate,
37
+ imageUrl,
38
+ }) => (
39
+ <div
40
+ className={cn(
41
+ className,
42
+ styles.component,
43
+ uploadStatus && styles[uploadStatus.toLocaleLowerCase()],
44
+ )}
45
+ data-test-id={dataTestId}
46
+ >
47
+ <FileUploadItemContext.Provider
48
+ // eslint-disable-next-line react/jsx-no-constructed-context-values
49
+ value={{
50
+ showRestore,
51
+ uploadStatus,
52
+ error,
53
+ title,
54
+ subtitle,
55
+ uploadDate,
56
+ size,
57
+ id,
58
+ onDownload,
59
+ onDelete,
60
+ onRestore,
61
+ downloadLink,
62
+ download,
63
+ disableButtons,
64
+ target,
65
+ showDelete,
66
+ customIcon,
67
+ iconStyle,
68
+ progressBar,
69
+ customContent,
70
+ truncate,
71
+ imageUrl,
72
+ }}
217
73
  >
218
- <div className={styles.info}>
219
- {renderIcon()}
220
-
221
- {renderInfoSection()}
222
-
223
- {children}
224
-
225
- {uploadStatus === 'UPLOADING' && (
226
- <span className={styles.uploadPercent}>{`${Math.round(uploadPercent)}%`}</span>
227
- )}
228
-
229
- {showMeta && (
230
- <div className={styles.meta}>
231
- {uploadDate && <span key={uploadDate}>{uploadDate}</span>}
232
-
233
- {size && (
234
- <span key={size} className={styles.size}>
235
- {humanFileSize(size)}
236
- </span>
237
- )}
238
- </div>
239
- )}
240
- </div>
241
-
242
- {showRestore && (
243
- <Link pseudo={true} className={styles.restore} onClick={handleRestore}>
244
- Восстановить
245
- </Link>
246
- )}
247
-
248
- {showDownload && (
249
- <IconButton
250
- size='xxs'
251
- icon={PointerDownSIcon}
252
- className={styles.download}
253
- aria-label='скачать'
254
- href={downloadLink}
255
- onClick={handleDownload}
256
- disabled={disableButtons}
257
- download={download}
258
- target={target}
259
- />
260
- )}
261
-
262
- {showDelete && !showRestore && (
263
- <IconButton
264
- size='xxs'
265
- icon={CrossSIcon}
266
- onClick={handleDelete}
267
- disabled={disableButtons}
268
- className={styles.delete}
269
- aria-label='удалить'
270
- />
271
- )}
272
- </div>
273
- );
274
- };
74
+ {children}
75
+ </FileUploadItemContext.Provider>
76
+ </div>
77
+ );
78
+
79
+ export const FileUploadItem = Object.assign(FileUploadItemComponent, {
80
+ StatusControl,
81
+ Content,
82
+ Actions,
83
+ });
@@ -0,0 +1,23 @@
1
+ @import '@alfalab/core-components-vars/src/index.css';
2
+
3
+ .container {
4
+ display: flex;
5
+ max-width: 144px;
6
+
7
+ & .icon {
8
+ width: 48px;
9
+ height: 48px;
10
+ }
11
+ }
12
+
13
+ .deleteIconColor {
14
+ fill: var(--color-light-text-tertiary);
15
+ }
16
+
17
+ .downloadIconColor {
18
+ fill: var(--color-light-text-tertiary);
19
+ }
20
+
21
+ .restoreIconColor {
22
+ fill: var(--color-light-text-tertiary);
23
+ }
@@ -0,0 +1,23 @@
1
+ import React, { useContext } from 'react';
2
+
3
+ import { FileUploadItemContext } from '../../context/file-upload-item-context';
4
+
5
+ import { DeleteButton } from './components/delete-button';
6
+ import { DownloadButton } from './components/download-button';
7
+ import { RestoreButton } from './components/restore-button';
8
+
9
+ import styles from './actions-control.module.css';
10
+
11
+ export const Actions = () => {
12
+ const { showRestore, downloadLink, showDelete } = useContext(FileUploadItemContext);
13
+
14
+ return (
15
+ <div className={styles.container}>
16
+ {showRestore && <RestoreButton />}
17
+
18
+ {Boolean(downloadLink) && !showRestore && <DownloadButton />}
19
+
20
+ {showDelete && !showRestore && <DeleteButton />}
21
+ </div>
22
+ );
23
+ };
@@ -0,0 +1,29 @@
1
+ import React, { MouseEvent, useContext } from 'react';
2
+
3
+ import { IconButton } from '@alfalab/core-components-icon-button';
4
+ import CrossMIcon from '@alfalab/icons-glyph/CrossMIcon';
5
+
6
+ import { FileUploadItemContext } from '../../../../context/file-upload-item-context';
7
+
8
+ import styles from '../../actions-control.module.css';
9
+
10
+ export const DeleteButton = () => {
11
+ const { id = '0', disableButtons, onDelete } = useContext(FileUploadItemContext);
12
+
13
+ const handleDelete = (e: MouseEvent<HTMLElement>) => {
14
+ if (onDelete) {
15
+ onDelete(id, e);
16
+ }
17
+ };
18
+
19
+ return (
20
+ <IconButton
21
+ className={styles.icon}
22
+ size='xxs'
23
+ aria-label='удалить'
24
+ icon={<CrossMIcon className={styles.deleteIconColor} />}
25
+ disabled={disableButtons}
26
+ onClick={handleDelete}
27
+ />
28
+ );
29
+ };
@@ -0,0 +1 @@
1
+ export { DeleteButton } from './delete-button';
@@ -0,0 +1,40 @@
1
+ import React, { MouseEvent, useContext } from 'react';
2
+
3
+ import { IconButton } from '@alfalab/core-components-icon-button';
4
+ import ArrowDownLineDownCompactMIcon from '@alfalab/icons-glyph/ArrowDownLineDownCompactMIcon';
5
+
6
+ import { FileUploadItemContext } from '../../../../context/file-upload-item-context';
7
+
8
+ import styles from '../../actions-control.module.css';
9
+
10
+ export const DownloadButton = () => {
11
+ const {
12
+ id = '0',
13
+ downloadLink,
14
+ download,
15
+ disableButtons,
16
+ target,
17
+ onDownload,
18
+ } = useContext(FileUploadItemContext);
19
+
20
+ const handleDownload = (e: MouseEvent<HTMLElement>) => {
21
+ if (onDownload) {
22
+ e.preventDefault();
23
+ onDownload(id);
24
+ }
25
+ };
26
+
27
+ return (
28
+ <IconButton
29
+ className={styles.icon}
30
+ size='xxs'
31
+ aria-label='скачать'
32
+ icon={<ArrowDownLineDownCompactMIcon className={styles.downloadIconColor} />}
33
+ disabled={disableButtons}
34
+ href={downloadLink}
35
+ download={download}
36
+ target={target}
37
+ onClick={handleDownload}
38
+ />
39
+ );
40
+ };
@@ -0,0 +1 @@
1
+ export { DownloadButton } from './download-button';
@@ -0,0 +1 @@
1
+ export { RestoreButton } from './restore-button';
@@ -0,0 +1,29 @@
1
+ import React, { useContext } from 'react';
2
+
3
+ import { IconButton } from '@alfalab/core-components-icon-button';
4
+ import ArrowsCwCompactMIcon from '@alfalab/icons-glyph/ArrowsCwCompactMIcon';
5
+
6
+ import { FileUploadItemContext } from '../../../../context/file-upload-item-context';
7
+
8
+ import styles from '../../actions-control.module.css';
9
+
10
+ export const RestoreButton = () => {
11
+ const { id = '0', disableButtons, onRestore } = useContext(FileUploadItemContext);
12
+
13
+ const handleRestore = () => {
14
+ if (onRestore) {
15
+ onRestore(id);
16
+ }
17
+ };
18
+
19
+ return (
20
+ <IconButton
21
+ className={styles.icon}
22
+ size='xxs'
23
+ aria-label='восстановить'
24
+ icon={<ArrowsCwCompactMIcon className={styles.restoreIconColor} />}
25
+ disabled={disableButtons}
26
+ onClick={handleRestore}
27
+ />
28
+ );
29
+ };
@@ -0,0 +1 @@
1
+ export { Actions } from './actions';
@@ -0,0 +1,3 @@
1
+ .errorItem {
2
+ display: block;
3
+ }
@@ -0,0 +1,42 @@
1
+ import React, { useContext } from 'react';
2
+
3
+ import { Typography } from '@alfalab/core-components-typography';
4
+
5
+ import { FileUploadItemContext } from '../../../../context/file-upload-item-context';
6
+
7
+ import styles from './content-error.module.css';
8
+
9
+ export const ContentError = () => {
10
+ const { error } = useContext(FileUploadItemContext);
11
+
12
+ if (typeof error === 'string' && error.length > 0) {
13
+ return (
14
+ <Typography.Text className={styles.errorItem} view='primary-small' color='negative'>
15
+ {error}
16
+ </Typography.Text>
17
+ );
18
+ }
19
+
20
+ if (Array.isArray(error) && error.length > 0) {
21
+ return (
22
+ <div>
23
+ {error.map((item) => (
24
+ <Typography.Text
25
+ key={item}
26
+ className={styles.errorItem}
27
+ view='primary-small'
28
+ color='negative'
29
+ >
30
+ {item}
31
+ </Typography.Text>
32
+ ))}
33
+ </div>
34
+ );
35
+ }
36
+
37
+ return (
38
+ <Typography.Text className={styles.errorItem} view='primary-small' color='negative'>
39
+ Не удалось загрузить файл
40
+ </Typography.Text>
41
+ );
42
+ };
@@ -0,0 +1 @@
1
+ export { ContentError } from './content-error';
@@ -0,0 +1,15 @@
1
+ @import '@alfalab/core-components-vars/src/index.css';
2
+
3
+ .subtitle {
4
+ display: block;
5
+
6
+ &.truncate {
7
+ white-space: nowrap;
8
+ overflow: hidden;
9
+ text-overflow: ellipsis;
10
+ }
11
+ }
12
+
13
+ .size {
14
+ margin-right: var(--gap-8);
15
+ }
@@ -0,0 +1,92 @@
1
+ import React, { useContext } from 'react';
2
+ import cn from 'classnames';
3
+
4
+ import { Typography } from '@alfalab/core-components-typography';
5
+
6
+ import { MAX_PROGRESS_BAR_VALUE } from '../../../../const/progress-bar';
7
+ import { FileUploadItemContext } from '../../../../context/file-upload-item-context';
8
+ import {
9
+ humanFileSize,
10
+ isErrorStatus,
11
+ isSuccessStatus,
12
+ isUploadedStatus,
13
+ isUploadingStatus,
14
+ } from '../../../../utils';
15
+ import { isError } from '../../utils/isError';
16
+ import { ContentError } from '../content-error';
17
+
18
+ import styles from './content-subtitle.module.css';
19
+
20
+ export const ContentSubtitle = () => {
21
+ const { uploadStatus, subtitle, uploadDate, size, truncate, showRestore, error, progressBar } =
22
+ useContext(FileUploadItemContext);
23
+
24
+ const shouldShownError = isErrorStatus(uploadStatus) || isError(error);
25
+ const showMeta =
26
+ !showRestore && (isSuccessStatus(uploadStatus) || isUploadedStatus(uploadStatus));
27
+
28
+ // валидация progressBar (не должен превышать 100 и быть меньше 0)
29
+ const validateProgressBarValue = (progressValue: number | undefined) => {
30
+ if (progressValue === undefined) {
31
+ return 0;
32
+ }
33
+
34
+ return Math.min(Math.max(progressValue, 0), MAX_PROGRESS_BAR_VALUE);
35
+ };
36
+
37
+ const validProgressBar = validateProgressBarValue(progressBar);
38
+
39
+ // uploading status
40
+ if (isUploadingStatus(uploadStatus)) {
41
+ return (
42
+ <Typography.Text view='primary-small' color='secondary'>
43
+ Загрузка{'\u00A0'}
44
+ {Math.floor(validProgressBar)}%
45
+ </Typography.Text>
46
+ );
47
+ }
48
+
49
+ // error status
50
+ if (shouldShownError) {
51
+ return <ContentError />;
52
+ }
53
+
54
+ // success status
55
+ if (showMeta) {
56
+ return (
57
+ <div>
58
+ {size && (
59
+ <Typography.Text className={styles.size} view='primary-small' color='secondary'>
60
+ {humanFileSize(size)}
61
+ </Typography.Text>
62
+ )}
63
+ {uploadDate && (
64
+ <Typography.Text view='primary-small' color='secondary'>
65
+ {uploadDate}
66
+ </Typography.Text>
67
+ )}
68
+ </div>
69
+ );
70
+ }
71
+
72
+ // restore status
73
+ if (showRestore) {
74
+ return (
75
+ <Typography.Text view='primary-small' color='tertiary'>
76
+ Файл удален
77
+ </Typography.Text>
78
+ );
79
+ }
80
+
81
+ return (
82
+ <Typography.Text
83
+ className={cn(styles.subtitle, {
84
+ [styles.truncate]: truncate,
85
+ })}
86
+ view='primary-small'
87
+ color='secondary'
88
+ >
89
+ {subtitle}
90
+ </Typography.Text>
91
+ );
92
+ };