import { useCallback } from "react"; import { SplitSide } from ".."; import { useDomWidth } from "../hooks/useDomWidth"; import { useDiffViewContext } from "./DiffViewContext"; import type { DiffFile } from "@git-diff-view/core"; const InternalDiffUnifiedExtendLine = ({ index, diffFile, lineNumber, enableWrap, oldLineExtend, newLineExtend, }: { index: number; diffFile: DiffFile; lineNumber: number; enableWrap: boolean; oldLineExtend: { data: any }; newLineExtend: { data: any }; }) => { const { useDiffContext } = useDiffViewContext(); const renderExtendLine = useDiffContext.useShallowStableSelector((s) => s.renderExtendLine); const unifiedItem = diffFile.getUnifiedLine(index); // TODO use css variable to get width const width = useDomWidth({ selector: ".unified-diff-table-wrapper", enable: typeof renderExtendLine === "function", }); if (!renderExtendLine) return null; return (
{(enableWrap ? true : width > 0) && oldLineExtend?.data !== undefined && oldLineExtend?.data !== null && renderExtendLine?.({ diffFile, side: SplitSide.old, lineNumber: unifiedItem.oldLineNumber ?? -1, data: oldLineExtend.data, onUpdate: diffFile.notifyAll, })} {(enableWrap ? true : width > 0) && newLineExtend?.data !== undefined && newLineExtend?.data !== null && renderExtendLine?.({ diffFile, side: SplitSide.new, lineNumber: unifiedItem.newLineNumber ?? -1, data: newLineExtend.data, onUpdate: diffFile.notifyAll, })}
); }; export const DiffUnifiedExtendLine = ({ index, diffFile, lineNumber, enableWrap, }: { index: number; diffFile: DiffFile; lineNumber: number; enableWrap: boolean; }) => { const { useDiffContext } = useDiffViewContext(); const unifiedItem = diffFile.getUnifiedLine(index); const { oldLineExtend, newLineExtend } = useDiffContext( useCallback( (s) => ({ oldLineExtend: s.extendData?.oldFile?.[unifiedItem?.oldLineNumber ?? -1], newLineExtend: s.extendData?.newFile?.[unifiedItem?.newLineNumber ?? -1], }), [unifiedItem.oldLineNumber, unifiedItem.newLineNumber] ) ); const hasExtend = oldLineExtend?.data || newLineExtend?.data; if (!hasExtend || !unifiedItem || unifiedItem.isHidden) return null; return ( ); };