@skbkontur/react-ui 5.0.13 → 5.0.14

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/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [5.0.14](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@5.0.13...@skbkontur/react-ui@5.0.14) (2025-03-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **FileUploader:** add ability to remove hidden files ([#3625](https://github.com/skbkontur/retail-ui/issues/3625)) ([ffa404e](https://github.com/skbkontur/retail-ui/commit/ffa404e155d84db74291ffe5174d1ee2fba0abab))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [5.0.13](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@5.0.12...@skbkontur/react-ui@5.0.13) (2025-03-17)
7
18
 
8
19
 
@@ -46,6 +46,7 @@ export interface FileUploaderRef extends InstanceWithRootNode {
46
46
  blur: () => void;
47
47
  /** Сбрасывает выбранные файлы */
48
48
  reset: () => void;
49
+ removeFile: (fileId: string) => void;
49
50
  }
50
51
  export declare const FileUploaderDataTids: {
51
52
  readonly root: "FileUploader__root";
@@ -76,6 +76,7 @@ var stopPropagation = function stopPropagation(e) {return e.stopPropagation();};
76
76
 
77
77
 
78
78
 
79
+
79
80
 
80
81
 
81
82
  var FileUploaderDataTids = exports.FileUploaderDataTids = {
@@ -217,11 +218,12 @@ var _FileUploader = (0, _forwardRefAndName.forwardRefAndName)('FileUploader', fu
217
218
  (_inputRef$current2 = inputRef.current) == null || _inputRef$current2.blur();
218
219
  }, []);
219
220
 
220
- (0, _react.useImperativeHandle)(ref, function () {return { focus: focus, blur: blur, reset: reset, getRootNode: function getRootNode() {return rootNodeRef.current;} };}, [
221
+ (0, _react.useImperativeHandle)(ref, function () {return { focus: focus, blur: blur, reset: reset, removeFile: removeFile, getRootNode: function getRootNode() {return rootNodeRef.current;} };}, [
221
222
  ref,
222
223
  blur,
223
224
  focus,
224
- reset]
225
+ reset,
226
+ removeFile]
225
227
  );
226
228
 
227
229
  var _useState2 = (0, _react.useState)(false),focusedByTab = _useState2[0],setFocusedByTab = _useState2[1];
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_globalObject","_fileUtils","_Emotion","_useMemoObject","_FileUploaderControlContext","_useControlLocale","_useUpload","_useDrop3","_ThemeContext","_withFileUploaderControlProvider","_keyListener","_FileUploaderFile","_FileUploaderFileList","_CommonWrapper","_FileUploaderFileValidationResult","_useFileUploaderSize","_forwardRefAndName","_FocusControlWrapper","_UploadIcon","_FileUploader2","_excluded","stopPropagation","e","FileUploaderDataTids","exports","root","content","link","input","defaultRenderFile","file","fileNode","_FileUploader","forwardRefAndName","props","ref","_cx","theme","useContext","ThemeContext","initialFiles","disabled","error","warning","_props$multiple","multiple","_props$width","width","fileUploaderWidth","_props$hideFiles","hideFiles","onBlur","onFocus","onChange","request","validateBeforeUpload","onRequestSuccess","onRequestError","_props$size","size","_props$renderFile","renderFile","inputProps","_objectWithoutPropertiesLoose2","default","_useContext","FileUploaderControlContext","files","setFiles","removeFile","reset","setFileValidationResult","isMinLengthReached","locale","useControlLocale","inputRef","useRef","fileDivRef","isAsync","isSingleMode","_useState","useState","isLinkVisible","setIsLinkVisible","upload","useUpload","tryValidateAndUpload","useCallback","forEach","_ref","_asyncToGenerator2","_regenerator","mark","_callee","validationMessage","wrap","_callee$","_context","prev","next","t0","sent","id","FileUploaderFileValidationResult","stop","_x","apply","arguments","sizeClassName","useFileUploaderSize","small","jsStyles","sizeSmall","medium","sizeMedium","large","sizeLarge","sizeIconClass","iconSmall","iconMedium","iconLarge","contentInnerClass","contentInnerSmall","contentInnerMedium","contentInnerLarge","handleChange","newFiles","length","filesArray","Array","from","attachedFiles","map","getAttachedFile","handleDrop","event","dataTransfer","_dataTransfer$files","clearData","_useDrop","useDrop","onDrop","isDraggable","labelRef","_useDrop2","isWindowDraggable","windowRef","isBrowser","globalObject","current","document","focus","_inputRef$current","keyListener","isTabPressed","blur","_inputRef$current2","useImperativeHandle","getRootNode","rootNodeRef","_useState2","focusedByTab","setFocusedByTab","handleInputChange","target","handleFocus","requestAnimationFrame","handleBlur","handleRemoveFile","fileId","DataTransfer","filter","f","items","add","originalFile","_useState3","hovered","setHovered","uploadButtonClassNames","cx","uploadButton","uploadButtonFocus","dragOver","canDrop","uploadButtonWrapperClassNames","windowDragOver","uploadButtonIconClassNames","icon","iconDisabled","hasOneFile","hasOneFileForSingle","contentClassNames","contentWithFiles","linkClassNames","linkHovered","linkDisabled","useEffect","iconSizes","parseInt","btnIconSizeSmall","btnIconSizeMedium","btnIconSizeLarge","createElement","UploadIcon","CommonWrapper","className","style","useMemoObject","FileUploaderFileList","onRemove","onMouseEnter","onMouseLeave","choosedFile","chooseFile","String","fromCharCode","globalClasses","afterLinkText","afterLinkText_HasFiles","singleFile","FileUploaderFile","Fragment","orDragHere","FocusControlWrapper","onBlurWhenDisabled","_extends2","tabIndex","type","visuallyHidden","onClick","FileUploader","withFileUploaderControlProvider","React","memo","displayName"],"sources":["FileUploader.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { FileUploaderAttachedFile, getAttachedFile } from '../../internal/FileUploaderControl/fileUtils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { InstanceWithRootNode } from '../../lib/rootNode';\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { FileUploaderControlContext } from '../../internal/FileUploaderControl/FileUploaderControlContext';\nimport { useControlLocale } from '../../internal/FileUploaderControl/hooks/useControlLocale';\nimport { useUpload } from '../../internal/FileUploaderControl/hooks/useUpload';\nimport { useDrop } from '../../hooks/useDrop';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { FileUploaderControlProviderProps } from '../../internal/FileUploaderControl/FileUploaderControlProvider';\nimport { withFileUploaderControlProvider } from '../../internal/FileUploaderControl/withFileUploaderControlProvider';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { FileUploaderFile } from '../../internal/FileUploaderControl/FileUploaderFile/FileUploaderFile';\nimport { FileUploaderFileList } from '../../internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { FileUploaderFileValidationResult } from '../../internal/FileUploaderControl/FileUploaderFileValidationResult';\nimport { useFileUploaderSize } from '../../internal/FileUploaderControl/hooks/useFileUploaderSize';\nimport { SizeProp } from '../../lib/types/props';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { UploadIcon } from './UploadIcon';\nimport { globalClasses, jsStyles } from './FileUploader.styles';\n\nconst stopPropagation: React.ReactEventHandler = (e) => e.stopPropagation();\n\ntype FileUploaderOverriddenProps = 'size';\n\ninterface _FileUploaderProps\n extends CommonProps,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {\n /** Начальное состояние загруженных файлов */\n initialFiles?: File[];\n /** Состояние ошибки всего контрола */\n error?: boolean;\n /** Состояние предупреждения всего контрола */\n warning?: boolean;\n /** Свойство ширины. */\n width?: React.CSSProperties['width'];\n /**\n * Задаёт размер контрола.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: SizeProp;\n /** Свойство, скрывающее отображение файлов. */\n hideFiles?: boolean;\n\n /** Функция, через которую отправляем файлы. Используется для отслеживания статуса загрузки файла. */\n request?: (file: FileUploaderAttachedFile) => Promise<void>;\n /** Срабатывает при удачной попытке отправки через request */\n onRequestSuccess?: (fileId: string) => void;\n /** Срабатывает при неудачной попытке отправки через request */\n onRequestError?: (fileId: string) => void;\n\n /**\n * Функция валидации каждого файла.\n * Срабатывает после выбора файлов и перед попыткой отправить в request.\n * Чтобы вывести валидацию ошибки, промис должен вернуть строку.\n * */\n validateBeforeUpload?: (file: FileUploaderAttachedFile) => Promise<Nullable<string>>;\n\n /**\n * Функция, позволяющая кастомизировать файлы.\n * Через нее можно вешать кастомные валидации на каждый файл.\n * */\n renderFile?: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n}\n\nexport interface FileUploaderRef extends InstanceWithRootNode {\n focus: () => void;\n blur: () => void;\n /** Сбрасывает выбранные файлы */\n reset: () => void;\n}\n\nexport const FileUploaderDataTids = {\n root: 'FileUploader__root',\n content: 'FileUploader__content',\n link: 'FileUploader__link',\n input: 'FileUploader__input',\n} as const;\n\nconst defaultRenderFile = (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => fileNode;\n\nconst _FileUploader = forwardRefAndName<FileUploaderRef, _FileUploaderProps>('FileUploader', (props, ref) => {\n const theme = useContext(ThemeContext);\n\n const {\n initialFiles,\n disabled,\n error,\n warning,\n multiple = false,\n width = theme.fileUploaderWidth,\n hideFiles = false,\n onBlur,\n onFocus,\n onChange,\n request,\n validateBeforeUpload,\n onRequestSuccess,\n onRequestError,\n size = 'small',\n renderFile = defaultRenderFile,\n ...inputProps\n } = props;\n\n const { files, setFiles, removeFile, reset, setFileValidationResult, isMinLengthReached } =\n useContext(FileUploaderControlContext);\n\n const locale = useControlLocale();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const fileDivRef = useRef<HTMLDivElement>(null);\n\n const isAsync = !!request;\n const isSingleMode = !multiple;\n\n const [isLinkVisible, setIsLinkVisible] = useState(true);\n const upload = useUpload(request, onRequestSuccess, onRequestError);\n\n const tryValidateAndUpload = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n files.forEach(async (file) => {\n const validationMessage = validateBeforeUpload && (await validateBeforeUpload(file));\n\n if (!validationMessage) {\n isAsync && upload(file);\n } else {\n setFileValidationResult(file.id, FileUploaderFileValidationResult.error(validationMessage));\n }\n });\n },\n [validateBeforeUpload, isAsync, upload, setFileValidationResult],\n );\n\n const sizeClassName = useFileUploaderSize(size, {\n small: jsStyles.sizeSmall(theme),\n medium: jsStyles.sizeMedium(theme),\n large: jsStyles.sizeLarge(theme),\n });\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(theme),\n medium: jsStyles.iconMedium(theme),\n large: jsStyles.iconLarge(theme),\n });\n\n const contentInnerClass = useFileUploaderSize(size, {\n small: jsStyles.contentInnerSmall(theme),\n medium: jsStyles.contentInnerMedium(theme),\n large: jsStyles.contentInnerLarge(theme),\n });\n\n /** common part **/\n const handleChange = useCallback(\n (newFiles: FileList | null) => {\n if (!newFiles || !newFiles.length) {\n return;\n }\n\n let filesArray = Array.from(newFiles);\n\n if (isSingleMode) {\n filesArray = [filesArray[0]];\n }\n\n const attachedFiles = filesArray.map(getAttachedFile);\n\n if (isSingleMode && attachedFiles.length && files.length) {\n removeFile(files[0].id);\n }\n\n if (attachedFiles.length) {\n setFiles(attachedFiles);\n tryValidateAndUpload(attachedFiles);\n }\n },\n [tryValidateAndUpload, setFiles, isSingleMode, files, removeFile],\n );\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n if (disabled) {\n return;\n }\n\n const { dataTransfer } = event;\n if (dataTransfer) {\n if (dataTransfer.files?.length > 0) {\n handleChange(dataTransfer.files);\n }\n dataTransfer.clearData();\n }\n },\n [handleChange, disabled],\n );\n\n const { isDraggable, ref: labelRef } = useDrop<HTMLLabelElement>({ onDrop: handleDrop });\n const { isDraggable: isWindowDraggable, ref: windowRef } = useDrop<Document>();\n\n if (isBrowser(globalObject)) {\n windowRef.current = globalObject.document;\n }\n\n const focus = useCallback(() => {\n keyListener.isTabPressed = true;\n inputRef.current?.focus();\n }, []);\n\n const blur = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n useImperativeHandle(ref, () => ({ focus, blur, reset, getRootNode: () => rootNodeRef.current }), [\n ref,\n blur,\n focus,\n reset,\n ]);\n\n const [focusedByTab, setFocusedByTab] = useState(false);\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n handleChange(event.target.files);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n onFocus?.(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedByTab(false);\n if (!disabled) {\n onBlur?.(e);\n }\n };\n\n const handleRemoveFile = useCallback((fileId: string) => {\n const dataTransfer = new DataTransfer();\n files\n .filter((f) => f.id !== fileId)\n .forEach((file) => {\n dataTransfer.items.add(file.originalFile);\n });\n inputRef.current && (inputRef.current.files = dataTransfer.files);\n }, []);\n\n const [hovered, setHovered] = useState(false);\n\n const uploadButtonClassNames = cx(\n jsStyles.uploadButton(theme),\n sizeClassName,\n focusedByTab && jsStyles.uploadButtonFocus(theme),\n disabled && jsStyles.disabled(theme),\n !disabled && hovered && jsStyles.hovered(theme),\n !!warning && jsStyles.warning(theme),\n !!error && jsStyles.error(theme),\n isDraggable && !disabled && jsStyles.dragOver(theme),\n );\n\n const canDrop = isWindowDraggable && !disabled;\n const uploadButtonWrapperClassNames = cx(canDrop && jsStyles.windowDragOver(theme));\n\n const uploadButtonIconClassNames = cx(jsStyles.icon(theme), sizeIconClass, disabled && jsStyles.iconDisabled(theme));\n\n const hasOneFile = files.length === 1;\n const hasOneFileForSingle = isSingleMode && hasOneFile && !hideFiles;\n\n const contentClassNames = cx(jsStyles.content(), hasOneFileForSingle && jsStyles.contentWithFiles());\n\n const linkClassNames = cx(\n jsStyles.link(theme),\n !disabled && hovered && jsStyles.linkHovered(theme),\n disabled && jsStyles.linkDisabled(theme),\n );\n\n useEffect(() => {\n setIsLinkVisible(hasOneFileForSingle ? !isMinLengthReached : true);\n }, [isMinLengthReached, hasOneFileForSingle]);\n\n useEffect(() => {\n if (!files || !files.length || !inputRef.current) {\n return;\n }\n\n const dataTransfer = new DataTransfer();\n files.forEach((file) => dataTransfer.items.add(file.originalFile));\n inputRef.current.files = dataTransfer.files;\n }, []);\n\n const rootNodeRef = useRef(null);\n\n const iconSizes: Record<SizeProp, number> = {\n small: parseInt(theme.btnIconSizeSmall),\n medium: parseInt(theme.btnIconSizeMedium),\n large: parseInt(theme.btnIconSizeLarge),\n };\n const icon = <UploadIcon size={iconSizes[size]} />;\n\n return (\n <CommonWrapper {...props}>\n <div\n data-tid={FileUploaderDataTids.root}\n className={jsStyles.root(theme)}\n style={useMemoObject({ width })}\n ref={rootNodeRef}\n >\n {!hideFiles && !isSingleMode && !!files.length && (\n <FileUploaderFileList renderFile={renderFile} size={size} onRemove={handleRemoveFile} />\n )}\n <div className={uploadButtonWrapperClassNames}>\n <label\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n ref={labelRef}\n className={uploadButtonClassNames}\n >\n <div\n data-tid={FileUploaderDataTids.content}\n className={cx(contentClassNames, { [contentInnerClass]: !files.length || !isSingleMode })}\n >\n {isLinkVisible && (\n <span data-tid={FileUploaderDataTids.link} className={linkClassNames}>\n {hasOneFileForSingle ? locale.choosedFile : locale.chooseFile}\n </span>\n )}\n {isLinkVisible && String.fromCharCode(0xa0) /* &nbsp; */}\n <div\n className={cx(\n globalClasses.afterLinkText,\n hasOneFileForSingle ? jsStyles.afterLinkText_HasFiles(theme) : jsStyles.afterLinkText(theme),\n )}\n >\n {hasOneFileForSingle ? (\n <div ref={fileDivRef} className={jsStyles.singleFile()}>\n {renderFile(files[0], <FileUploaderFile file={files[0]} size={size} onRemove={handleRemoveFile} />)}\n </div>\n ) : (\n <>\n {locale.orDragHere}&nbsp;\n <div className={uploadButtonIconClassNames}>{icon}</div>\n </>\n )}\n </div>\n </div>\n <FocusControlWrapper onBlurWhenDisabled={() => setFocusedByTab(false)}>\n <input\n {...inputProps}\n data-tid={FileUploaderDataTids.input}\n ref={inputRef}\n tabIndex={disabled ? -1 : 0}\n type=\"file\"\n disabled={disabled}\n multiple={multiple}\n className={jsStyles.visuallyHidden()}\n onClick={stopPropagation}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n </FocusControlWrapper>\n </label>\n </div>\n </div>\n </CommonWrapper>\n );\n});\n\nexport interface FileUploaderProps extends _FileUploaderProps, FileUploaderControlProviderProps {}\n\nexport const FileUploader = withFileUploaderControlProvider<FileUploaderProps, FileUploaderRef>(\n React.memo(_FileUploader),\n);\nFileUploader.displayName = 'FileUploader';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_globalObject","_fileUtils","_Emotion","_useMemoObject","_FileUploaderControlContext","_useControlLocale","_useUpload","_useDrop3","_ThemeContext","_withFileUploaderControlProvider","_keyListener","_FileUploaderFile","_FileUploaderFileList","_CommonWrapper","_FileUploaderFileValidationResult","_useFileUploaderSize","_forwardRefAndName","_FocusControlWrapper","_UploadIcon","_FileUploader2","_excluded","stopPropagation","e","FileUploaderDataTids","exports","root","content","link","input","defaultRenderFile","file","fileNode","_FileUploader","forwardRefAndName","props","ref","_cx","theme","useContext","ThemeContext","initialFiles","disabled","error","warning","_props$multiple","multiple","_props$width","width","fileUploaderWidth","_props$hideFiles","hideFiles","onBlur","onFocus","onChange","request","validateBeforeUpload","onRequestSuccess","onRequestError","_props$size","size","_props$renderFile","renderFile","inputProps","_objectWithoutPropertiesLoose2","default","_useContext","FileUploaderControlContext","files","setFiles","removeFile","reset","setFileValidationResult","isMinLengthReached","locale","useControlLocale","inputRef","useRef","fileDivRef","isAsync","isSingleMode","_useState","useState","isLinkVisible","setIsLinkVisible","upload","useUpload","tryValidateAndUpload","useCallback","forEach","_ref","_asyncToGenerator2","_regenerator","mark","_callee","validationMessage","wrap","_callee$","_context","prev","next","t0","sent","id","FileUploaderFileValidationResult","stop","_x","apply","arguments","sizeClassName","useFileUploaderSize","small","jsStyles","sizeSmall","medium","sizeMedium","large","sizeLarge","sizeIconClass","iconSmall","iconMedium","iconLarge","contentInnerClass","contentInnerSmall","contentInnerMedium","contentInnerLarge","handleChange","newFiles","length","filesArray","Array","from","attachedFiles","map","getAttachedFile","handleDrop","event","dataTransfer","_dataTransfer$files","clearData","_useDrop","useDrop","onDrop","isDraggable","labelRef","_useDrop2","isWindowDraggable","windowRef","isBrowser","globalObject","current","document","focus","_inputRef$current","keyListener","isTabPressed","blur","_inputRef$current2","useImperativeHandle","getRootNode","rootNodeRef","_useState2","focusedByTab","setFocusedByTab","handleInputChange","target","handleFocus","requestAnimationFrame","handleBlur","handleRemoveFile","fileId","DataTransfer","filter","f","items","add","originalFile","_useState3","hovered","setHovered","uploadButtonClassNames","cx","uploadButton","uploadButtonFocus","dragOver","canDrop","uploadButtonWrapperClassNames","windowDragOver","uploadButtonIconClassNames","icon","iconDisabled","hasOneFile","hasOneFileForSingle","contentClassNames","contentWithFiles","linkClassNames","linkHovered","linkDisabled","useEffect","iconSizes","parseInt","btnIconSizeSmall","btnIconSizeMedium","btnIconSizeLarge","createElement","UploadIcon","CommonWrapper","className","style","useMemoObject","FileUploaderFileList","onRemove","onMouseEnter","onMouseLeave","choosedFile","chooseFile","String","fromCharCode","globalClasses","afterLinkText","afterLinkText_HasFiles","singleFile","FileUploaderFile","Fragment","orDragHere","FocusControlWrapper","onBlurWhenDisabled","_extends2","tabIndex","type","visuallyHidden","onClick","FileUploader","withFileUploaderControlProvider","React","memo","displayName"],"sources":["FileUploader.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { FileUploaderAttachedFile, getAttachedFile } from '../../internal/FileUploaderControl/fileUtils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { InstanceWithRootNode } from '../../lib/rootNode';\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { FileUploaderControlContext } from '../../internal/FileUploaderControl/FileUploaderControlContext';\nimport { useControlLocale } from '../../internal/FileUploaderControl/hooks/useControlLocale';\nimport { useUpload } from '../../internal/FileUploaderControl/hooks/useUpload';\nimport { useDrop } from '../../hooks/useDrop';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { FileUploaderControlProviderProps } from '../../internal/FileUploaderControl/FileUploaderControlProvider';\nimport { withFileUploaderControlProvider } from '../../internal/FileUploaderControl/withFileUploaderControlProvider';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { FileUploaderFile } from '../../internal/FileUploaderControl/FileUploaderFile/FileUploaderFile';\nimport { FileUploaderFileList } from '../../internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { FileUploaderFileValidationResult } from '../../internal/FileUploaderControl/FileUploaderFileValidationResult';\nimport { useFileUploaderSize } from '../../internal/FileUploaderControl/hooks/useFileUploaderSize';\nimport { SizeProp } from '../../lib/types/props';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { UploadIcon } from './UploadIcon';\nimport { globalClasses, jsStyles } from './FileUploader.styles';\n\nconst stopPropagation: React.ReactEventHandler = (e) => e.stopPropagation();\n\ntype FileUploaderOverriddenProps = 'size';\n\ninterface _FileUploaderProps\n extends CommonProps,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {\n /** Начальное состояние загруженных файлов */\n initialFiles?: File[];\n /** Состояние ошибки всего контрола */\n error?: boolean;\n /** Состояние предупреждения всего контрола */\n warning?: boolean;\n /** Свойство ширины. */\n width?: React.CSSProperties['width'];\n /**\n * Задаёт размер контрола.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: SizeProp;\n /** Свойство, скрывающее отображение файлов. */\n hideFiles?: boolean;\n\n /** Функция, через которую отправляем файлы. Используется для отслеживания статуса загрузки файла. */\n request?: (file: FileUploaderAttachedFile) => Promise<void>;\n /** Срабатывает при удачной попытке отправки через request */\n onRequestSuccess?: (fileId: string) => void;\n /** Срабатывает при неудачной попытке отправки через request */\n onRequestError?: (fileId: string) => void;\n\n /**\n * Функция валидации каждого файла.\n * Срабатывает после выбора файлов и перед попыткой отправить в request.\n * Чтобы вывести валидацию ошибки, промис должен вернуть строку.\n * */\n validateBeforeUpload?: (file: FileUploaderAttachedFile) => Promise<Nullable<string>>;\n\n /**\n * Функция, позволяющая кастомизировать файлы.\n * Через нее можно вешать кастомные валидации на каждый файл.\n * */\n renderFile?: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n}\n\nexport interface FileUploaderRef extends InstanceWithRootNode {\n focus: () => void;\n blur: () => void;\n /** Сбрасывает выбранные файлы */\n reset: () => void;\n removeFile: (fileId: string) => void;\n}\n\nexport const FileUploaderDataTids = {\n root: 'FileUploader__root',\n content: 'FileUploader__content',\n link: 'FileUploader__link',\n input: 'FileUploader__input',\n} as const;\n\nconst defaultRenderFile = (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => fileNode;\n\nconst _FileUploader = forwardRefAndName<FileUploaderRef, _FileUploaderProps>('FileUploader', (props, ref) => {\n const theme = useContext(ThemeContext);\n\n const {\n initialFiles,\n disabled,\n error,\n warning,\n multiple = false,\n width = theme.fileUploaderWidth,\n hideFiles = false,\n onBlur,\n onFocus,\n onChange,\n request,\n validateBeforeUpload,\n onRequestSuccess,\n onRequestError,\n size = 'small',\n renderFile = defaultRenderFile,\n ...inputProps\n } = props;\n\n const { files, setFiles, removeFile, reset, setFileValidationResult, isMinLengthReached } =\n useContext(FileUploaderControlContext);\n\n const locale = useControlLocale();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const fileDivRef = useRef<HTMLDivElement>(null);\n\n const isAsync = !!request;\n const isSingleMode = !multiple;\n\n const [isLinkVisible, setIsLinkVisible] = useState(true);\n const upload = useUpload(request, onRequestSuccess, onRequestError);\n\n const tryValidateAndUpload = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n files.forEach(async (file) => {\n const validationMessage = validateBeforeUpload && (await validateBeforeUpload(file));\n\n if (!validationMessage) {\n isAsync && upload(file);\n } else {\n setFileValidationResult(file.id, FileUploaderFileValidationResult.error(validationMessage));\n }\n });\n },\n [validateBeforeUpload, isAsync, upload, setFileValidationResult],\n );\n\n const sizeClassName = useFileUploaderSize(size, {\n small: jsStyles.sizeSmall(theme),\n medium: jsStyles.sizeMedium(theme),\n large: jsStyles.sizeLarge(theme),\n });\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(theme),\n medium: jsStyles.iconMedium(theme),\n large: jsStyles.iconLarge(theme),\n });\n\n const contentInnerClass = useFileUploaderSize(size, {\n small: jsStyles.contentInnerSmall(theme),\n medium: jsStyles.contentInnerMedium(theme),\n large: jsStyles.contentInnerLarge(theme),\n });\n\n /** common part **/\n const handleChange = useCallback(\n (newFiles: FileList | null) => {\n if (!newFiles || !newFiles.length) {\n return;\n }\n\n let filesArray = Array.from(newFiles);\n\n if (isSingleMode) {\n filesArray = [filesArray[0]];\n }\n\n const attachedFiles = filesArray.map(getAttachedFile);\n\n if (isSingleMode && attachedFiles.length && files.length) {\n removeFile(files[0].id);\n }\n\n if (attachedFiles.length) {\n setFiles(attachedFiles);\n tryValidateAndUpload(attachedFiles);\n }\n },\n [tryValidateAndUpload, setFiles, isSingleMode, files, removeFile],\n );\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n if (disabled) {\n return;\n }\n\n const { dataTransfer } = event;\n if (dataTransfer) {\n if (dataTransfer.files?.length > 0) {\n handleChange(dataTransfer.files);\n }\n dataTransfer.clearData();\n }\n },\n [handleChange, disabled],\n );\n\n const { isDraggable, ref: labelRef } = useDrop<HTMLLabelElement>({ onDrop: handleDrop });\n const { isDraggable: isWindowDraggable, ref: windowRef } = useDrop<Document>();\n\n if (isBrowser(globalObject)) {\n windowRef.current = globalObject.document;\n }\n\n const focus = useCallback(() => {\n keyListener.isTabPressed = true;\n inputRef.current?.focus();\n }, []);\n\n const blur = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n useImperativeHandle(ref, () => ({ focus, blur, reset, removeFile, getRootNode: () => rootNodeRef.current }), [\n ref,\n blur,\n focus,\n reset,\n removeFile,\n ]);\n\n const [focusedByTab, setFocusedByTab] = useState(false);\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n handleChange(event.target.files);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n onFocus?.(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedByTab(false);\n if (!disabled) {\n onBlur?.(e);\n }\n };\n\n const handleRemoveFile = useCallback((fileId: string) => {\n const dataTransfer = new DataTransfer();\n files\n .filter((f) => f.id !== fileId)\n .forEach((file) => {\n dataTransfer.items.add(file.originalFile);\n });\n inputRef.current && (inputRef.current.files = dataTransfer.files);\n }, []);\n\n const [hovered, setHovered] = useState(false);\n\n const uploadButtonClassNames = cx(\n jsStyles.uploadButton(theme),\n sizeClassName,\n focusedByTab && jsStyles.uploadButtonFocus(theme),\n disabled && jsStyles.disabled(theme),\n !disabled && hovered && jsStyles.hovered(theme),\n !!warning && jsStyles.warning(theme),\n !!error && jsStyles.error(theme),\n isDraggable && !disabled && jsStyles.dragOver(theme),\n );\n\n const canDrop = isWindowDraggable && !disabled;\n const uploadButtonWrapperClassNames = cx(canDrop && jsStyles.windowDragOver(theme));\n\n const uploadButtonIconClassNames = cx(jsStyles.icon(theme), sizeIconClass, disabled && jsStyles.iconDisabled(theme));\n\n const hasOneFile = files.length === 1;\n const hasOneFileForSingle = isSingleMode && hasOneFile && !hideFiles;\n\n const contentClassNames = cx(jsStyles.content(), hasOneFileForSingle && jsStyles.contentWithFiles());\n\n const linkClassNames = cx(\n jsStyles.link(theme),\n !disabled && hovered && jsStyles.linkHovered(theme),\n disabled && jsStyles.linkDisabled(theme),\n );\n\n useEffect(() => {\n setIsLinkVisible(hasOneFileForSingle ? !isMinLengthReached : true);\n }, [isMinLengthReached, hasOneFileForSingle]);\n\n useEffect(() => {\n if (!files || !files.length || !inputRef.current) {\n return;\n }\n\n const dataTransfer = new DataTransfer();\n files.forEach((file) => dataTransfer.items.add(file.originalFile));\n inputRef.current.files = dataTransfer.files;\n }, []);\n\n const rootNodeRef = useRef(null);\n\n const iconSizes: Record<SizeProp, number> = {\n small: parseInt(theme.btnIconSizeSmall),\n medium: parseInt(theme.btnIconSizeMedium),\n large: parseInt(theme.btnIconSizeLarge),\n };\n const icon = <UploadIcon size={iconSizes[size]} />;\n\n return (\n <CommonWrapper {...props}>\n <div\n data-tid={FileUploaderDataTids.root}\n className={jsStyles.root(theme)}\n style={useMemoObject({ width })}\n ref={rootNodeRef}\n >\n {!hideFiles && !isSingleMode && !!files.length && (\n <FileUploaderFileList renderFile={renderFile} size={size} onRemove={handleRemoveFile} />\n )}\n <div className={uploadButtonWrapperClassNames}>\n <label\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n ref={labelRef}\n className={uploadButtonClassNames}\n >\n <div\n data-tid={FileUploaderDataTids.content}\n className={cx(contentClassNames, { [contentInnerClass]: !files.length || !isSingleMode })}\n >\n {isLinkVisible && (\n <span data-tid={FileUploaderDataTids.link} className={linkClassNames}>\n {hasOneFileForSingle ? locale.choosedFile : locale.chooseFile}\n </span>\n )}\n {isLinkVisible && String.fromCharCode(0xa0) /* &nbsp; */}\n <div\n className={cx(\n globalClasses.afterLinkText,\n hasOneFileForSingle ? jsStyles.afterLinkText_HasFiles(theme) : jsStyles.afterLinkText(theme),\n )}\n >\n {hasOneFileForSingle ? (\n <div ref={fileDivRef} className={jsStyles.singleFile()}>\n {renderFile(files[0], <FileUploaderFile file={files[0]} size={size} onRemove={handleRemoveFile} />)}\n </div>\n ) : (\n <>\n {locale.orDragHere}&nbsp;\n <div className={uploadButtonIconClassNames}>{icon}</div>\n </>\n )}\n </div>\n </div>\n <FocusControlWrapper onBlurWhenDisabled={() => setFocusedByTab(false)}>\n <input\n {...inputProps}\n data-tid={FileUploaderDataTids.input}\n ref={inputRef}\n tabIndex={disabled ? -1 : 0}\n type=\"file\"\n disabled={disabled}\n multiple={multiple}\n className={jsStyles.visuallyHidden()}\n onClick={stopPropagation}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n </FocusControlWrapper>\n </label>\n </div>\n </div>\n </CommonWrapper>\n );\n});\n\nexport interface FileUploaderProps extends _FileUploaderProps, FileUploaderControlProviderProps {}\n\nexport const FileUploader = withFileUploaderControlProvider<FileUploaderProps, FileUploaderRef>(\n React.memo(_FileUploader),\n);\nFileUploader.displayName = 'FileUploader';\n"],"mappings":"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","ignoreList":[]}
@@ -82,6 +82,29 @@ import { FileUploader } from '@skbkontur/react-ui';
82
82
  <FileUploader multiple error />
83
83
  ```
84
84
 
85
+ Ручное удаление файлов
86
+
87
+ В критичных случаях, если нужно удалить файлы из контрола вручную, то это можно сделать, используя метод `removeFile` из `ref`.
88
+ Обратите внимание, что при вызове `removeFile` вызываются коллбэки `onRemove` и `onValueChange`.
89
+
90
+ ```jsx harmony
91
+ import { FileUploader, Button } from '@skbkontur/react-ui';
92
+
93
+ const fileUploaderRef = React.useRef(null);
94
+ const [fileList, setFileList] = React.useState([]);
95
+
96
+ <div style={{ display: 'inline-grid', gap: '10px' }}>
97
+ <FileUploader ref={fileUploaderRef} multiple onValueChange={(files) => setFileList(files)} />
98
+ {fileList.map((file) => {
99
+ return (
100
+ <Button key={file.id} onClick={() => fileUploaderRef.current.removeFile(file.id)}>
101
+ Delete file {file.originalFile.name}
102
+ </Button>
103
+ );
104
+ })}
105
+ </div>
106
+ ```
107
+
85
108
  #### Локали по умолчанию
86
109
 
87
110
  ```typescript static
@@ -183,11 +183,12 @@ var _FileUploader = forwardRefAndName('FileUploader', function (props, ref) {
183
183
  focus: focus,
184
184
  blur: blur,
185
185
  reset: reset,
186
+ removeFile: removeFile,
186
187
  getRootNode: function getRootNode() {
187
188
  return rootNodeRef.current;
188
189
  }
189
190
  };
190
- }, [ref, blur, focus, reset]);
191
+ }, [ref, blur, focus, reset, removeFile]);
191
192
  var _useState2 = useState(false),
