From 377309a98b82e5433e321b85fd0bf846450fd184 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Fri, 1 Apr 2022 15:14:30 +0200 Subject: [PATCH] use app theme api for techdocs cli embedded app Co-authored-by: Camila Belo Co-authored-by: Eric Peterson Signed-off-by: Emma Indal --- .../components/TechDocsPage/TechDocsPage.tsx | 62 +++++-------------- 1 file changed, 16 insertions(+), 46 deletions(-) diff --git a/packages/techdocs-cli-embedded-app/src/components/TechDocsPage/TechDocsPage.tsx b/packages/techdocs-cli-embedded-app/src/components/TechDocsPage/TechDocsPage.tsx index f160faab0b..86ebcbab8e 100644 --- a/packages/techdocs-cli-embedded-app/src/components/TechDocsPage/TechDocsPage.tsx +++ b/packages/techdocs-cli-embedded-app/src/components/TechDocsPage/TechDocsPage.tsx @@ -15,20 +15,16 @@ */ import React, { - FC, - createContext, - useContext, useState, - useCallback, } from 'react'; import { Theme, makeStyles } from '@material-ui/core'; -import { ThemeProvider, Box, Tooltip, IconButton } from '@material-ui/core'; +import { Box, Tooltip, IconButton } from '@material-ui/core'; import LightIcon from '@material-ui/icons/Brightness7'; import DarkIcon from '@material-ui/icons/Brightness4'; -import { lightTheme, darkTheme } from '@backstage/theme'; +import { appThemeApiRef, useApi } from '@backstage/core-plugin-api'; import { TechDocsReaderPage, @@ -57,44 +53,10 @@ enum Themes { DARK = 'dark', } -type TechDocsThemeValue = { - theme: Themes; - toggleTheme: () => void; -}; - -const TechDocsThemeContext = createContext({ - theme: Themes.LIGHT, - toggleTheme: () => { }, -}); - -const TechdocsThemeProvider: FC = ({ children }) => { - const [theme, setTheme] = useState(Themes.LIGHT); - - const toggleTheme = useCallback(() => { - setTheme(prevTheme => - prevTheme === Themes.LIGHT ? Themes.DARK : Themes.LIGHT, - ); - }, [setTheme]); - - const value = { theme, toggleTheme }; - - const themes = { - [Themes.LIGHT]: lightTheme, - [Themes.DARK]: darkTheme, - }; - - return ( - - {children} - - ); -}; - -const useTechDocsTheme = () => useContext(TechDocsThemeContext); - export const TechDocsThemeToggle = () => { + const appThemeApi = useApi(appThemeApiRef) const classes = useStyles(); - const { theme, toggleTheme } = useTechDocsTheme(); + const [theme, setTheme] = useState(appThemeApi.getActiveThemeId() as Themes || Themes.LIGHT); const themes = { [Themes.LIGHT]: { @@ -109,10 +71,18 @@ export const TechDocsThemeToggle = () => { const { title, icon: Icon } = themes[theme]; + const handleSetTheme = () => { + setTheme(prevTheme => { + const newTheme = prevTheme === Themes.LIGHT ? Themes.DARK : Themes.LIGHT; + appThemeApi.setActiveThemeId(newTheme); + return newTheme; + }); + } + return ( - + @@ -121,12 +91,12 @@ export const TechDocsThemeToggle = () => { }; const DefaultTechDocsPage = () => { - return + return ( - + ) } -export const techDocsPage = +export const techDocsPage = \ No newline at end of file