UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

122 lines (121 loc) 4.51 kB
"use client"; import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; const _excluded = ["value", "format", "className", "variant", "listType", "download", "displaySize", "onFileClick"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import React, { useMemo, useState } from 'react'; import classnames from 'classnames'; import { useValueProps } from '../../hooks'; import ValueBlock from '../../ValueBlock'; import ListFormat from '../../../../components/list-format'; import { getFileIcon } from '../../../../components/upload/UploadFileListCell'; import { BYTES_IN_A_MEGA_BYTE } from '../../../../components/upload/UploadVerify'; import { transformFiles } from '../../Field/Upload/Upload'; import { format } from '../../../../components/number-format/NumberUtils'; import { UploadFileLink } from '../../../../components/upload/UploadFileListLink'; import { isAsync } from '../../../../shared/helpers/isAsync'; function Upload(props) { const preparedProps = _objectSpread({ fromExternal: transformFiles }, props); const _useValueProps = useValueProps(preparedProps), { value, format, className, variant = 'text', listType, download = false, displaySize = false, onFileClick } = _useValueProps, rest = _objectWithoutProperties(_useValueProps, _excluded); const list = useMemo(() => { const valueToUse = (value === null || value === void 0 ? void 0 : value.map((uploadFile, index) => { if (!uploadFile) { return; } return React.createElement(UploadFileItem, { key: index, uploadFile: uploadFile, download: download, displaySize: displaySize, onFileClick: onFileClick }); })) || undefined; if (valueToUse) { return React.createElement(ListFormat, { value: valueToUse, format: format, variant: variant, listType: listType }); } }, [value, download, displaySize, onFileClick, format, variant, listType]); return React.createElement(ValueBlock, _extends({ className: classnames('dnb-forms-value-upload', className) }, rest), list); } function getSize(size) { if (!size) { return; } const sizeInMb = size / BYTES_IN_A_MEGA_BYTE; return ` (${format(sizeInMb, { decimals: 0 })} MB)`; } Upload._supportsSpacingProps = true; export default Upload; function UploadFileItem(props) { const { uploadFile, download = false, displaySize = false, onFileClick } = props; const [loading, setLoading] = useState(false); const { file, isLoading: fileIsLoading } = uploadFile || {}; if (!file) { return null; } const handleFileClickAsync = async uploadFile => { setLoading(true); await onFileClick({ fileItem: uploadFile }); setLoading(false); }; const onFileClickHandler = async () => { if (typeof onFileClick === 'function') { if (isAsync(onFileClick)) { handleFileClickAsync(uploadFile); } else { onFileClick({ fileItem: uploadFile }); } } }; const imageUrl = (file === null || file === void 0 ? void 0 : file.size) > 0 ? URL.createObjectURL(file) : null; const text = file.name + (displaySize ? ' ' + getSize(file.size) : ''); const isLoading = fileIsLoading || loading; return React.createElement("span", { className: "dnb-forms-value-upload__item" }, getFileIcon(file, { isLoading, size: 'medium' }, false), React.createElement(UploadFileLink, { left: "x-small", text: text, href: imageUrl, download: download, onClick: onFileClick && onFileClickHandler })); } //# sourceMappingURL=Upload.js.map