| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | 'use client' | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  | import { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react' | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | import { Fragment } from 'react' | 
					
						
							|  |  |  | import { GlobeAltIcon } from '@heroicons/react/24/outline' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-14 11:19:26 +08:00
										 |  |  | type ISelectProps = { | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |   items: Array<{ value: string; name: string }> | 
					
						
							|  |  |  |   value?: string | 
					
						
							|  |  |  |   className?: string | 
					
						
							|  |  |  |   onChange?: (value: string) => void | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default function Select({ | 
					
						
							|  |  |  |   items, | 
					
						
							|  |  |  |   value, | 
					
						
							| 
									
										
										
										
											2023-07-14 11:19:26 +08:00
										 |  |  |   onChange, | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | }: ISelectProps) { | 
					
						
							|  |  |  |   const item = items.filter(item => item.value === value)[0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div className="w-56 text-right"> | 
					
						
							|  |  |  |       <Menu as="div" className="relative inline-block text-left"> | 
					
						
							|  |  |  |         <div> | 
					
						
							| 
									
										
										
										
											2025-03-31 10:28:19 +08:00
										 |  |  |           <MenuButton className="h-[44px]justify-center inline-flex w-full items-center rounded-lg border border-components-button-secondary-border px-[10px] py-[6px] text-[13px] font-medium text-text-primary hover:bg-state-base-hover"> | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |             <GlobeAltIcon className="mr-1 h-5 w-5" aria-hidden="true" /> | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |             {item?.name} | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |           </MenuButton> | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |         </div> | 
					
						
							|  |  |  |         <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" | 
					
						
							|  |  |  |         > | 
					
						
							| 
									
										
										
										
											2025-03-31 10:28:19 +08:00
										 |  |  |           <MenuItems className="absolute right-0 z-10 mt-2 w-[200px] origin-top-right divide-y divide-divider-regular rounded-md bg-components-panel-bg shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none"> | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |             <div className="px-1 py-1 "> | 
					
						
							|  |  |  |               {items.map((item) => { | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |                 return <MenuItem key={item.value}> | 
					
						
							|  |  |  |                   <button | 
					
						
							| 
									
										
										
										
											2025-03-31 10:28:19 +08:00
										 |  |  |                     className={'group flex w-full items-center rounded-lg px-3 py-2 text-sm text-text-secondary data-[active]:bg-state-base-hover'} | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |                     onClick={(evt) => { | 
					
						
							|  |  |  |                       evt.preventDefault() | 
					
						
							|  |  |  |                       onChange && onChange(item.value) | 
					
						
							|  |  |  |                     }} | 
					
						
							|  |  |  |                   > | 
					
						
							|  |  |  |                     {item.name} | 
					
						
							|  |  |  |                   </button> | 
					
						
							|  |  |  |                 </MenuItem> | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |               })} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |           </MenuItems> | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |         </Transition> | 
					
						
							|  |  |  |       </Menu> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } |