From 72a7a7ed622b63a07d999c276157060427fb6119 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Sat, 22 Feb 2025 17:43:45 +0100 Subject: [PATCH] Rework some stuff --- .../conflicts-resolution/files-tab-bar.tsx | 29 +++++------- src/views/conflicts-resolution/view.tsx | 46 +++++++++++++------ 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/views/conflicts-resolution/files-tab-bar.tsx b/src/views/conflicts-resolution/files-tab-bar.tsx index 18230fc..45964ea 100644 --- a/src/views/conflicts-resolution/files-tab-bar.tsx +++ b/src/views/conflicts-resolution/files-tab-bar.tsx @@ -3,30 +3,23 @@ import * as React from "react"; interface FilesTabBarProps { files: string[]; - onTabChange: (filename: string) => void; + currentFile: string; + setCurrentFileIndex: (index: number) => void; } -const FilesTabBar: React.FC = ({ files, onTabChange }) => { - const [currentFile, setCurrentFile] = React.useState( - files.at(0) || "", - ); - - const onTabClick = (filename: string) => { - if (filename === currentFile) { - return; - } - setCurrentFile(filename); - onTabChange(filename); - }; - - const createTab = (filename: string) => { +const FilesTabBar: React.FC = ({ + files, + currentFile, + setCurrentFileIndex: setCurrentFile, +}) => { + const createTab = (filename: string, index: number) => { return (
onTabClick(filename)} + onClick={() => setCurrentFile(index)} >
{filename}
@@ -78,9 +71,9 @@ const FilesTabBar: React.FC = ({ files, onTabChange }) => { }} onClick={() => { const menu = new Menu(); - files.forEach((filename: string) => { + files.forEach((filename: string, index: number) => { menu.addItem((item) => { - item.setTitle(filename).onClick(() => onTabClick(filename)); + item.setTitle(filename).onClick(() => setCurrentFile(index)); }); }); // We use the divRef to force the position to be relative to this div. We want the position diff --git a/src/views/conflicts-resolution/view.tsx b/src/views/conflicts-resolution/view.tsx index 821fa02..2fba7bf 100644 --- a/src/views/conflicts-resolution/view.tsx +++ b/src/views/conflicts-resolution/view.tsx @@ -70,6 +70,12 @@ Final line asdfasdf`; +interface ConflictFile { + filename: string; + remoteContent: string; + localContent: string; +} + export class ConflictsResolutionView extends ItemView { icon: IconName = "merge"; @@ -93,11 +99,16 @@ export class ConflictsResolutionView extends ItemView { container.empty(); // We don't want any padding, the DiffView component will handle that (container as HTMLElement).style.padding = "0"; + const files: ConflictFile[] = [ + { filename: "this", remoteContent: oldText1, localContent: newText1 }, + { filename: "that", remoteContent: oldText2, localContent: newText2 }, + { filename: "those", remoteContent: oldText3, localContent: newText3 }, + ]; const root: Root = createRoot(container); - const App = () => { - const [oldText, setOldText] = React.useState(oldText3); - const [newText, setNewText] = React.useState(newText3); - + const App = ({ initialFiles }: { initialFiles: ConflictFile[] }) => { + const [files, setFiles] = React.useState(initialFiles); + const [currentFileIndex, setCurrentFileIndex] = React.useState(0); + const currentFile = files.at(currentFileIndex); return (
- console.log(`Clicked ${filename}`) - } + files={files.map((f) => f.filename)} + currentFile={currentFile?.filename || ""} + setCurrentFileIndex={setCurrentFileIndex} /> { + const tempFiles = [...files]; + tempFiles[currentFileIndex].remoteContent = content; + setFiles(tempFiles); + // currentFile.remoteContent = content; + }} + onNewTextChange={(content: string) => { + const tempFiles = [...files]; + tempFiles[currentFileIndex].localContent = content; + setFiles(tempFiles); + // currentFile.localContent = content; + }} />
); }; - root.render(); + root.render(); } async onClose() {