From 2455028c05a68f988b18ce6feb7fa4b041933a93 Mon Sep 17 00:00:00 2001 From: pedrobonamin Date: Tue, 17 Sep 2024 14:09:20 +0200 Subject: [PATCH 1/2] fix(core): disable scheduledPublishing and tasks plugins if features api returns error --- .../ScheduledPublishingEnabledProvider.test.tsx | 15 +++++++++++++++ .../ScheduledPublishingEnabledProvider.tsx | 6 +++--- .../context/enabled/TasksEnabledProvider.test.tsx | 13 +++++++++++++ .../context/enabled/TasksEnabledProvider.tsx | 6 +++--- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/packages/sanity/src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.test.tsx b/packages/sanity/src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.test.tsx index 05b3551fa50..bdc1735c502 100644 --- a/packages/sanity/src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.test.tsx +++ b/packages/sanity/src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.test.tsx @@ -91,6 +91,21 @@ describe('ScheduledPublishingEnabledProvider', () => { expect(value.result.current).toEqual({enabled: false, mode: null}) }) + it('should not show the plugin if useFeatureEnabled has an error', () => { + require('../../../hooks').useFeatureEnabled.mockReturnValue({ + enabled: false, + isLoading: true, + error: new Error('Something went wrong'), + }) + require('../../../studio').useWorkspace.mockReturnValue({scheduledPublishing: {enabled: true}}) + + const value = renderHook(useScheduledPublishingEnabled, { + wrapper: ScheduledPublishingEnabledProvider, + }) + + expect(value.result.current).toEqual({enabled: false, mode: null}) + }) + it('should call "useFeatureEnabled" with "scheduledPublishing"', () => { require('../../../studio').useWorkspace.mockReturnValue({scheduledPublishing: {enabled: false}}) diff --git a/packages/sanity/src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.tsx b/packages/sanity/src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.tsx index fc405a172a1..8544afae137 100644 --- a/packages/sanity/src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.tsx +++ b/packages/sanity/src/core/scheduledPublishing/tool/contexts/ScheduledPublishingEnabledProvider.tsx @@ -26,13 +26,13 @@ interface TaksEnabledProviderProps { */ export function ScheduledPublishingEnabledProvider({children}: TaksEnabledProviderProps) { - const {enabled, isLoading} = useFeatureEnabled('scheduledPublishing') + const {enabled, isLoading, error} = useFeatureEnabled('scheduledPublishing') const {scheduledPublishing} = useWorkspace() const isWorkspaceEnabled = scheduledPublishing.enabled const value: ScheduledPublishingEnabledContextValue = useMemo(() => { - if (!isWorkspaceEnabled || isLoading) { + if (!isWorkspaceEnabled || isLoading || error) { return { enabled: false, mode: null, @@ -42,7 +42,7 @@ export function ScheduledPublishingEnabledProvider({children}: TaksEnabledProvid enabled: true, mode: enabled ? 'default' : 'upsell', } - }, [enabled, isLoading, isWorkspaceEnabled]) + }, [enabled, isLoading, isWorkspaceEnabled, error]) return ( diff --git a/packages/sanity/src/core/tasks/context/enabled/TasksEnabledProvider.test.tsx b/packages/sanity/src/core/tasks/context/enabled/TasksEnabledProvider.test.tsx index 90a8273aa16..ebe71317c13 100644 --- a/packages/sanity/src/core/tasks/context/enabled/TasksEnabledProvider.test.tsx +++ b/packages/sanity/src/core/tasks/context/enabled/TasksEnabledProvider.test.tsx @@ -79,6 +79,19 @@ describe('TasksEnabledProvider', () => { expect(value.result.current).toEqual({enabled: false, mode: null}) }) + it('should not show the plugin if useFeatureEnabled has an error', () => { + require('../../../hooks').useFeatureEnabled.mockReturnValue({ + enabled: false, + isLoading: true, + error: new Error('Something went wrong'), + }) + require('../../../studio').useWorkspace.mockReturnValue({tasks: {enabled: true}}) + + const value = renderHook(useTasksEnabled, {wrapper: TasksEnabledProvider}) + + expect(value.result.current).toEqual({enabled: false, mode: null}) + }) + it('should call "useFeatureEnabled" with "sanityTasks"', () => { require('../../../studio').useWorkspace.mockReturnValue({tasks: {enabled: false}}) diff --git a/packages/sanity/src/core/tasks/context/enabled/TasksEnabledProvider.tsx b/packages/sanity/src/core/tasks/context/enabled/TasksEnabledProvider.tsx index ea26fb6b437..24ab939e7ed 100644 --- a/packages/sanity/src/core/tasks/context/enabled/TasksEnabledProvider.tsx +++ b/packages/sanity/src/core/tasks/context/enabled/TasksEnabledProvider.tsx @@ -13,12 +13,12 @@ interface TaksEnabledProviderProps { * @internal */ export function TasksEnabledProvider({children}: TaksEnabledProviderProps) { - const {enabled, isLoading} = useFeatureEnabled('sanityTasks') + const {enabled, isLoading, error} = useFeatureEnabled('sanityTasks') const isWorkspaceEnabled = useWorkspace().tasks?.enabled const value: TasksEnabledContextValue = useMemo(() => { - if (!isWorkspaceEnabled || isLoading) { + if (!isWorkspaceEnabled || isLoading || error) { return { enabled: false, mode: null, @@ -28,7 +28,7 @@ export function TasksEnabledProvider({children}: TaksEnabledProviderProps) { enabled: true, mode: enabled ? 'default' : 'upsell', } - }, [enabled, isLoading, isWorkspaceEnabled]) + }, [enabled, isLoading, isWorkspaceEnabled, error]) return {children} } From acadbd83ab647ab501fddcde41a71a49d37b6f53 Mon Sep 17 00:00:00 2001 From: pedrobonamin Date: Tue, 17 Sep 2024 17:20:49 +0200 Subject: [PATCH 2/2] chore(core): add no permissions message to scheduledPublishing tool --- .../src/core/scheduledPublishing/tool/Tool.tsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/sanity/src/core/scheduledPublishing/tool/Tool.tsx b/packages/sanity/src/core/scheduledPublishing/tool/Tool.tsx index 6a47e7fb0f7..de3c6de9dc3 100644 --- a/packages/sanity/src/core/scheduledPublishing/tool/Tool.tsx +++ b/packages/sanity/src/core/scheduledPublishing/tool/Tool.tsx @@ -1,4 +1,4 @@ -import {Box, Flex, Text, useTheme} from '@sanity/ui' +import {Box, Container, Flex, Text, useTheme} from '@sanity/ui' import {parse} from 'date-fns' import {useEffect, useMemo, useRef} from 'react' import {type RouterContextValue, useRouter} from 'sanity/router' @@ -11,6 +11,7 @@ import {SCHEDULE_FILTERS, TOOL_HEADER_HEIGHT} from '../constants' import usePollSchedules from '../hooks/usePollSchedules' import useTimeZone from '../hooks/useTimeZone' import {type Schedule, type ScheduleState} from '../types' +import {useScheduledPublishingEnabled} from './contexts/ScheduledPublishingEnabledProvider' import {SchedulesProvider} from './contexts/schedules' import {ScheduleFilters} from './scheduleFilters' import {Schedules} from './schedules' @@ -32,6 +33,7 @@ export default function Tool() { const {sanity: theme} = useTheme() const {error, isInitialLoading, schedules = NO_SCHEDULE} = usePollSchedules() + const {enabled} = useScheduledPublishingEnabled() const lastScheduleState = useRef() @@ -74,6 +76,19 @@ export default function Tool() { } } + if (!enabled) { + return ( + + + + + + ) + } + return (