"use client" import { useEffect, useMemo, useState } from "react" import { Trash2 } from "lucide-react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible" import { NavColorPickerTrigger } from "@/components/gmail/nav/nav-color-picker-trigger" import { NavMessageVisibilityFields, NavSidebarVisibilityFields, } from "@/components/gmail/nav/nav-visibility-fields" import { useSidebarNav, folderMoveParentOptions } from "@/lib/sidebar-nav-context" import { normalizeNavColorClass } from "@/lib/nav-color" import { cn } from "@/lib/utils" export function NavLabelSettingsCard({ id, name, color, depth = 0, }: { id: string name: string color: string depth?: number }) { const nav = useSidebarNav() const prefs = nav.getNavItemPrefs(id) const colorClass = normalizeNavColorClass(color) const [renameDraft, setRenameDraft] = useState(name) const [sublabelName, setSublabelName] = useState("") useEffect(() => { setRenameDraft(name) }, [name]) return ( nav.updateFolderOrLabelColor(id, sw)} onDelete={() => nav.removeFolderOrLabelRow(id)} deleteLabel="Supprimer le libellé" >
nav.setNavItemSidebarVisibility(id, v)} /> nav.setNavItemMessageVisibility(id, v)} />
setRenameDraft(e.target.value)} className="min-w-[160px] flex-1" />
setSublabelName(e.target.value)} placeholder="Nom du sous-libellé" className="min-w-[160px] flex-1" />
) } export function NavImapFolderSettingsCard({ id, name, remoteName, depth = 0, }: { id: string name: string remoteName?: string depth?: number }) { const nav = useSidebarNav() const prefs = nav.getNavItemPrefs(id) const subtitle = remoteName && remoteName !== name ? remoteName : undefined return (
nav.setNavItemSidebarVisibility(id, v)} /> nav.setNavItemMessageVisibility(id, v)} />

Dossier synchronisé depuis le serveur mail — structure non modifiable ici.

) } export function NavFolderSettingsCard({ id, name, color, depth = 0, }: { id: string name: string color?: string depth?: number }) { const nav = useSidebarNav() const prefs = nav.getNavItemPrefs(id) const colorClass = normalizeNavColorClass(color) const [renameDraft, setRenameDraft] = useState(name) const [moveParent, setMoveParent] = useState("__root__") const [subfolderName, setSubfolderName] = useState("") const moveTargets = useMemo( () => folderMoveParentOptions(nav.folderTree, id), [nav.folderTree, id] ) useEffect(() => { setRenameDraft(name) }, [name]) return ( nav.updateFolderOrLabelColor(id, sw)} onDelete={() => nav.removeFolderOrLabelRow(id)} deleteLabel="Supprimer le dossier" >
nav.setNavItemSidebarVisibility(id, v)} /> nav.setNavItemMessageVisibility(id, v)} />
setRenameDraft(e.target.value)} className="min-w-[160px] flex-1" />
setSubfolderName(e.target.value)} placeholder="Nom du sous-dossier" className="min-w-[160px] flex-1" />
) } function NavItemSettingsShell({ title, subtitle, color, depth, onColorChange, onDelete, deleteLabel, hideDelete = false, hideColor = false, children, }: { title: string subtitle?: string color?: string depth: number onColorChange?: (swatch: string) => void onDelete?: () => void deleteLabel?: string hideDelete?: boolean hideColor?: boolean children: import("react").ReactNode }) { const [open, setOpen] = useState(false) return (
{!hideColor && color && onColorChange ? ( ) : null} {title} {subtitle ? ( {subtitle} ) : null} {!hideDelete && onDelete ? ( ) : null}
{children}
) } /** Flatten label rows for settings (parent/child via `/` in name). */ export function flattenLabelRowsForSettings( rows: { id: string; label: string; color: string }[] ) { return rows.map((row) => ({ ...row, depth: Math.max(0, row.label.split("/").length - 1), })) } type FolderSettingsNode = { id: string label: string color?: string children?: FolderSettingsNode[] } export function FolderSettingsTree({ nodes, depth = 0, }: { nodes: FolderSettingsNode[] depth?: number }) { return ( ) } type ImapFolderSettingsNode = { id: string label: string remoteName?: string children?: ImapFolderSettingsNode[] } export function ImapFolderSettingsTree({ nodes, depth = 0, }: { nodes: ImapFolderSettingsNode[] depth?: number }) { return ( ) }