@skbkontur/react-ui 4.25.2 → 4.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +41 -13
- package/cjs/components/Autocomplete/Autocomplete.md +76 -3
- package/cjs/components/Button/Button.md +38 -11
- package/cjs/components/Calendar/Calendar.md +40 -0
- package/cjs/components/DropdownMenu/DropdownMenu.md +39 -0
- package/cjs/components/FileUploader/FileUploader.d.ts +2 -0
- package/cjs/components/FileUploader/FileUploader.js +32 -9
- package/cjs/components/FileUploader/FileUploader.js.map +1 -1
- package/cjs/components/FileUploader/FileUploader.md +29 -0
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/cjs/components/ScrollContainer/ScrollContainer.js +6 -0
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/hooks/useDrop.d.ts +1 -1
- package/cjs/hooks/useDrop.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.d.ts +5 -2
- package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js +16 -3
- package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +4 -2
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js +3 -2
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.d.ts +2 -0
- package/cjs/internal/RenderContainer/RenderContainer.js +6 -3
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderInnerContainer.js +3 -2
- package/cjs/internal/RenderContainer/RenderInnerContainer.js.map +1 -1
- package/cjs/internal/ZIndex/ZIndex.d.ts +7 -3
- package/cjs/internal/ZIndex/ZIndex.js +41 -3
- package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
- package/cjs/lib/listenFocusOutside.js +4 -2
- package/cjs/lib/listenFocusOutside.js.map +1 -1
- package/components/Autocomplete/Autocomplete.md +76 -3
- package/components/Button/Button.md +38 -11
- package/components/Calendar/Calendar.md +40 -0
- package/components/DropdownMenu/DropdownMenu.md +39 -0
- package/components/FileUploader/FileUploader/FileUploader.js +30 -8
- package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
- package/components/FileUploader/FileUploader.d.ts +2 -0
- package/components/FileUploader/FileUploader.md +29 -0
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +5 -0
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/hooks/useDrop/useDrop.js.map +1 -1
- package/hooks/useDrop.d.ts +1 -1
- package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js +12 -3
- package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderControlProvider.d.ts +5 -2
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +4 -2
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -0
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js +4 -2
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +3 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/RenderContainer/RenderContainer.d.ts +2 -0
- package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js +5 -4
- package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js.map +1 -1
- package/internal/ZIndex/ZIndex/ZIndex.js +55 -7
- package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
- package/internal/ZIndex/ZIndex.d.ts +7 -3
- package/lib/listenFocusOutside/listenFocusOutside.js +3 -2
- package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
- package/package.json +2 -2
|
@@ -106,6 +106,8 @@ const theme = React.useContext(ThemeContext);
|
|
|
106
106
|
|
|
107
107
|
### Кастомный рендер дня
|
|
108
108
|
|
|
109
|
+
Для кастомнизации дней в календаре используется метод `renderDay` и компонент [Calendar.Day](#/Components/Calendar/Calendar.Day)
|
|
110
|
+
|
|
109
111
|
```jsx harmony
|
|
110
112
|
import { Tooltip, Hint, CalendarDay } from '@skbkontur/react-ui';
|
|
111
113
|
|
|
@@ -144,6 +146,44 @@ const renderDay = (props) => {
|
|
|
144
146
|
/>;
|
|
145
147
|
```
|
|
146
148
|
|
|
149
|
+
### Календарь с ценами
|
|
150
|
+
|
|
151
|
+
Пример с кастомизацией темы и кастомным рендером дня
|
|
152
|
+
|
|
153
|
+
```jsx harmony
|
|
154
|
+
import { ThemeContext, ThemeFactory, CalendarDay } from '@skbkontur/react-ui';
|
|
155
|
+
|
|
156
|
+
const theme = React.useContext(ThemeContext);
|
|
157
|
+
|
|
158
|
+
function renderDay(props) {
|
|
159
|
+
const [date, month] = props.date.split('.').map(Number);
|
|
160
|
+
const randomDay = date % 6 === 0 || date % 7 === 0 || date % 8 === 0;
|
|
161
|
+
const randomPrice = Math.round((date / month) * 1000);
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<CalendarDay {...props}>
|
|
165
|
+
<div style={{ fontSize: theme.calendarCellFontSize }}>{date}</div>
|
|
166
|
+
<div style={{ fontSize: '11px', fontFeatureSettings: 'tnum', fontVariantNumeric: 'tabular-nums' }}>
|
|
167
|
+
{randomDay ? <>{randomPrice} ₽</> : <span style={{ color: theme.tokenTextColorDisabled }}>—</span>}
|
|
168
|
+
</div>
|
|
169
|
+
</CalendarDay>
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const [value, setValue] = React.useState(null);
|
|
174
|
+
|
|
175
|
+
<ThemeContext.Provider
|
|
176
|
+
value={ThemeFactory.create({
|
|
177
|
+
calendarCellSize: '56px',
|
|
178
|
+
calendarCellLineHeight: '1.5',
|
|
179
|
+
calendarWrapperHeight: '600px',
|
|
180
|
+
calendarCellBorderRadius: '8px'
|
|
181
|
+
}, theme)}
|
|
182
|
+
>
|
|
183
|
+
<Calendar value={value} renderDay={renderDay} onValueChange={setValue} />
|
|
184
|
+
</ThemeContext.Provider>
|
|
185
|
+
```
|
|
186
|
+
|
|
147
187
|
#### Локали по умолчанию
|
|
148
188
|
|
|
149
189
|
```typescript static
|
|
@@ -247,3 +247,42 @@ const hiddenItems = [
|
|
|
247
247
|
</DropdownMenu>
|
|
248
248
|
</Gapped>
|
|
249
249
|
```
|
|
250
|
+
|
|
251
|
+
С использованием фиче-флага menuItemsAtAnyLevel. Mожно использовать различные обертки для пунктов меню.
|
|
252
|
+
|
|
253
|
+
```jsx harmony
|
|
254
|
+
import {
|
|
255
|
+
DropdownMenu,
|
|
256
|
+
Button,
|
|
257
|
+
MenuHeader,
|
|
258
|
+
MenuItem,
|
|
259
|
+
MenuSeparator,
|
|
260
|
+
ReactUIFeatureFlagsContext,
|
|
261
|
+
Gapped
|
|
262
|
+
} from '@skbkontur/react-ui';
|
|
263
|
+
|
|
264
|
+
const groupedMenuItems = (
|
|
265
|
+
<div>
|
|
266
|
+
<MenuItem>MenuItem1</MenuItem>
|
|
267
|
+
<MenuItem>MenuItem2</MenuItem>
|
|
268
|
+
<MenuItem isNotSelectable>Not Selectable</MenuItem>
|
|
269
|
+
</div>
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
<Gapped>
|
|
273
|
+
<ReactUIFeatureFlagsContext.Provider value={{ menuItemsAtAnyLevel: true }}>
|
|
274
|
+
<DropdownMenu caption={<Button use="primary">Открыть меню</Button>}>
|
|
275
|
+
<>
|
|
276
|
+
<MenuHeader>Заголовок меню</MenuHeader>
|
|
277
|
+
<MenuSeparator />
|
|
278
|
+
<div>
|
|
279
|
+
{groupedMenuItems}
|
|
280
|
+
</div>
|
|
281
|
+
</>
|
|
282
|
+
<MenuItem>MenuItem3</MenuItem>
|
|
283
|
+
</DropdownMenu>
|
|
284
|
+
</ReactUIFeatureFlagsContext.Provider>
|
|
285
|
+
</Gapped>;
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
-
var _excluded = ["disabled", "error", "warning", "multiple", "width", "hideFiles", "onBlur", "onFocus", "onChange", "request", "validateBeforeUpload", "onRequestSuccess", "onRequestError", "size", "renderFile"];
|
|
4
|
+
var _excluded = ["initialFiles", "disabled", "error", "warning", "multiple", "width", "hideFiles", "onBlur", "onFocus", "onChange", "request", "validateBeforeUpload", "onRequestSuccess", "onRequestError", "size", "renderFile"];
|
|
5
5
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
6
|
import React, { useCallback, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
7
7
|
import { globalObject, isBrowser } from '@skbkontur/global-object';
|
|
@@ -53,7 +53,8 @@ var _FileUploader = forwardRefAndName('FileUploader', function (props, ref) {
|
|
|
53
53
|
|
|
54
54
|
var _isTheme2022 = isTheme2022(theme);
|
|
55
55
|
|
|
56
|
-
var
|
|
56
|
+
var initialFiles = props.initialFiles,
|
|
57
|
+
disabled = props.disabled,
|
|
57
58
|
error = props.error,
|
|
58
59
|
warning = props.warning,
|
|
59
60
|
_props$multiple = props.multiple,
|
|
@@ -155,7 +156,7 @@ var _FileUploader = forwardRefAndName('FileUploader', function (props, ref) {
|
|
|
155
156
|
/** common part **/
|
|
156
157
|
|
|
157
158
|
var handleChange = useCallback(function (newFiles) {
|
|
158
|
-
if (!newFiles) {
|
|
159
|
+
if (!newFiles || !newFiles.length) {
|
|
159
160
|
return;
|
|
160
161
|
}
|
|
161
162
|
|
|
@@ -256,6 +257,16 @@ var _FileUploader = forwardRefAndName('FileUploader', function (props, ref) {
|
|
|
256
257
|
}
|
|
257
258
|
};
|
|
258
259
|
|
|
260
|
+
var handleRemoveFile = useCallback(function (fileId) {
|
|
261
|
+
var dataTransfer = new DataTransfer();
|
|
262
|
+
files.filter(function (f) {
|
|
263
|
+
return f.id !== fileId;
|
|
264
|
+
}).forEach(function (file) {
|
|
265
|
+
dataTransfer.items.add(file.originalFile);
|
|
266
|
+
});
|
|
267
|
+
inputRef.current && (inputRef.current.files = dataTransfer.files);
|
|
268
|
+
}, []);
|
|
269
|
+
|
|
259
270
|
var _useState3 = useState(false),
|
|
260
271
|
hovered = _useState3[0],
|
|
261
272
|
setHovered = _useState3[1];
|
|
@@ -271,6 +282,17 @@ var _FileUploader = forwardRefAndName('FileUploader', function (props, ref) {
|
|
|
271
282
|
useEffect(function () {
|
|
272
283
|
setIsLinkVisible(hasOneFileForSingle ? !isMinLengthReached : true);
|
|
273
284
|
}, [isMinLengthReached, hasOneFileForSingle]);
|
|
285
|
+
useEffect(function () {
|
|
286
|
+
if (!files || !files.length || !inputRef.current) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
var dataTransfer = new DataTransfer();
|
|
291
|
+
files.forEach(function (file) {
|
|
292
|
+
return dataTransfer.items.add(file.originalFile);
|
|
293
|
+
});
|
|
294
|
+
inputRef.current.files = dataTransfer.files;
|
|
295
|
+
}, []);
|
|
274
296
|
var rootNodeRef = useRef(null);
|
|
275
297
|
var iconSizes = {
|
|
276
298
|
small: parseInt(theme.btnIconSizeSmall),
|
|
@@ -289,7 +311,8 @@ var _FileUploader = forwardRefAndName('FileUploader', function (props, ref) {
|
|
|
289
311
|
ref: rootNodeRef
|
|
290
312
|
}, !hideFiles && !isSingleMode && !!files.length && /*#__PURE__*/React.createElement(FileUploaderFileList, {
|
|
291
313
|
renderFile: renderFile,
|
|
292
|
-
size: size
|
|
314
|
+
size: size,
|
|
315
|
+
onRemove: handleRemoveFile
|
|
293
316
|
}), /*#__PURE__*/React.createElement("div", {
|
|
294
317
|
className: uploadButtonWrapperClassNames
|
|
295
318
|
}, /*#__PURE__*/React.createElement("label", {
|
|
@@ -316,7 +339,8 @@ var _FileUploader = forwardRefAndName('FileUploader', function (props, ref) {
|
|
|
316
339
|
className: jsStyles.singleFile()
|
|
317
340
|
}, renderFile(files[0], /*#__PURE__*/React.createElement(FileUploaderFile, {
|
|
318
341
|
file: files[0],
|
|
319
|
-
size: size
|
|
342
|
+
size: size,
|
|
343
|
+
onRemove: handleRemoveFile
|
|
320
344
|
}))) : /*#__PURE__*/React.createElement(React.Fragment, null, locale.orDragHere, "\xA0", /*#__PURE__*/React.createElement("div", {
|
|
321
345
|
className: uploadButtonIconClassNames
|
|
322
346
|
}, icon)))), /*#__PURE__*/React.createElement(FocusControlWrapper, {
|
|
@@ -334,9 +358,7 @@ var _FileUploader = forwardRefAndName('FileUploader', function (props, ref) {
|
|
|
334
358
|
onClick: stopPropagation,
|
|
335
359
|
onChange: handleInputChange,
|
|
336
360
|
onFocus: handleFocus,
|
|
337
|
-
onBlur: handleBlur
|
|
338
|
-
,
|
|
339
|
-
value: ''
|
|
361
|
+
onBlur: handleBlur
|
|
340
362
|
})))))));
|
|
341
363
|
});
|
|
342
364
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["FileUploader.tsx"],"names":["React","useCallback","useContext","useEffect","useImperativeHandle","useRef","useState","globalObject","isBrowser","getAttachedFile","cx","useMemoObject","FileUploaderControlContext","useControlLocale","useUpload","useDrop","ThemeContext","UploadIcon","withFileUploaderControlProvider","keyListener","FileUploaderFile","FileUploaderFileList","CommonWrapper","FileUploaderFileValidationResult","useFileUploaderSize","isTheme2022","forwardRefAndName","FocusControlWrapper","UploadIcon2022","globalClasses","jsStyles","stopPropagation","e","FileUploaderDataTids","root","content","link","input","defaultRenderFile","file","fileNode","_FileUploader","props","ref","theme","_isTheme2022","disabled","error","warning","multiple","width","fileUploaderWidth","hideFiles","onBlur","onFocus","onChange","request","validateBeforeUpload","onRequestSuccess","onRequestError","size","renderFile","inputProps","files","setFiles","removeFile","reset","setFileValidationResult","isMinLengthReached","locale","inputRef","fileDivRef","isAsync","isSingleMode","isLinkVisible","setIsLinkVisible","upload","tryValidateAndUpload","forEach","validationMessage","id","sizeClassName","small","sizeSmall","medium","sizeMedium","large","sizeLarge","sizeIconClass","iconSmall","iconMedium","iconLarge","contentInnerClass","contentInnerSmall","contentInnerMedium","contentInnerLarge","handleChange","newFiles","filesArray","Array","from","attachedFiles","map","length","handleDrop","event","dataTransfer","clearData","onDrop","isDraggable","labelRef","isWindowDraggable","windowRef","current","document","focus","isTabPressed","blur","getRootNode","rootNodeRef","focusedByTab","setFocusedByTab","handleInputChange","target","handleFocus","requestAnimationFrame","handleBlur","hovered","setHovered","uploadButtonClassNames","uploadButton","uploadButtonFocus","dragOver","canDrop","uploadButtonWrapperClassNames","windowDragOver","windowDragOver2022","uploadButtonIconClassNames","icon","iconDisabled","hasOneFile","hasOneFileForSingle","contentClassNames","contentWithFiles","linkClassNames","linkHovered","linkDisabled","iconSizes","parseInt","btnIconSizeSmall","btnIconSizeMedium","btnIconSizeLarge","choosedFile","chooseFile","String","fromCharCode","afterLinkText","afterLinkText_HasFiles","singleFile","orDragHere","visuallyHidden","FileUploader","memo","displayName"],"mappings":"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","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 { UploadIcon } from '../../internal/icons/16px';\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 { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { SizeProp } from '../../lib/types/props';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { UploadIcon as UploadIcon2022 } from './UploadIcon';\nimport { globalClasses, jsStyles } from './FileUploader.styles';\n\nconst stopPropagation: React.ReactEventHandler = (e) => e.stopPropagation();\n\n/**\n * @deprecated use SizeProp\n */\nexport type FileUploaderSize = SizeProp;\n\ntype FileUploaderOverriddenProps = 'size';\n\ninterface _FileUploaderProps\n extends CommonProps,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {\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 const _isTheme2022 = isTheme2022(theme);\n\n const {\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) {\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) => {\n if (disabled) {\n return;\n }\n\n const { dataTransfer } = event;\n const { files } = dataTransfer;\n\n if (files?.length > 0) {\n handleChange(files);\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 [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(\n !_isTheme2022 && canDrop && jsStyles.windowDragOver(theme),\n _isTheme2022 && canDrop && jsStyles.windowDragOver2022(theme),\n );\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 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 = _isTheme2022 ? <UploadIcon2022 size={iconSizes[size]} /> : <UploadIcon />;\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 && <FileUploaderFileList renderFile={renderFile} size={size} />}\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) /* */}\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} />)}\n </div>\n ) : (\n <>\n {locale.orDragHere} \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 // для того, чтобы срабатывало событие change при выборе одного и того же файла подряд\n value={''}\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"]}
|
|
1
|
+
{"version":3,"sources":["FileUploader.tsx"],"names":["React","useCallback","useContext","useEffect","useImperativeHandle","useRef","useState","globalObject","isBrowser","getAttachedFile","cx","useMemoObject","FileUploaderControlContext","useControlLocale","useUpload","useDrop","ThemeContext","UploadIcon","withFileUploaderControlProvider","keyListener","FileUploaderFile","FileUploaderFileList","CommonWrapper","FileUploaderFileValidationResult","useFileUploaderSize","isTheme2022","forwardRefAndName","FocusControlWrapper","UploadIcon2022","globalClasses","jsStyles","stopPropagation","e","FileUploaderDataTids","root","content","link","input","defaultRenderFile","file","fileNode","_FileUploader","props","ref","theme","_isTheme2022","initialFiles","disabled","error","warning","multiple","width","fileUploaderWidth","hideFiles","onBlur","onFocus","onChange","request","validateBeforeUpload","onRequestSuccess","onRequestError","size","renderFile","inputProps","files","setFiles","removeFile","reset","setFileValidationResult","isMinLengthReached","locale","inputRef","fileDivRef","isAsync","isSingleMode","isLinkVisible","setIsLinkVisible","upload","tryValidateAndUpload","forEach","validationMessage","id","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","clearData","onDrop","isDraggable","labelRef","isWindowDraggable","windowRef","current","document","focus","isTabPressed","blur","getRootNode","rootNodeRef","focusedByTab","setFocusedByTab","handleInputChange","target","handleFocus","requestAnimationFrame","handleBlur","handleRemoveFile","fileId","DataTransfer","filter","f","items","add","originalFile","hovered","setHovered","uploadButtonClassNames","uploadButton","uploadButtonFocus","dragOver","canDrop","uploadButtonWrapperClassNames","windowDragOver","windowDragOver2022","uploadButtonIconClassNames","icon","iconDisabled","hasOneFile","hasOneFileForSingle","contentClassNames","contentWithFiles","linkClassNames","linkHovered","linkDisabled","iconSizes","parseInt","btnIconSizeSmall","btnIconSizeMedium","btnIconSizeLarge","choosedFile","chooseFile","String","fromCharCode","afterLinkText","afterLinkText_HasFiles","singleFile","orDragHere","visuallyHidden","FileUploader","memo","displayName"],"mappings":"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","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 { UploadIcon } from '../../internal/icons/16px';\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 { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { SizeProp } from '../../lib/types/props';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { UploadIcon as UploadIcon2022 } from './UploadIcon';\nimport { globalClasses, jsStyles } from './FileUploader.styles';\n\nconst stopPropagation: React.ReactEventHandler = (e) => e.stopPropagation();\n\n/**\n * @deprecated use SizeProp\n */\nexport type FileUploaderSize = SizeProp;\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 const _isTheme2022 = isTheme2022(theme);\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) => {\n if (disabled) {\n return;\n }\n\n const { dataTransfer } = event;\n const { files } = dataTransfer;\n\n if (files?.length > 0) {\n handleChange(files);\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(\n !_isTheme2022 && canDrop && jsStyles.windowDragOver(theme),\n _isTheme2022 && canDrop && jsStyles.windowDragOver2022(theme),\n );\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 = _isTheme2022 ? <UploadIcon2022 size={iconSizes[size]} /> : <UploadIcon />;\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) /* */}\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} \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"]}
|
|
@@ -11,6 +11,8 @@ import { SizeProp } from '../../lib/types/props';
|
|
|
11
11
|
export declare type FileUploaderSize = SizeProp;
|
|
12
12
|
declare type FileUploaderOverriddenProps = 'size';
|
|
13
13
|
interface _FileUploaderProps extends CommonProps, Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {
|
|
14
|
+
/** Начальное состояние загруженных файлов */
|
|
15
|
+
initialFiles?: File[];
|
|
14
16
|
/** Состояние ошибки всего контрола */
|
|
15
17
|
error?: boolean;
|
|
16
18
|
/** Состояние предупреждения всего контрола */
|
|
@@ -27,6 +27,35 @@ const request = () => Promise.reject();
|
|
|
27
27
|
<FileUploader request={request} multiple />
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
+
Файлы по умолчанию
|
|
31
|
+
```jsx harmony
|
|
32
|
+
import { FileUploader } from '@skbkontur/react-ui';
|
|
33
|
+
|
|
34
|
+
function createFile(filename, content) {
|
|
35
|
+
return new File(['content'], filename, { type: 'text/plain' });
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const initialFiles = [createFile('test1.txt'), createFile('test2.txt')];
|
|
39
|
+
<FileUploader multiple initialFiles={initialFiles} />
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Файлы по умолчанию с кастомизацией рендеринга
|
|
43
|
+
```jsx harmony
|
|
44
|
+
import { cloneElement } from 'react';
|
|
45
|
+
import { FileUploader } from '@skbkontur/react-ui';
|
|
46
|
+
|
|
47
|
+
function createFile(filename, content) {
|
|
48
|
+
return new File(['content'], filename, { type: 'text/plain' });
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const initialFiles = [createFile('test1.txt'), createFile('test2.txt')];
|
|
52
|
+
<FileUploader
|
|
53
|
+
multiple
|
|
54
|
+
initialFiles={initialFiles}
|
|
55
|
+
renderFile={(file, fileNode) => cloneElement(fileNode, { showSize: false })}
|
|
56
|
+
/>
|
|
57
|
+
```
|
|
58
|
+
|
|
30
59
|
Использование `accept`
|
|
31
60
|
```jsx harmony
|
|
32
61
|
import { FileUploader } from '@skbkontur/react-ui';
|
|
@@ -16,6 +16,7 @@ import { rootNode } from "../../../lib/rootNode";
|
|
|
16
16
|
import { getDOMRect } from "../../../lib/dom/getDOMRect";
|
|
17
17
|
import { createPropsGetter } from "../../../lib/createPropsGetter";
|
|
18
18
|
import { isTestEnv } from "../../../lib/currentEnvironment";
|
|
19
|
+
import { callChildRef } from "../../../lib/callChildRef/callChildRef";
|
|
19
20
|
import { styles, globalClasses } from "../ScrollContainer.styles";
|
|
20
21
|
import { scrollSizeParametersNames } from "../ScrollContainer.constants";
|
|
21
22
|
import { getScrollYOffset, convertScrollbarXScrollState, convertScrollbarYScrollState } from "../ScrollContainer.helpers";
|
|
@@ -146,6 +147,10 @@ export var ScrollContainer = rootNode(_class = (_temp = _class2 = /*#__PURE__*/f
|
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
_this.inner = element;
|
|
150
|
+
|
|
151
|
+
if (_this.props.scrollRef) {
|
|
152
|
+
callChildRef(_this.props.scrollRef, element);
|
|
153
|
+
}
|
|
149
154
|
};
|
|
150
155
|
|
|
151
156
|
_this.handleNativeScroll = function (event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollContainer.tsx"],"names":["React","PropTypes","globalObject","debounce","isInstanceOf","LayoutEvents","CommonWrapper","cx","isIE11","rootNode","getDOMRect","createPropsGetter","isTestEnv","styles","globalClasses","scrollSizeParametersNames","getScrollYOffset","convertScrollbarXScrollState","convertScrollbarYScrollState","ScrollBar","ScrollContainerDataTids","root","inner","ScrollContainer","getProps","defaultProps","initialIsScrollBarVisible","hideScrollBar","showScrollBar","state","isScrollBarXVisible","isScrollBarYVisible","isHovered","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","handleMouseMove","handleMouseLeave","refInner","innerIE11","handleNativeScroll","axis","offsetY","offsetX","invert","disableAnimations","isAxisX","refScrollBar","refScrollBarX","refScrollBarY","offset","isVisible","handleScroll","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","prevScrollState","showScrollBarOnMouseWheel","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","emit","isScrollBarVisible","setState","isScrollBarXHovered","getHover","isScrollBarYHovered","hideScrollBarDelay","WheelEvent","shiftKey","hasScrollBar","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","updateInnerElement","setInnerElement","componentDidMount","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","Component","__KONTUR_REACT_UI__","displayName","propTypes","bool","oneOfType","string","number","oneOf","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n * @deprecated use showScrollBar\n */\n hideScrollBar?: boolean;\n /**\n * Показывать скроллбар\n */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n | 'invert'\n | 'scrollBehaviour'\n | 'preventWindowScroll'\n | 'hideScrollBar'\n | 'disableAnimations'\n | 'hideScrollBarDelay'\n | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n public static displayName = 'ScrollContainer';\n\n public inner: Nullable<HTMLElement>;\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = !this.getProps().hideScrollBar && this.getProps().showScrollBar === 'always';\n\n public state: ScrollContainerState = {\n isScrollBarXVisible: this.initialIsScrollBarVisible,\n isScrollBarYVisible: this.initialIsScrollBarVisible,\n isHovered: false,\n };\n\n public componentDidMount() {\n this.updateInnerElement();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n\n if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {\n this.updateInnerElement();\n }\n\n if (prevProps.showScrollBar !== this.props.showScrollBar) {\n if (this.props.showScrollBar === 'always') {\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true });\n } else if (this.props.showScrollBar === 'never') {\n this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n public hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const { offsetY, offsetX, invert, disableAnimations } = this.getProps();\n const isAxisX = axis === 'x';\n const refScrollBar = isAxisX ? this.refScrollBarX : this.refScrollBarY;\n const offset = isAxisX ? offsetX : offsetY;\n const isVisible = isAxisX ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScroll={this.handleScroll}\n offset={offset}\n disableAnimations={disableAnimations}\n isVisible={isVisible}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private handleScroll = (\n axis: ScrollAxis,\n scrollState: ScrollBarScrollState,\n prevScrollState: ScrollBarScrollState,\n ) => {\n if (scrollState !== prevScrollState) {\n this.handleScrollStateChange(scrollState, axis);\n }\n const { hideScrollBar, showScrollBar } = this.getProps();\n (hideScrollBar || showScrollBar === 'scroll') && this.showScrollBarOnMouseWheel(axis);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow();\n this.scrollX?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private showScrollBarOnMouseWheel = (axis: ScrollAxis) => {\n const isScrollBarVisible = axis === 'x' ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n if (!isScrollBarVisible) {\n axis === 'x' ? this.setState({ isScrollBarXVisible: true }) : this.setState({ isScrollBarYVisible: true });\n }\n this.hideScrollBar(axis);\n };\n\n private readonly hideScrollBar = debounce((axis: ScrollAxis | 'both') => {\n if (this.state.isHovered) {\n return;\n }\n const isScrollBarXHovered = this.scrollX?.getHover();\n const isScrollBarYHovered = this.scrollY?.getHover();\n if (axis === 'both') {\n !isScrollBarXHovered && !isScrollBarYHovered\n ? this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false })\n : this.hideScrollBar('both');\n } else if (axis === 'x') {\n !isScrollBarXHovered ? this.setState({ isScrollBarXVisible: false }) : this.hideScrollBar('x');\n } else {\n !isScrollBarYHovered ? this.setState({ isScrollBarYVisible: false }) : this.hideScrollBar('y');\n }\n }, this.getProps().hideScrollBarDelay);\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n\n this.getProps().showScrollBar === 'hover' &&\n !this.state.isHovered &&\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n if (this.getProps().showScrollBar === 'hover') {\n this.setState({ isHovered: false });\n this.hideScrollBar('both');\n }\n };\n\n private updateInnerElement = () => {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ScrollContainer.tsx"],"names":["React","PropTypes","globalObject","debounce","isInstanceOf","LayoutEvents","CommonWrapper","cx","isIE11","rootNode","getDOMRect","createPropsGetter","isTestEnv","callChildRef","styles","globalClasses","scrollSizeParametersNames","getScrollYOffset","convertScrollbarXScrollState","convertScrollbarYScrollState","ScrollBar","ScrollContainerDataTids","root","inner","ScrollContainer","getProps","defaultProps","initialIsScrollBarVisible","hideScrollBar","showScrollBar","state","isScrollBarXVisible","isScrollBarYVisible","isHovered","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","handleMouseMove","handleMouseLeave","refInner","innerIE11","handleNativeScroll","axis","offsetY","offsetX","invert","disableAnimations","isAxisX","refScrollBar","refScrollBarX","refScrollBarY","offset","isVisible","handleScroll","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","prevScrollState","showScrollBarOnMouseWheel","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","scrollRef","event","reflow","onScroll","preventDefault","emit","isScrollBarVisible","setState","isScrollBarXHovered","getHover","isScrollBarYHovered","hideScrollBarDelay","WheelEvent","shiftKey","hasScrollBar","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","updateInnerElement","setInnerElement","componentDidMount","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","Component","__KONTUR_REACT_UI__","displayName","propTypes","bool","oneOfType","string","number","oneOf","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n * @deprecated use showScrollBar\n */\n hideScrollBar?: boolean;\n /**\n * Показывать скроллбар\n */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n scrollRef?: React.Ref<HTMLDivElement | null>;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n | 'invert'\n | 'scrollBehaviour'\n | 'preventWindowScroll'\n | 'hideScrollBar'\n | 'disableAnimations'\n | 'hideScrollBarDelay'\n | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n public static displayName = 'ScrollContainer';\n\n public inner: Nullable<HTMLElement>;\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = !this.getProps().hideScrollBar && this.getProps().showScrollBar === 'always';\n\n public state: ScrollContainerState = {\n isScrollBarXVisible: this.initialIsScrollBarVisible,\n isScrollBarYVisible: this.initialIsScrollBarVisible,\n isHovered: false,\n };\n\n public componentDidMount() {\n this.updateInnerElement();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n\n if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {\n this.updateInnerElement();\n }\n\n if (prevProps.showScrollBar !== this.props.showScrollBar) {\n if (this.props.showScrollBar === 'always') {\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true });\n } else if (this.props.showScrollBar === 'never') {\n this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n public hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const { offsetY, offsetX, invert, disableAnimations } = this.getProps();\n const isAxisX = axis === 'x';\n const refScrollBar = isAxisX ? this.refScrollBarX : this.refScrollBarY;\n const offset = isAxisX ? offsetX : offsetY;\n const isVisible = isAxisX ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScroll={this.handleScroll}\n offset={offset}\n disableAnimations={disableAnimations}\n isVisible={isVisible}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private handleScroll = (\n axis: ScrollAxis,\n scrollState: ScrollBarScrollState,\n prevScrollState: ScrollBarScrollState,\n ) => {\n if (scrollState !== prevScrollState) {\n this.handleScrollStateChange(scrollState, axis);\n }\n const { hideScrollBar, showScrollBar } = this.getProps();\n (hideScrollBar || showScrollBar === 'scroll') && this.showScrollBarOnMouseWheel(axis);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n\n if (this.props.scrollRef) {\n callChildRef(this.props.scrollRef, element);\n }\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow();\n this.scrollX?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private showScrollBarOnMouseWheel = (axis: ScrollAxis) => {\n const isScrollBarVisible = axis === 'x' ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n if (!isScrollBarVisible) {\n axis === 'x' ? this.setState({ isScrollBarXVisible: true }) : this.setState({ isScrollBarYVisible: true });\n }\n this.hideScrollBar(axis);\n };\n\n private readonly hideScrollBar = debounce((axis: ScrollAxis | 'both') => {\n if (this.state.isHovered) {\n return;\n }\n const isScrollBarXHovered = this.scrollX?.getHover();\n const isScrollBarYHovered = this.scrollY?.getHover();\n if (axis === 'both') {\n !isScrollBarXHovered && !isScrollBarYHovered\n ? this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false })\n : this.hideScrollBar('both');\n } else if (axis === 'x') {\n !isScrollBarXHovered ? this.setState({ isScrollBarXVisible: false }) : this.hideScrollBar('x');\n } else {\n !isScrollBarYHovered ? this.setState({ isScrollBarYVisible: false }) : this.hideScrollBar('y');\n }\n }, this.getProps().hideScrollBarDelay);\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n\n this.getProps().showScrollBar === 'hover' &&\n !this.state.isHovered &&\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n if (this.getProps().showScrollBar === 'hover') {\n this.setState({ isHovered: false });\n this.hideScrollBar('both');\n }\n };\n\n private updateInnerElement = () => {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n };\n}\n"]}
|
|
@@ -59,6 +59,7 @@ export interface ScrollContainerProps extends CommonProps {
|
|
|
59
59
|
* Отключить анимации
|
|
60
60
|
*/
|
|
61
61
|
disableAnimations?: boolean;
|
|
62
|
+
scrollRef?: React.Ref<HTMLDivElement | null>;
|
|
62
63
|
}
|
|
63
64
|
export declare const ScrollContainerDataTids: {
|
|
64
65
|
readonly root: "ScrollContainer__root";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useDrop.ts"],"names":["useCallback","useEffect","useRef","useState","globalObject","useDrop","props","onDrop","droppableRef","overRef","timerId","isDraggable","setIsDraggable","clearTimer","current","clearTimeout","handleDragOver","event","preventDefault","setTimeout","stopPropagation","handleDrop","ref","addEventListener","removeEventListener"],"mappings":"AAAA,SAA2BA,WAA3B,EAAwCC,SAAxC,EAAmDC,MAAnD,EAA2DC,QAA3D,QAA2E,OAA3E;AACA,SAASC,YAAT,QAAwC,0BAAxC;;;;;;;;;;;;;AAaA,OAAO,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAwCC,KAAxC,EAAgG,KAAxDA,KAAwD,cAAxDA,KAAwD,GAAjC,EAAiC;AACrH,eAAmBA,KAAnB,CAAQC,MAAR,UAAQA,MAAR;;AAEA,MAAMC,YAAY,GAAGN,MAAM,CAAW,IAAX,CAA3B;AACA,MAAMO,OAAO,GAAGP,MAAM,CAAU,KAAV,CAAtB;AACA,MAAMQ,OAAO,GAAGR,MAAM,EAAtB;AACA,kBAAsCC,QAAQ,CAAU,KAAV,CAA9C,CAAOQ,WAAP,gBAAoBC,cAApB;;AAEA,MAAMC,UAAU,GAAGb,WAAW,CAAC,YAAM;AACnCU,IAAAA,OAAO,CAACI,OAAR,IAAmBV,YAAY,CAACW,YAAb,CAA0BL,OAAO,CAACI,OAAlC,CAAnB;AACD,GAF6B,EAE3B,EAF2B,CAA9B;;AAIA,MAAME,cAAc,GAAGhB,WAAW;AAChC,YAACiB,KAAD,
|
|
1
|
+
{"version":3,"sources":["useDrop.ts"],"names":["useCallback","useEffect","useRef","useState","globalObject","useDrop","props","onDrop","droppableRef","overRef","timerId","isDraggable","setIsDraggable","clearTimer","current","clearTimeout","handleDragOver","event","preventDefault","setTimeout","stopPropagation","handleDrop","ref","addEventListener","removeEventListener"],"mappings":"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","sourcesContent":["import { MutableRefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\ninterface IUseDropProps {\n onDrop?: (event: DragEvent) => void;\n}\n\ntype IElementWithListener = Pick<HTMLElement, 'addEventListener' | 'removeEventListener'>;\n\ninterface IUseDropResult<TElement extends IElementWithListener> {\n isDraggable: boolean;\n ref: MutableRefObject<TElement | null>;\n}\n\nexport const useDrop = <TElement extends IElementWithListener>(props: IUseDropProps = {}): IUseDropResult<TElement> => {\n const { onDrop } = props;\n\n const droppableRef = useRef<TElement>(null);\n const overRef = useRef<boolean>(false);\n const timerId = useRef<SafeTimer>();\n const [isDraggable, setIsDraggable] = useState<boolean>(false);\n\n const clearTimer = useCallback(() => {\n timerId.current && globalObject.clearTimeout(timerId.current);\n }, []);\n\n const handleDragOver = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n setIsDraggable(true);\n\n clearTimer();\n timerId.current = globalObject.setTimeout(() => {\n overRef.current = false;\n setIsDraggable(false);\n }, 200);\n },\n [clearTimer],\n );\n\n const preventDefault = useCallback((event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n preventDefault(event);\n setIsDraggable(false);\n overRef.current = false;\n\n onDrop?.(event);\n },\n [preventDefault, onDrop],\n );\n\n useEffect(() => {\n const ref = droppableRef.current;\n\n if (!ref) {\n return;\n }\n\n ref.addEventListener('dragenter', preventDefault);\n ref.addEventListener('dragleave', preventDefault);\n ref.addEventListener('dragover', handleDragOver);\n ref.addEventListener('drop', handleDrop);\n\n return () => {\n ref.removeEventListener('dragenter', preventDefault);\n ref.removeEventListener('dragleave', preventDefault);\n ref.removeEventListener('dragover', handleDragOver);\n ref.removeEventListener('drop', handleDrop);\n };\n }, [handleDrop, handleDragOver, preventDefault]);\n\n return { isDraggable, ref: droppableRef };\n};\n"]}
|
package/hooks/useDrop.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MutableRefObject } from 'react';
|
|
2
2
|
interface IUseDropProps {
|
|
3
|
-
onDrop?: (event:
|
|
3
|
+
onDrop?: (event: DragEvent) => void;
|
|
4
4
|
}
|
|
5
5
|
declare type IElementWithListener = Pick<HTMLElement, 'addEventListener' | 'removeEventListener'>;
|
|
6
6
|
interface IUseDropResult<TElement extends IElementWithListener> {
|
package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js
CHANGED
|
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import React, { useCallback, useState } from 'react';
|
|
3
3
|
import { useMemoObject } from "../../../hooks/useMemoObject";
|
|
4
4
|
import { useEffectWithoutInitCall } from "../../../hooks/useEffectWithoutInitCall";
|
|
5
|
-
import { FileUploaderFileStatus } from "../fileUtils";
|
|
5
|
+
import { FileUploaderFileStatus, getAttachedFile } from "../fileUtils";
|
|
6
6
|
import { FileUploaderControlContext } from "../FileUploaderControlContext";
|
|
7
7
|
import { useControlLocale } from "../hooks/useControlLocale";
|
|
8
8
|
import { FileUploaderFileValidationResult } from "../FileUploaderFileValidationResult";
|
|
@@ -24,12 +24,21 @@ var updateFile = function updateFile(files, fileId, getFileUpdatedProps) {
|
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
export var FileUploaderControlProvider = function FileUploaderControlProvider(props) {
|
|
27
|
-
var
|
|
27
|
+
var initialFiles = props.initialFiles,
|
|
28
|
+
multiple = props.multiple,
|
|
29
|
+
children = props.children,
|
|
28
30
|
onValueChange = props.onValueChange,
|
|
29
31
|
onRemove = props.onRemove,
|
|
30
32
|
onAttach = props.onAttach;
|
|
31
33
|
|
|
32
|
-
var _useState = useState(
|
|
34
|
+
var _useState = useState(function () {
|
|
35
|
+
if (initialFiles && initialFiles.length > 0) {
|
|
36
|
+
var attachedFiles = initialFiles.map(getAttachedFile);
|
|
37
|
+
return multiple ? attachedFiles : [attachedFiles[0]];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return [];
|
|
41
|
+
}),
|
|
33
42
|
files = _useState[0],
|
|
34
43
|
setFiles = _useState[1];
|
|
35
44
|
|