diff --git a/packages/frontend-2/components/dashboards/share/Dialog.vue b/packages/frontend-2/components/dashboards/share/Dialog.vue index 37e7b319d..3a9dc0565 100644 --- a/packages/frontend-2/components/dashboards/share/Dialog.vue +++ b/packages/frontend-2/components/dashboards/share/Dialog.vue @@ -1,20 +1,14 @@ @@ -23,6 +17,11 @@ import { dashboardRoute } from '~~/lib/common/helpers/route' import type { MaybeNullOrUndefined } from '@speckle/shared' import { graphql } from '~~/lib/common/generated/gql' import { useQuery, useMutation } from '@vue/apollo-composable' +import { ToastNotificationType, useGlobalToast } from '~~/lib/common/composables/toast' +import { + convertThrowIntoFetchResult, + getFirstErrorMessage +} from '~~/lib/common/helpers/graphql' const dashboardsDialogSharePermissionsQuery = graphql(` query DashboardsSharDialogPermissions($id: String!) { @@ -33,11 +32,6 @@ const dashboardsDialogSharePermissionsQuery = graphql(` content revoked } - permissions { - canCreateToken { - ...FullPermissionCheckResult - } - } } } `) @@ -91,6 +85,7 @@ const { result, refetch } = useQuery(dashboardsDialogSharePermissionsQuery, () = const { mutate: createToken } = useMutation(dashboardsDialogShareTokenMutation) const { mutate: disableToken } = useMutation(dashboardsDialogShareDisableTokenMutation) const { mutate: enableToken } = useMutation(dashboardsDialogShareEnableTokenMutation) +const { triggerNotification } = useGlobalToast() const isRevoked = computed(() => result.value?.dashboard?.shareLink?.revoked) const shareLink = computed(() => result.value?.dashboard?.shareLink) @@ -105,23 +100,12 @@ const shareUrl = computed(() => { return url.toString() }) -const canCreateToken = computed( - () => result.value?.dashboard?.permissions?.canCreateToken?.authorized -) const enablePublicUrl = computed({ get: () => !isRevoked.value && !!shareLink.value?.id, set: (value: boolean) => { onEnablePublicUrl(value) } }) -const dashboardUrl = computed(() => { - if (!props.workspaceSlug || !props.dashboardId) return '' - - return new URL( - dashboardRoute(props.workspaceSlug, props.dashboardId), - window.location.toString() - ).toString() -}) const onEnablePublicUrl = async (value: boolean) => { if (!props.dashboardId) return @@ -129,7 +113,18 @@ const onEnablePublicUrl = async (value: boolean) => { if (value) { // If enabling and no share link exists, create one first if (!shareLink.value?.id) { - await createToken({ dashboardId: props.dashboardId }) + const result = await createToken({ dashboardId: props.dashboardId }).catch( + convertThrowIntoFetchResult + ) + + if (!result?.data?.dashboardMutations.share.id) { + const errMsg = getFirstErrorMessage(result?.errors) + triggerNotification({ + type: ToastNotificationType.Danger, + title: 'Failed to enable public access', + description: errMsg + }) + } } // Enable the share link diff --git a/packages/frontend-2/components/dashboards/share/Share.vue b/packages/frontend-2/components/dashboards/share/Share.vue index 0a923c111..3423f7a61 100644 --- a/packages/frontend-2/components/dashboards/share/Share.vue +++ b/packages/frontend-2/components/dashboards/share/Share.vue @@ -5,7 +5,6 @@ color="outline" class="hidden sm:flex" size="sm" - :disabled="!canCreateToken" @click="shareDialogOpen = true" > Share @@ -20,34 +19,11 @@ diff --git a/packages/frontend-2/components/presentation/Header.vue b/packages/frontend-2/components/presentation/Header.vue index 8ea101ec4..6494fb8e1 100644 --- a/packages/frontend-2/components/presentation/Header.vue +++ b/packages/frontend-2/components/presentation/Header.vue @@ -15,7 +15,7 @@ {{ presentation?.title }} - + --> diff --git a/packages/frontend-2/components/presentation/InfoSidebar.vue b/packages/frontend-2/components/presentation/InfoSidebar.vue index c15e3fc2b..252abfad9 100644 --- a/packages/frontend-2/components/presentation/InfoSidebar.vue +++ b/packages/frontend-2/components/presentation/InfoSidebar.vue @@ -1,15 +1,22 @@ @@ -71,17 +79,25 @@ graphql(` ...PresentationSlideEditDialog_SavedView name description + permissions { + canUpdate { + ...FullPermissionCheckResult + } + } } `) const { ui: { slide: currentSlide }, - response: { presentation } + response: { presentation, workspace } } = useInjectedPresentationState() const isSlideEditDialogOpen = ref(false) const canUpdate = computed(() => { - return presentation.value?.permissions?.canUpdate + return presentation.value?.permissions?.canUpdate?.authorized +}) +const canUpdateSlide = computed(() => { + return currentSlide.value?.permissions?.canUpdate.authorized }) diff --git a/packages/frontend-2/components/presentation/LeftSidebar.vue b/packages/frontend-2/components/presentation/LeftSidebar.vue index 75ff4ae2e..16d8cc057 100644 --- a/packages/frontend-2/components/presentation/LeftSidebar.vue +++ b/packages/frontend-2/components/presentation/LeftSidebar.vue @@ -5,15 +5,27 @@