192
193
  focusedByTab = _useState2[0],
193
194
  setFocusedByTab = _useState2[1];
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useContext","useEffect","useImperativeHandle","useRef","useState","globalObject","isBrowser","getAttachedFile","cx","useMemoObject","FileUploaderControlContext","useControlLocale","useUpload","useDrop","ThemeContext","withFileUploaderControlProvider","keyListener","FileUploaderFile","FileUploaderFileList","CommonWrapper","FileUploaderFileValidationResult","useFileUploaderSize","forwardRefAndName","FocusControlWrapper","UploadIcon","globalClasses","jsStyles","stopPropagation","e","FileUploaderDataTids","root","content","link","input","defaultRenderFile","file","fileNode","_FileUploader","props","ref","_cx","theme","initialFiles","disabled","error","warning","_props$multiple","multiple","_props$width","width","fileUploaderWidth","_props$hideFiles","hideFiles","onBlur","onFocus","onChange","request","validateBeforeUpload","onRequestSuccess","onRequestError","_props$size","size","_props$renderFile","renderFile","inputProps","_objectWithoutPropertiesLoose","_excluded","_useContext","files","setFiles","removeFile","reset","setFileValidationResult","isMinLengthReached","locale","inputRef","fileDivRef","isAsync","isSingleMode","_useState","isLinkVisible","setIsLinkVisible","upload","tryValidateAndUpload","forEach","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","validationMessage","wrap","_callee$","_context","prev","next","t0","sent","id","stop","_x","apply","arguments","sizeClassName","small","sizeSmall","medium","sizeMedium","large","sizeLarge","sizeIconClass","iconSmall","iconMedium","iconLarge","contentInnerClass","contentInnerSmall","contentInnerMedium","contentInnerLarge","handleChange","newFiles","length","filesArray","Array","from","attachedFiles","map","handleDrop","event","dataTransfer","_dataTransfer$files","clearData","_useDrop","onDrop","isDraggable","labelRef","_useDrop2","isWindowDraggable","windowRef","current","document","focus","_inputRef$current","isTabPressed","blur","_inputRef$current2","getRootNode","rootNodeRef","_useState2","focusedByTab","setFocusedByTab","handleInputChange","target","handleFocus","requestAnimationFrame","handleBlur","handleRemoveFile","fileId","DataTransfer","filter","f","items","add","originalFile","_useState3","hovered","setHovered","uploadButtonClassNames","uploadButton","uploadButtonFocus","dragOver","canDrop","uploadButtonWrapperClassNames","windowDragOver","uploadButtonIconClassNames","icon","iconDisabled","hasOneFile","hasOneFileForSingle","contentClassNames","contentWithFiles","linkClassNames","linkHovered","linkDisabled","iconSizes","parseInt","btnIconSizeSmall","btnIconSizeMedium","btnIconSizeLarge","createElement","className","style","onRemove","onMouseEnter","onMouseLeave","choosedFile","chooseFile","String","fromCharCode","afterLinkText","afterLinkText_HasFiles","singleFile","Fragment","orDragHere","onBlurWhenDisabled","_extends","tabIndex","type","visuallyHidden","onClick","FileUploader","memo","displayName"],"sources":["FileUploader.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { FileUploaderAttachedFile, getAttachedFile } from '../../internal/FileUploaderControl/fileUtils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { InstanceWithRootNode } from '../../lib/rootNode';\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { FileUploaderControlContext } from '../../internal/FileUploaderControl/FileUploaderControlContext';\nimport { useControlLocale } from '../../internal/FileUploaderControl/hooks/useControlLocale';\nimport { useUpload } from '../../internal/FileUploaderControl/hooks/useUpload';\nimport { useDrop } from '../../hooks/useDrop';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { FileUploaderControlProviderProps } from '../../internal/FileUploaderControl/FileUploaderControlProvider';\nimport { withFileUploaderControlProvider } from '../../internal/FileUploaderControl/withFileUploaderControlProvider';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { FileUploaderFile } from '../../internal/FileUploaderControl/FileUploaderFile/FileUploaderFile';\nimport { FileUploaderFileList } from '../../internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { FileUploaderFileValidationResult } from '../../internal/FileUploaderControl/FileUploaderFileValidationResult';\nimport { useFileUploaderSize } from '../../internal/FileUploaderControl/hooks/useFileUploaderSize';\nimport { SizeProp } from '../../lib/types/props';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { UploadIcon } from './UploadIcon';\nimport { globalClasses, jsStyles } from './FileUploader.styles';\n\nconst stopPropagation: React.ReactEventHandler = (e) => e.stopPropagation();\n\ntype FileUploaderOverriddenProps = 'size';\n\ninterface _FileUploaderProps\n extends CommonProps,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {\n /** Начальное состояние загруженных файлов */\n initialFiles?: File[];\n /** Состояние ошибки всего контрола */\n error?: boolean;\n /** Состояние предупреждения всего контрола */\n warning?: boolean;\n /** Свойство ширины. */\n width?: React.CSSProperties['width'];\n /**\n * Задаёт размер контрола.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: SizeProp;\n /** Свойство, скрывающее отображение файлов. */\n hideFiles?: boolean;\n\n /** Функция, через которую отправляем файлы. Используется для отслеживания статуса загрузки файла. */\n request?: (file: FileUploaderAttachedFile) => Promise<void>;\n /** Срабатывает при удачной попытке отправки через request */\n onRequestSuccess?: (fileId: string) => void;\n /** Срабатывает при неудачной попытке отправки через request */\n onRequestError?: (fileId: string) => void;\n\n /**\n * Функция валидации каждого файла.\n * Срабатывает после выбора файлов и перед попыткой отправить в request.\n * Чтобы вывести валидацию ошибки, промис должен вернуть строку.\n * */\n validateBeforeUpload?: (file: FileUploaderAttachedFile) => Promise<Nullable<string>>;\n\n /**\n * Функция, позволяющая кастомизировать файлы.\n * Через нее можно вешать кастомные валидации на каждый файл.\n * */\n renderFile?: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n}\n\nexport interface FileUploaderRef extends InstanceWithRootNode {\n focus: () => void;\n blur: () => void;\n /** Сбрасывает выбранные файлы */\n reset: () => void;\n}\n\nexport const FileUploaderDataTids = {\n root: 'FileUploader__root',\n content: 'FileUploader__content',\n link: 'FileUploader__link',\n input: 'FileUploader__input',\n} as const;\n\nconst defaultRenderFile = (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => fileNode;\n\nconst _FileUploader = forwardRefAndName<FileUploaderRef, _FileUploaderProps>('FileUploader', (props, ref) => {\n const theme = useContext(ThemeContext);\n\n const {\n initialFiles,\n disabled,\n error,\n warning,\n multiple = false,\n width = theme.fileUploaderWidth,\n hideFiles = false,\n onBlur,\n onFocus,\n onChange,\n request,\n validateBeforeUpload,\n onRequestSuccess,\n onRequestError,\n size = 'small',\n renderFile = defaultRenderFile,\n ...inputProps\n } = props;\n\n const { files, setFiles, removeFile, reset, setFileValidationResult, isMinLengthReached } =\n useContext(FileUploaderControlContext);\n\n const locale = useControlLocale();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const fileDivRef = useRef<HTMLDivElement>(null);\n\n const isAsync = !!request;\n const isSingleMode = !multiple;\n\n const [isLinkVisible, setIsLinkVisible] = useState(true);\n const upload = useUpload(request, onRequestSuccess, onRequestError);\n\n const tryValidateAndUpload = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n files.forEach(async (file) => {\n const validationMessage = validateBeforeUpload && (await validateBeforeUpload(file));\n\n if (!validationMessage) {\n isAsync && upload(file);\n } else {\n setFileValidationResult(file.id, FileUploaderFileValidationResult.error(validationMessage));\n }\n });\n },\n [validateBeforeUpload, isAsync, upload, setFileValidationResult],\n );\n\n const sizeClassName = useFileUploaderSize(size, {\n small: jsStyles.sizeSmall(theme),\n medium: jsStyles.sizeMedium(theme),\n large: jsStyles.sizeLarge(theme),\n });\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(theme),\n medium: jsStyles.iconMedium(theme),\n large: jsStyles.iconLarge(theme),\n });\n\n const contentInnerClass = useFileUploaderSize(size, {\n small: jsStyles.contentInnerSmall(theme),\n medium: jsStyles.contentInnerMedium(theme),\n large: jsStyles.contentInnerLarge(theme),\n });\n\n /** common part **/\n const handleChange = useCallback(\n (newFiles: FileList | null) => {\n if (!newFiles || !newFiles.length) {\n return;\n }\n\n let filesArray = Array.from(newFiles);\n\n if (isSingleMode) {\n filesArray = [filesArray[0]];\n }\n\n const attachedFiles = filesArray.map(getAttachedFile);\n\n if (isSingleMode && attachedFiles.length && files.length) {\n removeFile(files[0].id);\n }\n\n if (attachedFiles.length) {\n setFiles(attachedFiles);\n tryValidateAndUpload(attachedFiles);\n }\n },\n [tryValidateAndUpload, setFiles, isSingleMode, files, removeFile],\n );\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n if (disabled) {\n return;\n }\n\n const { dataTransfer } = event;\n if (dataTransfer) {\n if (dataTransfer.files?.length > 0) {\n handleChange(dataTransfer.files);\n }\n dataTransfer.clearData();\n }\n },\n [handleChange, disabled],\n );\n\n const { isDraggable, ref: labelRef } = useDrop<HTMLLabelElement>({ onDrop: handleDrop });\n const { isDraggable: isWindowDraggable, ref: windowRef } = useDrop<Document>();\n\n if (isBrowser(globalObject)) {\n windowRef.current = globalObject.document;\n }\n\n const focus = useCallback(() => {\n keyListener.isTabPressed = true;\n inputRef.current?.focus();\n }, []);\n\n const blur = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n useImperativeHandle(ref, () => ({ focus, blur, reset, getRootNode: () => rootNodeRef.current }), [\n ref,\n blur,\n focus,\n reset,\n ]);\n\n const [focusedByTab, setFocusedByTab] = useState(false);\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n handleChange(event.target.files);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n onFocus?.(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedByTab(false);\n if (!disabled) {\n onBlur?.(e);\n }\n };\n\n const handleRemoveFile = useCallback((fileId: string) => {\n const dataTransfer = new DataTransfer();\n files\n .filter((f) => f.id !== fileId)\n .forEach((file) => {\n dataTransfer.items.add(file.originalFile);\n });\n inputRef.current && (inputRef.current.files = dataTransfer.files);\n }, []);\n\n const [hovered, setHovered] = useState(false);\n\n const uploadButtonClassNames = cx(\n jsStyles.uploadButton(theme),\n sizeClassName,\n focusedByTab && jsStyles.uploadButtonFocus(theme),\n disabled && jsStyles.disabled(theme),\n !disabled && hovered && jsStyles.hovered(theme),\n !!warning && jsStyles.warning(theme),\n !!error && jsStyles.error(theme),\n isDraggable && !disabled && jsStyles.dragOver(theme),\n );\n\n const canDrop = isWindowDraggable && !disabled;\n const uploadButtonWrapperClassNames = cx(canDrop && jsStyles.windowDragOver(theme));\n\n const uploadButtonIconClassNames = cx(jsStyles.icon(theme), sizeIconClass, disabled && jsStyles.iconDisabled(theme));\n\n const hasOneFile = files.length === 1;\n const hasOneFileForSingle = isSingleMode && hasOneFile && !hideFiles;\n\n const contentClassNames = cx(jsStyles.content(), hasOneFileForSingle && jsStyles.contentWithFiles());\n\n const linkClassNames = cx(\n jsStyles.link(theme),\n !disabled && hovered && jsStyles.linkHovered(theme),\n disabled && jsStyles.linkDisabled(theme),\n );\n\n useEffect(() => {\n setIsLinkVisible(hasOneFileForSingle ? !isMinLengthReached : true);\n }, [isMinLengthReached, hasOneFileForSingle]);\n\n useEffect(() => {\n if (!files || !files.length || !inputRef.current) {\n return;\n }\n\n const dataTransfer = new DataTransfer();\n files.forEach((file) => dataTransfer.items.add(file.originalFile));\n inputRef.current.files = dataTransfer.files;\n }, []);\n\n const rootNodeRef = useRef(null);\n\n const iconSizes: Record<SizeProp, number> = {\n small: parseInt(theme.btnIconSizeSmall),\n medium: parseInt(theme.btnIconSizeMedium),\n large: parseInt(theme.btnIconSizeLarge),\n };\n const icon = <UploadIcon size={iconSizes[size]} />;\n\n return (\n <CommonWrapper {...props}>\n <div\n data-tid={FileUploaderDataTids.root}\n className={jsStyles.root(theme)}\n style={useMemoObject({ width })}\n ref={rootNodeRef}\n >\n {!hideFiles && !isSingleMode && !!files.length && (\n <FileUploaderFileList renderFile={renderFile} size={size} onRemove={handleRemoveFile} />\n )}\n <div className={uploadButtonWrapperClassNames}>\n <label\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n ref={labelRef}\n className={uploadButtonClassNames}\n >\n <div\n data-tid={FileUploaderDataTids.content}\n className={cx(contentClassNames, { [contentInnerClass]: !files.length || !isSingleMode })}\n >\n {isLinkVisible && (\n <span data-tid={FileUploaderDataTids.link} className={linkClassNames}>\n {hasOneFileForSingle ? locale.choosedFile : locale.chooseFile}\n </span>\n )}\n {isLinkVisible && String.fromCharCode(0xa0) /* &nbsp; */}\n <div\n className={cx(\n globalClasses.afterLinkText,\n hasOneFileForSingle ? jsStyles.afterLinkText_HasFiles(theme) : jsStyles.afterLinkText(theme),\n )}\n >\n {hasOneFileForSingle ? (\n <div ref={fileDivRef} className={jsStyles.singleFile()}>\n {renderFile(files[0], <FileUploaderFile file={files[0]} size={size} onRemove={handleRemoveFile} />)}\n </div>\n ) : (\n <>\n {locale.orDragHere}&nbsp;\n <div className={uploadButtonIconClassNames}>{icon}</div>\n </>\n )}\n </div>\n </div>\n <FocusControlWrapper onBlurWhenDisabled={() => setFocusedByTab(false)}>\n <input\n {...inputProps}\n data-tid={FileUploaderDataTids.input}\n ref={inputRef}\n tabIndex={disabled ? -1 : 0}\n type=\"file\"\n disabled={disabled}\n multiple={multiple}\n className={jsStyles.visuallyHidden()}\n onClick={stopPropagation}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n </FocusControlWrapper>\n </label>\n </div>\n </div>\n </CommonWrapper>\n );\n});\n\nexport interface FileUploaderProps extends _FileUploaderProps, FileUploaderControlProviderProps {}\n\nexport const FileUploader = withFileUploaderControlProvider<FileUploaderProps, FileUploaderRef>(\n React.memo(_FileUploader),\n);\nFileUploader.displayName = 'FileUploader';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useContext","useEffect","useImperativeHandle","useRef","useState","globalObject","isBrowser","getAttachedFile","cx","useMemoObject","FileUploaderControlContext","useControlLocale","useUpload","useDrop","ThemeContext","withFileUploaderControlProvider","keyListener","FileUploaderFile","FileUploaderFileList","CommonWrapper","FileUploaderFileValidationResult","useFileUploaderSize","forwardRefAndName","FocusControlWrapper","UploadIcon","globalClasses","jsStyles","stopPropagation","e","FileUploaderDataTids","root","content","link","input","defaultRenderFile","file","fileNode","_FileUploader","props","ref","_cx","theme","initialFiles","disabled","error","warning","_props$multiple","multiple","_props$width","width","fileUploaderWidth","_props$hideFiles","hideFiles","onBlur","onFocus","onChange","request","validateBeforeUpload","onRequestSuccess","onRequestError","_props$size","size","_props$renderFile","renderFile","inputProps","_objectWithoutPropertiesLoose","_excluded","_useContext","files","setFiles","removeFile","reset","setFileValidationResult","isMinLengthReached","locale","inputRef","fileDivRef","isAsync","isSingleMode","_useState","isLinkVisible","setIsLinkVisible","upload","tryValidateAndUpload","forEach","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","validationMessage","wrap","_callee$","_context","prev","next","t0","sent","id","stop","_x","apply","arguments","sizeClassName","small","sizeSmall","medium","sizeMedium","large","sizeLarge","sizeIconClass","iconSmall","iconMedium","iconLarge","contentInnerClass","contentInnerSmall","contentInnerMedium","contentInnerLarge","handleChange","newFiles","length","filesArray","Array","from","attachedFiles","map","handleDrop","event","dataTransfer","_dataTransfer$files","clearData","_useDrop","onDrop","isDraggable","labelRef","_useDrop2","isWindowDraggable","windowRef","current","document","focus","_inputRef$current","isTabPressed","blur","_inputRef$current2","getRootNode","rootNodeRef","_useState2","focusedByTab","setFocusedByTab","handleInputChange","target","handleFocus","requestAnimationFrame","handleBlur","handleRemoveFile","fileId","DataTransfer","filter","f","items","add","originalFile","_useState3","hovered","setHovered","uploadButtonClassNames","uploadButton","uploadButtonFocus","dragOver","canDrop","uploadButtonWrapperClassNames","windowDragOver","uploadButtonIconClassNames","icon","iconDisabled","hasOneFile","hasOneFileForSingle","contentClassNames","contentWithFiles","linkClassNames","linkHovered","linkDisabled","iconSizes","parseInt","btnIconSizeSmall","btnIconSizeMedium","btnIconSizeLarge","createElement","className","style","onRemove","onMouseEnter","onMouseLeave","choosedFile","chooseFile","String","fromCharCode","afterLinkText","afterLinkText_HasFiles","singleFile","Fragment","orDragHere","onBlurWhenDisabled","_extends","tabIndex","type","visuallyHidden","onClick","FileUploader","memo","displayName"],"sources":["FileUploader.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { FileUploaderAttachedFile, getAttachedFile } from '../../internal/FileUploaderControl/fileUtils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { InstanceWithRootNode } from '../../lib/rootNode';\nimport { useMemoObject } from '../../hooks/useMemoObject';\nimport { FileUploaderControlContext } from '../../internal/FileUploaderControl/FileUploaderControlContext';\nimport { useControlLocale } from '../../internal/FileUploaderControl/hooks/useControlLocale';\nimport { useUpload } from '../../internal/FileUploaderControl/hooks/useUpload';\nimport { useDrop } from '../../hooks/useDrop';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { FileUploaderControlProviderProps } from '../../internal/FileUploaderControl/FileUploaderControlProvider';\nimport { withFileUploaderControlProvider } from '../../internal/FileUploaderControl/withFileUploaderControlProvider';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { FileUploaderFile } from '../../internal/FileUploaderControl/FileUploaderFile/FileUploaderFile';\nimport { FileUploaderFileList } from '../../internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { FileUploaderFileValidationResult } from '../../internal/FileUploaderControl/FileUploaderFileValidationResult';\nimport { useFileUploaderSize } from '../../internal/FileUploaderControl/hooks/useFileUploaderSize';\nimport { SizeProp } from '../../lib/types/props';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { UploadIcon } from './UploadIcon';\nimport { globalClasses, jsStyles } from './FileUploader.styles';\n\nconst stopPropagation: React.ReactEventHandler = (e) => e.stopPropagation();\n\ntype FileUploaderOverriddenProps = 'size';\n\ninterface _FileUploaderProps\n extends CommonProps,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {\n /** Начальное состояние загруженных файлов */\n initialFiles?: File[];\n /** Состояние ошибки всего контрола */\n error?: boolean;\n /** Состояние предупреждения всего контрола */\n warning?: boolean;\n /** Свойство ширины. */\n width?: React.CSSProperties['width'];\n /**\n * Задаёт размер контрола.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: SizeProp;\n /** Свойство, скрывающее отображение файлов. */\n hideFiles?: boolean;\n\n /** Функция, через которую отправляем файлы. Используется для отслеживания статуса загрузки файла. */\n request?: (file: FileUploaderAttachedFile) => Promise<void>;\n /** Срабатывает при удачной попытке отправки через request */\n onRequestSuccess?: (fileId: string) => void;\n /** Срабатывает при неудачной попытке отправки через request */\n onRequestError?: (fileId: string) => void;\n\n /**\n * Функция валидации каждого файла.\n * Срабатывает после выбора файлов и перед попыткой отправить в request.\n * Чтобы вывести валидацию ошибки, промис должен вернуть строку.\n * */\n validateBeforeUpload?: (file: FileUploaderAttachedFile) => Promise<Nullable<string>>;\n\n /**\n * Функция, позволяющая кастомизировать файлы.\n * Через нее можно вешать кастомные валидации на каждый файл.\n * */\n renderFile?: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n}\n\nexport interface FileUploaderRef extends InstanceWithRootNode {\n focus: () => void;\n blur: () => void;\n /** Сбрасывает выбранные файлы */\n reset: () => void;\n removeFile: (fileId: string) => void;\n}\n\nexport const FileUploaderDataTids = {\n root: 'FileUploader__root',\n content: 'FileUploader__content',\n link: 'FileUploader__link',\n input: 'FileUploader__input',\n} as const;\n\nconst defaultRenderFile = (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => fileNode;\n\nconst _FileUploader = forwardRefAndName<FileUploaderRef, _FileUploaderProps>('FileUploader', (props, ref) => {\n const theme = useContext(ThemeContext);\n\n const {\n initialFiles,\n disabled,\n error,\n warning,\n multiple = false,\n width = theme.fileUploaderWidth,\n hideFiles = false,\n onBlur,\n onFocus,\n onChange,\n request,\n validateBeforeUpload,\n onRequestSuccess,\n onRequestError,\n size = 'small',\n renderFile = defaultRenderFile,\n ...inputProps\n } = props;\n\n const { files, setFiles, removeFile, reset, setFileValidationResult, isMinLengthReached } =\n useContext(FileUploaderControlContext);\n\n const locale = useControlLocale();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const fileDivRef = useRef<HTMLDivElement>(null);\n\n const isAsync = !!request;\n const isSingleMode = !multiple;\n\n const [isLinkVisible, setIsLinkVisible] = useState(true);\n const upload = useUpload(request, onRequestSuccess, onRequestError);\n\n const tryValidateAndUpload = useCallback(\n (files: FileUploaderAttachedFile[]) => {\n files.forEach(async (file) => {\n const validationMessage = validateBeforeUpload && (await validateBeforeUpload(file));\n\n if (!validationMessage) {\n isAsync && upload(file);\n } else {\n setFileValidationResult(file.id, FileUploaderFileValidationResult.error(validationMessage));\n }\n });\n },\n [validateBeforeUpload, isAsync, upload, setFileValidationResult],\n );\n\n const sizeClassName = useFileUploaderSize(size, {\n small: jsStyles.sizeSmall(theme),\n medium: jsStyles.sizeMedium(theme),\n large: jsStyles.sizeLarge(theme),\n });\n\n const sizeIconClass = useFileUploaderSize(size, {\n small: jsStyles.iconSmall(theme),\n medium: jsStyles.iconMedium(theme),\n large: jsStyles.iconLarge(theme),\n });\n\n const contentInnerClass = useFileUploaderSize(size, {\n small: jsStyles.contentInnerSmall(theme),\n medium: jsStyles.contentInnerMedium(theme),\n large: jsStyles.contentInnerLarge(theme),\n });\n\n /** common part **/\n const handleChange = useCallback(\n (newFiles: FileList | null) => {\n if (!newFiles || !newFiles.length) {\n return;\n }\n\n let filesArray = Array.from(newFiles);\n\n if (isSingleMode) {\n filesArray = [filesArray[0]];\n }\n\n const attachedFiles = filesArray.map(getAttachedFile);\n\n if (isSingleMode && attachedFiles.length && files.length) {\n removeFile(files[0].id);\n }\n\n if (attachedFiles.length) {\n setFiles(attachedFiles);\n tryValidateAndUpload(attachedFiles);\n }\n },\n [tryValidateAndUpload, setFiles, isSingleMode, files, removeFile],\n );\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n if (disabled) {\n return;\n }\n\n const { dataTransfer } = event;\n if (dataTransfer) {\n if (dataTransfer.files?.length > 0) {\n handleChange(dataTransfer.files);\n }\n dataTransfer.clearData();\n }\n },\n [handleChange, disabled],\n );\n\n const { isDraggable, ref: labelRef } = useDrop<HTMLLabelElement>({ onDrop: handleDrop });\n const { isDraggable: isWindowDraggable, ref: windowRef } = useDrop<Document>();\n\n if (isBrowser(globalObject)) {\n windowRef.current = globalObject.document;\n }\n\n const focus = useCallback(() => {\n keyListener.isTabPressed = true;\n inputRef.current?.focus();\n }, []);\n\n const blur = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n useImperativeHandle(ref, () => ({ focus, blur, reset, removeFile, getRootNode: () => rootNodeRef.current }), [\n ref,\n blur,\n focus,\n reset,\n removeFile,\n ]);\n\n const [focusedByTab, setFocusedByTab] = useState(false);\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n handleChange(event.target.files);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n onFocus?.(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedByTab(false);\n if (!disabled) {\n onBlur?.(e);\n }\n };\n\n const handleRemoveFile = useCallback((fileId: string) => {\n const dataTransfer = new DataTransfer();\n files\n .filter((f) => f.id !== fileId)\n .forEach((file) => {\n dataTransfer.items.add(file.originalFile);\n });\n inputRef.current && (inputRef.current.files = dataTransfer.files);\n }, []);\n\n const [hovered, setHovered] = useState(false);\n\n const uploadButtonClassNames = cx(\n jsStyles.uploadButton(theme),\n sizeClassName,\n focusedByTab && jsStyles.uploadButtonFocus(theme),\n disabled && jsStyles.disabled(theme),\n !disabled && hovered && jsStyles.hovered(theme),\n !!warning && jsStyles.warning(theme),\n !!error && jsStyles.error(theme),\n isDraggable && !disabled && jsStyles.dragOver(theme),\n );\n\n const canDrop = isWindowDraggable && !disabled;\n const uploadButtonWrapperClassNames = cx(canDrop && jsStyles.windowDragOver(theme));\n\n const uploadButtonIconClassNames = cx(jsStyles.icon(theme), sizeIconClass, disabled && jsStyles.iconDisabled(theme));\n\n const hasOneFile = files.length === 1;\n const hasOneFileForSingle = isSingleMode && hasOneFile && !hideFiles;\n\n const contentClassNames = cx(jsStyles.content(), hasOneFileForSingle && jsStyles.contentWithFiles());\n\n const linkClassNames = cx(\n jsStyles.link(theme),\n !disabled && hovered && jsStyles.linkHovered(theme),\n disabled && jsStyles.linkDisabled(theme),\n );\n\n useEffect(() => {\n setIsLinkVisible(hasOneFileForSingle ? !isMinLengthReached : true);\n }, [isMinLengthReached, hasOneFileForSingle]);\n\n useEffect(() => {\n if (!files || !files.length || !inputRef.current) {\n return;\n }\n\n const dataTransfer = new DataTransfer();\n files.forEach((file) => dataTransfer.items.add(file.originalFile));\n inputRef.current.files = dataTransfer.files;\n }, []);\n\n const rootNodeRef = useRef(null);\n\n const iconSizes: Record<SizeProp, number> = {\n small: parseInt(theme.btnIconSizeSmall),\n medium: parseInt(theme.btnIconSizeMedium),\n large: parseInt(theme.btnIconSizeLarge),\n };\n const icon = <UploadIcon size={iconSizes[size]} />;\n\n return (\n <CommonWrapper {...props}>\n <div\n data-tid={FileUploaderDataTids.root}\n className={jsStyles.root(theme)}\n style={useMemoObject({ width })}\n ref={rootNodeRef}\n >\n {!hideFiles && !isSingleMode && !!files.length && (\n <FileUploaderFileList renderFile={renderFile} size={size} onRemove={handleRemoveFile} />\n )}\n <div className={uploadButtonWrapperClassNames}>\n <label\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n ref={labelRef}\n className={uploadButtonClassNames}\n >\n <div\n data-tid={FileUploaderDataTids.content}\n className={cx(contentClassNames, { [contentInnerClass]: !files.length || !isSingleMode })}\n >\n {isLinkVisible && (\n <span data-tid={FileUploaderDataTids.link} className={linkClassNames}>\n {hasOneFileForSingle ? locale.choosedFile : locale.chooseFile}\n </span>\n )}\n {isLinkVisible && String.fromCharCode(0xa0) /* &nbsp; */}\n <div\n className={cx(\n globalClasses.afterLinkText,\n hasOneFileForSingle ? jsStyles.afterLinkText_HasFiles(theme) : jsStyles.afterLinkText(theme),\n )}\n >\n {hasOneFileForSingle ? (\n <div ref={fileDivRef} className={jsStyles.singleFile()}>\n {renderFile(files[0], <FileUploaderFile file={files[0]} size={size} onRemove={handleRemoveFile} />)}\n </div>\n ) : (\n <>\n {locale.orDragHere}&nbsp;\n <div className={uploadButtonIconClassNames}>{icon}</div>\n </>\n )}\n </div>\n </div>\n <FocusControlWrapper onBlurWhenDisabled={() => setFocusedByTab(false)}>\n <input\n {...inputProps}\n data-tid={FileUploaderDataTids.input}\n ref={inputRef}\n tabIndex={disabled ? -1 : 0}\n type=\"file\"\n disabled={disabled}\n multiple={multiple}\n className={jsStyles.visuallyHidden()}\n onClick={stopPropagation}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n </FocusControlWrapper>\n </label>\n </div>\n </div>\n </CommonWrapper>\n );\n});\n\nexport interface FileUploaderProps extends _FileUploaderProps, FileUploaderControlProviderProps {}\n\nexport const FileUploader = withFileUploaderControlProvider<FileUploaderProps, FileUploaderRef>(\n React.memo(_FileUploader),\n);\nFileUploader.displayName = 'FileUploader';\n"],"mappings":"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","ignoreList":[]}
@@ -46,6 +46,7 @@ export interface FileUploaderRef extends InstanceWithRootNode {
46
46
  blur: () => void;
47
47
  /** Сбрасывает выбранные файлы */
48
48
  reset: () => void;
49
+ removeFile: (fileId: string) => void;
49
50
  }
