@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
101 lines (100 loc) • 6.03 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _push = _interopRequireDefault(require("core-js-pure/stable/instance/push.js"));
var _react = _interopRequireDefault(require("react"));
var _UploadContext = require("./UploadContext.js");
var _Lead = _interopRequireDefault(require("../../elements/Lead.js"));
var _P = _interopRequireDefault(require("../../elements/P.js"));
var _Dl = _interopRequireDefault(require("../../elements/Dl.js"));
var _Dt = _interopRequireDefault(require("../../elements/Dt.js"));
var _Dd = _interopRequireDefault(require("../../elements/Dd.js"));
var _NumberUtils = require("../number-format/NumberUtils.js");
var _UploadVerify = require("./UploadVerify.js");
var _Table = _interopRequireDefault(require("../Table.js"));
var _TableTr = _interopRequireDefault(require("../table/TableTr.js"));
var _TableTh = _interopRequireDefault(require("../table/TableTh.js"));
var _TableTd = _interopRequireDefault(require("../table/TableTd.js"));
var _Flex = _interopRequireDefault(require("../../components/Flex.js"));
var _UploadInfoAcceptedFi;
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const prettifyAcceptedFileFormats = acceptedFileTypes => acceptedFileTypes.sort().join(', ').toUpperCase();
const UploadInfo = () => {
const context = _react.default.useContext(_UploadContext.UploadContext);
const {
title,
text,
acceptedFileTypes,
fileTypeDescription,
fileSizeDescription,
fileAmountDescription,
fileSizeContent,
filesAmountLimit,
fileMaxSize,
children
} = context;
const prettifiedAcceptedFileFormats = prettifyAcceptedFileFormats(acceptedFileTypes);
const isAcceptedFileTypeListOfStrings = (0, _UploadVerify.isArrayOfStrings)(acceptedFileTypes);
const displayAcceptedFileFormatsListItem = isAcceptedFileTypeListOfStrings && prettifiedAcceptedFileFormats;
const displayFileMaxSizeItem = isAcceptedFileTypeListOfStrings && fileMaxSize;
const displayFilesAmountLimitItem = filesAmountLimit < _UploadContext.defaultProps.filesAmountLimit;
const displayAcceptedFileFormatsTable = !displayAcceptedFileFormatsListItem && (0, _UploadVerify.isArrayOfObjects)(acceptedFileTypes);
const displayDl = displayAcceptedFileFormatsListItem || displayFileMaxSizeItem || displayFilesAmountLimitItem;
return _react.default.createElement(_Flex.default.Stack, {
gap: "small"
}, (title || text) && _react.default.createElement(_Flex.default.Stack, {
gap: "xx-small"
}, title && _react.default.createElement(_Lead.default, {
space: "0"
}, title), text && _react.default.createElement(_P.default, {
className: "dnb-upload__text"
}, text)), children, displayDl && _react.default.createElement(_Dl.default, {
bottom: 0,
layout: "horizontal"
}, displayAcceptedFileFormatsListItem && _react.default.createElement(_Dl.default.Item, null, _react.default.createElement(_Dt.default, null, fileTypeDescription), _react.default.createElement(_Dd.default, null, prettifiedAcceptedFileFormats)), displayFileMaxSizeItem && _react.default.createElement(_Dl.default.Item, null, _react.default.createElement(_Dt.default, null, fileSizeDescription), _react.default.createElement(_Dd.default, null, String(fileSizeContent).replace('%size', (0, _NumberUtils.format)(fileMaxSize).toString()))), displayFilesAmountLimitItem && _react.default.createElement(_Dl.default.Item, null, _react.default.createElement(_Dt.default, null, fileAmountDescription), _react.default.createElement(_Dd.default, null, filesAmountLimit))), displayAcceptedFileFormatsTable && (_UploadInfoAcceptedFi || (_UploadInfoAcceptedFi = _react.default.createElement(UploadInfoAcceptedFileTypesTable, null))));
};
function UploadInfoAcceptedFileTypesTable() {
const context = _react.default.useContext(_UploadContext.UploadContext);
const {
acceptedFileTypes,
fileTypeTableCaption,
fileTypeDescription,
fileSizeDescription,
fileSizeContent,
fileMaxSize
} = context;
const groupByFileMaxSize = (acceptedFileTypes, fallBackFileMaxSize) => {
const fileMaxSizeIsFalseOrZero = fileMaxSize => {
return fileMaxSize === false || fileMaxSize === 0;
};
const group = {};
acceptedFileTypes.forEach(item => {
var _context;
const itemFileMaxSize = item.fileMaxSize;
const groupName = itemFileMaxSize ? itemFileMaxSize : fileMaxSizeIsFalseOrZero(itemFileMaxSize) ? 0 : fileMaxSizeIsFalseOrZero(fallBackFileMaxSize) ? 0 : fallBackFileMaxSize;
group[groupName] = group[groupName] || [];
(0, _push.default)(_context = group[groupName]).call(_context, item);
});
return group;
};
const acceptedFileTypesGroupedByFileMaxSize = groupByFileMaxSize(acceptedFileTypes, fileMaxSize);
return _react.default.createElement(_Table.default, {
border: true,
className: "dnb-upload__accepted-file-types-table",
size: "small"
}, _react.default.createElement("caption", {
className: "dnb-sr-only"
}, fileTypeTableCaption), _react.default.createElement("thead", null, _react.default.createElement(_TableTr.default, {
variant: "odd",
cellSpacing: 0
}, _react.default.createElement(_TableTh.default, null, fileTypeDescription), _react.default.createElement(_TableTh.default, null, fileSizeDescription))), _react.default.createElement("tbody", null, Object.keys(acceptedFileTypesGroupedByFileMaxSize).sort((a, b) => Number(b) - Number(a)).map(key => {
return _react.default.createElement(_TableTr.default, {
variant: "odd",
key: key
}, _react.default.createElement(_TableTd.default, null, prettifyAcceptedFileFormats(acceptedFileTypesGroupedByFileMaxSize[key].map(acceptedFileTypesObj => acceptedFileTypesObj.fileType))), _react.default.createElement(_TableTd.default, null, key !== '0' && String(fileSizeContent).replace('%size', (0, _NumberUtils.format)(key).toString())));
})));
}
var _default = exports.default = UploadInfo;
//# sourceMappingURL=UploadInfo.js.map