refactor: simplify premium button logic by creating getPremiumAttribute utility
This commit is contained in:
parent
b0f96c33a5
commit
cd85f660b7
@ -1,12 +1,12 @@
|
|||||||
import useEmblaCarousel from 'embla-carousel-react'
|
import useEmblaCarousel from 'embla-carousel-react'
|
||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
import { Link } from 'react-router'
|
|
||||||
|
|
||||||
import { CarouselNextIcon } from '~/components/icons/carousel-next'
|
import { CarouselNextIcon } from '~/components/icons/carousel-next'
|
||||||
import { CarouselPreviousIcon } from '~/components/icons/carousel-previous'
|
import { CarouselPreviousIcon } from '~/components/icons/carousel-previous'
|
||||||
import { Button } from '~/components/ui/button'
|
import { Button } from '~/components/ui/button'
|
||||||
import { useNewsContext } from '~/contexts/news'
|
import { useNewsContext } from '~/contexts/news'
|
||||||
import type { TNews } from '~/types/news'
|
import type { TNews } from '~/types/news'
|
||||||
|
import { getPremiumAttribute } from '~/utils/render'
|
||||||
|
|
||||||
export const CarouselHero = (properties: TNews) => {
|
export const CarouselHero = (properties: TNews) => {
|
||||||
const { setIsSuccessOpen } = useNewsContext()
|
const { setIsSuccessOpen } = useNewsContext()
|
||||||
@ -77,14 +77,11 @@ export const CarouselHero = (properties: TNews) => {
|
|||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
size="block"
|
size="block"
|
||||||
{...(isPremium
|
{...getPremiumAttribute({
|
||||||
? {
|
isPremium,
|
||||||
onClick: () => {
|
slug,
|
||||||
setIsSuccessOpen('warning')
|
onClick: () => setIsSuccessOpen('warning'),
|
||||||
},
|
})}
|
||||||
to: '',
|
|
||||||
}
|
|
||||||
: { as: Link, to: `/detail/${slug}` })}
|
|
||||||
>
|
>
|
||||||
View More
|
View More
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
import useEmblaCarousel from 'embla-carousel-react'
|
import useEmblaCarousel from 'embla-carousel-react'
|
||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
import { Link } from 'react-router'
|
|
||||||
|
|
||||||
import { CarouselNextIcon } from '~/components/icons/carousel-next'
|
import { CarouselNextIcon } from '~/components/icons/carousel-next'
|
||||||
import { CarouselPreviousIcon } from '~/components/icons/carousel-previous'
|
import { CarouselPreviousIcon } from '~/components/icons/carousel-previous'
|
||||||
import { Button } from '~/components/ui/button'
|
import { Button } from '~/components/ui/button'
|
||||||
import { useNewsContext } from '~/contexts/news'
|
import { useNewsContext } from '~/contexts/news'
|
||||||
import type { TNews } from '~/types/news'
|
import type { TNews } from '~/types/news'
|
||||||
|
import { getPremiumAttribute } from '~/utils/render'
|
||||||
|
|
||||||
export const CarouselSection = (properties: TNews) => {
|
export const CarouselSection = (properties: TNews) => {
|
||||||
const { setIsSuccessOpen } = useNewsContext()
|
const { setIsSuccessOpen } = useNewsContext()
|
||||||
@ -94,14 +94,11 @@ export const CarouselSection = (properties: TNews) => {
|
|||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
size="block"
|
size="block"
|
||||||
{...(isPremium
|
{...getPremiumAttribute({
|
||||||
? {
|
isPremium,
|
||||||
onClick: () => {
|
slug,
|
||||||
setIsSuccessOpen('warning')
|
onClick: () => setIsSuccessOpen('warning'),
|
||||||
},
|
})}
|
||||||
to: '',
|
|
||||||
}
|
|
||||||
: { as: Link, to: `/detail/${slug}` })}
|
|
||||||
className="mb-5"
|
className="mb-5"
|
||||||
>
|
>
|
||||||
View More
|
View More
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import { Link } from 'react-router'
|
|
||||||
import { twMerge } from 'tailwind-merge'
|
import { twMerge } from 'tailwind-merge'
|
||||||
|
|
||||||
import { CarouselNextIcon } from '~/components/icons/carousel-next'
|
import { CarouselNextIcon } from '~/components/icons/carousel-next'
|
||||||
@ -6,6 +5,7 @@ import { CarouselPreviousIcon } from '~/components/icons/carousel-previous'
|
|||||||
import { Button } from '~/components/ui/button'
|
import { Button } from '~/components/ui/button'
|
||||||
import { useNewsContext } from '~/contexts/news'
|
import { useNewsContext } from '~/contexts/news'
|
||||||
import type { TNews } from '~/types/news'
|
import type { TNews } from '~/types/news'
|
||||||
|
import { getPremiumAttribute } from '~/utils/render'
|
||||||
|
|
||||||
export const CategorySection = (properties: TNews) => {
|
export const CategorySection = (properties: TNews) => {
|
||||||
const { setIsSuccessOpen } = useNewsContext()
|
const { setIsSuccessOpen } = useNewsContext()
|
||||||
@ -82,14 +82,11 @@ export const CategorySection = (properties: TNews) => {
|
|||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
size="block"
|
size="block"
|
||||||
{...(isPremium
|
{...getPremiumAttribute({
|
||||||
? {
|
isPremium,
|
||||||
onClick: () => {
|
slug,
|
||||||
setIsSuccessOpen('warning')
|
onClick: () => setIsSuccessOpen('warning'),
|
||||||
},
|
})}
|
||||||
to: '',
|
|
||||||
}
|
|
||||||
: { as: Link, to: `/detail/${slug}` })}
|
|
||||||
className="mb-5"
|
className="mb-5"
|
||||||
>
|
>
|
||||||
View More
|
View More
|
||||||
|
|||||||
22
app/utils/render.ts
Normal file
22
app/utils/render.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { Link } from 'react-router'
|
||||||
|
|
||||||
|
type TGetPremiumAttribute = {
|
||||||
|
isPremium?: boolean
|
||||||
|
slug: string
|
||||||
|
onClick: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getPremiumAttribute = (parameters: TGetPremiumAttribute) => {
|
||||||
|
const { isPremium, slug, onClick } = parameters
|
||||||
|
if (isPremium) {
|
||||||
|
return {
|
||||||
|
onClick,
|
||||||
|
to: '',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
as: Link,
|
||||||
|
to: `/detail/${slug}`,
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user