diff --git a/apps/mobile/src/features/inbox/components/FilterSheet.tsx b/apps/mobile/src/features/inbox/components/FilterSheet.tsx
index 9c05fd1c1..5243c6764 100644
--- a/apps/mobile/src/features/inbox/components/FilterSheet.tsx
+++ b/apps/mobile/src/features/inbox/components/FilterSheet.tsx
@@ -76,6 +76,7 @@ const SOURCE_PRODUCT_OPTIONS: { value: SourceProduct; label: string }[] = [
{ value: "linear", label: "Linear" },
{ value: "zendesk", label: "Zendesk" },
{ value: "conversations", label: "Conversations" },
+ { value: "signals_scout", label: "Scout" },
];
function SectionHeader({ title }: { title: string }) {
diff --git a/apps/mobile/src/features/inbox/components/SignalCard.tsx b/apps/mobile/src/features/inbox/components/SignalCard.tsx
index a8c871828..a32ff002d 100644
--- a/apps/mobile/src/features/inbox/components/SignalCard.tsx
+++ b/apps/mobile/src/features/inbox/components/SignalCard.tsx
@@ -7,6 +7,7 @@ import {
ChatCircle,
CheckCircle,
Code,
+ Compass,
GithubLogo,
LinkSimple,
Question,
@@ -46,6 +47,12 @@ function sourceLine(signal: Signal): string {
return "GitHub · Issue";
if (source_product === "linear" && source_type === "issue")
return "Linear · Issue";
+ if (
+ source_product === "signals_scout" &&
+ source_type === "cross_source_issue"
+ )
+ return "Scout · Cross-source issue";
+ if (source_product === "signals_scout") return "Scout";
const product = source_product.replace(/_/g, " ");
const type = source_type.replace(/_/g, " ");
return `${product} · ${type}`;
@@ -73,6 +80,8 @@ function SourceIcon({
return ;
case "linear":
return ;
+ case "signals_scout":
+ return ;
default:
return ;
}
diff --git a/apps/mobile/src/features/inbox/stores/inboxFilterStore.test.ts b/apps/mobile/src/features/inbox/stores/inboxFilterStore.test.ts
index 31cae025d..e8dfa483f 100644
--- a/apps/mobile/src/features/inbox/stores/inboxFilterStore.test.ts
+++ b/apps/mobile/src/features/inbox/stores/inboxFilterStore.test.ts
@@ -1,14 +1,43 @@
-import { beforeEach, describe, expect, it } from "vitest";
+import { beforeEach, describe, expect, it, vi } from "vitest";
-import { useInboxFilterStore } from "./inboxFilterStore";
+vi.mock("@react-native-async-storage/async-storage", () => ({
+ default: {
+ getItem: vi.fn(),
+ setItem: vi.fn(),
+ removeItem: vi.fn(),
+ },
+}));
-const INITIAL_STATE = useInboxFilterStore.getState();
+import { type SourceProduct, useInboxFilterStore } from "./inboxFilterStore";
+
+describe("inboxFilterStore", () => {
+ beforeEach(() => {
+ useInboxFilterStore.getState().resetFilters();
+ });
+
+ it.each(["signals_scout", "error_tracking", "github"])(
+ "toggles %s in and out of the source filter",
+ (source) => {
+ const { toggleSourceProduct } = useInboxFilterStore.getState();
-beforeEach(() => {
- useInboxFilterStore.setState(INITIAL_STATE, true);
+ toggleSourceProduct(source);
+ expect(useInboxFilterStore.getState().sourceProductFilter).toEqual([
+ source,
+ ]);
+
+ toggleSourceProduct(source);
+ expect(useInboxFilterStore.getState().sourceProductFilter).toEqual([]);
+ },
+ );
});
+const INITIAL_STATE = useInboxFilterStore.getState();
+
describe("inboxFilterStore priority filter", () => {
+ beforeEach(() => {
+ useInboxFilterStore.setState(INITIAL_STATE, true);
+ });
+
it("starts empty (no priority filter)", () => {
expect(useInboxFilterStore.getState().priorityFilter).toEqual([]);
});
diff --git a/apps/mobile/src/features/inbox/stores/inboxFilterStore.ts b/apps/mobile/src/features/inbox/stores/inboxFilterStore.ts
index e777738bf..ea363b4e4 100644
--- a/apps/mobile/src/features/inbox/stores/inboxFilterStore.ts
+++ b/apps/mobile/src/features/inbox/stores/inboxFilterStore.ts
@@ -21,7 +21,8 @@ export type SourceProduct =
| "github"
| "linear"
| "zendesk"
- | "conversations";
+ | "conversations"
+ | "signals_scout";
export const DEFAULT_STATUS_FILTER: SignalReportStatus[] = [
"ready",