|
'use client' |
|
import type { FC } from 'react' |
|
import React from 'react' |
|
import { useTranslation } from 'react-i18next' |
|
import cn from '@/utils/classnames' |
|
import exploreI18n from '@/i18n/en-US/explore' |
|
import type { AppCategory } from '@/models/explore' |
|
import { ThumbsUp } from '@/app/components/base/icons/src/vender/line/alertsAndFeedback' |
|
|
|
const categoryI18n = exploreI18n.category |
|
|
|
export type ICategoryProps = { |
|
className?: string |
|
list: AppCategory[] |
|
value: string |
|
onChange: (value: AppCategory | string) => void |
|
|
|
|
|
|
|
allCategoriesEn: string |
|
} |
|
|
|
const Category: FC<ICategoryProps> = ({ |
|
className, |
|
list, |
|
value, |
|
onChange, |
|
allCategoriesEn, |
|
}) => { |
|
const { t } = useTranslation() |
|
const isAllCategories = !list.includes(value as AppCategory) || value === allCategoriesEn |
|
|
|
const itemClassName = (isSelected: boolean) => cn( |
|
'flex items-center px-3 py-[7px] h-[32px] rounded-lg border-[0.5px] border-transparent text-gray-700 font-medium leading-[18px] cursor-pointer hover:bg-gray-200', |
|
isSelected && 'bg-white border-gray-200 shadow-xs text-primary-600 hover:bg-white', |
|
) |
|
|
|
return ( |
|
<div className={cn(className, 'flex space-x-1 text-[13px] flex-wrap')}> |
|
<div |
|
className={itemClassName(isAllCategories)} |
|
onClick={() => onChange(allCategoriesEn)} |
|
> |
|
<ThumbsUp className='mr-1 w-3.5 h-3.5' /> |
|
{t('explore.apps.allCategories')} |
|
</div> |
|
{list.filter(name => name !== allCategoriesEn).map(name => ( |
|
<div |
|
key={name} |
|
className={itemClassName(name === value)} |
|
onClick={() => onChange(name)} |
|
> |
|
{categoryI18n[name] ? t(`explore.category.${name}`) : name} |
|
</div> |
|
))} |
|
</div> |
|
) |
|
} |
|
|
|
export default React.memo(Category) |
|
|