@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
175 lines (174 loc) • 7.13 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 _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