From 82e73d8505415fabc0a25a2c26ac7dde2fbcd12e Mon Sep 17 00:00:00 2001 From: Faton Ramadani Date: Tue, 20 Aug 2024 12:19:44 +0200 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20improve=20versions=20history?= =?UTF-8?q?=20by=20adding=20a=20diff=20viewer=20with=E2=80=A6=20(#4261)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(frontend): improve versions history by adding a diff viewer with the previous version * feat(frontend): support diff with all previous versions * feat(frontend): support diff with all previous versions * feat(frontend): improving version diff * feat(frontend): improve UI --- .../components/ScriptVersionHistory.svelte | 69 +++++++++++++++++-- .../flows/content/FlowModuleScript.svelte | 34 ++++++++- .../scripts/get/[...hash]/+page.svelte | 2 +- 3 files changed, 97 insertions(+), 8 deletions(-) diff --git a/frontend/src/lib/components/ScriptVersionHistory.svelte b/frontend/src/lib/components/ScriptVersionHistory.svelte index 1cdbf0889b..74783882e0 100644 --- a/frontend/src/lib/components/ScriptVersionHistory.svelte +++ b/frontend/src/lib/components/ScriptVersionHistory.svelte @@ -8,7 +8,9 @@ import FlowModuleScript from './flows/content/FlowModuleScript.svelte' import { createEventDispatcher } from 'svelte' import Button from './common/button/Button.svelte' - import { ExternalLink, Pencil, ArrowRight, X } from 'lucide-svelte' + import { ExternalLink, Pencil, ArrowRight, X, Diff, Code } from 'lucide-svelte' + import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte' + import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte' const dispatch = createEventDispatcher() @@ -19,6 +21,7 @@ let deploymentMsgUpdate: string | undefined = undefined let selectedVersion: ScriptHistory | undefined = undefined + let selectedVersionIndex: number | undefined = undefined let versions: ScriptHistory[] | undefined = undefined let loading: boolean = false @@ -53,6 +56,9 @@ } loadVersions() + + let showDiff: boolean = false + let previousHash: string | undefined = undefined @@ -62,17 +68,34 @@ {#if !loading} {#if versions && versions.length > 0}
- {#each versions ?? [] as version} + {#each versions ?? [] as version, versionIndex} +
{ selectedVersion = version + selectedVersionIndex = versionIndex + + if (showDiff && versions && selectedVersionIndex === versions.length - 1) { + showDiff = false + } + + const availableVersions = versions?.slice(selectedVersionIndex + 1) + + if ( + previousHash && + !availableVersions?.find((v) => v.script_hash === previousHash) + ) { + previousHash = availableVersions?.[0]?.script_hash + } + deploymentMsgUpdate = undefined deploymentMsgUpdateMode = false }} @@ -168,7 +191,41 @@ {/if} - + + {#if selectedVersionIndex !== undefined && versions?.slice(selectedVersionIndex + 1).length} +
+
+ + + + +
+ + {#if showDiff} +
Versions:
+ + {/if} +
+ {:else} +
No previous version found
+ {/if} +
{/key} {:else} diff --git a/frontend/src/lib/components/flows/content/FlowModuleScript.svelte b/frontend/src/lib/components/flows/content/FlowModuleScript.svelte index 0ed67d672f..a019ae2cbc 100644 --- a/frontend/src/lib/components/flows/content/FlowModuleScript.svelte +++ b/frontend/src/lib/components/flows/content/FlowModuleScript.svelte @@ -1,5 +1,6 @@
@@ -47,7 +66,20 @@ {#if notFound}
script not found at {path} in workspace {$workspaceStore}
{:else if showAllCode} - + {#if showDiff} + {#key previousCode + code} + + {/key} + {:else} + + {/if} {:else}
diff --git a/frontend/src/routes/(root)/(logged)/scripts/get/[...hash]/+page.svelte b/frontend/src/routes/(root)/(logged)/scripts/get/[...hash]/+page.svelte index 5e999d7089..b8f8ade638 100644 --- a/frontend/src/routes/(root)/(logged)/scripts/get/[...hash]/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/scripts/get/[...hash]/+page.svelte @@ -475,7 +475,7 @@ {#if script} - (versionsDrawerOpen = false)}> + (versionsDrawerOpen = false)} noPadding>