import React, { useEffect } from 'react' import { Container, Layout, Text } from '@harness/uicore' import { Diff2HtmlUI } from 'diff2html/lib-esm/ui/js/diff2html-ui' import * as Diff2Html from 'diff2html' import { get } from 'lodash-es' import type { TypesPullReqActivity } from 'services/code' import type { CommentItem } from 'components/CommentBox/CommentBox' import { DIFF2HTML_CONFIG, ViewStyle } from 'components/DiffViewer/DiffViewerUtils' import { isCodeComment } from '../PullRequestUtils' import css from './Conversation.module.scss' interface CodeCommentHeaderProps { commentItems: CommentItem[] threadId: number | undefined } export const CodeCommentHeader: React.FC = ({ commentItems, threadId }) => { const _isCodeComment = isCodeComment(commentItems) const id = `code-comment-snapshot-${threadId}` useEffect(() => { if (_isCodeComment) { // Note: Since payload does not have information about the file path, mode, and index, and we // don't render them anyway in the UI, we just use dummy info for them. const codeDiffSnapshot = [ `diff --git a/src b/dest`, `new file mode 100644`, 'index 0000000..0000000', '--- a/src', '+++ b/dest', get(commentItems[0], 'payload.payload.title', ''), ...get(commentItems[0], 'payload.payload.lines', []) ].join('\n') new Diff2HtmlUI( document.getElementById(id) as HTMLElement, Diff2Html.parse(codeDiffSnapshot, DIFF2HTML_CONFIG), Object.assign({}, DIFF2HTML_CONFIG, { outputFormat: ViewStyle.LINE_BY_LINE }) ).draw() } }, [id, commentItems, _isCodeComment, threadId]) return _isCodeComment ? ( {commentItems[0].payload?.code_comment?.path} ) : null }