@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
157 lines (156 loc) • 6.93 kB
JavaScript
;
"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