UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

157 lines (156 loc) 6.93 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 _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _SpacingHelper = require("../space/SpacingHelper.js"); var _Provider = _interopRequireDefault(require("../../shared/Provider.js")); var _Context = _interopRequireDefault(require("../../shared/Context.js")); var _componentHelper = require("../../shared/component-helper.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 _UploadInfo, _UploadFileList, _br; function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } 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 _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } 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 }, 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, fileListAriaLabel, buttonProps, disableDragAndDrop, ...props } = extendedProps; const spacingClasses = (0, _SpacingHelper.createSpacingClasses)(props); 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 _react.default.createElement(_UploadContext.UploadContext.Provider, { value: { ...extendedProps, id, onInputUpload } }, _react.default.createElement(_Provider.default, { skeleton: skeleton }, _react.default.createElement(UploadWrapper, _extends({ className: (0, _classnames.default)('dnb-upload', spacingClasses, className, variant && `dnb-upload--${variant}`) }, !wrapperIsHeightAnimation ? { hideOutline: variant === 'compact' } : {}), variant !== 'compact' && (_UploadInfo || (_UploadInfo = _react.default.createElement(_UploadInfo2.default, null))), variant === 'compact' && (title || text) && _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(CompactLabel, { id: id, title: title, text: text }), props === null || props === void 0 ? void 0 : props.children), _react.default.createElement(_UploadFileInput.default, _extends({ disabled: props.disabled, files: files }, props)), _UploadFileList || (_UploadFileList = _react.default.createElement(_UploadFileList2.default, null))))); }; function CompactLabel(props) { const { id, title, text } = props; return _react.default.createElement(_FormLabel.default, { forId: `${id}-input`, vertical: true, className: "dnb-upload__label" }, _react.default.createElement("span", null, title && _react.default.createElement("span", null, title), title && text && (_br || (_br = _react.default.createElement("br", null))), text && _react.default.createElement("span", { className: "dnb-upload__text" }, text))); } Upload.useUpload = _useUpload.default; Upload._formElement = true; Upload._supportsSpacingProps = true; var _default = exports.default = Upload; //# sourceMappingURL=Upload.js.map