'use client'; import { useEffect, useRef, useState } from 'react'; import { AddEmployeeForm } from '@/app/(app)/equipe/AddEmployeeForm'; import { Button } from '@/components/ui/Button'; import type { ContractLocation, HiringOptions, } from '@/server/employees/queries'; /** * Embauche, en panneau latéral. * * Une trentaine de champs : posés au bas de la liste, ils occupaient plus de * place que l'effectif qu'on vient consulter. Le panneau glisse par la droite * et laisse l'annuaire visible — on embauche en regardant qui est déjà là. * * `` natif plutôt qu'un panneau maison : le piège de focus, la * fermeture par Échap et le fond inerte viennent avec, et une `
` doit les * réimplémenter sans jamais les tenir tout à fait. */ export function AddEmployeeDialog({ locations, options, }: { locations: ContractLocation[]; options: HiringOptions; }) { const dialog = useRef(null); const [open, setOpen] = useState(false); useEffect(() => { const element = dialog.current; if (!element) return; if (open && !element.open) element.showModal(); if (!open && element.open) element.close(); }, [open]); return ( <> setOpen(false)} className="mt-0 mr-0 mb-0 ml-auto h-full max-h-none w-[min(30rem,100vw)] max-w-none border-l border-line-1 bg-surface p-0 text-ink-1 backdrop:bg-[rgb(0_0_0/0.4)]" >

Nouvel employé

{open ? ( // Monté à l'ouverture : un formulaire démonté entre deux usages // repart vide, sans traîner la saisie abandonnée la fois d'avant. setOpen(false)} /> ) : null}
); }