fix: handle nullable ads data and ensure safe filtering in advertisements

This commit is contained in:
Ardeman 2025-04-23 13:29:03 +08:00
parent eedb155880
commit 7b4ea17a16
4 changed files with 10 additions and 8 deletions

View File

@ -11,7 +11,7 @@ const adResponseSchema = z.object({
clicked: z.number(), clicked: z.number(),
}) })
const adsResponseSchema = z.object({ const adsResponseSchema = z.object({
data: z.array(adResponseSchema), data: z.array(adResponseSchema).nullable(),
}) })
export type TAdResponse = z.infer<typeof adResponseSchema> export type TAdResponse = z.infer<typeof adResponseSchema>

View File

@ -111,7 +111,7 @@ export const AdvertisementsPage = () => {
</div> </div>
<UiTable <UiTable
data={dataTable} data={dataTable || []}
columns={dataColumns} columns={dataColumns}
slots={dataSlot} slots={dataSlot}
title="Daftar Spanduk Iklan" title="Daftar Spanduk Iklan"

View File

@ -8,7 +8,7 @@ import type { Route } from './+types/_admin.lg-admin._dashboard.advertisements.u
export const loader = async ({ params }: Route.LoaderArgs) => { export const loader = async ({ params }: Route.LoaderArgs) => {
const { data: adsData } = await getAds() const { data: adsData } = await getAds()
const { id } = params const { id } = params
const adData = adsData.find((ads) => ads.id === id) const adData = adsData?.find((ads) => ads.id === id)
return { adData } return { adData }
} }

View File

@ -28,11 +28,13 @@ export const loader = async ({ request }: Route.LoaderArgs) => {
const { data: subscribePlanData } = await getSubscribePlan() const { data: subscribePlanData } = await getSubscribePlan()
const { data: categoriesData } = await getCategories() const { data: categoriesData } = await getCategories()
let { data: adsData } = await getAds() let { data: adsData } = await getAds()
adsData = adsData.filter( if (adsData) {
(ad) => adsData = adsData?.filter(
new Date(ad.start_date) <= new Date() && (ad) =>
new Date(ad.end_date) >= new Date(), new Date(ad.start_date) <= new Date() &&
) new Date(ad.end_date) >= new Date(),
)
}
return { return {
userData, userData,