refactor: rename subscription references to subscribe plan and update related imports
This commit is contained in:
parent
cd76ded632
commit
f40f2dadde
28
app/apis/common/get-subscribe-plan.ts
Normal file
28
app/apis/common/get-subscribe-plan.ts
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -117,7 +117,7 @@ export const SuccessModal = ({ isOpen, onClose }: ModalProperties) => {
|
|||||||
setIsSubscribeOpen(true)
|
setIsSubscribeOpen(true)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Select Subscription
|
Select Subscribe Plan
|
||||||
</Button>
|
</Button>
|
||||||
) : (
|
) : (
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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 && (
|
||||||
|
|||||||
@ -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 && (
|
||||||
@ -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()
|
||||||
|
|||||||
@ -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'
|
||||||
|
|||||||
@ -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}`}
|
||||||
|
|||||||
@ -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) => {
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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'
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user