import { Button } from "@/components/ui/button";
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import React, { useState } from "react";
import { trpc } from "@/app/_trpc/client";
import { SelectedTool } from "../types";
import { useToast } from "@/components/ui/use-toast";
export function DialogUpdateTools({
selectedTools,
setSelectedTools,
}: {
selectedTools: SelectedTool[];
setSelectedTools: React.Dispatch<React.SetStateAction<SelectedTool[]>>;
}) {
const utils = trpc.useUtils();
const [open, setOpen] = useState<boolean>(false);
const {toast}=useToast()
const { mutate: updateTools, isPending } = trpc.tools.updateTools.useMutation(
{
onSuccess: () => {
setOpen(false);
utils.tools.getTools.invalidate();
},
onError:(err)=>{
toast({
title:'Error',
description:'Error al modificar herramienta',
variant:'destructive'
})
}
}
);
const handleUpdateMaterials = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const tools = selectedTools?.map(({ id, name, quantity,inStock }) => ({
id,
quantity:quantity || inStock,
name,
}));
updateTools({ tools });
};
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild className="w-full">
<Button size="sm" className="w-full " variant="outline" disabled={selectedTools.length <= 0}>
Modificar
</Button>
</DialogTrigger>
<DialogContent className="sm:max-w-[425px]">
<DialogHeader>
<DialogTitle>Actualizar materiales</DialogTitle>
<DialogDescription>
Modifica los materiales en tu inventario aqui.
</DialogDescription>
</DialogHeader>
<form onSubmit={handleUpdateMaterials}>
{selectedTools &&
selectedTools.map((tool) => {
return (
<div key={tool?.id} className="flex flex-col py-4">
<div className="grid grid-cols-4 items-center gap-4 mb-1">
<Label
htmlFor={`${tool}-${tool.id}`}
className="text-right capitalize"
>
Nombre
</Label>
<Input
id={`${tool}-${tool.id}`}
name="name"
type="text"
min={0}
defaultValue={tool?.name}
className="col-span-3"
onChange={(e) => {
setSelectedTools((prev) => {
return prev.map((item) => {
if (item.id === tool.id) {
const updatedItem = item;
updatedItem.name = e.target.value;
return updatedItem;
}
return item;
});
});
}}
/>
</div>
<div className="grid grid-cols-4 items-center gap-4 ">
<Label
htmlFor={`${tool}-${tool.id}`}
className="text-right capitalize"
>
Cantidad
</Label>
<Input
id={`${tool}-${tool.id}`}
name="quantity"
type="number"
min={tool?.inStock || 1}
defaultValue={tool?.inStock}
className="col-span-3"
onChange={(e) => {
setSelectedTools((prev) => {
return prev.map((item) => {
if (item.id === tool.id) {
const updatedItem = item;
updatedItem.quantity = parseInt(e.target.value)
return updatedItem;
}
return item;
});
});
}}
/>
</div>
</div>
);
})}
<DialogFooter className="mt-3">
<Button type="submit" disabled={isPending}>
{isPending ? <span>Guardando</span> : <span>Guardar</span>}
</Button>
</DialogFooter>
</form>
</DialogContent>
</Dialog>
);
}