infoalloggi-monorepo/apps/infoalloggi/src/components/annunci_tutorial.tsx

118 lines
3.2 KiB
TypeScript
Raw Normal View History

2025-08-04 17:45:44 +02:00
"use client";
2025-08-28 18:27:07 +02:00
import { DialogTrigger } from "@radix-ui/react-dialog";
2025-08-04 17:45:44 +02:00
import { getCookie, setCookie } from "cookies-next/client";
import { add } from "date-fns";
2025-08-28 18:27:07 +02:00
import { ArrowRight, CircleHelp } from "lucide-react";
import { useRouter } from "next/router";
2025-08-04 17:45:44 +02:00
import { useEffect, useState } from "react";
2025-08-28 18:27:07 +02:00
import { Button } from "~/components/ui/button";
2025-08-04 17:45:44 +02:00
import {
2025-08-28 18:27:07 +02:00
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
2025-08-04 17:45:44 +02:00
} from "~/components/ui/dialog";
import { useTranslation } from "~/providers/I18nProvider";
const COOKIE_KEY = "tipologia_tutorial_shown";
export const CTA_TipologiaModal = () => {
2025-08-28 18:27:07 +02:00
const { t } = useTranslation();
const path = useRouter().asPath;
const hasCookie = getCookie(COOKIE_KEY) === "true";
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
const update = async (v: "Transitorio" | "Stabile" | null) => {
setCookie(COOKIE_KEY, "true", {
expires: add(new Date(), { days: 30 }), // Set cookie to expire in 30 days
});
if (v !== null) {
window.location.assign(`/annunci?tipo=${v}`);
}
setOpen(false);
};
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
const [open, setOpen] = useState(false);
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
useEffect(() => {
if (path === "/annunci" && !hasCookie) {
const timer = setTimeout(() => {
setOpen(true);
}, 1000); // 1 second delay
return () => clearTimeout(timer);
}
}, [path, hasCookie]);
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
return (
<Dialog
onOpenChange={async (v) => {
setOpen(v);
if (!v) {
await update(null);
}
}}
2025-08-29 16:18:32 +02:00
open={open}
2025-08-28 18:27:07 +02:00
>
<DialogTrigger asChild>
<Button className="h-9">
<CircleHelp />{" "}
2025-08-28 18:27:07 +02:00
<span className="hidden sm:block">
{t.tipologia_tutorial.btn_title}
</span>
</Button>
</DialogTrigger>
<DialogContent className="max-w-2xl">
<DialogHeader>
<DialogTitle className="text-2xl">
{t.tipologia_tutorial.title}
</DialogTitle>
<DialogDescription className="sr-only">
tipologia hint
</DialogDescription>
</DialogHeader>
<div className="flex flex-col gap-8">
2025-10-10 16:18:43 +02:00
<div className="space-y-2 rounded-md border border-transitorio p-2">
<h3 className="font-semibold text-lg text-transitorio">
2025-08-28 18:27:07 +02:00
{t.tipologia_tutorial.transitorio}
</h3>
<p>{t.tipologia_tutorial.transitorio_desc}</p>
<Button
aria-label={t.tipologia_tutorial.transitorio_cta}
className="w-full bg-transitorio"
2025-08-29 16:18:32 +02:00
onClick={async () => await update("Transitorio")}
2025-08-28 18:27:07 +02:00
>
{t.tipologia_tutorial.transitorio_cta}
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
<ArrowRight className="size-4" />
</Button>
</div>
2025-10-10 16:18:43 +02:00
<div className="space-y-2 rounded-md border border-stabile p-2">
<h3 className="font-semibold text-lg text-stabile">
2025-08-28 18:27:07 +02:00
{t.tipologia_tutorial.stabile}
</h3>
<p>{t.tipologia_tutorial.stabile_desc}</p>
<Button
aria-label={t.tipologia_tutorial.stabile_cta}
className="w-full bg-stabile"
2025-08-29 16:18:32 +02:00
onClick={async () => await update("Stabile")}
2025-08-28 18:27:07 +02:00
>
{t.tipologia_tutorial.stabile_cta}
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
<ArrowRight className="size-4" />
</Button>
</div>
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
<Button
aria-label={t.tipologia_tutorial.alone}
className="w-full"
2025-08-29 16:18:32 +02:00
onClick={async () => await update(null)}
variant="outline"
2025-08-28 18:27:07 +02:00
>
{t.tipologia_tutorial.alone}
</Button>
</div>
</DialogContent>
</Dialog>
);
2025-08-04 17:45:44 +02:00
};