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 / ContextMenu / FolderOptions.js
Size: Mime:
import { useDispatch, useSelector } from 'react-redux';
import { FileMoveTo, Remove, Rename, Download, AddFolder, More, Csv, Share } from '@scaleflex/icons';
import { PERMISSIONS } from '@filerobot/utils/lib/constants';
import { selectIsUserPermittedToShare } from '@filerobot/core/lib/slices/user.slice';
import ShareOptions from './ShareOptions';
import { useDownloadConsentModal, useListAsCsvModal, useDeleteItemsModal, useAddNewFolderModal, useMoveItemsModal } from '../Modals';
import { downloadItems } from '../../slices/downloads.slice';
import { useExplorer } from '../../hooks';
import { itemRenameOpened } from '../../slices/panels.slice';
import { selectBaseFolderPath, selectCurrentFolder } from '../../slices/folders.slice';
import { selectIsAssetsView, selectIsFavoritesView, selectIsFoldersView, selectIsShareboxView } from '../../slices/views.slice';
import { jsx as _jsx } from "react/jsx-runtime";
var isSelected = function isSelected(_ref) {
  var folders = _ref.folders;
  return !!folders.length;
};
var isEmptySelection = function isEmptySelection(_ref2) {
  var folders = _ref2.folders;
  return folders.length === 0;
};
var isCurrentAndSelectedFolderSame = function isCurrentAndSelectedFolderSame(_ref3) {
  var _folders$;
  var currentFolder = _ref3.currentFolder,
    folders = _ref3.folders;
  return (currentFolder === null || currentFolder === void 0 ? void 0 : currentFolder.uuid) === ((_folders$ = folders[0]) === null || _folders$ === void 0 ? void 0 : _folders$.uuid);
};
var getProperSelections = function getProperSelections(folders, currentFolder) {
  return isEmptySelection({
    folders: folders
  }) ? [currentFolder] : folders;
};
var moveTo = function moveTo(_ref4) {
  var folders = _ref4.folders,
    currentFolder = _ref4.currentFolder,
    triggerMoveItemsModal = _ref4.triggerMoveItemsModal;
  triggerMoveItemsModal({
    foldersUuids: [folders[0].uuid || currentFolder.uuid]
  });
};
var renameFolder = function renameFolder(_ref5) {
  var _folders$2;
  var dispatch = _ref5.dispatch,
    folders = _ref5.folders,
    isContextMenuFromSidebar = _ref5.isContextMenuFromSidebar;
  dispatch(itemRenameOpened({
    "for": (_folders$2 = folders[0]) === null || _folders$2 === void 0 ? void 0 : _folders$2.uuid,
    fromSidebar: isContextMenuFromSidebar
  }));
};
var deleteFolder = function deleteFolder(_ref6) {
  var foldersUuids = _ref6.foldersUuids,
    triggerDeleteItemsModal = _ref6.triggerDeleteItemsModal;
  triggerDeleteItemsModal({
    foldersUuids: foldersUuids
  });
};
var hideDownloadOption = function hideDownloadOption(_ref7) {
  var folders = _ref7.folders,
    preventDownloadDefaultBehavior = _ref7.preventDownloadDefaultBehavior;
  return isEmptySelection({
    folders: folders
  }) || preventDownloadDefaultBehavior;
};
var hideShareOption = function hideShareOption(_ref8) {
  var isShareboxView = _ref8.isShareboxView,
    folders = _ref8.folders,
    isUserPermittedToShare = _ref8.isUserPermittedToShare,
    isFastToken = _ref8.isFastToken;
  return !isUserPermittedToShare || isEmptySelection({
    folders: folders
  }) || isFastToken || isShareboxView;
};
var hideMoreActionsOption = function hideMoreActionsOption(_ref9) {
  var folders = _ref9.folders,
    isFastToken = _ref9.isFastToken;
  return isFastToken || isEmptySelection({
    folders: folders
  });
};
var hideAccessOption = function hideAccessOption(_ref10) {
  var isShareboxView = _ref10.isShareboxView,
    enabledManageAccess = _ref10.enabledManageAccess;
  return isShareboxView || !enabledManageAccess;
};
var hideAddFolderOption = function hideAddFolderOption(_ref11) {
  var isShareboxView = _ref11.isShareboxView,
    folders = _ref11.folders,
    checkUserPermissions = _ref11.checkUserPermissions,
    isFoldersView = _ref11.isFoldersView;
  return isShareboxView || !isFoldersView || isSelected({
    folders: folders
  }) || !checkUserPermissions([PERMISSIONS.FOLDER_CREATE]);
};
var hideRenameOption = function hideRenameOption(_ref12) {
  var folders = _ref12.folders,
    currentFolder = _ref12.currentFolder,
    checkUserPermissions = _ref12.checkUserPermissions;
  return isEmptySelection({
    folders: folders
  }) || !checkUserPermissions([PERMISSIONS.FOLDER_RENAME]) || isCurrentAndSelectedFolderSame({
    folders: folders,
    currentFolder: currentFolder
  });
};
var hideMoveToOption = function hideMoveToOption(_ref13) {
  var isShareboxView = _ref13.isShareboxView,
    folders = _ref13.folders,
    checkUserPermissions = _ref13.checkUserPermissions,
    isAssetsView = _ref13.isAssetsView,
    isFavoritesView = _ref13.isFavoritesView,
    currentFolder = _ref13.currentFolder;
  return isShareboxView || !checkUserPermissions([PERMISSIONS.FOLDER_MOVE]) || isEmptySelection({
    folders: folders
  }) || isCurrentAndSelectedFolderSame({
    folders: folders,
    currentFolder: currentFolder
  }) || isAssetsView || isFavoritesView;
};
var hideDeleteOption = function hideDeleteOption(_ref14) {
  var isShareboxView = _ref14.isShareboxView,
    folders = _ref14.folders,
    currentFolder = _ref14.currentFolder,
    checkUserPermissions = _ref14.checkUserPermissions;
  return isShareboxView || isEmptySelection({
    folders: folders
  }) || !checkUserPermissions([PERMISSIONS.FOLDER_DELETE]) || isCurrentAndSelectedFolderSame({
    folders: folders,
    currentFolder: currentFolder
  });
};
var SIZE = '14';
// Note: `content` if not a function it would be passed to i18n function so pass an i18n key
// otherwise it would be shown as it is passed
// used PascalCase, for avoiding react's eslint error of react-hooks rules and converting to component.
var FolderOptions = function FolderOptions() {
  var dispatch = useDispatch();
  var triggerDownloadConsent = useDownloadConsentModal();
  var triggerListAsCsvModal = useListAsCsvModal();
  var triggerDeleteItemsModal = useDeleteItemsModal();
  var triggerAddNewFolderModal = useAddNewFolderModal();
  var triggerMoveItemsModal = useMoveItemsModal();
  var currentFolder = useSelector(selectCurrentFolder);
  var isUserPermittedToShare = useSelector(selectIsUserPermittedToShare);
  var isFoldersView = useSelector(selectIsFoldersView);
  var isAssetsView = useSelector(selectIsAssetsView);
  var isFavoritesView = useSelector(selectIsFavoritesView);
  var isShareboxView = useSelector(selectIsShareboxView);
  var baseFolderPath = useSelector(selectBaseFolderPath);
  var _useExplorer = useExplorer(),
    checkUserPermissions = _useExplorer.checkUserPermissions,
    _useExplorer$opts = _useExplorer.opts,
    isFastToken = _useExplorer$opts.isFastToken,
    enabledManageAccess = _useExplorer$opts.enabledManageAccess,
    preventDownloadDefaultBehavior = _useExplorer$opts.preventDownloadDefaultBehavior;
  return [{
    content: 'mutualizedDownloadButton',
    prefix: function prefix(_ref15) {
      var iconPrimaryColor = _ref15.iconPrimaryColor;
      return /*#__PURE__*/_jsx(Download, {
        color: iconPrimaryColor,
        size: SIZE
      });
    },
    key: 'DOWNLOAD_AS_ARCHIVE',
    onClick: function onClick(_ref16) {
      var folders = _ref16.folders;
      var onConfirmHandler = function onConfirmHandler() {
        return dispatch(downloadItems({
          items: getProperSelections(folders, currentFolder)
        }));
      };
      triggerDownloadConsent(onConfirmHandler);
    },
    hideOption: function hideOption(_ref17) {
      var folders = _ref17.folders;
      return hideDownloadOption({
        folders: folders,
        preventDownloadDefaultBehavior: preventDownloadDefaultBehavior
      });
    }
  }, {
    content: 'mutualizedShareLabel',
    subListItemsFn: ShareOptions,
    prefix: function prefix(_ref18) {
      var iconPrimaryColor = _ref18.iconPrimaryColor;
      return /*#__PURE__*/_jsx(Share, {
        color: iconPrimaryColor,
        size: SIZE
      });
    },
    key: 'SHARE_FOLDER',
    hideOption: function hideOption(_ref19) {
      var folders = _ref19.folders;
      return hideShareOption({
        isShareboxView: isShareboxView,
        folders: folders,
        isUserPermittedToShare: isUserPermittedToShare,
        isFastToken: isFastToken
      });
    }
  }, {
    content: /*#__PURE__*/_jsx("div", {
      className: "filerobot-c-horizontal-separator"
    }),
    disabled: true,
    key: 'SEPARATOR_1',
    hideOption: function hideOption(_ref20) {
      var folders = _ref20.folders;
      return hideDownloadOption({
        folders: folders,
        preventDownloadDefaultBehavior: preventDownloadDefaultBehavior
      }) && hideShareOption({
        isShareboxView: isShareboxView,
        isUserPermittedToShare: isUserPermittedToShare,
        folders: folders
      });
    }
  }, {
    content: 'mutualizedMoreActions',
    subListItemsFn: function subListItemsFn(_ref21) {
      var folders = _ref21.folders,
        iconPrimaryColor = _ref21.iconPrimaryColor;
      return [{
        content: 'downloadOptionsListAsCSVLabel',
        prefix: function prefix() {
          return /*#__PURE__*/_jsx(Csv, {
            color: iconPrimaryColor,
            size: SIZE
          });
        },
        key: 'LIST_AS_CSV',
        onClick: function onClick() {
          triggerListAsCsvModal(getProperSelections(folders[0], currentFolder));
        }
      }];
    },
    prefix: function prefix(_ref22) {
      var iconPrimaryColor = _ref22.iconPrimaryColor;
      return /*#__PURE__*/_jsx(More, {
        color: iconPrimaryColor,
        size: SIZE
      });
    },
    key: 'FOLDER_MORE_ACTIONS',
    hideOption: function hideOption(_ref23) {
      var folders = _ref23.folders,
        isFastToken = _ref23.isFastToken;
      return hideMoreActionsOption({
        folders: folders,
        isFastToken: isFastToken
      });
    }
  }, {
    content: /*#__PURE__*/_jsx("div", {
      className: "filerobot-c-horizontal-separator"
    }),
    disabled: true,
    key: 'SEPARATOR_2',
    hideOption: function hideOption(_ref24) {
      var folders = _ref24.folders;
      return hideMoreActionsOption({
        folders: folders
      }) && hideAccessOption({
        isShareboxView: isShareboxView,
        enabledManageAccess: enabledManageAccess
      }) || hideAddFolderOption({
        isShareboxView: isShareboxView,
        folders: folders,
        checkUserPermissions: checkUserPermissions,
        isFoldersView: isFoldersView
      }) && hideRenameOption({
        folders: folders,
        checkUserPermissions: checkUserPermissions,
        currentFolder: currentFolder
      }) && hideMoveToOption({
        isShareboxView: isShareboxView,
        folders: folders,
        currentFolder: currentFolder,
        checkUserPermissions: checkUserPermissions,
        isAssetsView: isAssetsView,
        isFavoritesView: isFavoritesView
      });
    }
  }, {
    content: 'explorerAddFoldersLabel',
    onClick: function onClick() {
      return triggerAddNewFolderModal(currentFolder.path);
    },
    hideOption: function hideOption(_ref25) {
      var folders = _ref25.folders;
      return hideAddFolderOption({
        isShareboxView: isShareboxView,
        folders: folders,
        checkUserPermissions: checkUserPermissions,
        isFoldersView: isFoldersView
      });
    },
    prefix: function prefix(_ref26) {
      var iconPrimaryColor = _ref26.iconPrimaryColor;
      return /*#__PURE__*/_jsx(AddFolder, {
        color: iconPrimaryColor,
        size: SIZE
      });
    },
    key: 'ADD_FOLDER'
  }, {
    content: 'mutualizedRenameButtonLabel',
    onClick: renameFolder,
    keepItemSelected: true,
    hideOption: function hideOption(_ref27) {
      var folders = _ref27.folders;
      return hideRenameOption({
        folders: folders,
        checkUserPermissions: checkUserPermissions,
        currentFolder: currentFolder
      });
    },
    prefix: function prefix(_ref28) {
      var iconPrimaryColor = _ref28.iconPrimaryColor;
      return /*#__PURE__*/_jsx(Rename, {
        color: iconPrimaryColor,
        size: SIZE
      });
    },
    key: 'RENAME_FOLDER'
  }, {
    content: 'mutualizedMoveToLabel',
    onClick: function onClick(_ref29) {
      var folders = _ref29.folders;
      return moveTo({
        folders: folders,
        currentFolder: currentFolder,
        triggerMoveItemsModal: triggerMoveItemsModal
      });
    },
    hideOption: function hideOption(_ref30) {
      var folders = _ref30.folders;
      return hideMoveToOption({
        isShareboxView: isShareboxView,
        folders: folders,
        currentFolder: currentFolder,
        baseFolderPath: baseFolderPath,
        checkUserPermissions: checkUserPermissions,
        isAssetsView: isAssetsView,
        isFavoritesView: isFavoritesView
      });
    },
    prefix: function prefix(_ref31) {
      var iconPrimaryColor = _ref31.iconPrimaryColor;
      return /*#__PURE__*/_jsx(FileMoveTo, {
        color: iconPrimaryColor,
        size: SIZE
      });
    },
    key: 'MOVE_FOLDER'
  }, {
    content: /*#__PURE__*/_jsx("div", {
      className: "filerobot-c-horizontal-separator"
    }),
    disabled: true,
    key: 'SEPARATOR_3',
    hideOption: function hideOption(_ref32) {
      var folders = _ref32.folders;
      return hideDeleteOption({
        isShareboxView: isShareboxView,
        folders: folders,
        currentFolder: currentFolder,
        checkUserPermissions: checkUserPermissions
      });
    }
  }, {
    content: 'mutualizedDeleteButtonLabel',
    onClick: function onClick(_ref33) {
      var foldersUuids = _ref33.foldersUuids;
      return deleteFolder({
        foldersUuids: foldersUuids,
        triggerDeleteItemsModal: triggerDeleteItemsModal
      });
    },
    hideOption: function hideOption(_ref34) {
      var folders = _ref34.folders;
      return hideDeleteOption({
        isShareboxView: isShareboxView,
        folders: folders,
        currentFolder: currentFolder,
        checkUserPermissions: checkUserPermissions
      });
    },
    prefix: function prefix(_ref35) {
      var iconPrimaryColor = _ref35.iconPrimaryColor;
      return /*#__PURE__*/_jsx(Remove, {
        color: iconPrimaryColor,
        size: SIZE
      });
    },
    key: 'DELETE_FOLDER',
    hoverTheme: 'danger'
  }];
};
export default FolderOptions;