Skip to content

Commit 3e75d53

Browse files
committed
refactor(code-review): move comment filter to settings
Generated-By: PostHog Code Task-Id: 199c1147-fca6-415b-9ea1-00a45d9b7267
1 parent fe1d05f commit 3e75d53

3 files changed

Lines changed: 73 additions & 72 deletions

File tree

packages/ui/src/features/code-review/components/DiffSettingsMenu.tsx

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,31 @@ import {
44
DropdownMenu,
55
DropdownMenuContent,
66
DropdownMenuItem,
7+
DropdownMenuRadioGroup,
8+
DropdownMenuRadioItem,
79
DropdownMenuSeparator,
10+
DropdownMenuSub,
11+
DropdownMenuSubContent,
12+
DropdownMenuSubTrigger,
813
DropdownMenuTrigger,
914
} from "@posthog/quill";
1015
import { useDiffViewerStore } from "@posthog/ui/features/code-editor/diffViewerStore";
1116

12-
export function DiffSettingsMenu() {
17+
export type CommentFileFilter = "none" | "commented" | "unresolved";
18+
19+
interface DiffSettingsMenuProps {
20+
commentedFileCount: number;
21+
unresolvedCommentedFileCount: number;
22+
commentFilter: CommentFileFilter;
23+
onCommentFilterChange?: (filter: CommentFileFilter) => void;
24+
}
25+
26+
export function DiffSettingsMenu({
27+
commentedFileCount,
28+
unresolvedCommentedFileCount,
29+
commentFilter,
30+
onCommentFilterChange,
31+
}: DiffSettingsMenuProps) {
1332
const wordWrap = useDiffViewerStore((s) => s.wordWrap);
1433
const toggleWordWrap = useDiffViewerStore((s) => s.toggleWordWrap);
1534
const wordDiffs = useDiffViewerStore((s) => s.wordDiffs);
@@ -31,7 +50,12 @@ export function DiffSettingsMenu() {
3150
render={
3251
<Button
3352
size="icon-sm"
34-
aria-label="Diff settings"
53+
variant={commentFilter === "none" ? "default" : "primary"}
54+
aria-label={
55+
commentFilter === "none"
56+
? "Diff settings"
57+
: `Diff settings, ${commentFilter} comment filter active`
58+
}
3559
className="rounded-xs"
3660
>
3761
<DotsThree size={16} weight="bold" />
@@ -57,6 +81,43 @@ export function DiffSettingsMenu() {
5781
<DropdownMenuItem onClick={toggleShowReviewComments}>
5882
{showReviewComments ? "Hide review comments" : "Show review comments"}
5983
</DropdownMenuItem>
84+
{onCommentFilterChange && (
85+
<DropdownMenuSub>
86+
<DropdownMenuSubTrigger>
87+
Comment filter
88+
{commentFilter === "commented"
89+
? " · All"
90+
: commentFilter === "unresolved"
91+
? " · Unresolved"
92+
: ""}
93+
</DropdownMenuSubTrigger>
94+
<DropdownMenuSubContent side="right" sideOffset={4}>
95+
<DropdownMenuRadioGroup
96+
value={commentFilter === "none" ? "" : commentFilter}
97+
onValueChange={(value) =>
98+
onCommentFilterChange(value as CommentFileFilter)
99+
}
100+
>
101+
<DropdownMenuRadioItem value="commented">
102+
All comments ({commentedFileCount})
103+
</DropdownMenuRadioItem>
104+
<DropdownMenuRadioItem value="unresolved">
105+
Unresolved comments ({unresolvedCommentedFileCount})
106+
</DropdownMenuRadioItem>
107+
</DropdownMenuRadioGroup>
108+
{commentFilter !== "none" && (
109+
<>
110+
<DropdownMenuSeparator />
111+
<DropdownMenuItem
112+
onClick={() => onCommentFilterChange("none")}
113+
>
114+
Clear comment filter
115+
</DropdownMenuItem>
116+
</>
117+
)}
118+
</DropdownMenuSubContent>
119+
</DropdownMenuSub>
120+
)}
60121
</DropdownMenuContent>
61122
</DropdownMenu>
62123
);

packages/ui/src/features/code-review/components/ReviewShell.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ import {
3131
} from "../reviewShellParts";
3232
import { ReviewViewedContext } from "../reviewViewedContext";
3333
import { useReviewViewedStore } from "../reviewViewedStore";
34+
import type { CommentFileFilter } from "./DiffSettingsMenu";
3435
import { PendingReviewBar } from "./PendingReviewBar";
35-
import { type CommentFileFilter, ReviewToolbar } from "./ReviewToolbar";
36+
import { ReviewToolbar } from "./ReviewToolbar";
3637

3738
// Pure helpers, hooks, types, and presentational sub-components live in
3839
// ../reviewShellParts. Re-exported here so consumers can import everything

packages/ui/src/features/code-review/components/ReviewToolbar.tsx

Lines changed: 8 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,12 @@
11
import {
22
ArrowCounterClockwise,
33
ArrowsClockwise,
4-
CaretDown,
5-
ChatCircle,
64
Columns,
75
Rows,
86
X,
97
} from "@phosphor-icons/react";
108
import type { ResolvedDiffSource } from "@posthog/core/code-review/resolveDiffSource";
11-
import {
12-
Button,
13-
DropdownMenu,
14-
DropdownMenuContent,
15-
DropdownMenuItem,
16-
DropdownMenuRadioGroup,
17-
DropdownMenuRadioItem,
18-
DropdownMenuSeparator,
19-
DropdownMenuTrigger,
20-
MenuLabel,
21-
} from "@posthog/quill";
9+
import { Button } from "@posthog/quill";
2210
import { useDiffViewerStore } from "@posthog/ui/features/code-editor/diffViewerStore";
2311
import {
2412
type ReviewMode,
@@ -28,7 +16,7 @@ import { Tooltip } from "@posthog/ui/primitives/Tooltip";
2816
import { Flex, Separator, Text } from "@radix-ui/themes";
2917
import { FoldVertical, Maximize, Minimize, UnfoldVertical } from "lucide-react";
3018
import { memo } from "react";
31-
import { DiffSettingsMenu } from "./DiffSettingsMenu";
19+
import { type CommentFileFilter, DiffSettingsMenu } from "./DiffSettingsMenu";
3220
import { DiffSourceSelector } from "./DiffSourceSelector";
3321

3422
interface ReviewToolbarProps {
@@ -52,8 +40,6 @@ interface ReviewToolbarProps {
5240
defaultBranch?: string | null;
5341
}
5442

55-
export type CommentFileFilter = "none" | "commented" | "unresolved";
56-
5743
function formatFileCount(count: number, suffix: string): string {
5844
const noun = count === 1 ? "file" : "files";
5945
return `${count} ${noun} ${suffix}`;
@@ -139,58 +125,6 @@ export const ReviewToolbar = memo(function ReviewToolbar({
139125
</Flex>
140126

141127
<Flex align="center" gap="1" ml="auto">
142-
{onCommentFilterChange && (
143-
<DropdownMenu>
144-
<DropdownMenuTrigger
145-
render={
146-
<Button
147-
size="sm"
148-
variant={commentFilter === "none" ? "default" : "primary"}
149-
aria-label="Filter files by review comments"
150-
className="rounded-xs"
151-
>
152-
<ChatCircle
153-
size={14}
154-
weight={commentFilter === "none" ? "regular" : "fill"}
155-
/>
156-
<CaretDown size={10} weight="bold" />
157-
</Button>
158-
}
159-
/>
160-
<DropdownMenuContent
161-
align="end"
162-
side="bottom"
163-
sideOffset={6}
164-
className="min-w-[220px]"
165-
>
166-
<MenuLabel>Comment filter</MenuLabel>
167-
<DropdownMenuRadioGroup
168-
value={commentFilter === "none" ? "" : commentFilter}
169-
onValueChange={(value) =>
170-
onCommentFilterChange(value as CommentFileFilter)
171-
}
172-
>
173-
<DropdownMenuRadioItem value="commented">
174-
All comments ({commentedFileCount})
175-
</DropdownMenuRadioItem>
176-
<DropdownMenuRadioItem value="unresolved">
177-
Unresolved comments ({unresolvedCommentedFileCount})
178-
</DropdownMenuRadioItem>
179-
</DropdownMenuRadioGroup>
180-
{commentFilter !== "none" && (
181-
<>
182-
<DropdownMenuSeparator />
183-
<DropdownMenuItem
184-
onClick={() => onCommentFilterChange("none")}
185-
>
186-
Clear comment filter
187-
</DropdownMenuItem>
188-
</>
189-
)}
190-
</DropdownMenuContent>
191-
</DropdownMenu>
192-
)}
193-
194128
{onRefresh && (
195129
<Tooltip content="Refresh diff">
196130
<Button size="icon-sm" onClick={onRefresh} className="rounded-xs">
@@ -256,7 +190,12 @@ export const ReviewToolbar = memo(function ReviewToolbar({
256190

257191
<Separator orientation="vertical" size="1" />
258192

259-
<DiffSettingsMenu />
193+
<DiffSettingsMenu
194+
commentedFileCount={commentedFileCount}
195+
unresolvedCommentedFileCount={unresolvedCommentedFileCount}
196+
commentFilter={commentFilter}
197+
onCommentFilterChange={onCommentFilterChange}
198+
/>
260199

261200
<Tooltip content="Close review">
262201
<Button size="icon-sm" onClick={handleClose} className="rounded-xs">

0 commit comments

Comments
 (0)