import { useCallback, useEffect, useState } from 'react' import { Button, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, useDisclosure, Table, Tr, Tbody, Td, Avatar, Radio, } from '@chakra-ui/react' import cx from 'classnames' import UserAPI, { SortOrder, User } from '@/client/api/user' import { swrConfig } from '@/client/options' import userToString from '@/helpers/user-to-string' import { SectionSpinner, Pagination, SearchInput } from '@/lib' export type UserSelectorProps = { value?: User organizationId?: string groupId?: string nonGroupMembersOnly?: boolean onConfirm?: (user: User) => void } const UserSelector = ({ value, organizationId, groupId, nonGroupMembersOnly, onConfirm, }: UserSelectorProps) => { const { isOpen, onOpen, onClose } = useDisclosure() const [page, setPage] = useState(1) const [query, setQuery] = useState('') const [selected, setSelected] = useState() const { data: list, error, mutate, } = UserAPI.useList( { query, organizationId, groupId, nonGroupMembersOnly, page, size: 5, sortOrder: SortOrder.Desc, }, swrConfig(), ) useEffect(() => { mutate() }, [page, query, mutate]) useEffect(() => { if (!isOpen) { setPage(1) setSelected(undefined) setQuery('') } }, [isOpen]) const handleConfirm = useCallback(() => { if (selected) { onConfirm?.(selected) onClose() } }, [selected, onConfirm, onClose]) return ( <> Select User
setQuery(value)} /> {!list && error && (
Failed to load users.
)} {!list && !error && } {list && list.data.length === 0 && (
There are no users.
)} {list && list.data.length > 0 && ( {list.data.map((u) => ( setSelected(u)} > ))}
{userToString(u)}
)} {list && (
{list.totalPages > 1 ? ( setPage(value)} /> ) : null}
)}
) } export default UserSelector