Files
fluxer/fluxer_app/src/features/app/state/AppShellBranding.ts
T

41 lines
1.2 KiB
TypeScript

// SPDX-License-Identifier: AGPL-3.0-or-later
import {PRODUCT_NAME} from '@app/features/app/config/ProductConstants';
import type {RuntimeConfigSnapshot} from '@app/features/app/state/RuntimeConfigSnapshot';
export interface AppShellBranding {
readonly productName: string;
readonly iconUrl: string | null;
readonly symbolUrl: string | null;
readonly logoUrl: string | null;
readonly wordmarkUrl: string | null;
readonly faviconUrl: string | null;
readonly themeColor: string | null;
}
export const DEFAULT_APP_SHELL_BRANDING: AppShellBranding = Object.freeze({
productName: PRODUCT_NAME,
iconUrl: null,
symbolUrl: null,
logoUrl: null,
wordmarkUrl: null,
faviconUrl: null,
themeColor: null,
});
export function resolveAppShellBranding(snapshot: RuntimeConfigSnapshot | null): AppShellBranding {
if (snapshot === null) {
return DEFAULT_APP_SHELL_BRANDING;
}
const branding = snapshot.appPublic.branding;
return {
productName: branding.product_name,
iconUrl: branding.icon_url,
symbolUrl: branding.symbol_url ?? branding.icon_url,
logoUrl: branding.logo_url ?? branding.icon_url,
wordmarkUrl: branding.wordmark_url,
faviconUrl: branding.favicon_url ?? branding.icon_url,
themeColor: branding.theme_color,
};
}