diff --git a/src/views/conflicts-resolution/component.tsx b/src/views/conflicts-resolution/component.tsx index fca0198..c65a980 100644 --- a/src/views/conflicts-resolution/component.tsx +++ b/src/views/conflicts-resolution/component.tsx @@ -28,6 +28,7 @@ interface DiffViewProps { newText: string; onOldTextChange: (content: string) => void; onNewTextChange: (content: string) => void; + onConflictResolved: () => void; } const DiffView: React.FC = ({ @@ -35,6 +36,7 @@ const DiffView: React.FC = ({ newText, onOldTextChange, onNewTextChange, + onConflictResolved, }) => { // We need to know the line height to correctly draw the ribbon between the left // and right editor in the actions gutter @@ -72,6 +74,23 @@ const DiffView: React.FC = ({ />
+ {diffs.length === 0 && ( + + )} + { 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 + setFiles(files.filter((_, index) => index !== currentFileIndex)); + // Keep track of the resolved conflicts + setResolvedConflicts([ + ...resolvedConflicts, + { + filename: currentFile!.filename, + // We could get either the local or remote content at this point since + // they're identical + content: currentFile!.localContent, + }, + ]); + // Select the previous file only if we're not already at the start + if (currentFileIndex > 0) { + setCurrentFileIndex(currentFileIndex - 1); + } + if (files.length === 0) { + // We solved all conflicts, we can resume syncing + this.onResolve(resolvedConflicts); + } + }; + return (
- f.filename)} - currentFile={currentFile?.filename || ""} - setCurrentFileIndex={setCurrentFileIndex} - /> - { - const tempFiles = [...files]; - tempFiles[currentFileIndex].remoteContent = content; - setFiles(tempFiles); - }} - onNewTextChange={(content: string) => { - const tempFiles = [...files]; - tempFiles[currentFileIndex].localContent = content; - setFiles(tempFiles); - }} - /> + {files.length === 0 ? ( +
+
+ No conflicts to resolve +
+
+ That's good, keep going +
+
+ ) : ( + <> + f.filename)} + currentFile={currentFile?.filename || ""} + setCurrentFileIndex={setCurrentFileIndex} + /> + { + const tempFiles = [...files]; + tempFiles[currentFileIndex].remoteContent = content; + setFiles(tempFiles); + }} + onNewTextChange={(content: string) => { + const tempFiles = [...files]; + tempFiles[currentFileIndex].localContent = content; + setFiles(tempFiles); + }} + onConflictResolved={onConflictResolved} + /> + + )}
);