Skip to content

Commit b75b153

Browse files
authored
feat(mobile): add "Any" option to inbox Source and Priority filters (port #3493) (#3595)
1 parent 2cf7ede commit b75b153

3 files changed

Lines changed: 31 additions & 0 deletions

File tree

apps/mobile/src/features/inbox/components/FilterSheet.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,12 @@ export function FilterSheet({ visible, onClose }: FilterSheetProps) {
126126
const toggleStatus = useInboxFilterStore((s) => s.toggleStatus);
127127
const sourceProductFilter = useInboxFilterStore((s) => s.sourceProductFilter);
128128
const toggleSourceProduct = useInboxFilterStore((s) => s.toggleSourceProduct);
129+
const clearSourceProductFilter = useInboxFilterStore(
130+
(s) => s.clearSourceProductFilter,
131+
);
129132
const priorityFilter = useInboxFilterStore((s) => s.priorityFilter);
130133
const togglePriority = useInboxFilterStore((s) => s.togglePriority);
134+
const setPriorityFilter = useInboxFilterStore((s) => s.setPriorityFilter);
131135
const resetFilters = useInboxFilterStore((s) => s.resetFilters);
132136

133137
const hasActiveFilters =
@@ -213,6 +217,11 @@ export function FilterSheet({ visible, onClose }: FilterSheetProps) {
213217
{/* Priority */}
214218
<SectionHeader title="Priority" />
215219
<View className="mb-5">
220+
<OptionRow
221+
label="Any"
222+
selected={priorityFilter.length === 0}
223+
onPress={() => setPriorityFilter([])}
224+
/>
216225
{FILTERABLE_PRIORITIES.map((priority) => (
217226
<OptionRow
218227
key={priority}
@@ -232,6 +241,11 @@ export function FilterSheet({ visible, onClose }: FilterSheetProps) {
232241
{/* Source */}
233242
<SectionHeader title="Source" />
234243
<View className="mb-5">
244+
<OptionRow
245+
label="Any"
246+
selected={sourceProductFilter.length === 0}
247+
onPress={clearSourceProductFilter}
248+
/>
235249
{SOURCE_PRODUCT_OPTIONS.map((option) => (
236250
<OptionRow
237251
key={option.value}

apps/mobile/src/features/inbox/stores/inboxFilterStore.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,21 @@ describe("inboxFilterStore", () => {
2929
expect(useInboxFilterStore.getState().sourceProductFilter).toEqual([]);
3030
},
3131
);
32+
33+
it("clears the source filter", () => {
34+
const { toggleSourceProduct, clearSourceProductFilter } =
35+
useInboxFilterStore.getState();
36+
37+
toggleSourceProduct("github");
38+
toggleSourceProduct("linear");
39+
expect(useInboxFilterStore.getState().sourceProductFilter).toEqual([
40+
"github",
41+
"linear",
42+
]);
43+
44+
clearSourceProductFilter();
45+
expect(useInboxFilterStore.getState().sourceProductFilter).toEqual([]);
46+
});
3247
});
3348

3449
const INITIAL_STATE = useInboxFilterStore.getState();

apps/mobile/src/features/inbox/stores/inboxFilterStore.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ interface InboxFilterActions {
4747
setStatusFilter: (statuses: SignalReportStatus[]) => void;
4848
toggleStatus: (status: SignalReportStatus) => void;
4949
toggleSourceProduct: (source: SourceProduct) => void;
50+
clearSourceProductFilter: () => void;
5051
toggleSuggestedReviewer: (reviewerUuid: string) => void;
5152
setSuggestedReviewerFilter: (reviewerUuids: string[]) => void;
5253
togglePriority: (priority: SignalReportPriority) => void;
@@ -85,6 +86,7 @@ export const useInboxFilterStore = create<InboxFilterStore>()(
8586
: [...current, source];
8687
return { sourceProductFilter: next };
8788
}),
89+
clearSourceProductFilter: () => set({ sourceProductFilter: [] }),
8890
toggleSuggestedReviewer: (reviewerUuid) =>
8991
set((state) => {
9092
const current = state.suggestedReviewerFilter;

0 commit comments

Comments
 (0)