UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

175 lines (174 loc) 7.13 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; Object.defineProperty(exports, "defaultProps", { enumerable: true, get: function () { return _UploadContext.defaultProps; } }); var _withComponentMarkers = _interopRequireDefault(require("../../shared/helpers/withComponentMarkers.js")); var _react = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _SpacingUtils = require("../space/SpacingUtils.js"); var _Provider = _interopRequireDefault(require("../../shared/Provider.js")); var _Context = _interopRequireDefault(require("../../shared/Context.js")); var _componentHelper = require("../../shared/component-helper.js"); var _filterValidProps = require("../../shared/helpers/filterValidProps.js"); var _useId = _interopRequireDefault(require("../../shared/helpers/useId.js")); var _HeightAnimation = _interopRequireDefault(require("../height-animation/HeightAnimation.js")); var _UploadFileInput = _interopRequireDefault(require("./UploadFileInput.js")); var _useUpload = _interopRequireDefault(require("./useUpload.js")); var _UploadDropzone = _interopRequireDefault(require("./UploadDropzone.js")); var _UploadContext = require("./UploadContext.js"); var _UploadVerify = require("./UploadVerify.js"); var _UploadFileList2 = _interopRequireDefault(require("./UploadFileList.js")); var _UploadInfo2 = _interopRequireDefault(require("./UploadInfo.js")); var _FormLabel = _interopRequireDefault(require("../FormLabel.js")); var _jsxRuntime = require("react/jsx-runtime"); var _UploadInfo, _UploadFileList, _br; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const Upload = localProps => { const context = _react.default.useContext(_Context.default); const { buttonTextSingular, textSingular, ...translations } = context.getTranslation(localProps).Upload; if ((localProps === null || localProps === void 0 ? void 0 : localProps.filesAmountLimit) === 1) { translations.buttonText = buttonTextSingular; translations.text = textSingular; } const extendedProps = (0, _componentHelper.extendPropsWithContext)(localProps, _UploadContext.defaultProps, { skeleton: context === null || context === void 0 ? void 0 : context.skeleton }, (0, _filterValidProps.pickFormElementProps)(context === null || context === void 0 ? void 0 : context.formElement), translations, context.Upload); const { id: idProp, variant, skeleton, className, acceptedFileTypes, filesAmountLimit, fileMaxSize, onChange, onFileDelete, onFileClick, download, allowDuplicates, title, text, fileTypeTableCaption, fileTypeDescription, fileSizeDescription, fileAmountDescription, fileSizeContent, buttonText, loadingText, errorLargeFile, errorUnsupportedFile, errorAmountLimit, deleteButton, listAriaLabel, buttonProps, disableDragAndDrop, ...props } = extendedProps; const id = (0, _useId.default)(idProp); const { files, setFiles, setInternalFiles, getExistingFile } = (0, _useUpload.default)(id); const onInputUpload = (0, _react.useCallback)(newFiles => { const mergedFiles = [...files, ...newFiles.map(fileItem => { const { file } = fileItem; const existingFile = getExistingFile(file, files); fileItem.exists = Boolean(existingFile); fileItem.id = fileItem.exists && !allowDuplicates ? existingFile.id : (0, _componentHelper.makeUniqueId)(); return fileItem; })]; const filesToVerify = allowDuplicates ? mergedFiles : mergedFiles.filter(({ exists }) => !exists); const verifiedFiles = (0, _UploadVerify.verifyFiles)(filesToVerify, { fileMaxSize, acceptedFileTypes, errorUnsupportedFile, errorLargeFile }); const validFiles = [...verifiedFiles].slice(0, filesAmountLimit); setFiles(validFiles); setInternalFiles(mergedFiles); if (typeof onChange === 'function') { onChange({ files: validFiles }); } return validFiles; }, [acceptedFileTypes, errorLargeFile, errorUnsupportedFile, fileMaxSize, files, filesAmountLimit, getExistingFile, onChange, setFiles, setInternalFiles]); const wrapperIsHeightAnimation = disableDragAndDrop || props.disabled; const UploadWrapper = wrapperIsHeightAnimation ? _HeightAnimation.default : _UploadDropzone.default; return (0, _jsxRuntime.jsx)(_UploadContext.UploadContext, { value: { ...extendedProps, id, onInputUpload }, children: (0, _jsxRuntime.jsx)(_Provider.default, { skeleton: skeleton, children: (0, _jsxRuntime.jsxs)(UploadWrapper, { ...(0, _SpacingUtils.applySpacing)(props, { className: (0, _clsx.default)("dnb-upload dnb-form-component", className, variant && `dnb-upload--${variant}`) }), ...(!wrapperIsHeightAnimation ? { hideOutline: variant === 'compact' } : {}), children: [variant !== 'compact' && (_UploadInfo || (_UploadInfo = (0, _jsxRuntime.jsx)(_UploadInfo2.default, {}))), variant === 'compact' && (title || text) && (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, { children: [(0, _jsxRuntime.jsx)(CompactLabel, { id: id, title: title, text: text }), props === null || props === void 0 ? void 0 : props.children] }), (0, _jsxRuntime.jsx)(_UploadFileInput.default, { disabled: props.disabled, files: files, ...props }), _UploadFileList || (_UploadFileList = (0, _jsxRuntime.jsx)(_UploadFileList2.default, {}))] }) }) }); }; function CompactLabel(props) { const { id, title, text } = props; return (0, _jsxRuntime.jsx)(_FormLabel.default, { forId: `${id}-input`, vertical: true, className: "dnb-upload__label", children: (0, _jsxRuntime.jsxs)("span", { children: [title && (0, _jsxRuntime.jsx)("span", { children: title }), title && text && (_br || (_br = (0, _jsxRuntime.jsx)("br", {}))), text && (0, _jsxRuntime.jsx)("span", { className: "dnb-upload__text", children: text })] }) }); } Upload.useUpload = _useUpload.default; (0, _withComponentMarkers.default)(Upload, { _formElement: true, _supportsSpacingProps: true }); var _default = exports.default = Upload; //# sourceMappingURL=Upload.js.map