diff --git a/app/actions/definitions/collections.tsx b/app/actions/definitions/collections.tsx index f995720a0..9d3085d9a 100644 --- a/app/actions/definitions/collections.tsx +++ b/app/actions/definitions/collections.tsx @@ -4,6 +4,7 @@ import { PadlockIcon, PlusIcon, SearchIcon, + ShapesIcon, StarredIcon, TrashIcon, UnstarredIcon, @@ -21,7 +22,7 @@ import { createAction } from "~/actions"; import { CollectionSection } from "~/actions/sections"; import { setPersistedState } from "~/hooks/usePersistedState"; import history from "~/utils/history"; -import { searchPath } from "~/utils/routeHelpers"; +import { newTemplatePath, searchPath } from "~/utils/routeHelpers"; const ColorCollectionIcon = ({ collection }: { collection: Collection }) => ( @@ -220,6 +221,27 @@ export const deleteCollection = createAction({ }, }); +export const createTemplate = createAction({ + name: ({ t }) => t("New template"), + analyticsName: "New template", + section: CollectionSection, + icon: , + keywords: "new create template", + visible: ({ activeCollectionId, stores }) => + !!( + !!activeCollectionId && + stores.policies.abilities(activeCollectionId).update + ), + perform: ({ activeCollectionId, event }) => { + if (!activeCollectionId) { + return; + } + event?.preventDefault(); + event?.stopPropagation(); + history.push(newTemplatePath(activeCollectionId)); + }, +}); + export const rootCollectionActions = [ openCollection, createCollection, diff --git a/app/actions/definitions/documents.tsx b/app/actions/definitions/documents.tsx index 14f29f84b..e8c7f939d 100644 --- a/app/actions/definitions/documents.tsx +++ b/app/actions/definitions/documents.tsx @@ -56,7 +56,6 @@ import { documentPath, urlify, trashPath, - newTemplatePath, } from "~/utils/routeHelpers"; export const openDocument = createAction({ @@ -673,37 +672,34 @@ export const importDocument = createAction({ }, }); -export const createTemplate = createAction({ - name: ({ t, activeDocumentId }) => - activeDocumentId ? t("Templatize") : t("New template"), +export const createTemplateFromDocument = createAction({ + name: ({ t }) => t("Templatize"), analyticsName: "Templatize document", section: DocumentSection, icon: , keywords: "new create template", visible: ({ activeCollectionId, activeDocumentId, stores }) => { - if (activeDocumentId) { - const document = stores.documents.get(activeDocumentId); - if (document?.isTemplate || !document?.isActive) { - return false; - } + const document = activeDocumentId + ? stores.documents.get(activeDocumentId) + : undefined; + if (document?.isTemplate || !document?.isActive) { + return false; } return !!( !!activeCollectionId && stores.policies.abilities(activeCollectionId).update ); }, - perform: ({ activeCollectionId, activeDocumentId, stores, t, event }) => { + perform: ({ activeDocumentId, stores, t, event }) => { + if (!activeDocumentId) { + return; + } event?.preventDefault(); event?.stopPropagation(); - - if (activeDocumentId) { - stores.dialogs.openModal({ - title: t("Create template"), - content: , - }); - } else if (activeCollectionId) { - history.push(newTemplatePath(activeCollectionId)); - } + stores.dialogs.openModal({ + title: t("Create template"), + content: , + }); }, }); @@ -987,7 +983,7 @@ export const rootDocumentActions = [ openDocument, archiveDocument, createDocument, - createTemplate, + createTemplateFromDocument, deleteDocument, importDocument, downloadDocument, diff --git a/app/menus/CollectionMenu.tsx b/app/menus/CollectionMenu.tsx index 01ec77aac..debc1e138 100644 --- a/app/menus/CollectionMenu.tsx +++ b/app/menus/CollectionMenu.tsx @@ -27,8 +27,8 @@ import { starCollection, unstarCollection, searchInCollection, + createTemplate, } from "~/actions/definitions/collections"; -import { createTemplate } from "~/actions/definitions/documents"; import useActionContext from "~/hooks/useActionContext"; import useCurrentTeam from "~/hooks/useCurrentTeam"; import usePolicy from "~/hooks/usePolicy"; diff --git a/app/menus/DocumentMenu.tsx b/app/menus/DocumentMenu.tsx index 382e58d40..87f666767 100644 --- a/app/menus/DocumentMenu.tsx +++ b/app/menus/DocumentMenu.tsx @@ -21,7 +21,7 @@ import Switch from "~/components/Switch"; import { actionToMenuItem } from "~/actions"; import { pinDocument, - createTemplate, + createTemplateFromDocument, subscribeDocument, unsubscribeDocument, moveDocument, @@ -284,7 +284,7 @@ function DocumentMenu({ }, actionToMenuItem(createNestedDocument, context), actionToMenuItem(importDocument, context), - actionToMenuItem(createTemplate, context), + actionToMenuItem(createTemplateFromDocument, context), actionToMenuItem(duplicateDocument, context), actionToMenuItem(publishDocument, context), actionToMenuItem(unpublishDocument, context), diff --git a/shared/i18n/locales/en_US/translation.json b/shared/i18n/locales/en_US/translation.json index 75ce40c6b..1fea3f120 100644 --- a/shared/i18n/locales/en_US/translation.json +++ b/shared/i18n/locales/en_US/translation.json @@ -13,6 +13,7 @@ "Unstar": "Unstar", "Delete": "Delete", "Delete collection": "Delete collection", + "New template": "New template", "Copy ID": "Copy ID", "Clear IndexedDB cache": "Clear IndexedDB cache", "IndexedDB cache cleared": "IndexedDB cache cleared", @@ -60,7 +61,6 @@ "Print document": "Print document", "Import document": "Import document", "Templatize": "Templatize", - "New template": "New template", "Create template": "Create template", "Open random document": "Open random document", "Search documents for \"{{searchQuery}}\"": "Search documents for \"{{searchQuery}}\"",