, "filePath" | "size">;
externalLinkSize: "xs" | "touch";
};
function DiffHeaderToolbarButtons({
resolvedPath,
onCopyDiff,
onRevert,
expandUnchanged,
onToggleExpandUnchanged,
wordWrap,
onToggleWordWrap,
viewMode,
onToggleViewMode,
onOpenFile,
onPreviewMarkdown,
repo,
isMarkdownFile,
externalLink,
externalLinkSize,
}: ToolbarButtonsProps) {
return (
{onRevert && (
onRevert(resolvedPath)} tooltip="Revert changes">
)}
{onToggleExpandUnchanged && (
{expandUnchanged ? (
) : (
)}
)}
{viewMode === "split" ? (
) : (
)}
{isMarkdownFile && onPreviewMarkdown && (
onPreviewMarkdown(resolvedPath)}
tooltip="Preview markdown"
className={iconBtn}
>
)}
{onOpenFile && (
onOpenFile(resolvedPath, repo)} tooltip="Edit">
)}
);
}
function checkIsMarkdown(filePath: string): boolean {
const ext = filePath.split(".").pop()?.toLowerCase();
return ext === "md" || ext === "mdx";
}
export function useDiffHeaderToolbar(opts: DiffHeaderToolbarOptions) {
const {
filePath,
diff,
wordWrap,
onToggleWordWrap,
viewMode,
onToggleViewMode,
onOpenFile,
onPreviewMarkdown,
onRevert,
repo,
expandUnchanged,
onToggleExpandUnchanged,
taskId,
sessionId,
repositoryId,
status,
previousPath,
publishedBranch,
baseBranch,
} = opts;
const { isMobile } = useResponsiveBreakpoint();
return useCallback(
(fileDiff: FileDiffMetadata): ReactNode => {
const resolvedPath = fileDiff?.name || filePath;
return (
void copyToClipboard(diff || "")}
wordWrap={wordWrap}
onToggleWordWrap={onToggleWordWrap}
viewMode={viewMode}
onToggleViewMode={onToggleViewMode}
onOpenFile={onOpenFile}
onPreviewMarkdown={onPreviewMarkdown}
onRevert={onRevert}
repo={repo}
expandUnchanged={expandUnchanged}
onToggleExpandUnchanged={onToggleExpandUnchanged}
externalLink={{
taskId,
sessionId,
repositoryId,
repositoryName: repo,
status,
publishedBranch,
baseBranch,
previousPath: fileDiff.prevName ?? previousPath,
}}
externalLinkSize={isMobile ? "touch" : "xs"}
/>
);
},
[
filePath,
diff,
wordWrap,
onToggleWordWrap,
viewMode,
onToggleViewMode,
onOpenFile,
onPreviewMarkdown,
onRevert,
repo,
expandUnchanged,
onToggleExpandUnchanged,
taskId,
sessionId,
repositoryId,
status,
previousPath,
publishedBranch,
baseBranch,
isMobile,
],
);
}