From aeba8ce4eb814e0bfec9cdada874d2ae632038a3 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 6 Jul 2021 22:02:31 -0400 Subject: [PATCH] fix: Empty context menu when user does not have permission to update collection --- app/components/ContextMenu/Template.js | 8 ++- app/menus/CollectionMenu.js | 90 ++++++++++++++------------ app/scenes/Collection.js | 36 ++++++----- 3 files changed, 73 insertions(+), 61 deletions(-) diff --git a/app/components/ContextMenu/Template.js b/app/components/ContextMenu/Template.js index 697dabc5..bbd3bd12 100644 --- a/app/components/ContextMenu/Template.js +++ b/app/components/ContextMenu/Template.js @@ -83,7 +83,7 @@ const Submenu = React.forwardRef(({ templateItems, title, ...rest }, ref) => { ); }); -function Template({ items, ...menu }: Props): React.Node { +export function filterTemplateItems(items: TMenuItem[]): TMenuItem[] { let filtered = items.filter((item) => item.visible !== false); // this block literally just trims unneccessary separators @@ -101,7 +101,11 @@ function Template({ items, ...menu }: Props): React.Node { return [...acc, item]; }, []); - return filtered.map((item, index) => { + return filtered; +} + +function Template({ items, ...menu }: Props): React.Node { + return filterTemplateItems(items).map((item, index) => { if (item.to) { return ( + filterTemplateItems([ + { + title: t("New document"), + visible: can.update, + onClick: handleNewDocument, + }, + { + title: t("Import document"), + visible: can.update, + onClick: handleImportDocument, + }, + { + type: "separator", + }, + { + title: `${t("Edit")}…`, + visible: can.update, + onClick: () => setShowCollectionEdit(true), + }, + { + title: `${t("Permissions")}…`, + visible: can.update, + onClick: () => setShowCollectionPermissions(true), + }, + { + title: `${t("Export")}…`, + visible: !!(collection && can.export), + onClick: () => setShowCollectionExport(true), + }, + { + type: "separator", + }, + { + title: `${t("Delete")}…`, + visible: !!(collection && can.delete), + onClick: () => setShowCollectionDelete(true), + }, + ]), + [can, collection, handleNewDocument, handleImportDocument, t] + ); + + if (!items.length) { + return null; + } return ( <> @@ -134,47 +180,7 @@ function CollectionMenu({ onClose={onClose} aria-label={t("Collection")} > -