diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx index 6d70353b74b..d579ae60e1e 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx @@ -19,7 +19,7 @@ import { Skeleton } from "@superset/ui/skeleton"; import { toast } from "@superset/ui/sonner"; import { Tooltip, TooltipContent, TooltipTrigger } from "@superset/ui/tooltip"; import { cn } from "@superset/ui/utils"; -import { memo, useCallback, useEffect, useRef, useState } from "react"; +import { useCallback, useEffect, useRef, useState } from "react"; import { LuArrowUpRight, LuCheck, @@ -33,18 +33,13 @@ import { LuX, } from "react-icons/lu"; import { VscChevronRight } from "react-icons/vsc"; -import ReactMarkdown from "react-markdown"; -import rehypeRaw from "rehype-raw"; -import rehypeSanitize from "rehype-sanitize"; -import remarkGfm from "remark-gfm"; -import { remarkAlert } from "remark-github-blockquote-alert"; -import { CodeBlock } from "renderer/components/MarkdownRenderer/components/CodeBlock"; import { electronTrpc } from "renderer/lib/electron-trpc"; import { showGitConfirmDialog } from "renderer/lib/git/gitConfirmDialog"; import { PRIcon } from "renderer/screens/main/components/PRIcon"; import { useWorkspaceId } from "renderer/screens/main/components/WorkspaceView/WorkspaceIdContext"; import { useTabsStore } from "renderer/stores/tabs"; import { CheckSteps } from "./components/CheckSteps"; +import { CommentBody } from "./components/CommentBody"; import { ReplyDialog } from "./components/ReplyDialog"; import { ALL_COMMENTS_COPY_ACTION_KEY, @@ -60,45 +55,8 @@ import { resolveCheckDestinationUrl, reviewDecisionConfig, splitPullRequestComments, - stripHtmlComments, } from "./utils"; -const CommentBody = memo(function CommentBody({ - body, - onOpenUrl, -}: { - body: string; - onOpenUrl: (url: string, e: React.MouseEvent) => void; -}) { - return ( - - href ? ( - onOpenUrl(href, e)} - > - {children} - - ) : ( - {children} - ), - code: ({ className, children, node }) => ( - - {children} - - ), - }} - > - {stripHtmlComments(body)} - - ); -}); - function buildIdentitySummary(items: string[]): string { if (items.length === 0) { return "None"; @@ -1464,6 +1422,7 @@ export function ReviewPanel({ onOpenChange={handleReplyDialogOpenChange} onSubmit={handleSubmitReply} isSubmitting={isReplySubmitting} + onOpenUrl={handleOpenUrl} /> ); diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/CommentBody/CommentBody.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/CommentBody/CommentBody.tsx new file mode 100644 index 00000000000..34ab2e8be8b --- /dev/null +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/CommentBody/CommentBody.tsx @@ -0,0 +1,46 @@ +import { memo } from "react"; +import ReactMarkdown from "react-markdown"; +import rehypeRaw from "rehype-raw"; +import rehypeSanitize from "rehype-sanitize"; +import remarkGfm from "remark-gfm"; +import { remarkAlert } from "remark-github-blockquote-alert"; +import { CodeBlock } from "renderer/components/MarkdownRenderer/components/CodeBlock"; +import { stripHtmlComments } from "../../utils"; + +interface CommentBodyProps { + body: string; + onOpenUrl?: (url: string, e: React.MouseEvent) => void; +} + +export const CommentBody = memo(function CommentBody({ + body, + onOpenUrl, +}: CommentBodyProps) { + return ( + + href ? ( + onOpenUrl?.(href, e)} + > + {children} + + ) : ( + {children} + ), + code: ({ className, children, node }) => ( + + {children} + + ), + }} + > + {stripHtmlComments(body)} + + ); +}); diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/CommentBody/index.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/CommentBody/index.ts new file mode 100644 index 00000000000..191d4356a14 --- /dev/null +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/CommentBody/index.ts @@ -0,0 +1 @@ +export { CommentBody } from "./CommentBody"; diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/ReplyDialog/ReplyDialog.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/ReplyDialog/ReplyDialog.tsx index 2144ee6c6b9..e3e9876d4a1 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/ReplyDialog/ReplyDialog.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/components/ReplyDialog/ReplyDialog.tsx @@ -12,7 +12,8 @@ import { import { Textarea } from "@superset/ui/textarea"; import { useEffect, useRef, useState } from "react"; import { LuLoaderCircle } from "react-icons/lu"; -import { getCommentAvatarFallback, getCommentPreviewText } from "../../utils"; +import { getCommentAvatarFallback } from "../../utils"; +import { CommentBody } from "../CommentBody"; interface ReplyDialogProps { comment: PullRequestComment | null; @@ -20,6 +21,7 @@ interface ReplyDialogProps { onOpenChange: (open: boolean) => void; onSubmit: (body: string) => Promise | void; isSubmitting: boolean; + onOpenUrl?: (url: string, e: React.MouseEvent) => void; } export function ReplyDialog({ @@ -28,6 +30,7 @@ export function ReplyDialog({ onOpenChange, onSubmit, isSubmitting, + onOpenUrl, }: ReplyDialogProps) { const [body, setBody] = useState(""); const inFlightRef = useRef(false); @@ -87,7 +90,7 @@ export function ReplyDialog({ -
+
{comment.avatarUrl ? ( @@ -110,9 +113,9 @@ export function ReplyDialog({ ) : null}
-

- {getCommentPreviewText(comment.body)} -

+
+ +