| 'use client' | |
| import type { FC } from 'react' | |
| import React from 'react' | |
| import { RiArrowDownSLine } from '@remixicon/react' | |
| import cn from '@/utils/classnames' | |
| import Popover from '@/app/components/base/popover' | |
| import { languages } from '@/i18n/language' | |
| export type ILanguageSelectProps = { | |
| currentLanguage: string | |
| onSelect: (language: string) => void | |
| disabled?: boolean | |
| } | |
| const LanguageSelect: FC<ILanguageSelectProps> = ({ | |
| currentLanguage, | |
| onSelect, | |
| disabled, | |
| }) => { | |
| return ( | |
| <Popover | |
| manualClose | |
| trigger='click' | |
| disabled={disabled} | |
| htmlContent={ | |
| <div className='w-full py-1'> | |
| {languages.filter(language => language.supported).map(({ prompt_name }) => ( | |
| <div | |
| key={prompt_name} | |
| className='py-2 px-3 mx-1 flex items-center gap-2 hover:bg-gray-100 rounded-lg cursor-pointer text-gray-700 text-sm' | |
| onClick={() => onSelect(prompt_name)}>{prompt_name} | |
| </div> | |
| ))} | |
| </div> | |
| } | |
| btnElement={ | |
| <div className='inline-flex items-center'> | |
| <span className='pr-[2px] text-xs leading-[18px] font-medium'>{currentLanguage}</span> | |
| <RiArrowDownSLine className='w-3 h-3 opacity-60' /> | |
| </div> | |
| } | |
| btnClassName={open => cn('!border-0 !px-0 !py-0 !bg-inherit !hover:bg-inherit', open ? 'text-blue-600' : 'text-gray-500')} | |
| className='!w-[120px] h-fit !z-20 !translate-x-0 !left-[-16px]' | |
| /> | |
| ) | |
| } | |
| export default React.memo(LanguageSelect) | |