29 lines
1.3 KiB
TypeScript
29 lines
1.3 KiB
TypeScript
import { DEFAULT_EVENT_BRANDING, useOptionalEventBranding } from '@/guest/context/EventBrandingContext';
|
|
import type { EventBranding } from '@/guest/types/event-branding';
|
|
import { useAppearance, type Appearance } from '@/hooks/use-appearance';
|
|
import { resolveGuestThemeName } from './brandingTheme';
|
|
|
|
export function resolveGuestThemeVariant(branding: EventBranding, appearance: Appearance): 'light' | 'dark' {
|
|
const themeName = resolveGuestThemeName(branding, appearance);
|
|
return themeName === 'guestNight' ? 'dark' : 'light';
|
|
}
|
|
|
|
export function useGuestThemeVariant(brandingOverride?: EventBranding | null): {
|
|
isDark: boolean;
|
|
variant: 'light' | 'dark';
|
|
themeName: 'guestLight' | 'guestNight';
|
|
branding: EventBranding;
|
|
} {
|
|
const { appearance, resolved } = useAppearance() as {
|
|
appearance?: Appearance;
|
|
resolved?: 'light' | 'dark';
|
|
};
|
|
const brandingContext = useOptionalEventBranding();
|
|
const branding = brandingOverride ?? brandingContext?.branding ?? DEFAULT_EVENT_BRANDING;
|
|
const appearanceMode = appearance ?? (resolved === 'dark' ? 'dark' : 'light');
|
|
const themeName = resolveGuestThemeName(branding, appearanceMode);
|
|
const variant = themeName === 'guestNight' ? 'dark' : 'light';
|
|
|
|
return { isDark: variant === 'dark', variant, themeName, branding };
|
|
}
|