diff --git a/app/controllers/api/v2/job_invocations_controller.rb b/app/controllers/api/v2/job_invocations_controller.rb index 1fb898870..0c5dd04b4 100644 --- a/app/controllers/api/v2/job_invocations_controller.rb +++ b/app/controllers/api/v2/job_invocations_controller.rb @@ -270,6 +270,11 @@ def parent_scope def set_hosts_and_template_invocations @pattern_template_invocations = @job_invocation.pattern_template_invocations.includes(:input_values) @hosts = @job_invocation.targeting.hosts.authorized(:view_hosts, Host) + + unless params[:search].nil? + @hosts = @hosts.joins(:template_invocations) + .where(:template_invocations => { :job_invocation_id => @job_invocation.id}) + end @template_invocations = @job_invocation.template_invocations .where(host: @hosts) .includes(:input_values) diff --git a/webpack/JobInvocationDetail/JobInvocationHostTable.js b/webpack/JobInvocationDetail/JobInvocationHostTable.js index 41f1e3b8d..db96a4355 100644 --- a/webpack/JobInvocationDetail/JobInvocationHostTable.js +++ b/webpack/JobInvocationDetail/JobInvocationHostTable.js @@ -50,16 +50,16 @@ const JobInvocationHostTable = ({ filter = selectedFilter, search = urlSearchQuery ) => { - const baseFilter = `job_invocation.id = ${id}`; const dropdownFilterClause = filter && filter !== 'all_statuses' - ? `and job_invocation.result = ${filter}` - : ''; - const searchQueryClause = search ? `and (${search})` : ''; - return `${baseFilter} ${dropdownFilterClause} ${searchQueryClause}`; + ? `job_invocation.result = ${filter}` + : null; + const parts = [dropdownFilterClause, search]; + return parts.filter((x) => x).map((fragment) => `(${fragment}})`).join(' AND '); }; - const defaultParams = { search: constructFilter() }; + const filter = constructFilter(); + const defaultParams = filter != '' ? { search: filter } : {}; if (urlPage) defaultParams.page = Number(urlPage); if (urlPerPage) defaultParams.per_page = Number(urlPerPage); const [expandedHost, setExpandedHost] = useState([]);