From 690f3dd2cb62df857562d54ec779b381112b7f54 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sun, 28 Jun 2026 10:30:56 -0400 Subject: [PATCH] feat(filter): review request type (user or team) Signed-off-by: Adam Setch --- .../filters/ReviewRequestTypeFilter.test.tsx | 14 ++ .../filters/ReviewRequestTypeFilter.tsx | 24 +++ .../ReviewRequestTypeFilter.test.tsx.snap | 195 ++++++++++++++++++ src/renderer/routes/Filters.tsx | 2 + .../__snapshots__/Filters.test.tsx.snap | 193 ++++++++++++++++- src/renderer/stores/defaults.ts | 1 + src/renderer/stores/types.ts | 6 + src/renderer/stores/useFiltersStore.ts | 3 +- src/renderer/types.ts | 4 + .../forges/github/__mocks__/response-mocks.ts | 3 + .../github/graphql/generated/graphql.ts | 60 +++++- .../utils/forges/github/graphql/pull.graphql | 13 ++ .../github/handlers/pullRequest.test.ts | 100 ++++++++- .../forges/github/handlers/pullRequest.ts | 35 ++++ .../utils/notifications/filters/filter.ts | 15 ++ .../utils/notifications/filters/index.ts | 1 + .../filters/reviewRequestType.test.ts | 123 +++++++++++ .../filters/reviewRequestType.ts | 52 +++++ 18 files changed, 836 insertions(+), 8 deletions(-) create mode 100644 src/renderer/components/filters/ReviewRequestTypeFilter.test.tsx create mode 100644 src/renderer/components/filters/ReviewRequestTypeFilter.tsx create mode 100644 src/renderer/components/filters/__snapshots__/ReviewRequestTypeFilter.test.tsx.snap create mode 100644 src/renderer/utils/notifications/filters/reviewRequestType.test.ts create mode 100644 src/renderer/utils/notifications/filters/reviewRequestType.ts diff --git a/src/renderer/components/filters/ReviewRequestTypeFilter.test.tsx b/src/renderer/components/filters/ReviewRequestTypeFilter.test.tsx new file mode 100644 index 000000000..397458c71 --- /dev/null +++ b/src/renderer/components/filters/ReviewRequestTypeFilter.test.tsx @@ -0,0 +1,14 @@ +import { renderWithProviders } from '../../__helpers__/test-utils'; +import { mockMultipleAccountNotifications } from '../../__mocks__/notifications-mocks'; + +import { ReviewRequestTypeFilter } from './ReviewRequestTypeFilter'; + +describe('renderer/components/filters/ReviewRequestTypeFilter.tsx', () => { + it('should render itself & its children', () => { + const tree = renderWithProviders(, { + notifications: mockMultipleAccountNotifications, + }); + + expect(tree.container).toMatchSnapshot(); + }); +}); diff --git a/src/renderer/components/filters/ReviewRequestTypeFilter.tsx b/src/renderer/components/filters/ReviewRequestTypeFilter.tsx new file mode 100644 index 000000000..0cae52ea3 --- /dev/null +++ b/src/renderer/components/filters/ReviewRequestTypeFilter.tsx @@ -0,0 +1,24 @@ +import type { FC } from 'react'; + +import { GitPullRequestIcon } from '@primer/octicons-react'; +import { Text } from '@primer/react'; + +import { reviewRequestTypeFilter } from '../../utils/notifications/filters'; +import { FilterSection } from './FilterSection'; + +export const ReviewRequestTypeFilter: FC = () => { + return ( + + Filter review requests by whether you were directly requested or requested via a team. + + } + /> + ); +}; diff --git a/src/renderer/components/filters/__snapshots__/ReviewRequestTypeFilter.test.tsx.snap b/src/renderer/components/filters/__snapshots__/ReviewRequestTypeFilter.test.tsx.snap new file mode 100644 index 000000000..f4c4e5743 --- /dev/null +++ b/src/renderer/components/filters/__snapshots__/ReviewRequestTypeFilter.test.tsx.snap @@ -0,0 +1,195 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`renderer/components/filters/ReviewRequestTypeFilter.tsx > should render itself & its children 1`] = ` +
+
+ +
+
+ +

+ Review Request Type +

+ +
+
+
+
+
+ + + + + 0 + +
+
+ + + + + 0 + +
+
+
+
+`; diff --git a/src/renderer/routes/Filters.tsx b/src/renderer/routes/Filters.tsx index 62cdea983..59c3600b0 100644 --- a/src/renderer/routes/Filters.tsx +++ b/src/renderer/routes/Filters.tsx @@ -8,6 +8,7 @@ import { useFiltersStore } from '../stores'; import { AccountFilter } from '../components/filters/AccountFilter'; import { ReasonFilter } from '../components/filters/ReasonFilter'; +import { ReviewRequestTypeFilter } from '../components/filters/ReviewRequestTypeFilter'; import { SearchFilter } from '../components/filters/SearchFilter'; import { StateFilter } from '../components/filters/StateFilter'; import { SubjectTypeFilter } from '../components/filters/SubjectTypeFilter'; @@ -36,6 +37,7 @@ export const FiltersRoute: FC = () => { + diff --git a/src/renderer/routes/__snapshots__/Filters.test.tsx.snap b/src/renderer/routes/__snapshots__/Filters.test.tsx.snap index f43a0d143..40a0ecba0 100644 --- a/src/renderer/routes/__snapshots__/Filters.test.tsx.snap +++ b/src/renderer/routes/__snapshots__/Filters.test.tsx.snap @@ -1336,6 +1336,195 @@ exports[`renderer/routes/Filters.tsx > General > should render itself & its chil +
+ +
+
+ +

+ Review Request Type +

+ +
+
+
+
+
+ + + + + 0 + +
+
+ + + + + 0 + +
+
+
@@ -2241,7 +2430,7 @@ exports[`renderer/routes/Filters.tsx > General > should render itself & its chil data-wrap="nowrap" >