"use client" import { useState, useRef, useEffect } from "react" import Link from "next/link" import { Icon, addCollection } from "@iconify/react" import { icons as mdiIcons } from "@iconify-json/mdi" import { Pencil } from "lucide-react" import { AccountAvatar } from "@/components/gmail/account-avatar" import { AccountSwitcherDropdown } from "@/components/gmail/account-switcher-dropdown" import { Button } from "@/components/ui/button" import { useActiveAccount } from "@/lib/stores/account-store" import { useMailSettingsStore } from "@/lib/stores/mail-settings-store" import { MAIL_HEADER_DROPDOWN_CLASS, MAIL_ICON_BTN } from "@/lib/mail-chrome-classes" import { cn } from "@/lib/utils" const HEADER_ICON_BTN_CLASS = cn( "rounded-full", MAIL_ICON_BTN, "hover:text-accent-foreground", ) addCollection(mdiIcons) type FavoriteApp = { name: string icon: string href?: string /** Logos sombres : blanc en dark via invert + hue-rotate. */ whiteLogoInDark?: boolean } const googleApps: FavoriteApp[] = [ { name: "Compte", icon: "/compte-mark.svg" }, { name: "Agenda", icon: "/agenda-mark.svg" }, { name: "Photos", icon: "/photos-mark.svg" }, { name: "Ultimail", icon: "/brand/ultimail-header-icon.png", href: "/mail" }, { name: "UltiDrive", icon: "/ultidrive-mark.svg" }, { name: "UltiMeet", icon: "/ultimeet-mark.svg" }, { name: "Administration", icon: "/admin-mark.svg" }, { name: "OpenMaps", icon: "/openstreetmap-mark.svg" }, { name: "Mistral", icon: "/mistral-mark.svg" }, { name: "Qwant", icon: "/qwant-mark.svg", whiteLogoInDark: true }, { name: "Ground News", icon: "/ground-news-mark.svg", whiteLogoInDark: true }, ] const FAVORITE_TILE_CLASS = "flex flex-col items-center gap-2 rounded-lg p-3 transition-colors hover:bg-accent" function FavoriteAppTile({ app }: { app: FavoriteApp }) { const content = ( <>
{app.name} { const target = e.target as HTMLImageElement target.style.display = "none" target.parentElement!.innerHTML = `
${app.name[0]}
` }} />
{app.name} ) if (app.href) { return ( {content} ) } return ( ) } interface HeaderAccountActionsProps { className?: string } export function HeaderAccountActions({ className }: HeaderAccountActionsProps) { const [appsMenuOpen, setAppsMenuOpen] = useState(false) const [accountMenuOpen, setAccountMenuOpen] = useState(false) const appsMenuRef = useRef(null) const accountMenuRef = useRef(null) const activeAccount = useActiveAccount() const openQuickSettings = useMailSettingsStore((s) => s.setQuickSettingsOpen) useEffect(() => { function handleClickOutside(event: MouseEvent) { if ( appsMenuRef.current && !appsMenuRef.current.contains(event.target as Node) ) { setAppsMenuOpen(false) } } document.addEventListener("mousedown", handleClickOutside) return () => document.removeEventListener("mousedown", handleClickOutside) }, []) return (
{appsMenuOpen && (
Vos favoris
{googleApps.map((app) => ( ))}
)}
) }