Improve group user search
This commit is contained in:
parent
17ac6c58b2
commit
f0d4e9940c
|
@ -1,12 +1,11 @@
|
||||||
import { UserIcon } from '@heroicons/react/outline'
|
import { UserIcon } from '@heroicons/react/outline'
|
||||||
import { useUsers } from 'web/hooks/use-users'
|
import { useUsers } from 'web/hooks/use-users'
|
||||||
import { User } from 'common/user'
|
import { User } from 'common/user'
|
||||||
import { Fragment, useState } from 'react'
|
import { Fragment, useMemo, useState } from 'react'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import { Menu, Transition } from '@headlessui/react'
|
import { Menu, Transition } from '@headlessui/react'
|
||||||
import { Avatar } from 'web/components/avatar'
|
import { Avatar } from 'web/components/avatar'
|
||||||
import { Row } from 'web/components/layout/row'
|
import { Row } from 'web/components/layout/row'
|
||||||
import { debounce } from 'lodash'
|
|
||||||
|
|
||||||
export function FilterSelectUsers(props: {
|
export function FilterSelectUsers(props: {
|
||||||
setSelectedUsers: (users: User[]) => void
|
setSelectedUsers: (users: User[]) => void
|
||||||
|
@ -16,18 +15,20 @@ export function FilterSelectUsers(props: {
|
||||||
const { ignoreUserIds, selectedUsers, setSelectedUsers } = props
|
const { ignoreUserIds, selectedUsers, setSelectedUsers } = props
|
||||||
const users = useUsers()
|
const users = useUsers()
|
||||||
const [query, setQuery] = useState('')
|
const [query, setQuery] = useState('')
|
||||||
|
const [filteredUsers, setFilteredUsers] = useState<User[]>([])
|
||||||
const filteredUsers =
|
const beginQuerying = query.length > 2
|
||||||
query === ''
|
useMemo(() => {
|
||||||
? users
|
if (beginQuerying)
|
||||||
: users.filter((user: User) => {
|
setFilteredUsers(
|
||||||
|
users.filter((user: User) => {
|
||||||
return (
|
return (
|
||||||
!selectedUsers.map((user) => user.name).includes(user.name) &&
|
!selectedUsers.map((user) => user.name).includes(user.name) &&
|
||||||
!ignoreUserIds.includes(user.id) &&
|
!ignoreUserIds.includes(user.id) &&
|
||||||
user.name.toLowerCase().includes(query.toLowerCase())
|
user.name.toLowerCase().includes(query.toLowerCase())
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
const debouncedQuery = debounce(setQuery, 50)
|
)
|
||||||
|
}, [beginQuerying, users, selectedUsers, ignoreUserIds, query])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
@ -40,7 +41,7 @@ export function FilterSelectUsers(props: {
|
||||||
name="user name"
|
name="user name"
|
||||||
id="user name"
|
id="user name"
|
||||||
value={query}
|
value={query}
|
||||||
onChange={(e) => debouncedQuery(e.target.value)}
|
onChange={(e) => setQuery(e.target.value)}
|
||||||
className="input input-bordered block w-full pl-10 focus:border-gray-300 "
|
className="input input-bordered block w-full pl-10 focus:border-gray-300 "
|
||||||
placeholder="Austin Chen"
|
placeholder="Austin Chen"
|
||||||
/>
|
/>
|
||||||
|
@ -48,13 +49,13 @@ export function FilterSelectUsers(props: {
|
||||||
<Menu
|
<Menu
|
||||||
as="div"
|
as="div"
|
||||||
className={clsx(
|
className={clsx(
|
||||||
'relative inline-block w-full text-right',
|
'relative inline-block w-full overflow-y-scroll text-right',
|
||||||
query !== '' && 'h-36'
|
beginQuerying && 'h-36'
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{({}) => (
|
{({}) => (
|
||||||
<Transition
|
<Transition
|
||||||
show={query !== ''}
|
show={beginQuerying}
|
||||||
as={Fragment}
|
as={Fragment}
|
||||||
enter="transition ease-out duration-100"
|
enter="transition ease-out duration-100"
|
||||||
enterFrom="transform opacity-0 scale-95"
|
enterFrom="transform opacity-0 scale-95"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user