import React, { useState, useCallback } from "react"; import { filter, includes } from "lodash"; import { IQuery } from "interfaces/query"; import Button from "components/buttons/Button"; import Modal from "components/Modal"; // @ts-ignore import InputField from "components/forms/fields/InputField"; import DataError from "components/DataError"; export interface ISelectQueryModalProps { onCancel: () => void; onQueryHostCustom: () => void; onQueryHostSaved: (selectedQuery: IQuery) => void; queries: IQuery[] | []; queryErrors: Error | null; isOnlyObserver: boolean | undefined; } const baseClass = "select-query-modal"; const SelectQueryModal = ({ onCancel, onQueryHostCustom, onQueryHostSaved, queries, queryErrors, isOnlyObserver, }: ISelectQueryModalProps): JSX.Element => { let queriesAvailableToRun = queries; const [queriesFilter, setQueriesFilter] = useState(""); if (isOnlyObserver) { queriesAvailableToRun = queries.filter( (query) => query.observer_can_run === true ); } const getQueries = () => { if (!queriesFilter) { return queriesAvailableToRun; } const lowerQueryFilter = queriesFilter.toLowerCase(); return filter(queriesAvailableToRun, (query) => { if (!query.name) { return false; } const lowerQueryName = query.name.toLowerCase(); return includes(lowerQueryName, lowerQueryFilter); }); }; const onFilterQueries = useCallback( (filterString: string): void => { setQueriesFilter(filterString); }, [setQueriesFilter] ); const queriesFiltered = getQueries(); const queriesCount = queriesFiltered.length; const customQueryButton = () => { return ( ); }; const results = (): JSX.Element => { if (queryErrors) { return ; } if (!queriesFilter && queriesCount === 0) { return (
You have no saved queries. Expecting to see queries? Try again in a few seconds as the system catches up.
{!isOnlyObserver && customQueryButton()}
); } if (queriesCount > 0) { const queryList = queriesFiltered.map((query) => { return ( ); }); return (
{!isOnlyObserver && (
OR {customQueryButton()}
)}
{queryList}
); } if (queriesFilter && queriesCount === 0) { return (
{!isOnlyObserver && (
OR {customQueryButton()}
)}
No queries match the current search criteria. Expecting to see queries? Try again in a few seconds as the system catches up.
); } return <>; }; return ( {results()} ); }; export default SelectQueryModal;