2025-10-15 15:45:24 +02:00
import { RefreshCcw , TriangleAlert } from "lucide-react" ;
import toast from "react-hot-toast" ;
import { Confirm } from "~/components/confirm" ;
2025-08-04 17:45:44 +02:00
import { AreaRiservataLayout } from "~/components/Layout" ;
import { LoadingPage } from "~/components/loading" ;
import { Status500 } from "~/components/status-page" ;
import { AnnunciTable } from "~/components/tables/annunci-tables" ;
2025-10-15 15:45:24 +02:00
import { Button } from "~/components/ui/button" ;
2025-08-28 18:27:07 +02:00
import type { NextPageWithLayout } from "~/pages/_app" ;
2025-10-17 18:12:10 +02:00
import { generateSSGHelper } from "~/server/utils/ssgHelper" ;
2025-08-28 18:27:07 +02:00
import { api } from "~/utils/api" ;
2025-08-04 17:45:44 +02:00
const Admin_Annunci : NextPageWithLayout = ( ) = > {
2025-08-28 18:27:07 +02:00
const { data , isLoading , refetch } = api . annunci . getAnnunciList . useQuery ( ) ;
2025-10-15 15:45:24 +02:00
const { mutateAsync : revalidate } =
api . settings . revalidateAllAnnunci . useMutation ( {
onSettled : async ( ) = > {
toast . success (
"La revalidazione dell'annuncio è stata richiesta con successo,\n potrebbero volerci alcuni minuti prima che le modifiche siano visibili." ,
{
duration : 5000 ,
} ,
) ;
} ,
} ) ;
2025-08-28 18:27:07 +02:00
if ( isLoading ) return < LoadingPage / > ;
if ( ! data ) return < Status500 / > ;
return (
< div className = "mx-1 flex-1 overflow-auto" >
< div className = "mx-auto pt-4" >
< div className = "mx-3 items-start justify-between md:flex" >
< div className = "flex max-w-lg items-center gap-3" >
2025-10-10 16:18:43 +02:00
< h3 className = "font-bold text-2xl" > Annunci < / h3 >
2025-08-28 18:27:07 +02:00
< button
className = "cursor-pointer"
2025-08-29 16:18:32 +02:00
onClick = { async ( ) = > await refetch ( ) }
type = "button"
2025-08-28 18:27:07 +02:00
>
< RefreshCcw className = "size-6" / >
< / button >
2025-10-15 15:45:24 +02:00
< Confirm
description = "Sei sicuro di voler richiedere la revalidazione gli annunci? Questa operazione potrebbe richiedere alcuni minuti prima che le modifiche siano visibili e resetterà eventuali modifiche effettuate dopo la sincronizzazione giornaliera."
onConfirm = { async ( ) = > {
await revalidate ( ) ;
} }
title = "Rivalida tutti gli annunci"
>
< Button
className = "flex items-center gap-2"
size = "sm"
type = "button"
variant = "warning"
>
< TriangleAlert / > Rivalida tutti gli annunci
< / Button >
< / Confirm >
2025-08-28 18:27:07 +02:00
< / div >
< / div >
< AnnunciTable data = { data } / >
< / div >
< / div >
) ;
2025-08-04 17:45:44 +02:00
} ;
2025-10-17 18:12:10 +02:00
export async function getServerSideProps() {
const helpers = generateSSGHelper ( ) ;
await helpers . annunci . getAnnunciList . prefetch ( ) ;
return {
props : {
trpcState : helpers.dehydrate ( ) ,
} ,
} ;
}
2025-08-04 17:45:44 +02:00
export default Admin_Annunci ;
Admin_Annunci . getLayout = function getLayout ( page ) {
2025-08-28 18:27:07 +02:00
return < AreaRiservataLayout > { page } < / AreaRiservataLayout > ;
2025-08-04 17:45:44 +02:00
} ;