From bfa46cdca4ac632c07a55c9bd94b04b850af045f Mon Sep 17 00:00:00 2001 From: Ardeman Date: Fri, 14 Mar 2025 13:08:48 +0800 Subject: [PATCH] feat: refactor date handling in ads and news creation/update --- app/apis/admin/create-ads.ts | 5 +++-- app/apis/admin/create-news.ts | 3 ++- app/apis/admin/update-ads.ts | 5 +++-- app/apis/admin/update-news.ts | 3 ++- app/pages/form-advertisements/index.tsx | 9 +++------ app/pages/form-contents/index.tsx | 5 ++--- app/utils/formatter.ts | 6 ++++++ 7 files changed, 21 insertions(+), 15 deletions(-) diff --git a/app/apis/admin/create-ads.ts b/app/apis/admin/create-ads.ts index a856dfd..f852ee4 100644 --- a/app/apis/admin/create-ads.ts +++ b/app/apis/admin/create-ads.ts @@ -2,6 +2,7 @@ import { z } from 'zod' import { HttpServer, type THttpServer } from '~/libs/http-server' import type { TAdsSchema } from '~/pages/form-advertisements' +import { datePayload } from '~/utils/formatter' const advertisementsResponseSchema = z.object({ data: z.object({ @@ -17,8 +18,8 @@ export const createAdsRequest = async (parameters: TParameters) => { const { payload, ...restParameters } = parameters const transformedPayload = { ...payload, - start_date: new Date(payload.start_date).toISOString(), - end_date: new Date(payload.end_date).toISOString(), + start_date: datePayload(payload.start_date), + end_date: datePayload(payload.end_date), } try { const { data } = await HttpServer(restParameters).post( diff --git a/app/apis/admin/create-news.ts b/app/apis/admin/create-news.ts index 007c0f3..e77dd05 100644 --- a/app/apis/admin/create-news.ts +++ b/app/apis/admin/create-news.ts @@ -2,6 +2,7 @@ import { z } from 'zod' import { HttpServer, type THttpServer } from '~/libs/http-server' import type { TContentSchema } from '~/pages/form-contents' +import { datePayload } from '~/utils/formatter' const newsResponseSchema = z.object({ data: z.object({ @@ -20,7 +21,7 @@ export const createNewsRequest = async (parameters: TParameter) => { ...restPayload, categories: categories.map((category) => category?.id), tags: tags?.map((tag) => tag?.id) || [], - live_at: new Date(live_at).toISOString(), + live_at: datePayload(live_at), } try { const { data } = await HttpServer(restParameters).post( diff --git a/app/apis/admin/update-ads.ts b/app/apis/admin/update-ads.ts index 76c9a8a..4c84791 100644 --- a/app/apis/admin/update-ads.ts +++ b/app/apis/admin/update-ads.ts @@ -2,6 +2,7 @@ import { z } from 'zod' import { HttpServer, type THttpServer } from '~/libs/http-server' import type { TAdsSchema } from '~/pages/form-advertisements' +import { datePayload } from '~/utils/formatter' const advertisementsResponseSchema = z.object({ data: z.object({ @@ -18,8 +19,8 @@ export const updateAdsRequest = async (parameters: TParameters) => { const { id, ...restPayload } = payload const transformedPayload = { ...restPayload, - start_date: new Date(payload.start_date).toISOString(), - end_date: new Date(payload.end_date).toISOString(), + start_date: datePayload(payload.start_date), + end_date: datePayload(payload.end_date), } try { const { data } = await HttpServer(restParameters).put( diff --git a/app/apis/admin/update-news.ts b/app/apis/admin/update-news.ts index 6c1de2d..a61b18b 100644 --- a/app/apis/admin/update-news.ts +++ b/app/apis/admin/update-news.ts @@ -2,6 +2,7 @@ import { z } from 'zod' import { HttpServer, type THttpServer } from '~/libs/http-server' import type { TContentSchema } from '~/pages/form-contents' +import { datePayload } from '~/utils/formatter' const newsResponseSchema = z.object({ data: z.object({ @@ -20,7 +21,7 @@ export const updateNewsRequest = async (parameters: TParameter) => { ...restPayload, categories: categories.map((category) => category?.id), tags: tags?.map((tag) => tag?.id) || [], - live_at: new Date(live_at).toISOString(), + live_at: datePayload(live_at), } try { const { data } = await HttpServer(restParameters).put( diff --git a/app/pages/form-advertisements/index.tsx b/app/pages/form-advertisements/index.tsx index 07dcbd1..f8bed04 100644 --- a/app/pages/form-advertisements/index.tsx +++ b/app/pages/form-advertisements/index.tsx @@ -10,6 +10,7 @@ import { Button } from '~/components/ui/button' import { Input } from '~/components/ui/input' import { InputFile } from '~/components/ui/input-file' import { TitleDashboard } from '~/components/ui/title-dashboard' +import { dateInput } from '~/utils/formatter' export const adsSchema = z.object({ id: z.string().optional(), @@ -43,12 +44,8 @@ export const FormAdvertisementsPage = (properties: TProperties) => { id: adData?.id || undefined, image: adData?.image_url || '', url: adData?.url || '', - start_date: adData?.start_date - ? new Date(adData.start_date).toISOString().split('T')[0] - : '', - end_date: adData?.end_date - ? new Date(adData.end_date).toISOString().split('T')[0] - : '', + start_date: adData?.start_date ? dateInput(adData.start_date) : '', + end_date: adData?.end_date ? dateInput(adData.end_date) : '', }, }) diff --git a/app/pages/form-contents/index.tsx b/app/pages/form-contents/index.tsx index 62ab954..62ca7e8 100644 --- a/app/pages/form-contents/index.tsx +++ b/app/pages/form-contents/index.tsx @@ -15,6 +15,7 @@ import { InputFile } from '~/components/ui/input-file' import { Switch } from '~/components/ui/switch' import { TitleDashboard } from '~/components/ui/title-dashboard' import type { loader } from '~/routes/_admin.lg-admin._dashboard' +import { dateInput } from '~/utils/formatter' export const contentSchema = z.object({ id: z.string().optional(), @@ -86,9 +87,7 @@ export const FormContentsPage = (properties: TProperties) => { content: newsData?.content || '', featured_image: newsData?.featured_image || '', is_premium: newsData?.is_premium || false, - live_at: newsData?.live_at - ? new Date(newsData.live_at).toISOString().split('T')[0] - : '', + live_at: newsData?.live_at ? dateInput(newsData.live_at) : '', }, }) diff --git a/app/utils/formatter.ts b/app/utils/formatter.ts index 3a1ecba..9a22ad7 100644 --- a/app/utils/formatter.ts +++ b/app/utils/formatter.ts @@ -11,6 +11,12 @@ export const formatDate = (isoDate: string): string => { }).format(date) } +export const dateInput = (isoDate: string): string => + new Date(isoDate).toISOString().split('T')[0] + +export const datePayload = (date: string): string => + new Date(date).toISOString() + export const urlFriendlyCode = (input: string) => { return input .trim()