diff --git a/client/src/components/SonumLayout.tsx b/client/src/components/SonumLayout.tsx index 4f11b34..ace5f09 100644 --- a/client/src/components/SonumLayout.tsx +++ b/client/src/components/SonumLayout.tsx @@ -176,7 +176,7 @@ export default function SonumLayout({ children }: { children: React.ReactNode }) {/* Footer sidebar */}
(null); - const [editMode, setEditMode] = useState(null); const [rattacherEtab, setRattacherEtab] = useState<{ id: number; nom: string } | null>(null); - const etablissementsQuery = trpc.etablissements.mesEtablissements.useQuery(); const utils = trpc.useUtils(); - const toggleAccordion = (id: number) => { - setOpenEtab(openEtab === id ? null : id); - setEditMode(null); - }; + const toggleAccordion = (id: number) => setOpenEtab(openEtab === id ? null : id); if (etablissementsQuery.isLoading) { return ( @@ -50,13 +36,10 @@ export default function MesEtablissements() { return (
- {/* En-tête */}

Mes Établissements

-

- Gérez les logiciels de vos établissements rattachés -

+

Gérez les logiciels de vos établissements rattachés

@@ -68,9 +51,7 @@ export default function MesEtablissements() {

Aucun établissement rattaché

-

- Contactez un gestionnaire SONUM pour rattacher vos établissements. -

+

Contactez un gestionnaire SONUM pour rattacher vos établissements.

) : (
@@ -79,12 +60,9 @@ export default function MesEtablissements() { key={etab.id} etab={etab} isOpen={openEtab === etab.id} - isEditMode={editMode === etab.id} onToggle={() => toggleAccordion(etab.id)} - onEditMode={() => setEditMode(editMode === etab.id ? null : etab.id)} onRattacher={() => setRattacherEtab({ id: etab.id, nom: etab.nom })} onViewFiche={() => navigate(`/etablissement/${etab.id}`)} - onRefresh={() => utils.etablissements.mesEtablissements.invalidate()} /> ))}
@@ -106,44 +84,17 @@ export default function MesEtablissements() { ); } -function EtablissementAccordion({ - etab, - isOpen, - isEditMode, - onToggle, - onEditMode, - onRattacher, - onViewFiche, - onRefresh, -}: { - etab: any; - isOpen: boolean; - isEditMode: boolean; - onToggle: () => void; - onEditMode: () => void; - onRattacher: () => void; - onViewFiche: () => void; - onRefresh: () => void; +function EtablissementAccordion({ etab, isOpen, onToggle, onRattacher, onViewFiche }: { + etab: any; isOpen: boolean; onToggle: () => void; onRattacher: () => void; onViewFiche: () => void; }) { - const logicielsQuery = trpc.logiciels.byEtablissement.useQuery( - { etablissementId: etab.id }, - { enabled: isOpen } - ); + const logicielsQuery = trpc.logiciels.byEtablissement.useQuery({ etablissementId: etab.id }, { enabled: isOpen }); const deleteMutation = trpc.logiciels.delete.useMutation({ - onSuccess: () => { - toast.success("Logiciel supprimé"); - logicielsQuery.refetch(); - }, + onSuccess: () => { toast.success("Logiciel supprimé"); logicielsQuery.refetch(); }, }); - const utils = trpc.useUtils(); return ( -
- {/* En-tête accordéon */} - - {/* Contenu accordéon */} {isOpen && (
- {/* Barre d'actions */}
-
- - -
- +
- {/* Tableau des logiciels */} {logicielsQuery.isLoading ? (
) : !logicielsQuery.data?.length ? (
-

Aucun logiciel renseigné pour cet établissement.

- +

Aucun logiciel renseigné.

+
) : (
@@ -229,9 +144,7 @@ function EtablissementAccordion({ Bloc fonctionnel État Hébergement - {isEditMode && ( - Actions - )} + Actions @@ -239,7 +152,6 @@ function EtablissementAccordion({ deleteMutation.mutate({ id: logiciel.id, etablissementId: etab.id })} onUpdated={() => logicielsQuery.refetch()} @@ -255,115 +167,101 @@ function EtablissementAccordion({ ); } -function LogicielRow({ - logiciel, - isEditMode, - etablissementId, - onDelete, - onUpdated, -}: { - logiciel: any; - isEditMode: boolean; - etablissementId: number; - onDelete: () => void; - onUpdated: () => void; +function LogicielRow({ logiciel, etablissementId, onDelete, onUpdated }: { + logiciel: any; etablissementId: number; onDelete: () => void; onUpdated: () => void; }) { - const [editing, setEditing] = useState(false); - const [etat, setEtat] = useState(logiciel.etatDeploiement); + const [open, setOpen] = useState(false); + const [etat, setEtat] = useState(logiciel.etatDeploiement ?? "operationnel"); + const [hebergement, setHebergement] = useState(logiciel.modeHebergement ?? ""); + const [facturation, setFacturation] = useState(logiciel.modeFacturation ?? ""); const [commentaire, setCommentaire] = useState(logiciel.commentaire ?? ""); const updateMutation = trpc.logiciels.upsert.useMutation({ - onSuccess: () => { - toast.success("Logiciel mis à jour"); - setEditing(false); - onUpdated(); - }, + onSuccess: () => { toast.success("Logiciel mis à jour"); setOpen(false); onUpdated(); }, + onError: (e) => toast.error("Erreur : " + e.message), }); - if (editing && isEditMode) { - return ( - - {logiciel.solutionNom} - {logiciel.editeurNom} - {logiciel.blocFonctionnelNom} - - - - - setCommentaire(e.target.value)} - placeholder="Commentaire..." - className="text-xs border border-border rounded px-2 py-1 bg-background w-full" - /> - - -
- - -
- - - ); - } + const handleOpen = () => { + setEtat(logiciel.etatDeploiement ?? "operationnel"); + setHebergement(logiciel.modeHebergement ?? ""); + setFacturation(logiciel.modeFacturation ?? ""); + setCommentaire(logiciel.commentaire ?? ""); + setOpen(true); + }; return ( - - {logiciel.solutionNom} - {logiciel.editeurNom} - - {logiciel.blocFonctionnelNom && ( - - {logiciel.blocFonctionnelNom} - - )} - - - - - - {logiciel.modeHebergement ? : } - - {isEditMode && ( + <> + + {logiciel.solutionNom} + {logiciel.editeurNom} + + {logiciel.blocFonctionnelNom && {logiciel.blocFonctionnelNom}} + + + + {logiciel.modeHebergement ? : } +
- -
- )} - + + + + + + Modifier — {logiciel.solutionNom} + +
+
+ + +
+
+ + +
+
+ + +
+
+ +