import { ActionIcon, Box, Button, Divider, Grid, GridCol, Group, Highlight, Modal, Popover, Stack, Text, TextInput, } from '@mantine/core'; import { useDebouncedValue, useDisclosure } from '@mantine/hooks'; import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks'; import { useEffect, useState } from 'react'; import { FiHelpCircle, FiPlus } from 'react-icons/fi'; import { actionIconClasses, buttonClasses, modalClasses, textClasses, textInputClasses, } from 'styles'; import DebouncedSearchProvider from './DebouncedSearchProvider'; import SearchProviderSettingsItem from './SearchProviderSettingsItem'; const SearchProviderSettings = () => { const endpoint = 'api/providers'; const { data: providers, isFetched: providersIsFetched } = useQueryAPI({ endpoint: endpoint, }); const [providerData, setProviderData] = useState([]); const { theme, isMobile } = useCommonHooks(); const { mutateAsync } = useMutationAPI(); const [newProvider, setNewProvider] = useState({}); const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false); const [searchValue, setSearchValue] = useState(''); const [debouncedSearch] = useDebouncedValue(searchValue, 500); const handleDelete = (application: any) => { mutateAsync({ method: 'DELETE', endpoint: endpoint, body: application }); }; useEffect(() => { if (providers && providersIsFetched) { setProviderData( providers.filter((a: any) => a.name.toLowerCase().includes(debouncedSearch.toLowerCase()), ), ); } }, [providers, providersIsFetched, debouncedSearch]); 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 > Add a new Search Provider { setNewProvider({ ...newProvider, name: event.target.value, }); }} /> { setNewProvider({ ...newProvider, prefix: event.target.value, }); }} /> { setNewProvider({ ...newProvider, url: event.target.value, }); }} /> Search Providers {'Search providers and shortcuts can be configured here.'} { 'Providers can be used in the search bar. By starting a search with the prefix, it will be redirected to the url of the provider to complete the search.' } { setSearchValue(event.target.value); }} /> {providerData?.map((provider: any) => ( { e.stopPropagation(); }} > ))} ); }; export default SearchProviderSettings;