diff --git a/packages/frontend-2/components/viewer/saved-views/panel/View.vue b/packages/frontend-2/components/viewer/saved-views/panel/View.vue index 844679624..8b3101891 100644 --- a/packages/frontend-2/components/viewer/saved-views/panel/View.vue +++ b/packages/frontend-2/components/viewer/saved-views/panel/View.vue @@ -108,6 +108,7 @@ import { useCollectNewSavedViewViewerData, useUpdateSavedView } from '~/lib/viewer/composables/savedViews/management' +import { useSavedViewValidationHelpers } from '~/lib/viewer/composables/savedViews/validation' import { useInjectedViewerState } from '~/lib/viewer/composables/setup' const MenuItems = StringEnum([ @@ -143,6 +144,7 @@ graphql(` ...UseDeleteSavedView_SavedView ...UseUpdateSavedView_SavedView ...ViewerSavedViewsPanelViewEditDialog_SavedView + ...UseSavedViewValidationHelpers_SavedView } `) @@ -161,15 +163,19 @@ const isLoading = useMutationLoading() const { copyLink, applyView } = useViewerSavedViewsUtils() const eventBus = useEventBus() const { formattedRelativeDate, formattedFullDate } = useDateFormatters() +const { + canUpdate, + isOnlyVisibleToMe, + canSetHomeView, + isHomeView, + canToggleVisibility +} = useSavedViewValidationHelpers({ + view: computed(() => props.view) +}) const showMenu = ref(false) const menuId = useId() -const canUpdate = computed(() => props.view.permissions.canUpdate) -const isOnlyVisibleToMe = computed( - () => props.view.visibility === SavedViewVisibility.AuthorOnly -) -const isHomeView = computed(() => props.view.isHomeView) const isActive = computed(() => props.view.id === savedView.value?.id) const isOriginalVersionAlreadyLoaded = computed(() => { @@ -188,29 +194,6 @@ const canLoadOriginal = computed( } ) -const canSetHomeView = computed( - (): { authorized: boolean; message: Optional } => { - if (!canUpdate.value?.authorized || isLoading.value) { - return { authorized: false, message: canUpdate.value.errorMessage || undefined } - } - - if (isFederatedView.value) { - return { - authorized: false, - message: "Home view settings can't be updated while in a federated view" - } - } - - if (isOnlyVisibleToMe.value) { - return { - authorized: false, - message: 'A view must be shared to be set as home view' - } - } - - return { authorized: true, message: undefined } - } -) const menuItems = computed((): LayoutMenuItem[][] => [ [ { @@ -223,13 +206,13 @@ const menuItems = computed((): LayoutMenuItem[][] => [ id: MenuItems.ReplaceView, title: 'Replace view', disabled: !canUpdate.value?.authorized || isLoading.value, - disabledTooltip: canUpdate.value.errorMessage + disabledTooltip: canUpdate.value?.errorMessage }, { id: MenuItems.MoveToGroup, title: 'Move to group', disabled: !canUpdate.value?.authorized || isLoading.value, - disabledTooltip: canUpdate.value.errorMessage + disabledTooltip: canUpdate.value?.errorMessage }, { id: MenuItems.CopyLink, @@ -247,8 +230,8 @@ const menuItems = computed((): LayoutMenuItem[][] => [ { id: MenuItems.ChangeVisibility, title: isOnlyVisibleToMe.value ? 'Make view shared' : 'Make view private', - disabled: !canUpdate.value?.authorized || isLoading.value, - disabledTooltip: canUpdate.value.errorMessage + disabled: !canToggleVisibility.value.authorized, + disabledTooltip: canToggleVisibility.value.message } ], [ @@ -256,7 +239,7 @@ const menuItems = computed((): LayoutMenuItem[][] => [ id: MenuItems.Delete, title: 'Delete', disabled: !canUpdate.value?.authorized || isLoading.value, - disabledTooltip: canUpdate.value.errorMessage + disabledTooltip: canUpdate.value?.errorMessage } ] ]) diff --git a/packages/frontend-2/components/viewer/saved-views/panel/view/EditDialog.vue b/packages/frontend-2/components/viewer/saved-views/panel/view/EditDialog.vue index 25cb32d91..996cf62c0 100644 --- a/packages/frontend-2/components/viewer/saved-views/panel/view/EditDialog.vue +++ b/packages/frontend-2/components/viewer/saved-views/panel/view/EditDialog.vue @@ -31,28 +31,28 @@ :rules="[isRequired]" />