| '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) |
|
|