& {
resolvedPath: string;
onCopyDiff: () => void;
};
function DiffHeaderToolbarButtons({
resolvedPath,
onCopyDiff,
onRevert,
expandUnchanged,
onToggleExpandUnchanged,
wordWrap,
onToggleWordWrap,
viewMode,
onToggleViewMode,
onOpenFile,
}: ToolbarButtonsProps) {
return (
{onRevert && (
onRevert(resolvedPath)} tooltip="Revert changes">
)}
{onToggleExpandUnchanged && (
{expandUnchanged ? (
) : (
)}
)}
{viewMode === "split" ? (
) : (
)}
{onOpenFile && (
onOpenFile(resolvedPath)} tooltip="Edit">
)}
);
}
export function useDiffHeaderToolbar(opts: DiffHeaderToolbarOptions) {
const {
filePath,
diff,
wordWrap,
onToggleWordWrap,
viewMode,
onToggleViewMode,
onOpenFile,
onRevert,
expandUnchanged,
onToggleExpandUnchanged,
} = opts;
return useCallback(
(props: RenderHeaderMetadataProps): ReactNode => {
const resolvedPath = props.fileDiff?.name || filePath;
return (
navigator.clipboard.writeText(diff || "")}
wordWrap={wordWrap}
onToggleWordWrap={onToggleWordWrap}
viewMode={viewMode}
onToggleViewMode={onToggleViewMode}
onOpenFile={onOpenFile}
onRevert={onRevert}
expandUnchanged={expandUnchanged}
onToggleExpandUnchanged={onToggleExpandUnchanged}
/>
);
},
[
filePath,
diff,
wordWrap,
onToggleWordWrap,
viewMode,
onToggleViewMode,
onOpenFile,
onRevert,
expandUnchanged,
onToggleExpandUnchanged,
],
);
}