// * Packages import { Link, useForm } from "@inertiajs/react"; import { route } from "ziggy-js"; import { FormEvent } from "react"; // * Components shadcn import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { DropdownMenuSeparator } from "@/components/ui/dropdown-menu"; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; // * Other import { useFormatedDate } from "@/hooks/use-formated-value"; import { useToast } from "@/hooks/use-toast"; import useTrans from "@/hooks/use-translations"; import str from "@/hooks/use-string"; import { Model, Views } from "@/back/types/global"; interface ModelActionsProps { actions?: Views; modelName: string; model: Model; modelUpdatedAt?: string; inColumn?: boolean; message?: string; } export default function ModelActions({ actions = [], modelName, model, modelUpdatedAt = "", inColumn = false, message = "back.model_action_updated_at", }: ModelActionsProps) { const messageTrans = useTrans(message); const { toast } = useToast(); const { delete: destroy } = useForm(); const deleteUser = (e: FormEvent) => { e.preventDefault(); destroy(route(`back.${modelName}.destroy`, model.id), { preserveScroll: true, onSuccess: () => { toast({ title: "Suppression réussie !", description: "Vous venez de supprimer définitivement une entrée.", }); }, onError: () => { toast({ variant: "destructive", title: "Suppression annulée !", description: "Un problème est survenu lors de la suppression de cette entrée.", }); }, }); }; const GetTranslation = (label: string) => { return useTrans(`crud.actions.${label}`); }; const formattedDate = useFormatedDate(modelUpdatedAt); const dialogSureTrans = useTrans("back.are_you_sure"); const dialogLostDataTrans = useTrans("back.lost_data"); const dialogCancelTrans = useTrans("back.no_cancel"); const dialogConfirmTrans = useTrans("back.yes_delete"); return (
{!inColumn && modelUpdatedAt.length > 0 && (

{messageTrans}

{formattedDate}
)}
{actions.map((action) => { if ( !model.policies[ action.policy as keyof typeof model.policies ] ) { return null; } return (
{action.value === "destroy" ? ( <> {inColumn && } {dialogSureTrans} {dialogLostDataTrans}
) : ( )}
); })}
); }