Created
May 10, 2022 22:18
-
-
Save dangdennis/d64ebae7926a38c12db72c7f8eb7c93c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* This example requires Tailwind CSS v2.0+ */ | |
import { Fragment, useState } from 'react' | |
import { Listbox, Transition } from '@headlessui/react' | |
import { CheckIcon, SelectorIcon } from '@heroicons/react/solid' | |
const people = [ | |
{ id: 1, name: 'Wade Cooper' }, | |
{ id: 2, name: 'Arlene Mccoy' }, | |
{ id: 3, name: 'Devon Webb' }, | |
{ id: 4, name: 'Tom Cook' }, | |
{ id: 5, name: 'Tanya Fox' }, | |
{ id: 6, name: 'Hellen Schmidt' }, | |
{ id: 7, name: 'Caroline Schultz' }, | |
{ id: 8, name: 'Mason Heaney' }, | |
{ id: 9, name: 'Claudie Smitham' }, | |
{ id: 10, name: 'Emil Schaefer' }, | |
] | |
function classNames(...classes) { | |
return classes.filter(Boolean).join(' ') | |
} | |
export default function Example() { | |
const [selected, setSelected] = useState(people[3]) | |
return ( | |
<Listbox value={selected} onChange={setSelected}> | |
{({ open }) => ( | |
<> | |
<Listbox.Label className="block text-sm font-medium text-gray-700">Assigned to</Listbox.Label> | |
<div className="mt-1 relative"> | |
<Listbox.Button className="bg-white relative w-full border border-gray-300 rounded-md shadow-sm pl-3 pr-10 py-2 text-left cursor-default focus:outline-none focus:ring-1 focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> | |
<span className="block truncate">{selected.name}</span> | |
<span className="absolute inset-y-0 right-0 flex items-center pr-2 pointer-events-none"> | |
<SelectorIcon className="h-5 w-5 text-gray-400" aria-hidden="true" /> | |
</span> | |
</Listbox.Button> | |
<Transition | |
show={open} | |
as={Fragment} | |
leave="transition ease-in duration-100" | |
leaveFrom="opacity-100" | |
leaveTo="opacity-0" | |
> | |
<Listbox.Options className="absolute z-10 mt-1 w-full bg-white shadow-lg max-h-60 rounded-md py-1 text-base ring-1 ring-black ring-opacity-5 overflow-auto focus:outline-none sm:text-sm"> | |
{people.map((person) => ( | |
<Listbox.Option | |
key={person.id} | |
className={({ active }) => | |
classNames( | |
active ? 'text-white bg-indigo-600' : 'text-gray-900', | |
'cursor-default select-none relative py-2 pl-3 pr-9' | |
) | |
} | |
value={person} | |
> | |
{({ selected, active }) => ( | |
<> | |
<span className={classNames(selected ? 'font-semibold' : 'font-normal', 'block truncate')}> | |
{person.name} | |
</span> | |
{selected ? ( | |
<span | |
className={classNames( | |
active ? 'text-white' : 'text-indigo-600', | |
'absolute inset-y-0 right-0 flex items-center pr-4' | |
)} | |
> | |
<CheckIcon className="h-5 w-5" aria-hidden="true" /> | |
</span> | |
) : null} | |
</> | |
)} | |
</Listbox.Option> | |
))} | |
</Listbox.Options> | |
</Transition> | |
</div> | |
</> | |
)} | |
</Listbox> | |
) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment