Repository URL to install this package:
|
Version:
3.12.18 ▾
|
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;