'use client' import { useEffect, useRef, useState } from 'react' import { parsePatchFiles } from '@pierre/diffs' interface Props { patch: string } export function CommitDiffView({ patch }: Props) { const [diffStyle, setDiffStyle] = useState<'split' | 'unified'>('split') if (!patch) { return

No changes in this commit.

} const parsed = parsePatchFiles(patch) const files = parsed.flatMap((p) => p.files) return (
{files.length} file{files.length !== 1 ? 's' : ''} changed
{files.map((fileDiff, i) => ( ))}
) } function DiffFileRenderer({ fileDiff, diffStyle, }: { fileDiff: any diffStyle: 'split' | 'unified' }) { const containerRef = useRef(null) const instanceRef = useRef(null) useEffect(() => { let mounted = true async function render() { const { FileDiff } = await import('@pierre/diffs') if (!mounted || !containerRef.current) return if (instanceRef.current) { instanceRef.current.cleanUp() } const instance = new FileDiff({ theme: 'pierre-dark', diffStyle, diffIndicators: 'bars', hunkSeparators: 'line-info', overflow: 'scroll', }) instance.render({ fileDiff, containerWrapper: containerRef.current, }) instanceRef.current = instance } render() return () => { mounted = false if (instanceRef.current) { instanceRef.current.cleanUp() instanceRef.current = null } } }, [fileDiff, diffStyle]) return (
) }