diff --git a/app/components/popup/success-modal.tsx b/app/components/popup/success-modal.tsx index 1a02e51..f823d09 100644 --- a/app/components/popup/success-modal.tsx +++ b/app/components/popup/success-modal.tsx @@ -6,10 +6,13 @@ import { DialogTitle, } from '@headlessui/react' import type { ReactNode } from 'react' +import { useRouteLoaderData } from 'react-router' import { LeftArrow } from '~/components/icons/left-arrow' import { Button } from '~/components/ui/button' import { APP } from '~/configs/meta' +import { useNewsContext } from '~/contexts/news' +import type { loader } from '~/routes/_layout' export type ModalProperties = { onClose: () => void @@ -31,6 +34,10 @@ const DESCRIPTIONS: DescriptionMap = { } export const SuccessModal = ({ isOpen, onClose }: ModalProperties) => { + const { setIsLoginOpen, setIsInitSubscribeOpen } = useNewsContext() + const loaderData = useRouteLoaderData('routes/_layout') + const userData = loaderData?.userData + const message = isOpen ? DESCRIPTIONS[isOpen] : 'Terjadi kesalahan. Silakan coba lagi.' @@ -74,48 +81,56 @@ export const SuccessModal = ({ isOpen, onClose }: ModalProperties) => {
-
- {isOpen && - ['resetPassword', 'register', 'payment'].includes(isOpen) && ( -
- {APP.title} - -
+ {['resetPassword', 'register', 'payment'].includes( + isOpen || '', + ) && ( + <> + {APP.title} + + + )} + {isOpen === 'warning' && ( + <> + {APP.title} + {userData ? ( + + ) : ( + )} - {isOpen === 'warning' && ( -
- {APP.title} -
- - -
-
- )} -
+ + )}
diff --git a/app/components/ui/carousel-hero.tsx b/app/components/ui/carousel-hero.tsx index 98394b6..2715f16 100644 --- a/app/components/ui/carousel-hero.tsx +++ b/app/components/ui/carousel-hero.tsx @@ -1,11 +1,11 @@ import useEmblaCarousel from 'embla-carousel-react' import { useCallback, useEffect, useState } from 'react' -import { Link } from 'react-router' import { Button } from '~/components/ui/button' import { CarouselButton } from '~/components/ui/button-slide' import { useNewsContext } from '~/contexts/news' import type { TNews } from '~/types/news' +import { getPremiumAttribute } from '~/utils/render' export const CarouselHero = (properties: TNews) => { const { setIsSuccessOpen } = useNewsContext() @@ -89,14 +89,11 @@ export const CarouselHero = (properties: TNews) => { diff --git a/app/components/ui/carousel-section.tsx b/app/components/ui/carousel-section.tsx index 9018174..364fe95 100644 --- a/app/components/ui/carousel-section.tsx +++ b/app/components/ui/carousel-section.tsx @@ -1,11 +1,11 @@ import useEmblaCarousel from 'embla-carousel-react' import { useCallback, useEffect, useState } from 'react' -import { Link } from 'react-router' import { Button } from '~/components/ui/button' import { CarouselButton } from '~/components/ui/button-slide' import { useNewsContext } from '~/contexts/news' import type { TNews } from '~/types/news' +import { getPremiumAttribute } from '~/utils/render' export const CarouselSection = (properties: TNews) => { const { setIsSuccessOpen } = useNewsContext() @@ -111,14 +111,11 @@ export const CarouselSection = (properties: TNews) => { - {userToken ? ( + {userData ? ( { const { userToken } = await handleCookie(request) + let userData + if (userToken) { + const { data } = await getUser({ + accessToken: userToken, + }) + userData = data + } const { data: subscriptionsData } = await getSubscriptions() const { data: categoriesData } = await getCategories() return { - userToken, + userData, subscriptionsData, categoriesData, } diff --git a/app/utils/render.ts b/app/utils/render.ts new file mode 100644 index 0000000..bae2c03 --- /dev/null +++ b/app/utils/render.ts @@ -0,0 +1,23 @@ +import type { MouseEventHandler } from 'react' +import { Link } from 'react-router' + +type TGetPremiumAttribute = { + isPremium?: boolean + slug: string + onClick: MouseEventHandler +} + +export const getPremiumAttribute = (parameters: TGetPremiumAttribute) => { + const { isPremium, slug, onClick } = parameters + if (isPremium) { + return { + onClick, + to: '', + } + } + + return { + as: Link, + to: `/detail/${slug}`, + } +}