From 8f90e990e480dccbdb444d2283b086ae19a06c3f Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 21 May 2026 10:49:49 +0100 Subject: [PATCH 1/2] Move Desks UI switch to beta features --- .../src/components/tests/content-tab-settings.test.tsx | 4 ++-- .../src/components/tests/remote-session-indicator.test.tsx | 5 ++++- apps/studio/src/ipc-types.d.ts | 2 +- apps/studio/src/lib/beta-features.ts | 7 +++++++ apps/studio/src/lib/feature-flags.ts | 6 ------ .../modules/site-settings/tests/edit-site-details.test.tsx | 2 +- .../modules/user-settings/components/preferences-tab.tsx | 4 ++-- apps/studio/src/stores/beta-features-slice.ts | 2 +- 8 files changed, 18 insertions(+), 14 deletions(-) diff --git a/apps/studio/src/components/tests/content-tab-settings.test.tsx b/apps/studio/src/components/tests/content-tab-settings.test.tsx index 04e86020ca..23e9759090 100644 --- a/apps/studio/src/components/tests/content-tab-settings.test.tsx +++ b/apps/studio/src/components/tests/content-tab-settings.test.tsx @@ -38,7 +38,7 @@ const snapshotTestActions = { let testStore = createTestStore( { preloadedState: { betaFeatures: { - features: { remoteSession: false, nativePhpRuntime: false }, + features: { remoteSession: false, nativePhpRuntime: false, enableDesksUiSwitch: false }, loading: false, }, }, @@ -49,7 +49,7 @@ function createCustomTestStore( nativePhpRuntime = false ) { const store = createTestStore( { preloadedState: { betaFeatures: { - features: { remoteSession: false, nativePhpRuntime }, + features: { remoteSession: false, nativePhpRuntime, enableDesksUiSwitch: false }, loading: false, }, }, diff --git a/apps/studio/src/components/tests/remote-session-indicator.test.tsx b/apps/studio/src/components/tests/remote-session-indicator.test.tsx index c0ec034575..ee73332e1c 100644 --- a/apps/studio/src/components/tests/remote-session-indicator.test.tsx +++ b/apps/studio/src/components/tests/remote-session-indicator.test.tsx @@ -32,7 +32,10 @@ function setupHooks( { isRunning: boolean; isLoading?: boolean; } ) { - vi.mocked( useBetaFeatures ).mockReturnValue( { remoteSession } ); + vi.mocked( useBetaFeatures ).mockReturnValue( { + remoteSession, + enableDesksUiSwitch: false, + } ); vi.mocked( useAuth, { partial: true } ).mockReturnValue( { isAuthenticated } ); vi.mocked( useRemoteSessionStatus ).mockReturnValue( { status: isRunning ? { running: true } : undefined, diff --git a/apps/studio/src/ipc-types.d.ts b/apps/studio/src/ipc-types.d.ts index 7f519ea262..218d2c8ee6 100644 --- a/apps/studio/src/ipc-types.d.ts +++ b/apps/studio/src/ipc-types.d.ts @@ -100,12 +100,12 @@ type IpcApi = { interface FeatureFlags { enableBlueprints: boolean; enableStudioCodeUi: boolean; - enableDesksUiSwitch: boolean; } interface BetaFeatures { remoteSession: boolean; nativePhpRuntime?: boolean; + enableDesksUiSwitch: boolean; } interface AppGlobals extends FeatureFlags { diff --git a/apps/studio/src/lib/beta-features.ts b/apps/studio/src/lib/beta-features.ts index 45a07ed2f8..34f06db8d5 100644 --- a/apps/studio/src/lib/beta-features.ts +++ b/apps/studio/src/lib/beta-features.ts @@ -15,6 +15,7 @@ export interface BetaFeatureDefinition { const BETA_FEATURE_DEFAULTS: Record< keyof BetaFeatures, boolean > = { remoteSession: false, nativePhpRuntime: false, + enableDesksUiSwitch: false, }; /** @@ -35,6 +36,12 @@ export function getBetaFeaturesDefinition(): Record< keyof BetaFeatures, BetaFea default: BETA_FEATURE_DEFAULTS.nativePhpRuntime, description: __( 'Run Studio sites with native PHP instead of Playground.' ), }, + enableDesksUiSwitch: { + label: __( 'Desks UI switch' ), + key: 'enableDesksUiSwitch', + default: BETA_FEATURE_DEFAULTS.enableDesksUiSwitch, + description: __( 'Show the option to switch Studio into the Desks UI.' ), + }, }; } diff --git a/apps/studio/src/lib/feature-flags.ts b/apps/studio/src/lib/feature-flags.ts index a8facdbfbc..a1bd010661 100644 --- a/apps/studio/src/lib/feature-flags.ts +++ b/apps/studio/src/lib/feature-flags.ts @@ -18,12 +18,6 @@ export const FEATURE_FLAGS: Record< keyof FeatureFlags, FeatureFlagDefinition > flag: 'enableStudioCodeUi', default: false, }, - enableDesksUiSwitch: { - label: 'Enable Studio UI Switcher', - env: 'ENABLE_DESKS_UI_SWITCH', - flag: 'enableDesksUiSwitch', - default: false, - }, } as const; export function getFeatureFlagFromEnv( flag: keyof FeatureFlags ): boolean { diff --git a/apps/studio/src/modules/site-settings/tests/edit-site-details.test.tsx b/apps/studio/src/modules/site-settings/tests/edit-site-details.test.tsx index 38ddf58ddf..b0c7fe8e8a 100644 --- a/apps/studio/src/modules/site-settings/tests/edit-site-details.test.tsx +++ b/apps/studio/src/modules/site-settings/tests/edit-site-details.test.tsx @@ -73,7 +73,7 @@ const renderWithProvider = ( children: React.ReactElement, nativePhpRuntime = fa const store = createTestStore( { preloadedState: { betaFeatures: { - features: { remoteSession: false, nativePhpRuntime }, + features: { remoteSession: false, nativePhpRuntime, enableDesksUiSwitch: false }, loading: false, }, }, diff --git a/apps/studio/src/modules/user-settings/components/preferences-tab.tsx b/apps/studio/src/modules/user-settings/components/preferences-tab.tsx index 0c03c5ecab..52242d71fb 100644 --- a/apps/studio/src/modules/user-settings/components/preferences-tab.tsx +++ b/apps/studio/src/modules/user-settings/components/preferences-tab.tsx @@ -3,7 +3,7 @@ import { useI18n } from '@wordpress/react-i18n'; import { useCallback, useEffect, useRef, useState } from 'react'; import Button from 'src/components/button'; import { FormPathInputComponent } from 'src/components/form-path-input'; -import { useFeatureFlags } from 'src/hooks/use-feature-flags'; +import { useBetaFeatures } from 'src/hooks/use-beta-features'; import { isWindowsStore } from 'src/lib/app-globals'; import { getIpcApi } from 'src/lib/get-ipc-api'; import { ColorSchemePicker } from 'src/modules/user-settings/components/color-scheme-picker'; @@ -33,7 +33,7 @@ export const PreferencesTab = ( { onClose }: { onClose: () => void } ) => { const { __ } = useI18n(); const savedLocale = useI18nLocale(); const dispatch = useAppDispatch(); - const { enableDesksUiSwitch } = useFeatureFlags(); + const { enableDesksUiSwitch } = useBetaFeatures(); const { data: colorScheme } = useGetColorSchemeQuery(); const { data: editor } = useGetUserEditorQuery(); diff --git a/apps/studio/src/stores/beta-features-slice.ts b/apps/studio/src/stores/beta-features-slice.ts index 5706690120..bc918c2f2b 100644 --- a/apps/studio/src/stores/beta-features-slice.ts +++ b/apps/studio/src/stores/beta-features-slice.ts @@ -8,7 +8,7 @@ type BetaFeaturesState = { }; const initialState: BetaFeaturesState = { - features: { remoteSession: false, nativePhpRuntime: false }, + features: { remoteSession: false, nativePhpRuntime: false, enableDesksUiSwitch: false }, loading: false, }; From ce3447b81a387bc85f60d99cc6060a496ade0904 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Fri, 22 May 2026 11:44:35 +0100 Subject: [PATCH 2/2] Use generic Studio UI beta label --- apps/studio/src/lib/beta-features.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/studio/src/lib/beta-features.ts b/apps/studio/src/lib/beta-features.ts index 34f06db8d5..b91bdbca24 100644 --- a/apps/studio/src/lib/beta-features.ts +++ b/apps/studio/src/lib/beta-features.ts @@ -37,10 +37,10 @@ export function getBetaFeaturesDefinition(): Record< keyof BetaFeatures, BetaFea description: __( 'Run Studio sites with native PHP instead of Playground.' ), }, enableDesksUiSwitch: { - label: __( 'Desks UI switch' ), + label: __( 'Enable Studio UI Switcher' ), key: 'enableDesksUiSwitch', default: BETA_FEATURE_DEFAULTS.enableDesksUiSwitch, - description: __( 'Show the option to switch Studio into the Desks UI.' ), + description: __( 'Show the option to switch Studio UI modes.' ), }, }; }