infoalloggi-monorepo/apps/infoalloggi/src/components/area-riservata/comunicazioni.tsx

64 lines
1.6 KiB
TypeScript
Raw Normal View History

2025-08-28 18:27:07 +02:00
import { useState } from "react";
2025-08-04 17:45:44 +02:00
import {
2025-08-28 18:27:07 +02:00
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
2025-08-04 17:45:44 +02:00
} from "~/components/ui/accordion";
import { useMediaQuery } from "~/hooks/use-media-query";
2025-08-28 18:27:07 +02:00
import type { UsersId } from "~/schemas/public/Users";
import { api } from "~/utils/api";
2025-08-04 17:45:44 +02:00
export const EmailAccordion = ({ userId }: { userId: UsersId }) => {
2025-08-28 18:27:07 +02:00
const { data } = api.comunicazioni.getEmails.useQuery({
userId,
});
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
// Track which accordion item is open
const [openIndex, setOpenIndex] = useState<string | undefined>(undefined);
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
const mobile = useMediaQuery("(max-width: 768px)");
if (!data || data.length === 0) {
return <div className="text-center">Nessuna comunicazione trovata</div>;
}
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
return (
<div className="mx-auto py-4">
<Accordion
className="space-y-4"
2025-08-29 16:18:32 +02:00
collapsible
2025-08-28 18:27:07 +02:00
onValueChange={setOpenIndex}
2025-08-29 16:18:32 +02:00
type="single"
value={openIndex}
2025-08-28 18:27:07 +02:00
>
{data.map((email, index) => (
<AccordionItem
className="space-y-2 border-none"
2025-08-29 16:18:32 +02:00
key={index}
value={String(index)}
2025-08-28 18:27:07 +02:00
>
<AccordionTrigger className="rounded-md bg-muted px-4 py-2">
Email &ldquo;{email.title}&rdquo; del{" "}
{new Date(email.created_at).toLocaleDateString("it-IT", {
day: "2-digit",
2025-08-29 16:18:32 +02:00
month: "2-digit",
year: "numeric",
2025-08-28 18:27:07 +02:00
})}
</AccordionTrigger>
<AccordionContent>
{openIndex === String(index) && (
<iframe
height={mobile ? "600px" : "500px"}
2025-08-29 16:18:32 +02:00
srcDoc={email.html}
title="Email Content"
2025-08-28 18:27:07 +02:00
width="100%"
/>
)}
</AccordionContent>
</AccordionItem>
))}
</Accordion>
</div>
);
2025-08-04 17:45:44 +02:00
};