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:
@@ -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 },
|
||||||
|
|||||||
Reference in New Issue
Block a user