This is an automated email from the ASF dual-hosted git repository.

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git

commit ce68f204caea6ead6e71703f08ace2ae13552a85
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Sun Aug 25 12:34:34 2024 -0400

    Fix #1376
---
 .../main/webui/src/project/files/DiffFileModal.tsx | 57 ++++++++++++++--------
 .../src/main/webui/src/project/files/FilesTab.tsx  |  5 +-
 .../main/webui/src/project/files/FilesToolbar.tsx  | 20 ++++++--
 3 files changed, 54 insertions(+), 28 deletions(-)

diff --git a/karavan-app/src/main/webui/src/project/files/DiffFileModal.tsx 
b/karavan-app/src/main/webui/src/project/files/DiffFileModal.tsx
index d05856e6..94f05099 100644
--- a/karavan-app/src/main/webui/src/project/files/DiffFileModal.tsx
+++ b/karavan-app/src/main/webui/src/project/files/DiffFileModal.tsx
@@ -18,8 +18,7 @@
 import React, {useEffect, useState} from 'react';
 import {
     Button,
-    Modal,
-    ModalVariant, Spinner
+    Modal, Spinner
 } from '@patternfly/react-core';
 import './DiffFileModal.css';
 import {useFileStore, useProjectStore} from "../../api/ProjectStore";
@@ -27,6 +26,8 @@ import {DiffEditor} from "@monaco-editor/react";
 import {KaravanApi} from "../../api/KaravanApi";
 import {ProjectFile} from "../../api/ProjectModels";
 import {shallow} from "zustand/shallow";
