fix: stop silent Jobs filters from emptying Discovered

Hide-prior-skips is off by default and counts in the badge when on; Settings searchCities no longer hard-filters the Jobs list.
This commit is contained in:
2026-07-13 21:36:37 -04:00
parent abfc5d8d0a
commit 6a5c9e8cc4
4 changed files with 6 additions and 14 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ During a pipeline run, if a new posting matches an existing row by URL, source i
Open jobs that match a prior skip or apply are **hidden** from Discovered, Ready, and All tabs so the queue stays fresh. Skipped and applied rows themselves remain visible in their statuses. Open jobs that match a prior skip or apply are **hidden** from Discovered, Ready, and All tabs so the queue stays fresh. Skipped and applied rows themselves remain visible in their statuses.
Use **Filters → Employer keywords → Hide roles you already skipped** to toggle this behavior (on by default). When enabled, JobOps compares **company + job title** only: Use **Filters → Employer keywords → Hide roles you already skipped** to toggle this behavior (off by default). When enabled, JobOps compares **company + job title** only:
- Same company after normalization (legal suffixes stripped; short names like `CGI` match longer forms like `CGI IT UK Limited`). - Same company after normalization (legal suffixes stripped; short names like `CGI` match longer forms like `CGI IT UK Limited`).
- Same title after normalization (including simple plural variants such as `Engineer` vs `Engineers`). - Same title after normalization (including simple plural variants such as `Engineer` vs `Engineers`).
@@ -1,6 +1,5 @@
import { useSettings } from "@client/hooks/useSettings"; import { useSettings } from "@client/hooks/useSettings";
import { buildDuplicateDismissHints } from "@client/lib/job-dedup"; import { buildDuplicateDismissHints } from "@client/lib/job-dedup";
import { inferCountryKeyFromSearchGeography } from "@shared/search-cities";
import type React from "react"; import type React from "react";
import { useCallback, useEffect, useMemo, useState } from "react"; import { useCallback, useEffect, useMemo, useState } from "react";
import { useNavigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
@@ -168,12 +167,6 @@ export const OrchestratorPage: React.FC = () => {
[settings], [settings],
); );
const searchGeographyCountryKey = useMemo(
() =>
inferCountryKeyFromSearchGeography(settings?.searchCities?.value ?? null),
[settings?.searchCities?.value],
);
const duplicateDismissHints = useMemo( const duplicateDismissHints = useMemo(
() => (hidePriorSkips ? buildDuplicateDismissHints(jobs) : undefined), () => (hidePriorSkips ? buildDuplicateDismissHints(jobs) : undefined),
[hidePriorSkips, jobs], [hidePriorSkips, jobs],
@@ -188,7 +181,7 @@ export const OrchestratorPage: React.FC = () => {
settingsBlockedEmployerKeywords: applySettingsCompanySkipList settingsBlockedEmployerKeywords: applySettingsCompanySkipList
? settingsSkipEmployerKeywords ? settingsSkipEmployerKeywords
: [], : [],
searchGeographyCountryKey, searchGeographyCountryKey: null,
duplicateDismissHints, duplicateDismissHints,
}), }),
[ [
@@ -198,7 +191,6 @@ export const OrchestratorPage: React.FC = () => {
employerExcludeFilter, employerExcludeFilter,
applySettingsCompanySkipList, applySettingsCompanySkipList,
settingsSkipEmployerKeywords, settingsSkipEmployerKeywords,
searchGeographyCountryKey,
duplicateDismissHints, duplicateDismissHints,
], ],
); );
@@ -257,7 +257,7 @@ export const OrchestratorFilters: React.FC<OrchestratorFiltersProps> = ({
employerIncludeFilter.length > 0 || employerExcludeFilter.length > 0, employerIncludeFilter.length > 0 || employerExcludeFilter.length > 0,
) + ) +
Number(!applySettingsCompanySkipList) + Number(!applySettingsCompanySkipList) +
Number(!hidePriorSkips) + Number(hidePriorSkips) +
Number(sponsorFilter !== "all") + Number(sponsorFilter !== "all") +
Number(sponsorshipSignalsFilter.length > 0) + Number(sponsorshipSignalsFilter.length > 0) +
Number(hideSponsorBlockers) + Number(hideSponsorBlockers) +
@@ -436,7 +436,7 @@ export const useOrchestratorFilters = () => {
); );
const hidePriorSkips = useMemo( const hidePriorSkips = useMemo(
() => searchParams.get("hidePriorSkips") !== "0", () => searchParams.get("hidePriorSkips") === "1",
[searchParams], [searchParams],
); );
@@ -458,8 +458,8 @@ export const useOrchestratorFilters = () => {
(value: boolean) => { (value: boolean) => {
setSearchParams( setSearchParams(
(prev) => { (prev) => {
if (value) prev.delete("hidePriorSkips"); if (value) prev.set("hidePriorSkips", "1");
else prev.set("hidePriorSkips", "0"); else prev.delete("hidePriorSkips");
return prev; return prev;
}, },
{ replace: true }, { replace: true },