50
51
  export declare const FileUploaderDataTids: {
51
52
  readonly root: "FileUploader__root";
@@ -82,6 +82,29 @@ import { FileUploader } from '@skbkontur/react-ui';
82
82
  <FileUploader multiple error />
83
83
  ```
84
84
 
85
+ Ручное удаление файлов
86
+
87
+ В критичных случаях, если нужно удалить файлы из контрола вручную, то это можно сделать, используя метод `removeFile` из `ref`.
88
+ Обратите внимание, что при вызове `removeFile` вызываются коллбэки `onRemove` и `onValueChange`.
89
+
90
+ ```jsx harmony
91
+ import { FileUploader, Button } from '@skbkontur/react-ui';
92
+
93
+ const fileUploaderRef = React.useRef(null);
94
+ const [fileList, setFileList] = React.useState([]);
95
+
96
+ <div style={{ display: 'inline-grid', gap: '10px' }}>
97
+ <FileUploader ref={fileUploaderRef} multiple onValueChange={(files) => setFileList(files)} />
98
+ {fileList.map((file) => {
99
+ return (
100
+ <Button key={file.id} onClick={() => fileUploaderRef.current.removeFile(file.id)}>
101
+ Delete file {file.originalFile.name}
102
+ </Button>
103
+ );
104
+ })}
105
+ </div>
106
+ ```
107
+
85
108
  #### Локали по умолчанию
86
109
 
87
110
  ```typescript static
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "5.0.13",
3
+ "version": "5.0.14",
4
4
  "description": "UI Components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "index.js",
7
7
  "sideEffects": false,
8
- "homepage": "https://tech.skbkontur.ru/react-ui/5.0.13/",
8
+ "homepage": "https://tech.skbkontur.ru/react-ui/5.0.14/",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "git@github.com:skbkontur/retail-ui.git"