From b0f96c33a5c6e2d144ffd6aa5ae5d47f08482f7a Mon Sep 17 00:00:00 2001 From: Ardeman Date: Sun, 2 Mar 2025 15:46:44 +0800 Subject: [PATCH 1/4] feat: enhance SuccessModal and conditional rendering for login and subscription options --- app/components/popup/success-modal.tsx | 97 +++++++++++++++----------- 1 file changed, 56 insertions(+), 41 deletions(-) diff --git a/app/components/popup/success-modal.tsx b/app/components/popup/success-modal.tsx index 1a02e51..d69b4df 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 userToken = loaderData?.userToken + 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} + {userToken ? ( + + ) : ( + )} - {isOpen === 'warning' && ( -
- {APP.title} -
- - -
-
- )} -
+ + )}
From cd85f660b7689bddc6aa33d2bf4f247a3efad498 Mon Sep 17 00:00:00 2001 From: Ardeman Date: Sun, 2 Mar 2025 16:15:24 +0800 Subject: [PATCH 2/4] refactor: simplify premium button logic by creating getPremiumAttribute utility --- app/components/ui/carousel-hero.tsx | 15 ++++++--------- app/components/ui/carousel-section.tsx | 15 ++++++--------- app/components/ui/category-section.tsx | 15 ++++++--------- app/utils/render.ts | 22 ++++++++++++++++++++++ 4 files changed, 40 insertions(+), 27 deletions(-) create mode 100644 app/utils/render.ts diff --git a/app/components/ui/carousel-hero.tsx b/app/components/ui/carousel-hero.tsx index 54d4211..0b2e822 100644 --- a/app/components/ui/carousel-hero.tsx +++ b/app/components/ui/carousel-hero.tsx @@ -1,12 +1,12 @@ import useEmblaCarousel from 'embla-carousel-react' import { useCallback } from 'react' -import { Link } from 'react-router' import { CarouselNextIcon } from '~/components/icons/carousel-next' import { CarouselPreviousIcon } from '~/components/icons/carousel-previous' import { Button } from '~/components/ui/button' import { useNewsContext } from '~/contexts/news' import type { TNews } from '~/types/news' +import { getPremiumAttribute } from '~/utils/render' export const CarouselHero = (properties: TNews) => { const { setIsSuccessOpen } = useNewsContext() @@ -77,14 +77,11 @@ export const CarouselHero = (properties: TNews) => { diff --git a/app/components/ui/carousel-section.tsx b/app/components/ui/carousel-section.tsx index a348b91..b2481dc 100644 --- a/app/components/ui/carousel-section.tsx +++ b/app/components/ui/carousel-section.tsx @@ -1,12 +1,12 @@ import useEmblaCarousel from 'embla-carousel-react' import { useCallback } from 'react' -import { Link } from 'react-router' import { CarouselNextIcon } from '~/components/icons/carousel-next' import { CarouselPreviousIcon } from '~/components/icons/carousel-previous' import { Button } from '~/components/ui/button' import { useNewsContext } from '~/contexts/news' import type { TNews } from '~/types/news' +import { getPremiumAttribute } from '~/utils/render' export const CarouselSection = (properties: TNews) => { const { setIsSuccessOpen } = useNewsContext() @@ -94,14 +94,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, }