Skip to content

Commit 335b80c

Browse files
authored
Merge pull request #442 from maximka76667/production
feat(testing-view): add mode switcher toggle in dev mode
2 parents 8448381 + abd0f36 commit 335b80c

5 files changed

Lines changed: 59 additions & 3 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { SunMoon } from "lucide-react";
1+
export { Eye, EyeOff, SunMoon } from "lucide-react";

frontend/testing-view/src/components/devTools/ModeSwitcher.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@ export const ModeSwitcher = () => {
1414
const modeOverride = useStore((s) => s.modeOverride);
1515
const setModeOverride = useStore((s) => s.setModeOverride);
1616
const currentMode = useStore((s) => s.appMode);
17+
const isDevToolsVisible = useStore((s) => s.isDevToolsVisible);
1718

1819
// Only show in development
19-
if (!import.meta.env.DEV && !import.meta.env.VITE_FORCE_DEV) return null;
20+
if (
21+
(!import.meta.env.DEV && !import.meta.env.VITE_FORCE_DEV) ||
22+
!isDevToolsVisible
23+
)
24+
return null;
2025

2126
return (
22-
<div className="bg-background text-foreground fixed bottom-10 right-1/2 z-50 flex translate-x-1/2 flex-col gap-2 rounded-lg border p-3 shadow-lg">
27+
<div className="bg-background text-foreground fixed right-1/2 bottom-10 z-50 flex translate-x-1/2 flex-col gap-2 rounded-lg border p-3 shadow-lg">
2328
<div className="text-muted-foreground text-xs font-semibold">
2429
Dev Mode Switcher
2530
</div>

frontend/testing-view/src/components/leftSidebar/AppSidebar.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
import { PAGES_ARRAY } from "../../constants/pages";
99
import ColorSchemeToggle from "./ColorSchemeToggle";
1010
import ConnectionStatusGroup from "./ConnectionStatusGroup";
11+
import DevToolsItem from "./DevToolsItem";
1112
import Logo from "./Logo";
1213
import NavigationGroup from "./NavigationGroup";
1314
import SettingsItem from "./SettingsItem";
@@ -27,8 +28,14 @@ const AppSidebar = ({ backendConnected, ...props }: AppSidebarProps) => {
2728
<NavigationGroup items={PAGES_ARRAY} />
2829
</SidebarContent>
2930
<SidebarFooter>
31+
{/* Only visible in dev mode */}
32+
<DevToolsItem />
33+
34+
<div className="my-2" />
35+
3036
<ConnectionStatusGroup backendConnected={backendConnected} />
3137
<div className="my-2" />
38+
3239
<ColorSchemeToggle />
3340
<ThemeToggleItem />
3441
<SettingsItem />
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import {
2+
SidebarGroup,
3+
SidebarGroupLabel,
4+
SidebarMenuButton,
5+
} from "@workspace/ui";
6+
import { Eye, EyeOff } from "@workspace/ui/icons";
7+
import { useStore } from "../../store/store";
8+
9+
const DevToolsItem = () => {
10+
const toggleDevToolsVisible = useStore((s) => s.toggleDevToolsVisible);
11+
const isVisible = useStore((s) => s.isDevToolsVisible);
12+
13+
const isDev = import.meta.env.DEV || import.meta.env.VITE_FORCE_DEV;
14+
15+
if (!isDev) return null;
16+
17+
return (
18+
<SidebarGroup className="p-0">
19+
<SidebarGroupLabel>Dev mode</SidebarGroupLabel>
20+
<SidebarMenuButton
21+
tooltip="Toggle mode switcher"
22+
onClick={() => toggleDevToolsVisible()}
23+
>
24+
{isVisible ? (
25+
<Eye className="h-4 w-4" />
26+
) : (
27+
<EyeOff className="h-4 w-4" />
28+
)}
29+
<span>Toggle mode switcher</span>
30+
</SidebarMenuButton>
31+
</SidebarGroup>
32+
);
33+
};
34+
35+
export default DevToolsItem;

frontend/testing-view/src/store/slices/appSlice.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ export interface AppSlice {
4545
setConfig: (config: ConfigData | null) => void;
4646
isLoadingConfig: boolean;
4747
setIsLoadingConfig: (loading: boolean) => void;
48+
49+
// Dev mode
50+
isDevToolsVisible: boolean;
51+
toggleDevToolsVisible: () => void;
4852
}
4953

5054
export const createAppSlice: StateCreator<Store, [], [], AppSlice> = (set) => ({
@@ -96,4 +100,9 @@ export const createAppSlice: StateCreator<Store, [], [], AppSlice> = (set) => ({
96100
setConfig: (config: ConfigData | null) => set({ config }),
97101
isLoadingConfig: false,
98102
setIsLoadingConfig: (loading: boolean) => set({ isLoadingConfig: loading }),
103+
104+
// Dev mode
105+
isDevToolsVisible: false,
106+
toggleDevToolsVisible: () =>
107+
set((state) => ({ isDevToolsVisible: !state.isDevToolsVisible })),
99108
});

0 commit comments

Comments
 (0)