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)
}}
>
Select Subscription
Select Subscribe Plan
</Button>
) : (
<Button

View File

@ -11,7 +11,7 @@ import { FormRegister } from '~/layouts/news/form-register'
import { FooterLinks } from './footer-links'
import { FooterNewsletter } from './footer-newsletter'
import FormSubscription from './form-subscription'
import { FormSubscribePlan } from './form-subscribe-plan'
import { HeaderMenu } from './header-menu'
import { HeaderTop } from './header-top'
@ -74,9 +74,9 @@ export const NewsDefaultLayout = (properties: PropsWithChildren) => {
<PopupModal
isOpen={isSubscribeOpen}
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>
<SuccessModal

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
import { Link, useRouteLoaderData } from 'react-router'
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 { HeaderSearch } from './header-search'

View File

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

View File

@ -1,13 +1,13 @@
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 type { Route } from './+types/_admin.lg-admin._dashboard.subscribe-plan._index'
export const loader = async ({}: Route.LoaderArgs) => {
const { data: subscriptionsData } = await getSubscriptions()
return { subscriptionsData }
const { data: subscribePlanData } = await getSubscribePlan()
return { subscribePlanData }
}
export const ErrorBoundary = ({ error }: Route.ErrorBoundaryProps) => {

View File

@ -1,12 +1,12 @@
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 type { Route } from './+types/_admin.lg-admin._dashboard.subscribe-plan.update.$id'
export const loader = async ({ params }: Route.LoaderArgs) => {
const { data: subscribePlansData } = await getSubscriptions()
const { data: subscribePlansData } = await getSubscribePlan()
const { id } = params
const subscribePlanData = subscribePlansData.find(
(subscribePlan) => subscribePlan.id === id,

View File

@ -3,7 +3,7 @@ import { XiorError } from 'xior'
import { getAds } from '~/apis/common/get-ads'
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 { NewsProvider } from '~/contexts/news'
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: adsData } = await getAds()
return {
userData,
subscriptionsData,
subscribePlanData,
categoriesData,
adsData,
}

View File

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