import React, { useState } from "react"; import PropTypes from "prop-types"; import { push } from "react-router-redux"; import { filter, includes } from "lodash"; import PATHS from "router/paths"; import queryInterface from "interfaces/query"; import hostInterface from "interfaces/host"; import Button from "components/buttons/Button"; import Modal from "components/Modal"; import InputField from "components/forms/fields/InputField"; import OpenNewTabIcon from "../../../../../assets/images/open-new-tab-12x12@2x.png"; import ErrorIcon from "../../../../../assets/images/icon-error-16x16@2x.png"; const baseClass = "select-query-modal"; const onQueryHostCustom = (host, dispatch) => { return dispatch( push({ pathname: PATHS.NEW_QUERY, query: { host_ids: [host.id] }, }) ); }; const onQueryHostSaved = (host, selectedQuery, dispatch) => { return dispatch( push({ pathname: PATHS.EDIT_QUERY(selectedQuery), query: { host_ids: [host.id] }, }) ); }; const SelectQueryModal = ({ host, onCancel, dispatch, queries, queryErrors, isOnlyObserver, }) => { let queriesAvailableToRun = queries; if (isOnlyObserver) { queriesAvailableToRun = queries.filter( (query) => query.observer_can_run === true ); } const [queriesFilter, setQueriesFilter] = useState(""); 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 customQueryButton = () => { return ( ); }; const onFilterQueries = (event) => { setQueriesFilter(event); return false; }; const queriesFiltered = getQueries(); const queriesCount = queriesFiltered.length; const results = () => { if (queryErrors) { return (
error icon Something's gone wrong. Refresh the page or log in again. If this keeps happening, please  file an issue open new tab {!isOnlyObserver && customQueryButton()}
); } 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 null; }; return ( {results()} ); }; SelectQueryModal.propTypes = { dispatch: PropTypes.func, host: hostInterface, queries: PropTypes.arrayOf(queryInterface), onCancel: PropTypes.func, queryErrors: PropTypes.object, // eslint-disable-line react/forbid-prop-types isOnlyObserver: PropTypes.bool, }; export default SelectQueryModal;