diff --git a/packages/web/src/components/MetadataProvider/index.tsx b/packages/web/src/components/MetadataProvider/index.tsx new file mode 100644 index 00000000..daa9a65c --- /dev/null +++ b/packages/web/src/components/MetadataProvider/index.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; + +import useConfig from 'hooks/useConfig'; + +type MetadataProviderProps = { + children: React.ReactNode; +}; + +const MetadataProvider = ({ + children, +}: MetadataProviderProps): React.ReactElement => { + const { config } = useConfig(); + + React.useEffect(() => { + document.title = (config?.title as string) || 'Automatisch'; + }, [config?.title]); + + return <>{children}; +}; + +export default MetadataProvider; diff --git a/packages/web/src/index.tsx b/packages/web/src/index.tsx index c2cd7099..0ced00a4 100644 --- a/packages/web/src/index.tsx +++ b/packages/web/src/index.tsx @@ -4,6 +4,7 @@ import ThemeProvider from 'components/ThemeProvider'; import IntlProvider from 'components/IntlProvider'; import ApolloProvider from 'components/ApolloProvider'; import SnackbarProvider from 'components/SnackbarProvider'; +import MetadataProvider from 'components/MetadataProvider'; import { AuthenticationProvider } from 'contexts/Authentication'; import { AutomatischInfoProvider } from 'contexts/AutomatischInfo'; import Router from 'components/Router'; @@ -19,9 +20,11 @@ ReactDOM.render( - {routes} + + {routes} - + + diff --git a/packages/web/src/locales/en.json b/packages/web/src/locales/en.json index 365f42ed..4c85c24c 100644 --- a/packages/web/src/locales/en.json +++ b/packages/web/src/locales/en.json @@ -220,6 +220,7 @@ "appAuthClientsDialog.title": "Choose your authentication client", "userInterfacePage.title": "User Interface", "userInterfacePage.successfullyUpdated": "User interface has been updated.", + "userInterfacePage.metadataTitle": "Title", "userInterfacePage.mainColor": "Primary main color", "userInterfacePage.darkColor": "Primary dark color", "userInterfacePage.lightColor": "Primary light color", diff --git a/packages/web/src/pages/UserInterface/index.tsx b/packages/web/src/pages/UserInterface/index.tsx index 169a2a19..e25565c4 100644 --- a/packages/web/src/pages/UserInterface/index.tsx +++ b/packages/web/src/pages/UserInterface/index.tsx @@ -24,6 +24,7 @@ type UserInterface = { main: string; }; }; + title: string; logo: { svgData: string; }; @@ -35,6 +36,7 @@ export default function UserInterface(): React.ReactElement { refetchQueries: ['GetConfig'], }); const { config, loading: configLoading } = useConfig([ + 'title', 'palette.primary.main', 'palette.primary.light', 'palette.primary.dark', @@ -47,6 +49,7 @@ export default function UserInterface(): React.ReactElement { await updateConfig({ variables: { input: { + title: uiData?.title, 'palette.primary.main': uiData?.palette?.primary.main, 'palette.primary.dark': uiData?.palette?.primary.dark, 'palette.primary.light': uiData?.palette?.primary.light, @@ -86,6 +89,12 @@ export default function UserInterface(): React.ReactElement { defaultValues={nestObject(config)} > + +