refactor: rename subscription references to subscribe plan and update related imports

This commit is contained in:
Ardeman 2025-03-13 06:13:43 +08:00
parent cd76ded632
commit f40f2dadde
13 changed files with 66 additions and 62 deletions

View File

@ -0,0 +1,28 @@
import { z } from 'zod'
import { HttpServer, type THttpServer } from '~/libs/http-server'
const subscribePlanSchema = z.object({
id: z.string(),
code: z.string(),
name: z.string(),
length: z.number(),
price: z.number(),
status: z.number(),
})
const subscribePlanResponseSchema = z.object({
data: z.array(subscribePlanSchema),
})
export type TSubscribePlanSchema = z.infer<typeof subscribePlanSchema>
export const getSubscribePlan = async (parameters?: THttpServer) => {
try {
const { data } = await HttpServer(parameters).get(`/api/subscribe-plan`)
return subscribePlanResponseSchema.parse(data)
} catch (error) {
// eslint-disable-next-line unicorn/no-useless-promise-resolve-reject
return Promise.reject(error)
}
}

View File

@ -1,26 +0,0 @@
import { z } from 'zod'
import { HttpServer, type THttpServer } from '~/libs/http-server'
const subscriptionResponseSchema = z.object({
data: z.array(
z.object({
id: z.string(),
code: z.string(),
name: z.string(),
length: z.number(),
price: z.number(),
status: z.number(),
}),
),
})
export const getSubscriptions = async (parameters?: THttpServer) => {
try {
const { data } = await HttpServer(parameters).get(`/api/subscribe-plan`)
return subscriptionResponseSchema.parse(data)
} catch (error) {
// eslint-disable-next-line unicorn/no-useless-promise-resolve-reject
return Promise.reject(error)
}
}

View File

