'use client' import { ChevronDown } from 'lucide-react' import Image from 'next/image' import Link from 'next/link' import { useEffect, useRef, useState } from 'react' export type Theme = 'light' | 'dark' export type Language = 'en' | 'fr' | 'ar' type Dictionary = { home: string storefront: string signIn: string ownerSignIn: string theme: string light: string dark: string } type LanguageMeta = { value: Language flag: string shortLabel: string } export function buildDashboardSignInHref(dashboardUrl: string, language: Language, theme: Theme): string { const signInParams = new URLSearchParams() signInParams.set('lang', language) signInParams.set('theme', theme) return `${dashboardUrl}/sign-in?${signInParams.toString()}` } export function localeMenuPositionClass(language: Language): string { return language === 'ar' ? 'right-0 sm:right-0' : 'left-0 sm:left-auto sm:right-0' } export function ownerWorkspaceHref(dashboardUrl: string, companyName: string | null): string { return companyName ? dashboardUrl : `${dashboardUrl}/sign-up` } export function companyInitial(companyName: string): string { return companyName.trim().charAt(0).toUpperCase() } export default function StorefrontHeader({ dict, theme, setTheme, companyName, dashboardUrl, currentLanguage, localeOptions, onSelectLanguage, }: { dict: Dictionary theme: Theme setTheme: (theme: Theme) => void companyName: string | null dashboardUrl: string currentLanguage: LanguageMeta localeOptions: LanguageMeta[] onSelectLanguage: (language: Language) => void }) { const localeMenuRef = useRef(null) const [localeMenuOpen, setLocaleMenuOpen] = useState(false) const themeMenuRef = useRef(null) const [themeMenuOpen, setThemeMenuOpen] = useState(false) const themeOptions = [ { value: 'light' as const, label: dict.light }, { value: 'dark' as const, label: dict.dark }, ] const currentTheme = themeOptions.find((option) => option.value === theme) ?? themeOptions[0] const menuPositionClass = localeMenuPositionClass(currentLanguage.value) useEffect(() => { function handlePointerDown(event: MouseEvent) { if (!localeMenuRef.current?.contains(event.target as Node)) { setLocaleMenuOpen(false) } if (!themeMenuRef.current?.contains(event.target as Node)) { setThemeMenuOpen(false) } } document.addEventListener('mousedown', handlePointerDown) return () => document.removeEventListener('mousedown', handlePointerDown) }, []) function toggleLocaleMenu() { setThemeMenuOpen(false) setLocaleMenuOpen((open) => !open) } function toggleThemeMenu() { setLocaleMenuOpen(false) setThemeMenuOpen((open) => !open) } const signInHref = buildDashboardSignInHref(dashboardUrl, currentLanguage.value, theme) return (
RentalDriveGo RentalDriveGo
{localeMenuOpen ? (
{localeOptions.map((option) => ( ))}
) : null}
) }