"use client"; import { format } from "date-fns"; import { Plus, Trash2 } from "lucide-react"; import { useEffect, useState } from "react"; import { KanbanBoard, KanbanCard, KanbanCards, KanbanHeader, KanbanProvider, } from "~/components/ui/kanban"; import { usePotenziali } from "~/providers/PotenzialiProvider"; import type { PotenzialiGroupsId } from "~/schemas/public/PotenzialiGroups"; import type { UsersId } from "~/schemas/public/Users"; import type { PotenzialeData } from "~/server/services/potenziali.service"; import { api } from "~/utils/api"; import { Confirm } from "../confirm"; import { Credenza, CredenzaBody, CredenzaClose, CredenzaContent, CredenzaDescription, CredenzaFooter, CredenzaHeader, CredenzaTitle, CredenzaTrigger, } from "../custom_ui/credenza"; import Input from "../custom_ui/input"; import { Textarea } from "../custom_ui/textarea"; import { Button } from "../ui/button"; import { Label } from "../ui/label"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "../ui/select"; import { UserAvatar } from "../user_avatar"; export const Potenziali = () => { const { data, columns, setData, updateCall, removeColumn } = usePotenziali(); return ( <> { updateCall(); }} > {(column) => ( {column.name} { removeColumn(column.id); }} title="Elimina" > {(data: PotenzialeData) => ( )} )} > ); }; // 1. Extract the card logic into a separate component const PotenzialeCardItem = ({ data, columnId, }: { data: PotenzialeData; columnId: string; }) => { const [isEditingOpen, setIsEditingOpen] = useState(false); return ( { setIsEditingOpen(true); }} column={columnId} id={data.id} key={data.id} name={data.name} > <> {data.name} {data.descrizione} {data.userid && ( )} {format(data.created_at, "dd/MM/yyyy HH:mm")} {/** biome-ignore lint/a11y/noNoninteractiveElementInteractions: */} {/** biome-ignore lint/a11y/noStaticElementInteractions: */} {/** biome-ignore lint/a11y/useKeyWithClickEvents: */} e.stopPropagation()}> > ); }; export const NewColumn = () => { const [newColumnName, setNewColumnName] = useState(""); const { addColumn } = usePotenziali(); const [open, setOpen] = useState(false); return ( Nuova colonna Nuova colonna desc Titolo setNewColumnName(e.target.value)} type="string" /> { addColumn(newColumnName); setNewColumnName(""); setOpen(false); }} > Aggiungi ); }; const NewCard = ({ columnId }: { columnId: PotenzialiGroupsId }) => { const [newItemName, setNewItemName] = useState(""); const [newItemDescrizione, setNewItemDescrizione] = useState(""); const [newItemUserid, setNewItemUserid] = useState(null); const { addItem } = usePotenziali(); const [open, setOpen] = useState(false); const resetState = () => { setNewItemName(""); setNewItemDescrizione(""); setNewItemUserid(null); }; const handleAddItem = () => { addItem({ name: newItemName, descrizione: newItemDescrizione, potenziali_group_id: columnId, userid: newItemUserid, }); resetState(); setOpen(false); }; useEffect(() => { if (open) { resetState(); } }, [open]); const { data: admins, isLoading } = api.users.getAdmins.useQuery(); return ( Nuova colonna desc Titolo setNewItemName(e.target.value)} type="string" value={newItemName} /> Descrizione setNewItemDescrizione(e.target.value)} placeholder="" value={newItemDescrizione} /> Utente Assegnato {isLoading ? ( Loading... ) : ( { setNewItemUserid(v === "empty" ? null : (v as UsersId)); }} value={newItemUserid || "empty"} > Utente Assegnato nessuno {admins?.map((admin) => ( {admin.username} ))} )} Aggiungi Chiudi ); }; const EditingItem = ({ open, setOpen, data, }: { open: boolean; setOpen: (open: boolean) => void; data: PotenzialeData; }) => { const { updateItem, removeItem } = usePotenziali(); const [state, setState] = useState(data); const [hasChanges, setHasChanges] = useState(false); const { data: admins, isLoading } = api.users.getAdmins.useQuery(); useEffect(() => { if (open) { setState(data); setHasChanges(false); } }, [open]); return ( Modifica {state.name} desc Titolo { setState((prev) => prev && { ...prev, name: e.target.value }); setHasChanges(true); }} type="string" value={state.name} /> Descrizione { setState( (prev) => prev && { ...prev, descrizione: e.target.value }, ); setHasChanges(true); }} placeholder="" value={state.descrizione || undefined} /> Utente Assegnato {isLoading ? ( Loading... ) : ( { setState( (prev) => prev && { ...prev, userid: v === "empty" ? null : (v as UsersId), }, ); setHasChanges(true); }} value={state.userid?.toString() || "empty"} > Utente Assegnato nessuno {admins?.map((admin) => ( {admin.username} ))} )} { updateItem(state); setHasChanges(false); }} type="button" > Salva { if (state) { setOpen(false); removeItem(state.id); } }} title="Elimina" > Elimina Chiudi ); };
{data.name}
{data.descrizione}
{format(data.created_at, "dd/MM/yyyy HH:mm")}
Loading...