/* eslint-disable react-hooks/exhaustive-deps */ import React, { useState, useCallback, useEffect, useMemo } from 'react'; import { SearchIcon, PlusIcon, ViewGridAddIcon } from '@heroicons/react/solid'; import { CogIcon, TrashIcon } from '@heroicons/react/outline'; import { useUsers } from 'src/services/users'; import { Table } from 'src/components'; import { debounce } from 'lodash'; import { useAuth } from 'src/services/auth'; import { UserModal } from '../../components/UserModal'; import { MultipleUsersModal } from './components'; export const Users: React.FC = () => { const [selectedRowsIds, setSelectedRowsIds] = useState({}); const [configureModal, setConfigureModal] = useState(false); const [multipleUsersModal, setMultipleUsersModal] = useState(false); const [userId, setUserId] = useState(null); const [search, setSearch] = useState(''); const { users, loadUsers, userTableLoading } = useUsers(); const { isAdmin } = useAuth(); const handleSearch = (event: any) => { setSearch(event.target.value); }; const debouncedSearch = useCallback(debounce(handleSearch, 250), []); useEffect(() => { loadUsers(); return () => { debouncedSearch.cancel(); }; }, []); const filterSearch = useMemo(() => { return users.filter((item: any) => item.email?.toLowerCase().includes(search.toLowerCase())); }, [search, users]); const configureModalOpen = (id: any) => { setUserId(id); setConfigureModal(true); }; const configureModalClose = () => setConfigureModal(false); const multipleUsersModalClose = () => setMultipleUsersModal(false); const columns: any = React.useMemo( () => [ { Header: 'Name', accessor: 'name', width: 'auto', }, { Header: 'Email', accessor: 'email', width: 'auto', }, { Header: 'Status', accessor: 'status', width: 'auto', }, { Header: ' ', Cell: (props: any) => { const { row } = props; if (isAdmin) { return (