'use client' import { useTranslation } from 'react-i18next' import { Fragment } from 'react' import { Menu, Transition } from '@headlessui/react' import cn from 'classnames' import NotionIcon from '../../notion-icon' import s from './index.module.css' import type { DataSourceNotionWorkspace } from '@/models/common' type WorkspaceSelectorProps = { value: string items: Omit<DataSourceNotionWorkspace, 'total'>[] onSelect: (v: string) => void } export default function WorkspaceSelector({ value, items, onSelect, }: WorkspaceSelectorProps) { const { t } = useTranslation() const currentWorkspace = items.find(item => item.workspace_id === value) return ( <Menu as="div" className="relative inline-block text-left"> { ({ open }) => ( <> <Menu.Button className={`flex items-center justify-center h-7 rounded-md hover:bg-gray-50 ${open && 'bg-gray-50'} cursor-pointer`}> <NotionIcon className='ml-1 mr-2' src={currentWorkspace?.workspace_icon} name={currentWorkspace?.workspace_name} /> <div className='mr-1 w-[90px] text-left text-sm font-medium text-gray-700 truncate' title={currentWorkspace?.workspace_name}>{currentWorkspace?.workspace_name}</div> <div className='mr-1 px-1 h-[18px] bg-primary-50 rounded-lg text-xs font-medium text-primary-600'>{currentWorkspace?.pages.length}</div> <div className={cn(s['down-arrow'], 'mr-2 w-3 h-3')} /> </Menu.Button> <Transition as={Fragment} enter="transition ease-out duration-100" enterFrom="transform opacity-0 scale-95" enterTo="transform opacity-100 scale-100" leave="transition ease-in duration-75" leaveFrom="transform opacity-100 scale-100" leaveTo="transform opacity-0 scale-95" > <Menu.Items className={cn( s.popup, `absolute left-0 top-8 w-80 origin-top-right rounded-lg bg-white border-[0.5px] border-gray-200`, )} > <div className="p-1 max-h-50 overflow-auto"> { items.map(item => ( <Menu.Item key={item.workspace_id}> <div className='flex items-center px-3 h-9 hover:bg-gray-50 cursor-pointer' onClick={() => onSelect(item.workspace_id)} > <NotionIcon className='shrink-0 mr-2' src={item.workspace_icon} name={item.workspace_name} /> <div className='grow mr-2 text-sm text-gray-700 truncate' title={item.workspace_name}>{item.workspace_name}</div> <div className='shrink-0 text-xs font-medium text-primary-600'> {item.pages.length} {t('common.dataSource.notion.selector.pageSelected')} </div> </div> </Menu.Item> )) } </div> </Menu.Items> </Transition> </> ) } </Menu> ) }