fix: rename filter to "Hide routine runs" so default state has no active filter badge

Inverts the checkbox semantics from "Show routine runs" (checked by
default, which looked like an active filter) to "Hide routine runs"
(unchecked by default, no filter badge). Renames showRoutineExecutions
to hideRoutineExecutions throughout the filter state, normalization,
and tests.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
(cherry picked from commit 32d41759c73cb67d0a3770f805deb95a72ed14ff)
This commit is contained in:
Dotta committed 2026-04-15 09:12:41 -05:00
1 parent 60994725d2
commit 206e6d0007
5 files changed
+27 -27

No files matched your search

+3 -3
View File
@@ -251,10 +251,10 @@ export function IssueFiltersPopover({
<span className="text-xs text-muted-foreground">Visibility</span>
<label className="flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1 hover:bg-accent/50">
<Checkbox
checked={state.showRoutineExecutions}
onCheckedChange={(checked) => onChange({ showRoutineExecutions: checked === true })}
checked={state.hideRoutineExecutions}
onCheckedChange={(checked) => onChange({ hideRoutineExecutions: checked === true })}
/>
<span className="text-sm">Show routine runs</span>
<span className="text-sm">Hide routine runs</span>
</label>
</div>
) : null}
+2 -2
View File
@@ -532,14 +532,14 @@ describe("IssuesList", () => {
await waitForAssertion(() => {
const toggle = Array.from(document.body.querySelectorAll("label")).find(
(label) => label.textContent?.includes("Show routine runs"),
(label) => label.textContent?.includes("Hide routine runs"),
);
expect(toggle).not.toBeUndefined();
});
await act(async () => {
const toggle = Array.from(document.body.querySelectorAll("label")).find(
(label) => label.textContent?.includes("Show routine runs"),
(label) => label.textContent?.includes("Hide routine runs"),
);
toggle?.dispatchEvent(new MouseEvent("click", { bubbles: true }));
await Promise.resolve();
+12 -12
View File
@@ -718,7 +718,7 @@ describe("inbox helpers", () => {
labels: [],
projects: [],
workspaces: [],
showRoutineExecutions: false,
hideRoutineExecutions: true,
},
}).map((issue) => issue.id),
).toEqual(["remote-match"]);
@@ -736,7 +736,7 @@ describe("inbox helpers", () => {
labels: [],
projects: [],
workspaces: [],
showRoutineExecutions: false,
hideRoutineExecutions: true,
},
}),
).toEqual([]);
@@ -754,7 +754,7 @@ describe("inbox helpers", () => {
labels: [],
projects: [],
workspaces: [],
showRoutineExecutions: false,
hideRoutineExecutions: true,
},
}),
).toEqual([]);
@@ -779,7 +779,7 @@ describe("inbox helpers", () => {
labels: ["label-1"],
projects: ["project-1"],
workspaces: ["workspace-1"],
showRoutineExecutions: true,
hideRoutineExecutions: false,
},
});
saveInboxFilterPreferences("company-2", {
@@ -792,7 +792,7 @@ describe("inbox helpers", () => {
labels: [],
projects: [],
workspaces: [],
showRoutineExecutions: false,
hideRoutineExecutions: true,
},
});
@@ -806,7 +806,7 @@ describe("inbox helpers", () => {
labels: ["label-1"],
projects: ["project-1"],
workspaces: ["workspace-1"],
showRoutineExecutions: true,
hideRoutineExecutions: false,
},
});
expect(loadInboxFilterPreferences("company-2")).toEqual({
@@ -819,7 +819,7 @@ describe("inbox helpers", () => {
labels: [],
projects: [],
workspaces: [],
showRoutineExecutions: false,
hideRoutineExecutions: true,
},
});
});
@@ -835,7 +835,7 @@ describe("inbox helpers", () => {
labels: null,
projects: ["project-1"],
workspaces: ["workspace-1", false],
showRoutineExecutions: "yes",
hideRoutineExecutions: "yes",
},
}));
@@ -849,7 +849,7 @@ describe("inbox helpers", () => {
labels: [],
projects: ["project-1"],
workspaces: ["workspace-1"],
showRoutineExecutions: true,
hideRoutineExecutions: false,
},
});
});
@@ -1003,12 +1003,12 @@ describe("inbox helpers", () => {
expect(getInboxKeyboardSelectionIndex(0, 3, "previous")).toBe(0);
});
it("hides routine execution issues until the toggle is enabled", () => {
it("hides routine execution issues when the hide toggle is enabled", () => {
const manualIssue = { ...makeIssue("manual", true), originKind: "manual" as const };
const routineIssue = { ...makeIssue("routine", true), originKind: "routine_execution" as const };
expect(filterInboxIssues([manualIssue, routineIssue], false)).toEqual([manualIssue]);
expect(filterInboxIssues([manualIssue, routineIssue], true)).toEqual([manualIssue, routineIssue]);
expect(filterInboxIssues([manualIssue, routineIssue], false)).toEqual([manualIssue, routineIssue]);
expect(filterInboxIssues([manualIssue, routineIssue], true)).toEqual([manualIssue]);
});
it("groups mixed inbox items by type while preserving item order within each group", () => {
+6 -6
View File
@@ -142,7 +142,7 @@ function normalizeIssueFilterState(value: unknown): IssueFilterState {
labels: normalizeStringArray(candidate.labels),
projects: normalizeStringArray(candidate.projects),
workspaces: normalizeStringArray(candidate.workspaces),
showRoutineExecutions: candidate.showRoutineExecutions !== false,
hideRoutineExecutions: candidate.hideRoutineExecutions === true,
};
}
@@ -367,14 +367,14 @@ export function shouldResetInboxWorkspaceGrouping(
export function shouldIncludeRoutineExecutionIssue(
issue: Pick<Issue, "originKind">,
showRoutineExecutions: boolean,
hideRoutineExecutions: boolean,
): boolean {
return showRoutineExecutions || issue.originKind !== "routine_execution";
return !hideRoutineExecutions || issue.originKind !== "routine_execution";
}
export function filterInboxIssues(issues: Issue[], showRoutineExecutions: boolean): Issue[] {
if (showRoutineExecutions) return issues;
return issues.filter((issue) => shouldIncludeRoutineExecutionIssue(issue, showRoutineExecutions));
export function filterInboxIssues(issues: Issue[], hideRoutineExecutions: boolean): Issue[] {
if (!hideRoutineExecutions) return issues;
return issues.filter((issue) => shouldIncludeRoutineExecutionIssue(issue, hideRoutineExecutions));
}
export function matchesInboxIssueSearch(
+4 -4
View File
@@ -7,7 +7,7 @@ export type IssueFilterState = {
labels: string[];
projects: string[];
workspaces: string[];
showRoutineExecutions: boolean;
hideRoutineExecutions: boolean;
};
export const defaultIssueFilterState: IssueFilterState = {
@@ -17,7 +17,7 @@ export const defaultIssueFilterState: IssueFilterState = {
labels: [],
projects: [],
workspaces: [],
showRoutineExecutions: true,
hideRoutineExecutions: false,
};
export const issueStatusOrder = ["in_progress", "todo", "backlog", "in_review", "blocked", "done", "cancelled"];
@@ -58,7 +58,7 @@ export function applyIssueFilters(
enableRoutineVisibilityFilter = false,
): Issue[] {
let result = issues;
if (enableRoutineVisibilityFilter && !state.showRoutineExecutions) {
if (enableRoutineVisibilityFilter && state.hideRoutineExecutions) {
result = result.filter((issue) => issue.originKind !== "routine_execution");
}
if (state.statuses.length > 0) result = result.filter((issue) => state.statuses.includes(issue.status));
@@ -99,6 +99,6 @@ export function countActiveIssueFilters(
if (state.labels.length > 0) count += 1;
if (state.projects.length > 0) count += 1;
if (state.workspaces.length > 0) count += 1;
if (enableRoutineVisibilityFilter && !state.showRoutineExecutions) count += 1;
if (enableRoutineVisibilityFilter && state.hideRoutineExecutions) count += 1;
return count;
}