Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@filerobot/explorer / lib / components / ActionBar / DownloadWithExportButton.js
Size: Mime:
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;