import * as React from 'react'; import { useLazyQuery } from '@apollo/client'; import { Link } from 'react-router-dom'; import debounce from 'lodash/debounce'; import { useTheme } from '@mui/material/styles'; import useMediaQuery from '@mui/material/useMediaQuery'; import DialogTitle from '@mui/material/DialogTitle'; import DialogContent from '@mui/material/DialogContent'; import Dialog from '@mui/material/Dialog'; import SearchIcon from '@mui/icons-material/Search'; import InputAdornment from '@mui/material/InputAdornment'; import CircularProgress from '@mui/material/CircularProgress'; import List from '@mui/material/List'; import ListItem from '@mui/material/ListItem'; import ListItemButton from '@mui/material/ListItemButton'; import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemText from '@mui/material/ListItemText'; import InputLabel from '@mui/material/InputLabel'; import OutlinedInput from '@mui/material/OutlinedInput'; import FormControl from '@mui/material/FormControl'; import Box from '@mui/material/Box'; import type { IApp } from '@automatisch/types'; import * as URLS from 'config/urls'; import AppIcon from 'components/AppIcon'; import { GET_APPS } from 'graphql/queries/get-apps'; import useFormatMessage from 'hooks/useFormatMessage'; function createConnectionOrFlow(appKey: string, supportsConnections = false) { if (!supportsConnections) { return URLS.CREATE_FLOW_WITH_APP(appKey); } return URLS.APP_ADD_CONNECTION(appKey); } type AddNewAppConnectionProps = { onClose: () => void; }; export default function AddNewAppConnection( props: AddNewAppConnectionProps ): React.ReactElement { const { onClose } = props; const theme = useTheme(); const matchSmallScreens = useMediaQuery(theme.breakpoints.down('sm')); const formatMessage = useFormatMessage(); const [appName, setAppName] = React.useState(null); const [loading, setLoading] = React.useState(false); const [getApps, { data }] = useLazyQuery(GET_APPS, { onCompleted: () => { setLoading(false); }, }); const fetchData = React.useMemo( () => debounce((name) => getApps({ variables: { name } }), 300), [getApps] ); React.useEffect( function fetchAppsOnAppNameChange() { setLoading(true); fetchData(appName); }, [fetchData, appName] ); React.useEffect(function cancelDebounceOnUnmount() { return () => { fetchData.cancel(); }; }, []); return ( {formatMessage('apps.addNewAppConnection')} {formatMessage('apps.searchApp')} setAppName(event.target.value)} endAdornment={ theme.palette.primary.main }} /> } label={formatMessage('apps.searchApp')} inputProps={{ 'data-test': 'search-for-app-text-field', }} /> {loading && ( )} {!loading && data?.getApps?.map((app: IApp) => ( theme.palette.text.primary }, }} /> ))} ); }