diff --git a/packages/app/public/index.html b/packages/app/public/index.html index e91310924..51f65c969 100644 --- a/packages/app/public/index.html +++ b/packages/app/public/index.html @@ -35,10 +35,7 @@ href="<%= publicPath %>/safari-pinned-tab.svg" color="#5bbad5" /> - + <%= config.getOptionalString('app.title') ?? 'Backstage' %> diff --git a/packages/app/src/components/AppBase/AppBase.tsx b/packages/app/src/components/AppBase/AppBase.tsx index c67647175..061a12fca 100644 --- a/packages/app/src/components/AppBase/AppBase.tsx +++ b/packages/app/src/components/AppBase/AppBase.tsx @@ -27,6 +27,7 @@ import { entityPage } from '../catalog/EntityPage'; import { HomePage } from '../home/HomePage'; import { LearningPaths } from '../learningPaths/LearningPathsPage'; import { SearchPage } from '../search/SearchPage'; +import ConfigUpdater from '../Root/ConfigUpdater'; const AppBase = () => { const { @@ -73,6 +74,7 @@ const AppBase = () => { + {dynamicRoutes.filter(({ path }) => path === '/').length === 0 && ( diff --git a/packages/app/src/components/Root/ConfigUpdater.tsx b/packages/app/src/components/Root/ConfigUpdater.tsx new file mode 100644 index 000000000..27e49fcd7 --- /dev/null +++ b/packages/app/src/components/Root/ConfigUpdater.tsx @@ -0,0 +1,35 @@ +import React, { useEffect } from 'react'; +import { configApiRef, useApi } from '@backstage/core-plugin-api'; + +const ConfigUpdater: React.FC = () => { + const configApi = useApi(configApiRef); + + useEffect(() => { + const updateConfig = () => { + const logoIconBase64URI = configApi.getOptionalString( + 'app.branding.iconLogo', + ); + + if (logoIconBase64URI) { + const favicon = document.getElementById( + 'dynamic-favicon', + ) as HTMLLinkElement; + if (favicon) { + favicon.href = logoIconBase64URI; + } else { + const newFavicon = document.createElement('link'); + newFavicon.id = 'dynamic-favicon'; + newFavicon.rel = 'icon'; + newFavicon.href = logoIconBase64URI; + document.head.appendChild(newFavicon); + } + } + }; + + updateConfig(); + }, [configApi]); + + return null; +}; + +export default ConfigUpdater;