Hide archived routines from routines page
This commit is contained in:
@@ -501,6 +501,45 @@ describe("Routines page", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("hides archived routines from the routines list", async () => {
|
||||||
|
routinesListMock.mockResolvedValue([
|
||||||
|
createRoutine({ id: "routine-1", title: "Morning sync", status: "active" }),
|
||||||
|
createRoutine({ id: "routine-2", title: "Archived cleanup", status: "archived" }),
|
||||||
|
]);
|
||||||
|
issuesListMock.mockResolvedValue([]);
|
||||||
|
|
||||||
|
const root = createRoot(container);
|
||||||
|
const queryClient = new QueryClient({
|
||||||
|
defaultOptions: {
|
||||||
|
queries: { retry: false },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
root.render(
|
||||||
|
<QueryClientProvider client={queryClient}>
|
||||||
|
<Routines />
|
||||||
|
</QueryClientProvider>,
|
||||||
|
);
|
||||||
|
await flush();
|
||||||
|
});
|
||||||
|
|
||||||
|
for (let attempts = 0; attempts < 5 && !container.textContent?.includes("Morning sync"); attempts += 1) {
|
||||||
|
await act(async () => {
|
||||||
|
await flush();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const text = container.textContent ?? "";
|
||||||
|
expect(text).toContain("1 routine");
|
||||||
|
expect(text).toContain("Morning sync");
|
||||||
|
expect(text).not.toContain("Archived cleanup");
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
root.unmount();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("shows an outlined row-level run now button on the routines table", async () => {
|
it("shows an outlined row-level run now button on the routines table", async () => {
|
||||||
routinesListMock.mockResolvedValue([createRoutine({ id: "routine-1", title: "Morning sync" })]);
|
routinesListMock.mockResolvedValue([createRoutine({ id: "routine-1", title: "Morning sync" })]);
|
||||||
issuesListMock.mockResolvedValue([]);
|
issuesListMock.mockResolvedValue([]);
|
||||||
|
|||||||
@@ -417,9 +417,13 @@ export function Routines() {
|
|||||||
[projects],
|
[projects],
|
||||||
);
|
);
|
||||||
const liveIssueIds = useMemo(() => collectLiveIssueIds(liveRuns), [liveRuns]);
|
const liveIssueIds = useMemo(() => collectLiveIssueIds(liveRuns), [liveRuns]);
|
||||||
|
const visibleRoutines = useMemo(
|
||||||
|
() => (routines ?? []).filter((routine) => routine.status !== "archived"),
|
||||||
|
[routines],
|
||||||
|
);
|
||||||
const sortedRoutines = useMemo(
|
const sortedRoutines = useMemo(
|
||||||
() => sortRoutines(routines ?? [], routineViewState.sortField, routineViewState.sortDir),
|
() => sortRoutines(visibleRoutines, routineViewState.sortField, routineViewState.sortDir),
|
||||||
[routineViewState.sortDir, routineViewState.sortField, routines],
|
[routineViewState.sortDir, routineViewState.sortField, visibleRoutines],
|
||||||
);
|
);
|
||||||
const routineGroups = useMemo(
|
const routineGroups = useMemo(
|
||||||
() => buildRoutineGroups(sortedRoutines, routineViewState.groupBy, projectById, agentById),
|
() => buildRoutineGroups(sortedRoutines, routineViewState.groupBy, projectById, agentById),
|
||||||
@@ -516,7 +520,7 @@ export function Routines() {
|
|||||||
<TabsContent value="routines" className="space-y-4">
|
<TabsContent value="routines" className="space-y-4">
|
||||||
<div className="flex items-center justify-between gap-3">
|
<div className="flex items-center justify-between gap-3">
|
||||||
<p className="text-sm text-muted-foreground">
|
<p className="text-sm text-muted-foreground">
|
||||||
{(routines ?? []).length} routine{(routines ?? []).length === 1 ? "" : "s"}
|
{visibleRoutines.length} routine{visibleRoutines.length === 1 ? "" : "s"}
|
||||||
</p>
|
</p>
|
||||||
<div className="flex items-center gap-1">
|
<div className="flex items-center gap-1">
|
||||||
<Popover>
|
<Popover>
|
||||||
@@ -873,11 +877,11 @@ export function Routines() {
|
|||||||
|
|
||||||
{activeTab === "routines" ? (
|
{activeTab === "routines" ? (
|
||||||
<div>
|
<div>
|
||||||
{(routines ?? []).length === 0 ? (
|
{visibleRoutines.length === 0 ? (
|
||||||
<div className="py-12">
|
<div className="py-12">
|
||||||
<EmptyState
|
<EmptyState
|
||||||
icon={Repeat}
|
icon={Repeat}
|
||||||
message="No routines yet. Use Create routine to define the first recurring workflow."
|
message="No active routines. Use Create routine to define the first recurring workflow."
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
Reference in New Issue
Block a user