diff --git a/orchestrator/src/client/pages/orchestrator/OrchestratorHeader.test.tsx b/orchestrator/src/client/pages/orchestrator/OrchestratorHeader.test.tsx index 7eee1fa..0e215a3 100644 --- a/orchestrator/src/client/pages/orchestrator/OrchestratorHeader.test.tsx +++ b/orchestrator/src/client/pages/orchestrator/OrchestratorHeader.test.tsx @@ -81,14 +81,15 @@ describe("OrchestratorHeader", () => { it("uses enabled sources for the all sources action", () => { const { props } = renderHeader({ enabledSources: ["gradcracker", "linkedin"] }); - fireEvent.click(screen.getByRole("menuitem", { name: /All sources/i })); + fireEvent.click(screen.getByRole("menuitemcheckbox", { name: /Select all sources/i })); expect(props.onSetPipelineSources).toHaveBeenCalledWith(["gradcracker", "linkedin"]); }); - it("hides jobspy preset when no jobspy sources are enabled", () => { - renderHeader({ enabledSources: ["gradcracker"] }); + it("does not show source presets", () => { + renderHeader({ enabledSources: ["gradcracker", "linkedin"] }); + expect(screen.queryByRole("menuitem", { name: /Gradcracker only/i })).not.toBeInTheDocument(); expect(screen.queryByRole("menuitem", { name: /Indeed \+ LinkedIn only/i })).not.toBeInTheDocument(); }); }); diff --git a/orchestrator/src/client/pages/orchestrator/OrchestratorHeader.tsx b/orchestrator/src/client/pages/orchestrator/OrchestratorHeader.tsx index 5bd9a8b..ddfed4a 100644 --- a/orchestrator/src/client/pages/orchestrator/OrchestratorHeader.tsx +++ b/orchestrator/src/client/pages/orchestrator/OrchestratorHeader.tsx @@ -18,7 +18,6 @@ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, - DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, @@ -68,7 +67,8 @@ export const OrchestratorHeader: React.FC = ({ const location = useLocation(); const navigate = useNavigate(); const visibleSources = orderedSources.filter((source) => enabledSources.includes(source)); - const enabledJobSpySources = visibleSources.filter((source) => source === "indeed" || source === "linkedin"); + const allSourcesSelected = + visibleSources.length > 0 && visibleSources.every((source) => pipelineSources.includes(source)); return (
@@ -148,7 +148,9 @@ export const OrchestratorHeader: React.FC = ({ className="gap-2" > {isPipelineRunning ? : } - {isPipelineRunning ? "Running" : "Run pipeline"} + + {isPipelineRunning ? `Running (${pipelineSources.length})` : `Run pipeline (${pipelineSources.length})`} + @@ -177,34 +179,15 @@ export const OrchestratorHeader: React.FC = ({ ))} - { - event.preventDefault(); - onSetPipelineSources(visibleSources); + { + onSetPipelineSources(checked ? visibleSources : visibleSources.slice(0, 1)); }} + onSelect={(event) => event.preventDefault()} > - All sources - - {visibleSources.includes("gradcracker") && ( - { - event.preventDefault(); - onSetPipelineSources(["gradcracker"]); - }} - > - Gradcracker only - - )} - {enabledJobSpySources.length > 0 && ( - { - event.preventDefault(); - onSetPipelineSources(enabledJobSpySources); - }} - > - Indeed + LinkedIn only - - )} + Select all sources +