@ -117,7 +117,7 @@ export const SuccessModal = ({ isOpen, onClose }: ModalProperties) => {
setIsSubscribeOpen(true) setIsSubscribeOpen(true)
}} }}
> >
Select Subscription Select Subscribe Plan
</Button> </Button>
) : ( ) : (
<Button <Button

View File

@ -11,7 +11,7 @@ import { FormRegister } from '~/layouts/news/form-register'
import { FooterLinks } from './footer-links' import { FooterLinks } from './footer-links'
import { FooterNewsletter } from './footer-newsletter' import { FooterNewsletter } from './footer-newsletter'
import FormSubscription from './form-subscription' import { FormSubscribePlan } from './form-subscribe-plan'
import { HeaderMenu } from './header-menu' import { HeaderMenu } from './header-menu'
import { HeaderTop } from './header-top' import { HeaderTop } from './header-top'
@ -74,9 +74,9 @@ export const NewsDefaultLayout = (properties: PropsWithChildren) => {
<PopupModal <PopupModal
isOpen={isSubscribeOpen} isOpen={isSubscribeOpen}
onClose={() => setIsSubscribeOpen(false)} onClose={() => setIsSubscribeOpen(false)}
description="Selamat Datang, silakan Pilih Subscription Anda untuk melanjutkan!" description="Selamat Datang, silakan Pilih Subscribe Plan Anda untuk melanjutkan!"
> >
<FormSubscription /> <FormSubscribePlan />
</PopupModal> </PopupModal>
<SuccessModal <SuccessModal

View File

@ -26,7 +26,7 @@ export const registerSchema = z
.optional() .optional()
.nullable() .nullable()
.refine((data) => !!data, { .refine((data) => !!data, {
message: 'Please select a subscription', message: 'Please select a Subscribe Plan',
}), }),
}) })
.refine((field) => field.password === field.rePassword, { .refine((field) => field.password === field.rePassword, {
@ -42,7 +42,7 @@ export const FormRegister = () => {
const [error, setError] = useState<string>() const [error, setError] = useState<string>()
const fetcher = useFetcher() const fetcher = useFetcher()
const loaderData = useRouteLoaderData<typeof loader>('routes/_news') const loaderData = useRouteLoaderData<typeof loader>('routes/_news')
const { subscriptionsData: subscriptions } = loaderData || {} const { subscribePlanData: subscribePlan } = loaderData || {}
const formMethods = useRemixForm<TRegisterSchema>({ const formMethods = useRemixForm<TRegisterSchema>({
mode: 'onSubmit', mode: 'onSubmit',
@ -107,9 +107,9 @@ export const FormRegister = () => {
<Combobox <Combobox
id="subscribe_plan" id="subscribe_plan"
name="subscribe_plan" name="subscribe_plan"
label="Subscription" label="Subscribe Plan"
placeholder="Pilih Subscription" placeholder="Pilih Subscribe Plan"
options={subscriptions} options={subscribePlan}
/> />
{error && ( {error && (

View File

@ -25,12 +25,12 @@ export const subscribeSchema = z.object({
export type TSubscribeSchema = z.infer<typeof subscribeSchema> export type TSubscribeSchema = z.infer<typeof subscribeSchema>
export default function FormSubscription() { export const FormSubscribePlan = () => {
const { setIsSubscribeOpen, setIsSuccessOpen } = useNewsContext() const { setIsSubscribeOpen, setIsSuccessOpen } = useNewsContext()
const fetcher = useFetcher() const fetcher = useFetcher()
const [error, setError] = useState<string>() const [error, setError] = useState<string>()
const loaderData = useRouteLoaderData<typeof loader>('routes/_news') const loaderData = useRouteLoaderData<typeof loader>('routes/_news')
const { subscriptionsData: subscriptions } = loaderData || {} const { subscribePlanData: subscribePlan } = loaderData || {}
const formMethods = useRemixForm<TSubscribeSchema>({ const formMethods = useRemixForm<TSubscribeSchema>({
mode: 'onSubmit', mode: 'onSubmit',
@ -64,9 +64,9 @@ export default function FormSubscription() {
<Combobox <Combobox
id="subscribe_plan" id="subscribe_plan"
name="subscribe_plan" name="subscribe_plan"
label="Subscription" label="Subscribe Plan"
placeholder="Pilih Subscription" placeholder="Pilih Subscribe Plan"
options={subscriptions} options={subscribePlan}
/> />
{error && ( {error && (

View File

@ -13,7 +13,7 @@ type THeaderMenuMobile = {
menu?: TCategoriesResponse['data'] menu?: TCategoriesResponse['data']
} }
export default function HeaderMenuMobile(properties: THeaderMenuMobile) { export const HeaderMenuMobile = (properties: THeaderMenuMobile) => {
const { menu } = properties const { menu } = properties
const [isMenuOpen, setIsMenuOpen] = useState(false) const [isMenuOpen, setIsMenuOpen] = useState(false)
const { setIsLoginOpen } = useNewsContext() const { setIsLoginOpen } = useNewsContext()

View File

@ -1,7 +1,7 @@
import { Link, useRouteLoaderData } from 'react-router' import { Link, useRouteLoaderData } from 'react-router'
import { Button } from '~/components/ui/button' import { Button } from '~/components/ui/button'
import HeaderMenuMobile from '~/layouts/news/header-menu-mobile' import { HeaderMenuMobile } from '~/layouts/news/header-menu-mobile'
import type { loader } from '~/routes/_news' import type { loader } from '~/routes/_news'
import { HeaderSearch } from './header-search' import { HeaderSearch } from './header-search'

View File

@ -2,6 +2,7 @@ import DT from 'datatables.net-dt'
import DataTable from 'datatables.net-react' import DataTable from 'datatables.net-react'
import { Link, useRouteLoaderData } from 'react-router' import { Link, useRouteLoaderData } from 'react-router'
import type { TSubscribePlanSchema } from '~/apis/common/get-subscribe-plan'
import { Button } from '~/components/ui/button' import { Button } from '~/components/ui/button'
import { getStatusBadge, type TColorBadge } from '~/components/ui/color-badge' import { getStatusBadge, type TColorBadge } from '~/components/ui/color-badge'
import { UiTable } from '~/components/ui/table' import { UiTable } from '~/components/ui/table'
@ -15,7 +16,7 @@ export const SubscribePlanPage = () => {
) )
DataTable.use(DT) DataTable.use(DT)
const { subscriptionsData: dataTable } = loaderData || {} const { subscribePlanData: dataTable } = loaderData || {}
const dataColumns = [ const dataColumns = [
{ {
@ -65,7 +66,8 @@ export const SubscribePlanPage = () => {
{value === 1 ? 'Active' : 'Inactive'} {value === 1 ? 'Active' : 'Inactive'}
</span> </span>
), ),
6: (value: string) => ( 6: (value: string, _type: unknown, data: TSubscribePlanSchema) =>
data.code !== 'basic' && (
<Button <Button
as="a" as="a"
href={`/lg-admin/subscribe-plan/update/${value}`} href={`/lg-admin/subscribe-plan/update/${value}`}

View File

@ -1,13 +1,13 @@
import { isRouteErrorResponse } from 'react-router' import { isRouteErrorResponse } from 'react-router'
import { getSubscriptions } from '~/apis/common/get-subscriptions' import { getSubscribePlan } from '~/apis/common/get-subscribe-plan'
import { SubscribePlanPage } from '~/pages/dashboard-subscribe-plan' import { SubscribePlanPage } from '~/pages/dashboard-subscribe-plan'
import type { Route } from './+types/_admin.lg-admin._dashboard.subscribe-plan._index' import type { Route } from './+types/_admin.lg-admin._dashboard.subscribe-plan._index'
export const loader = async ({}: Route.LoaderArgs) => { export const loader = async ({}: Route.LoaderArgs) => {
const { data: subscriptionsData } = await getSubscriptions() const { data: subscribePlanData } = await getSubscribePlan()
return { subscriptionsData } return { subscribePlanData }
} }
export const ErrorBoundary = ({ error }: Route.ErrorBoundaryProps) => { export const ErrorBoundary = ({ error }: Route.ErrorBoundaryProps) => {

View File

@ -1,12 +1,12 @@
import { isRouteErrorResponse } from 'react-router' import { isRouteErrorResponse } from 'react-router'
import { getSubscriptions } from '~/apis/common/get-subscriptions' import { getSubscribePlan } from '~/apis/common/get-subscribe-plan'
import { FormSubscribePlanPage } from '~/pages/form-subscribe-plan' import { FormSubscribePlanPage } from '~/pages/form-subscribe-plan'
import type { Route } from './+types/_admin.lg-admin._dashboard.subscribe-plan.update.$id' import type { Route } from './+types/_admin.lg-admin._dashboard.subscribe-plan.update.$id'
export const loader = async ({ params }: Route.LoaderArgs) => { export const loader = async ({ params }: Route.LoaderArgs) => {
const { data: subscribePlansData } = await getSubscriptions() const { data: subscribePlansData } = await getSubscribePlan()
const { id } = params const { id } = params
const subscribePlanData = subscribePlansData.find( const subscribePlanData = subscribePlansData.find(
(subscribePlan) => subscribePlan.id === id, (subscribePlan) => subscribePlan.id === id,

View File

@ -3,7 +3,7 @@ import { XiorError } from 'xior'
import { getAds } from '~/apis/common/get-ads' import { getAds } from '~/apis/common/get-ads'
import { getCategories } from '~/apis/common/get-categories' import { getCategories } from '~/apis/common/get-categories'
import { getSubscriptions } from '~/apis/common/get-subscriptions' import { getSubscribePlan } from '~/apis/common/get-subscribe-plan'
import { getUser } from '~/apis/news/get-user' import { getUser } from '~/apis/news/get-user'
import { NewsProvider } from '~/contexts/news' import { NewsProvider } from '~/contexts/news'
import { NewsDefaultLayout } from '~/layouts/news/default' import { NewsDefaultLayout } from '~/layouts/news/default'
@ -25,13 +25,13 @@ export const loader = async ({ request }: Route.LoaderArgs) => {
} }
} }
} }
const { data: subscriptionsData } = await getSubscriptions() const { data: subscribePlanData } = await getSubscribePlan()
const { data: categoriesData } = await getCategories() const { data: categoriesData } = await getCategories()
const { data: adsData } = await getAds() const { data: adsData } = await getAds()
return { return {
userData, userData,
subscriptionsData, subscribePlanData,
categoriesData, categoriesData,
adsData, adsData,
} }

View File

@ -7,7 +7,7 @@ import { getUser } from '~/apis/news/get-user'
import { import {
subscribeSchema, subscribeSchema,
type TSubscribeSchema, type TSubscribeSchema,
} from '~/layouts/news/form-subscription' } from '~/layouts/news/form-subscribe-plan'
import { handleCookie } from '~/libs/cookies' import { handleCookie } from '~/libs/cookies'
import type { Route } from './+types/actions.subscribe' import type { Route } from './+types/actions.subscribe'