From 1c770b6315442508526b4203eb747f1fc292a6da Mon Sep 17 00:00:00 2001 From: Bobby Kolev Date: Thu, 21 Nov 2024 16:47:32 +0200 Subject: [PATCH 1/2] dependency was missing in the useEffect (#7235) --- src/main/topLevelPages/Home/HomePageLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/topLevelPages/Home/HomePageLayout.tsx b/src/main/topLevelPages/Home/HomePageLayout.tsx index bfe80e33b9..04ac70bbd5 100644 --- a/src/main/topLevelPages/Home/HomePageLayout.tsx +++ b/src/main/topLevelPages/Home/HomePageLayout.tsx @@ -22,7 +22,7 @@ const HomePageLayout = ({ children }: PropsWithChildren<{}>) => { setTitle(t('pages.home.sections.welcome.welcome-back', { username: user?.firstName })); setSubTitle(t('pages.home.subtitle')); } - }, [isAuthenticated]); + }, [isAuthenticated, user]); return ( <> From 7de59013342b90c7a348eec63dbc75d72faf48bd Mon Sep 17 00:00:00 2001 From: Bobby Kolev Date: Thu, 21 Nov 2024 16:56:07 +0200 Subject: [PATCH 2/2] Create Template in Subspace settings - check for parent space permissions (#7232) * add modules aliases for absolute imports Signed-off-by: reactoholic * update global path aliases and add new config settings * run sort-package-json Signed-off-by: reactoholic * fix ts error and merge dev Signed-off-by: reactoholic * Reverse .env.base to original * Update .env.base * fix relative paths Signed-off-by: reactoholic * restore this collaborationId * modules used in core and dev folders converted to absolute imports Signed-off-by: reactoholic * end of day Signed-off-by: reactoholic * final files refactored to absolute imports Signed-off-by: reactoholic * Update .env.base * Update .env.base * Update .env.base * Update .env.base * resolve pr comment Signed-off-by: reactoholic * check for space admin permission and show tooltip in subspace settings * check the templateSet privileges instead of space update ones * sync changes from develop --------- Signed-off-by: reactoholic Co-authored-by: reactoholic Co-authored-by: Petar Kolev <33326233+reactoholic@users.noreply.github.com> Co-authored-by: Carlos Cano --- src/core/apollo/generated/apollo-hooks.ts | 3 ++ src/core/apollo/generated/graphql-schema.ts | 10 ++++++- src/core/i18n/en/translation.en.json | 1 + .../pages/SpaceSettings/SpaceSettingsView.tsx | 28 +++++++++++++++++-- .../graphql/SpaceTemplatesSetId.graphql | 3 ++ 5 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/core/apollo/generated/apollo-hooks.ts b/src/core/apollo/generated/apollo-hooks.ts index cc314df8a5..0d06a49490 100644 --- a/src/core/apollo/generated/apollo-hooks.ts +++ b/src/core/apollo/generated/apollo-hooks.ts @@ -20033,6 +20033,9 @@ export const SpaceTemplatesSetIdDocument = gql` id templatesSet { id + authorization { + myPrivileges + } } } } diff --git a/src/core/apollo/generated/graphql-schema.ts b/src/core/apollo/generated/graphql-schema.ts index 72ab52aa3e..b4114ecc96 100644 --- a/src/core/apollo/generated/graphql-schema.ts +++ b/src/core/apollo/generated/graphql-schema.ts @@ -25137,7 +25137,15 @@ export type SpaceTemplatesSetIdQuery = { | { __typename?: 'TemplatesManager'; id: string; - templatesSet?: { __typename?: 'TemplatesSet'; id: string } | undefined; + templatesSet?: + | { + __typename?: 'TemplatesSet'; + id: string; + authorization?: + | { __typename?: 'Authorization'; myPrivileges?: Array | undefined } + | undefined; + } + | undefined; } | undefined; }; diff --git a/src/core/i18n/en/translation.en.json b/src/core/i18n/en/translation.en.json index b67a29d0ef..96579e63f5 100644 --- a/src/core/i18n/en/translation.en.json +++ b/src/core/i18n/en/translation.en.json @@ -2057,6 +2057,7 @@ "title": "Copy Subspace", "description": "To utilize this Subspace setup, you can either duplicate it within the same Space or save it as a template for use across the platform. In both scenarios, the innovation flow and all collaboration tools will be replicated. Please note that comments or contributions to a tool will not be included in the template or duplicated Subspace.", "createTemplate": "Create Template", + "createTemplateTooltip": "To create a template from this Subspace, you need Space admin permissions.", "duplicate": "Duplicate" }, "account": { diff --git a/src/domain/journey/space/pages/SpaceSettings/SpaceSettingsView.tsx b/src/domain/journey/space/pages/SpaceSettings/SpaceSettingsView.tsx index 32206498cc..06d2e6cdaf 100644 --- a/src/domain/journey/space/pages/SpaceSettings/SpaceSettingsView.tsx +++ b/src/domain/journey/space/pages/SpaceSettings/SpaceSettingsView.tsx @@ -8,6 +8,7 @@ import { useSpaceHostQuery, useSpacePrivilegesQuery, useSpaceSettingsQuery, + useSpaceTemplatesSetIdQuery, useUpdateSpaceSettingsMutation, } from '@/core/apollo/generated/apollo-hooks'; import { @@ -39,6 +40,8 @@ import Gutters from '@/core/ui/grid/Gutters'; import CreateTemplateDialog from '@/domain/templates/components/Dialogs/CreateEditTemplateDialog/CreateTemplateDialog'; import { useCreateCollaborationTemplate } from '@/domain/templates/hooks/useCreateCollaborationTemplate'; import { CollaborationTemplateFormSubmittedValues } from '@/domain/templates/components/Forms/CollaborationTemplateForm'; +import ButtonWithTooltip from '@/core/ui/button/ButtonWithTooltip'; +import { noop } from 'lodash'; type SpaceSettingsViewProps = { journeyId: string; @@ -127,6 +130,14 @@ export const SpaceSettingsView = ({ journeyId, journeyTypeName }: SpaceSettingsV const roleSetId = settingsData?.lookup.space?.community?.roleSet.id; const collaborationId = settingsData?.lookup.space?.collaboration.id; + const { data: templateData } = useSpaceTemplatesSetIdQuery({ + variables: { spaceNameId }, + skip: !spaceNameId, + }); + + const templateSetPrivileges = templateData?.space.templatesManager?.templatesSet?.authorization?.myPrivileges ?? []; + const canCreateTemplate = templateSetPrivileges?.includes(AuthorizationPrivilege.Create); + const { handleCreateCollaborationTemplate } = useCreateCollaborationTemplate(); const handleSaveAsTemplate = async (values: CollaborationTemplateFormSubmittedValues) => { await handleCreateCollaborationTemplate(values, spaceNameId); @@ -417,9 +428,20 @@ export const SpaceSettingsView = ({ journeyId, journeyTypeName }: SpaceSettingsV {t('pages.admin.space.settings.copySpace.description')} - + {canCreateTemplate ? ( + + ) : ( + + {t('pages.admin.space.settings.copySpace.createTemplate')} + + )} diff --git a/src/domain/templates/graphql/SpaceTemplatesSetId.graphql b/src/domain/templates/graphql/SpaceTemplatesSetId.graphql index cfd2817988..6e029086db 100644 --- a/src/domain/templates/graphql/SpaceTemplatesSetId.graphql +++ b/src/domain/templates/graphql/SpaceTemplatesSetId.graphql @@ -5,6 +5,9 @@ query SpaceTemplatesSetId($spaceNameId: UUID_NAMEID!) { id templatesSet { id + authorization { + myPrivileges + } } } }