+import {EventBus} from "../../designer/utils/EventBus";
+import {ProjectService} from "../../api/ProjectService";
 
 const languages = new Map<string, string>([
     ['sh', 'shell'],
@@ -42,40 +43,56 @@ interface Props {
     id: string
 }
 
-export function DiffFileModal (prop: Props) {
+export function DiffFileModal(prop: Props) {
 
     const [project] = useProjectStore((s) => [s.project], shallow);
-    const {file, operation} = useFileStore();
-    const [fileCommited, setFileCommited] = useState<string>();
+    const {file, operation, setFile} = useFileStore();
+    const [fileCommited, setFileCommited] = useState<ProjectFile>();
 
     useEffect(() => {
         if (file && operation === 'diff') {
             KaravanApi.getFileCommited(project.projectId, file?.name, 
(fileCommited: ProjectFile) => {
-                setFileCommited(fileCommited.code);
+                setFileCommited(fileCommited);
             });
         }
     }, [project, file, operation]);
 
-    function closeModal () {
+    function closeModal() {
         useFileStore.setState({operation: "none"})
         setFileCommited(undefined)
     }
 
-    const isOpen= operation === "diff";
+    function undoChanges() {
+        if (fileCommited) {
+            KaravanApi.putProjectFile(fileCommited, result => {
+                if (result.status === 200) {
+                    EventBus.sendAlert( "Success", "File reverted", "success");
+                    ProjectService.refreshProjectData(project.projectId);
+                    useFileStore.setState({operation: "none"})
+                    setFileCommited(undefined)
+                }
+            })
+        }
+    }
+
+    const isOpen = operation === "diff";
     const extension = file?.name.split('.').pop();
     const language = extension && languages.has(extension) ? 
languages.get(extension) : extension;
     return (
-            <Modal
-                className='karavan-diff-modal'
-                title="Diff"
-                isOpen={isOpen}
-                onClose={() => closeModal()}
-                actions={[
-                    <Button key="confirm" variant="primary" onClick={e => 
closeModal()}>Close</Button>,
-                ]}
-                onEscapePress={e => closeModal()}>
-                {fileCommited === undefined && <Spinner size="lg" 
aria-label="spinner"/>}
-                {fileCommited !== undefined && <DiffEditor language={language} 
original={fileCommited} modified={file?.code}/>}
-            </Modal>
+        <Modal
+            className='karavan-diff-modal'
+            title="Diff"
+            isOpen={isOpen}
+            onClose={() => closeModal()}
+            actions={[
+                <div style={{display: "flex", flexDirection: 'row', 
justifyContent: 'space-between', width: "100%"}}>
+                    <Button key="confirm" variant="warning" onClick={e => 
undoChanges()}>Undo</Button>
+                    <Button key="confirm" variant="primary" onClick={e => 
closeModal()}>Close</Button>
+                </div>
+            ]}
+            onEscapePress={e => closeModal()}>
+            {fileCommited === undefined && <Spinner size="lg" 
aria-label="spinner"/>}
+            {fileCommited !== undefined && <DiffEditor language={language} 
original={fileCommited.code} modified={file?.code}/>}
+        </Modal>
     )
 }
\ No newline at end of file
diff --git a/karavan-app/src/main/webui/src/project/files/FilesTab.tsx 
b/karavan-app/src/main/webui/src/project/files/FilesTab.tsx
index 86814d6a..05eced7f 100644
--- a/karavan-app/src/main/webui/src/project/files/FilesTab.tsx
+++ b/karavan-app/src/main/webui/src/project/files/FilesTab.tsx
@@ -162,7 +162,7 @@ export function FilesTab () {
                                     </Button>
                                 </Td>
                                 <Td>
-                                    {needCommit(file.name) && diffType === 
'CHANGED' &&
+                                    {needCommit(file.name) &&
                                         <Tooltip content="Show diff" 
position={"right"}>
                                             <Label color="grey">
                                                 <Button size="sm" 
variant="link" className='labeled-button'
@@ -176,9 +176,6 @@ export function FilesTab () {
                                             </Label>
                                         </Tooltip>
                                     }
-                                    {needCommit(file.name) && diffType !== 
'CHANGED' &&
-                                        <Label color="grey">{diffType}</Label>
-                                    }
                                     {!needCommit(file.name) &&
                                         <Label color="green" 
icon={<CheckIcon/>}/>
                                     }
diff --git a/karavan-app/src/main/webui/src/project/files/FilesToolbar.tsx 
b/karavan-app/src/main/webui/src/project/files/FilesToolbar.tsx
index 2ac4c01c..eecb38df 100644
--- a/karavan-app/src/main/webui/src/project/files/FilesToolbar.tsx
+++ b/karavan-app/src/main/webui/src/project/files/FilesToolbar.tsx
@@ -33,7 +33,7 @@ import {
 import '../../designer/karavan.css';
 import UploadIcon from "@patternfly/react-icons/dist/esm/icons/upload-icon";
 import PlusIcon from "@patternfly/react-icons/dist/esm/icons/plus-icon";
-import {useFilesStore, useFileStore, useProjectStore} from 
"../../api/ProjectStore";
+import {useAppConfigStore, useFilesStore, useFileStore, useProjectStore} from 
"../../api/ProjectStore";
 import {shallow} from "zustand/shallow";
 import {ProjectService} from "../../api/ProjectService";
 import PushIcon from "@patternfly/react-icons/dist/esm/icons/code-branch-icon";
@@ -48,6 +48,8 @@ export function FileToolbar () {
     const [project, isPushing, isPulling] = useProjectStore((s) => [s.project, 
s.isPushing, s.isPulling], shallow )
     const [diff] = useFilesStore((s) => [s.diff], shallow);
     const [file, setFile] = useFileStore((s) => [s.file, s.setFile], shallow )
+    const [config] = useAppConfigStore((s) => [s.config], shallow);
+    const isDev = config.environment === 'dev';
 
     useEffect(() => {
     }, [project, file]);
@@ -189,6 +191,7 @@ export function FileToolbar () {
         <FlexItem>
             <Tooltip content="Commit and push to git" position={"bottom-end"}>
                 <Button isLoading={isPushing ? true : undefined}
+                        isDisabled={!isDev}
                         size="sm"
                         variant={"secondary"}
                         className="project-button dev-action-button"
@@ -202,15 +205,24 @@ export function FileToolbar () {
             </Tooltip>
         </FlexItem>
         {canAddFiles() && !isKameletsProject() && <FlexItem>
-            <Button className="dev-action-button" size="sm" 
variant={"primary"} icon={<PlusIcon/>}
+            <Button className="dev-action-button"
+                    isDisabled={!isDev}
+                    size="sm" variant={"primary"}
+                    icon={<PlusIcon/>}
                     onClick={e => setFile("create")}>Create</Button>
         </FlexItem>}
         {canAddFiles() && isKameletsProject() && <FlexItem>
-            <Button className="dev-action-button" size="sm" 
variant={"primary"} icon={<PlusIcon/>}
+            <Button className="dev-action-button"
+                    isDisabled={!isDev}
+                    size="sm" variant={"primary"}
+                    icon={<PlusIcon/>}
                     onClick={e => setFile("create", undefined, 
'kamelet')}>Create</Button>
         </FlexItem>}
         {canAddFiles() && <FlexItem>
-            <Button className="dev-action-button" size="sm" 
variant="secondary" icon={<UploadIcon/>}
+            <Button className="dev-action-button"
+                    isDisabled={!isDev}
+                    size="sm" variant="secondary"
+                    icon={<UploadIcon/>}
                     onClick={e => setFile("upload")}>Upload</Button>
         </FlexItem>}
         {getCommitModal()}

Reply via email to