import { ActionIcon, Button, Card, Group, Modal, Stack, Text, TextInput, Tooltip, } from '@mantine/core'; import { useDebouncedValue, useDisclosure } from '@mantine/hooks'; import { IconTrash } from '@tabler/icons-react'; import { useCommonHooks, useMutationAPI } from 'hooks'; import { useEffect, useState } from 'react'; import { cardClasses, modalClasses, textInputClasses } from 'styles'; function DebouncedSearchProvider({ searchProvider, handleDelete }: any) { const { theme, isMobile } = useCommonHooks(); const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false); const { mutateAsync } = useMutationAPI(); const [provider, setProvider] = useState(searchProvider); const [update, setUpdate] = useState({}); const [debounced] = useDebouncedValue(update, 1000); useEffect(() => { if (Object.keys(debounced).length) { mutateAsync({ method: 'PATCH', endpoint: 'api/providers', body: debounced }); } }, [debounced]); useEffect(() => { if (update !== provider && Object.keys(update).length) { setProvider(update); } }, [update]); return ( { closeModal(); }} style={{ '--color-text-pri': theme.primaryColor, '--color-text-acc': theme.accentColor, '--color-background': theme.backgroundColor, '--color-border': theme.borderColor, '--color-search-background': theme.searchColor, '--image-background': `url(${theme.backgroundImage})`, }} closeOnEscape closeOnClickOutside > Delete Search Provider Are you sure you want to delete this Search Provider? {`"${provider.name}"`} This action cannot be undone! { openModal(); }} > { setUpdate({ ...provider, name: event.target.value, }); }} /> { setUpdate({ ...provider, prefix: event.target.value, }); }} /> { setUpdate({ ...provider, url: event.target.value, }); }} /> ); } export default DebouncedSearchProvider;