import { Plus, RefreshCcw } from "lucide-react"; import Head from "next/head"; import { useState } from "react"; import toast from "react-hot-toast"; import { AreaRiservataLayout } from "~/components/Layout"; import { LoadingPage } from "~/components/loading"; import { Status500 } from "~/components/status-page"; import { BannersTable } from "~/components/tables/banners-table"; import { Button } from "~/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "~/components/ui/dialog"; import { FormBanners } from "~/forms/FormBanners"; import type { NextPageWithLayout } from "~/pages/_app"; import type { Banners } from "~/schemas/public/Banners"; import { generateSSGHelper } from "~/server/utils/ssgHelper"; import { api } from "~/utils/api"; /** * Pagina di gestione banners per admin: /area-riservata/admin/banners */ const AdminBanners: NextPageWithLayout = () => { const { data, isLoading, refetch } = api.banners.getBannerAllData.useQuery(); const [openEdit, setOpenEdit] = useState(false); const [editData, setEditData] = useState(null); const handleOpen = (status: boolean) => { setOpenEdit(status); }; const handleEdit = (data: Banners | null) => { setEditData(data); }; if (isLoading) return ; if (!data) return ; return ( <> Banners - Infoalloggi.it

Banners

); }; export default AdminBanners; export async function getServerSideProps() { const helpers = generateSSGHelper(); await helpers.banners.getBannerAllData.prefetch(); return { props: { trpcState: helpers.dehydrate(), }, }; } AdminBanners.getLayout = function getLayout(page) { return {page}; }; const EditModal = ({ initial, open, setOpen, }: { initial: Banners | null; open: boolean; setOpen: (status: boolean) => void; }) => { const utils = api.useUtils(); const { mutate: edit } = api.banners.updateBanner.useMutation({ onError: (error) => { toast.error(error.message); }, onSuccess: async () => { toast.success("Successo"); await utils.banners.getBannerAllData.invalidate(); await utils.banners.getBannerData.invalidate(); setOpen(false); }, }); const { mutate: add } = api.banners.addBanner.useMutation({ onError: (error) => { toast.error(error.message); }, onSuccess: async () => { toast.success("Successo"); await utils.banners.getBannerAllData.invalidate(); await utils.banners.getBannerData.invalidate(); setOpen(false); }, }); const { mutate: del } = api.banners.deleteBanner.useMutation({ onError: (error) => { toast.error(error.message); }, onSuccess: async () => { toast.success("Successo"); await utils.banners.getBannerAllData.invalidate(); await utils.banners.getBannerData.invalidate(); setOpen(false); }, }); return ( {!initial ? "Aggiungi Banner" : "Modifica Valori"} Edit {!initial ? (
{ add({ ...fields, }); }} />
) : (
del({ idbanner: v })} initialValues={{ ...initial, }} submitMutation={(fields) => { edit({ ...fields, }); }} />
)}
); };