import * as React from "react"; import { ConflictFile, ConflictResolution } from "src/sync-manager"; import DiffView from "./diff-view"; import FilesTabBar from "./files-tab-bar"; const SplitView = ({ initialFiles, onResolveAllConflicts, }: { initialFiles: ConflictFile[]; onResolveAllConflicts: (resolutions: ConflictResolution[]) => void; }) => { const [files, setFiles] = React.useState(initialFiles); const [resolvedConflicts, setResolvedConflicts] = React.useState< ConflictResolution[] >([]); const [currentFileIndex, setCurrentFileIndex] = React.useState(0); const currentFile = files.at(currentFileIndex); const onConflictResolved = () => { // Remove the file from the conflicts to resolve const remainingFiles = files.filter( (_, index) => index !== currentFileIndex, ); setFiles(remainingFiles); // Keep track of the resolved conflicts const newResolvedConflicts = [ ...resolvedConflicts, { filePath: currentFile!.filePath, content: currentFile!.localContent, }, ]; setResolvedConflicts(newResolvedConflicts); // Select the previous file only if we're not already at the start if (currentFileIndex > 0) { setCurrentFileIndex(currentFileIndex - 1); } if (remainingFiles.length === 0) { // We solved all conflicts, we can resume syncing onResolveAllConflicts(newResolvedConflicts); } }; return (
{files.length === 0 ? (
No conflicts to resolve
That's good, keep going
) : ( <> f.filePath)} currentFile={currentFile?.filePath || ""} setCurrentFileIndex={setCurrentFileIndex} /> { const tempFiles = [...files]; tempFiles[currentFileIndex].remoteContent = content; setFiles(tempFiles); }} onLocalTextChange={(content: string) => { const tempFiles = [...files]; tempFiles[currentFileIndex].localContent = content; setFiles(tempFiles); }} onConflictResolved={onConflictResolved} /> )}
); }; export default SplitView;