import { NotebookPen, Toolbox } from "lucide-react"; import Image from "next/image"; import { useState } from "react"; import toast from "react-hot-toast"; import LoadingButton from "~/components/custom_ui/loading-button"; import { Textarea } from "~/components/custom_ui/textarea"; import { AdminActions, UserActions, } from "~/components/servizio/annuncio_actions"; import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; import { Textarea } from "~/components/ui/textarea"; import { useMediaQuery } from "~/hooks/use-media-query"; import { handleConsegna } from "~/lib/annuncio_details"; import { getStorageUrl } from "~/lib/storage_utils"; import { cn, formatCurrency } from "~/lib/utils"; import { useTranslation } from "~/providers/I18nProvider"; import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider"; import type { AnnunciId } from "~/schemas/public/Annunci"; import type { ServizioServizioId } from "~/schemas/public/Servizio"; import type { AnnuncioRicerca } from "~/server/controllers/annunci.controller"; import type { ServizioAnnuncioData } from "~/server/controllers/servizio.controller"; import { api } from "~/utils/api"; import { Button } from "../ui/button"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "../ui/collapsible"; import { AnnuncioDettaglio, TipoBadge } from "./annuncio_dettaglio"; export const AnnuncioCard = ({ className }: { className?: string }) => { const { isAdmin } = useServizio(); const { data } = useServizioAnnuncio(); return ( ) : ( ) } isAdmin={isAdmin} /> ); }; export const AnnuncioCardContent = ({ interactions, className, data, isAdmin, }: { interactions?: React.ReactNode; className?: string; data: ServizioAnnuncioData; isAdmin: boolean; }) => { return ( Annuncio {data.codice}
{interactions}
{isAdmin && ( )}
); }; const AnnuncioNote = ({ servizioId, annuncioId, note, }: { servizioId: ServizioServizioId; annuncioId: AnnunciId; note: string | null; }) => { const [newNote, setNewNote] = useState(note); const utils = api.useUtils(); const { mutate, isPending } = api.servizio.updateServizioAnnunci.useMutation({ onSuccess: async () => { toast.success("Note aggiornate"); await utils.servizio.invalidate(); }, onError: () => { toast.error("Errore nell'aggiornamento note"); }, }); const isDesktop = useMediaQuery("(min-width: 40rem)"); return (