import { Button, Grid, GridCol, Group, Popover, Stack, TextInput } from '@mantine/core'; import { isNotEmpty, matches, useForm } from '@mantine/form'; import { useDebouncedValue, useDisclosure } from '@mantine/hooks'; import { AddItemModal, NoItemsFound, SettingsHeader } from 'components'; import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks'; import { useEffect, useState } from 'react'; import { popoverClasses, textInputClasses } from 'styles'; import type { WolClient } from 'types'; import DebouncedWolClient from './DebouncedWolClient'; import WolClientSettingsItem from './WolClientSettingsItem'; const WolClientSettings = () => { const defaultWolClient: WolClient = { id: undefined, hostname: '', macAddress: '', }; const form = useForm({ initialValues: defaultWolClient, validate: { hostname: isNotEmpty('Hostname is required'), macAddress: matches( /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/, 'Invalid MAC Address', ), }, }); const endpoint = 'api/wolClients'; const { data: wolClientsData, isFetched: wolClientsIsFetched } = useQueryAPI({ endpoint: endpoint, }); const [wolClients, setWolClients] = useState([]); const { mutateAsync } = useMutationAPI(); const { isMobile, theme } = useCommonHooks(); const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false); const [searchValue, setSearchValue] = useState(''); const [debouncedSearch] = useDebouncedValue(searchValue, 500); const [isOpen, setIsOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); const handleClose = () => { closeModal(); form.reset(); }; useEffect(() => { if (wolClientsData && wolClientsIsFetched) { setWolClients( wolClientsData.filter((a: WolClient) => a.hostname.toLowerCase().includes(debouncedSearch.toLowerCase()), ), ); } if (debouncedSearch === searchValue) { setIsLoading(false); } }, [wolClientsData, wolClientsIsFetched, debouncedSearch]); return ( { mutateAsync({ method: 'POST', endpoint: endpoint, body: values, }); handleClose(); })} > } /> {wolClients.length > 0 ? ( wolClients?.map((client: WolClient) => ( )) ) : ( )} ); }; export default WolClientSettings;