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)}
>
+
+