Repository URL to install this package:
|
Version:
3.12.20 ▾
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
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; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
import { useMemo, useRef, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { Cross, Download, Original, Transformation } from '@scaleflex/icons';
import { Menu, TooltipV2 } from '@scaleflex/ui/core';
import { useTheme } from '@scaleflex/ui/theme/hooks';
import checkItemsSupportExportWithReason from '@filerobot/utils/lib/checkItemsSupportExportWithReason';
import { PC } from '@filerobot/common';
import { useExplorer, useIsSmallScreen } from '../../hooks';
import { downloadItems, downloadOneFile, emitExportEvent } from '../../slices/downloads.slice';
import { selectAllSelectedItems, selectIsFolderSelected, selectSelectedFiles, selectionsCleared } from '../../slices/selections.slice';
import { useDownloadConsentModal, useTransformedDownloadModal } from '../Modals';
import Styled from './ActionBar.styled';
import { collectionsDeselected } from '../../slices/collections.slice';
import { selectIsCollectionsView, selectIsLabelsView, selectIsShareboxView } from '../../slices/views.slice';
import { downloadLabelAssets, labelsSelectionToggled, selectLabelsArray, selectLabelsSelectedUuids } from '../../slices/labels.slice';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
import { Fragment as _Fragment } from "react/jsx-runtime";
var SIZE = 16;
var DownloadWithExportButton = function DownloadWithExportButton() {
var theme = useTheme();
var dispatch = useDispatch();
var _useExplorer = useExplorer(),
i18n = _useExplorer.i18n,
opts = _useExplorer.opts,
closeModal = _useExplorer.closeModal;
var triggerDownloadConsentModal = useDownloadConsentModal();
var triggerTransformedDownloadModal = useTransformedDownloadModal();
var isWidgetSmallSize = useIsSmallScreen();
var isFolderSelected = useSelector(selectIsFolderSelected);
var selectedFiles = useSelector(selectSelectedFiles);
var selectedItems = useSelector(selectAllSelectedItems);
var isLabelsView = useSelector(selectIsLabelsView);
var isCollectionsView = useSelector(selectIsCollectionsView);
var labels = useSelector(selectLabelsArray);
var selectedLabelsUuids = useSelector(selectLabelsSelectedUuids);
var isShareboxView = useSelector(selectIsShareboxView);
var iconPrimaryColor = theme.palette[PC.IconsPrimary];
var disableDownloadButton = opts.disableDownloadButton,
preventDownloadDefaultBehavior = opts.preventDownloadDefaultBehavior,
hideDownloadButtonIcon = opts.hideDownloadButtonIcon,
hideExportOptionsMenu = opts.hideExportOptionsMenu,
replaceDownloadButtonWithExport = opts.replaceDownloadButtonWithExport,
closeAfterExport = opts.closeAfterExport;
var _useState = useState(),
_useState2 = _slicedToArray(_useState, 2),
exportOptionsMenuAnchor = _useState2[0],
setExportOptionsMenuAnchor = _useState2[1];
var menuRef = useRef(null);
var deselectAllLabels = function deselectAllLabels() {
return dispatch(labelsSelectionToggled({
uuids: []
}));
};
var firstSelectedLabelAssetsCount = useMemo(function () {
var _labels$find;
return (selectedLabelsUuids === null || selectedLabelsUuids === void 0 ? void 0 : selectedLabelsUuids.length) === 1 && ((_labels$find = labels.find(function (label) {
return label.uuid === selectedLabelsUuids[0];
})) === null || _labels$find === void 0 ? void 0 : _labels$find.assets_count);
}, [selectedLabelsUuids]);
var unsupportedExportReason = useMemo(function () {
return checkItemsSupportExportWithReason(selectedFiles);
}, [selectedFiles]);
var disableExport = isFolderSelected || !!unsupportedExportReason;
var tooltipTitle = i18n(unsupportedExportReason);
var hideExportButton = disableDownloadButton || isFolderSelected;
var showDownloadButtonArrow = !hideExportButton && !isLabelsView && !isCollectionsView && !isWidgetSmallSize && !isShareboxView && !hideExportOptionsMenu;
var toggleExportOptionsMenu = function toggleExportOptionsMenu(event) {
event.stopPropagation();
setExportOptionsMenuAnchor(exportOptionsMenuAnchor ? null : menuRef.current);
};
var handleClearSelection = function handleClearSelection() {
dispatch(selectionsCleared());
deselectAllLabels();
dispatch(collectionsDeselected());
};
var handleDownloadClick = function handleDownloadClick(event) {
var skipExportOptionsMenu = isShareboxView || isFolderSelected || (selectedLabelsUuids === null || selectedLabelsUuids === void 0 ? void 0 : selectedLabelsUuids.length) === 1 || !showDownloadButtonArrow;
if (skipExportOptionsMenu) {
onClickDownload();
} else toggleExportOptionsMenu(event);
};
var onClickDownload = function onClickDownload() {
if ((selectedLabelsUuids === null || selectedLabelsUuids === void 0 ? void 0 : selectedLabelsUuids.length) === 1) {
triggerDownloadConsentModal(function () {
return dispatch(downloadLabelAssets(selectedLabelsUuids[0]));
});
}
if (selectedItems.length > 0) {
dispatch(emitExportEvent(selectedItems.map(function (file) {
var _file$url;
return {
link: file === null || file === void 0 ? void 0 : (_file$url = file.url) === null || _file$url === void 0 ? void 0 : _file$url.cdn,
file: file
};
})));
}
if (closeAfterExport) {
closeModal();
}
setExportOptionsMenuAnchor(null);
if (!preventDownloadDefaultBehavior && !isLabelsView) {
var isOneItem = selectedItems.length === 1;
var items = !isOneItem || isFolderSelected ? selectedItems : selectedItems[0];
var urlTypeToChoose = isShareboxView && 'cdn';
triggerDownloadConsentModal(isOneItem && !isFolderSelected ? function () {
return dispatch(downloadOneFile({
file: items,
urlTypeToChoose: urlTypeToChoose
}));
} : function () {
return dispatch(downloadItems({
items: items
}));
});
return;
}
if (selectedItems.length > 0) {
dispatch(emitExportEvent(selectedItems.map(function (file) {
var _file$url2;
return {
link: file === null || file === void 0 ? void 0 : (_file$url2 = file.url) === null || _file$url2 === void 0 ? void 0 : _file$url2.cdn,
file: file
};
})));
}
};
var onClickExport = function onClickExport(e) {
toggleExportOptionsMenu(e);
triggerTransformedDownloadModal(selectedItems);
};
var renderExportMenuOption = function renderExportMenuOption(isDisabled) {
return /*#__PURE__*/_jsxs(Styled.MenuItem, {
onClick: !isDisabled ? onClickExport : undefined,
disabled: isDisabled,
style: {
justifyContent: 'flex-start',
gap: '10px'
},
children: [/*#__PURE__*/_jsx(Transformation, {
color: iconPrimaryColor,
size: SIZE
}), i18n('contextMenuDownloadOptionsLabel')]
});
};
return /*#__PURE__*/_jsxs(_Fragment, {
children: [(!isLabelsView || (selectedLabelsUuids === null || selectedLabelsUuids === void 0 ? void 0 : selectedLabelsUuids.length) === 1 && !!firstSelectedLabelAssetsCount) && !isCollectionsView && /*#__PURE__*/_jsx(_Fragment, {
children: /*#__PURE__*/_jsx(Styled.DownloadButton, {
startIcon: !hideDownloadButtonIcon && function (props) {
return /*#__PURE__*/_jsx(Download, _objectSpread(_objectSpread({}, props), {}, {
ref: menuRef
}));
},
onClick: handleDownloadClick,
color: "primary",
size: "lg",
isSmall: isWidgetSmallSize,
hideDownloadButtonIcon: hideDownloadButtonIcon,
ref: menuRef,
endIcon: showDownloadButtonArrow && function (props) {
return /*#__PURE__*/_jsx(Styled.ArrowBottomIcon, _objectSpread(_objectSpread({
$isOpen: exportOptionsMenuAnchor
}, props), {}, {
size: 14
}));
},
children: replaceDownloadButtonWithExport ? i18n('altExportButtonLabel') : i18n('mutualizedExportButtonLabel')
})
}), !hideExportButton && !isLabelsView && !isCollectionsView && /*#__PURE__*/_jsxs(_Fragment, {
children: [/*#__PURE__*/_jsxs(Menu, {
anchorEl: exportOptionsMenuAnchor,
onClose: toggleExportOptionsMenu,
position: "top-end",
children: [/*#__PURE__*/_jsxs(Styled.MenuItem, {
onClick: onClickDownload,
style: {
justifyContent: 'flex-start',
gap: '10px'
},
children: [/*#__PURE__*/_jsx(Original, {
color: iconPrimaryColor,
size: SIZE
}), i18n('explorerTopBarAsOriginalText')]
}), disableExport ? /*#__PURE__*/_jsx(TooltipV2, {
title: tooltipTitle,
children: renderExportMenuOption(disableExport)
}) : renderExportMenuOption()]
}), /*#__PURE__*/_jsx(Styled.Seprator, {
$mr: 24
})]
}), /*#__PURE__*/_jsx(Styled.SelectionIconButton, {
size: "md",
color: "basic",
onClick: handleClearSelection,
children: function children(props) {
return /*#__PURE__*/_jsx(Cross, _objectSpread({}, props));
}
})]
});
};
export default DownloadWithExportButton;