feat: dynamic website title from branding settings
Update document title based on company name and tagline settings:
- Both filled: "{Company Name} - {Tagline}"
- Name only: "{Company Name}"
- Neither: "PicPeak - Photo Sharing Platform" (default)
This commit is contained in:
@@ -2,6 +2,8 @@ import { useEffect } from 'react';
|
|||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { getApiBaseUrl, buildResourceUrl } from '../../utils/url';
|
import { getApiBaseUrl, buildResourceUrl } from '../../utils/url';
|
||||||
|
|
||||||
|
const DEFAULT_TITLE = 'PicPeak - Photo Sharing Platform';
|
||||||
|
|
||||||
export const DynamicFavicon: React.FC = () => {
|
export const DynamicFavicon: React.FC = () => {
|
||||||
const { data: settings } = useQuery({
|
const { data: settings } = useQuery({
|
||||||
queryKey: ['public-settings'],
|
queryKey: ['public-settings'],
|
||||||
@@ -19,6 +21,7 @@ export const DynamicFavicon: React.FC = () => {
|
|||||||
staleTime: 5 * 60 * 1000, // 5 minutes
|
staleTime: 5 * 60 * 1000, // 5 minutes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Update favicon when branding settings change
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (settings?.branding_favicon_url) {
|
if (settings?.branding_favicon_url) {
|
||||||
// Remove existing favicon links
|
// Remove existing favicon links
|
||||||
@@ -29,13 +32,27 @@ export const DynamicFavicon: React.FC = () => {
|
|||||||
const link = document.createElement('link');
|
const link = document.createElement('link');
|
||||||
link.rel = 'icon';
|
link.rel = 'icon';
|
||||||
link.type = 'image/png';
|
link.type = 'image/png';
|
||||||
link.href = settings.branding_favicon_url.startsWith('http')
|
link.href = settings.branding_favicon_url.startsWith('http')
|
||||||
? settings.branding_favicon_url
|
? settings.branding_favicon_url
|
||||||
: buildResourceUrl(settings.branding_favicon_url);
|
: buildResourceUrl(settings.branding_favicon_url);
|
||||||
|
|
||||||
document.head.appendChild(link);
|
document.head.appendChild(link);
|
||||||
}
|
}
|
||||||
}, [settings?.branding_favicon_url]);
|
}, [settings?.branding_favicon_url]);
|
||||||
|
|
||||||
|
// Update document title when company name or tagline changes
|
||||||
|
useEffect(() => {
|
||||||
|
const companyName = settings?.branding_company_name?.trim();
|
||||||
|
const tagline = settings?.branding_company_tagline?.trim();
|
||||||
|
|
||||||
|
if (companyName && tagline) {
|
||||||
|
document.title = `${companyName} - ${tagline}`;
|
||||||
|
} else if (companyName) {
|
||||||
|
document.title = companyName;
|
||||||
|
} else {
|
||||||
|
document.title = DEFAULT_TITLE;
|
||||||
|
}
|
||||||
|
}, [settings?.branding_company_name, settings?.branding_company_tagline]);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user