From c2b7c42caadbaa7e7a65c049f5c7f8e371473d25 Mon Sep 17 00:00:00 2001 From: Emanuele Ferrelli Date: Tue, 19 Nov 2024 14:53:05 +0100 Subject: [PATCH 1/5] updated CIA and File Tree visualization --- src/components/CiaFlowCodeViewer.vue | 9 +++-- src/stores/UserPrefStore.js | 6 +++- src/views/pages/ApplicationBrowser.vue | 50 +++++++++++++------------- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/components/CiaFlowCodeViewer.vue b/src/components/CiaFlowCodeViewer.vue index a52ff8e..d17e7af 100644 --- a/src/components/CiaFlowCodeViewer.vue +++ b/src/components/CiaFlowCodeViewer.vue @@ -7,9 +7,9 @@ import Dialog from 'primevue/dialog' import { nextTick, onMounted, ref, toRefs } from 'vue' import ClassNode from './ClassNode.vue' import { useLayout } from './useLayout' - import { defineProps } from 'vue' import 'vue3-markdown/dist/style.css' +import { UserPrefStore } from '@/stores/UserPrefStore.js'; const { onInit, onNodeDragStop, onConnect, addEdges, setViewport, toObject, onNodeClick,fitView } = useVueFlow() @@ -22,6 +22,7 @@ const { graph, layout, previousDirection } = useLayout() const dialogCodeVisible = ref(false) +const userPrefStore = UserPrefStore(); //66f55e4b2894530b1c154f69 const props = defineProps({ @@ -59,11 +60,9 @@ function layoutGraph(direction) { } function defineNodes() { - var tmpNode=[] - var tmpEdges=[] - var app = {'name':'Apollo'} - + var tmpEdges = [] + var app = { name: userPrefStore.getSelApp.fe_name } tmpNode.push({ id: app.name, data: { label: app.name }, diff --git a/src/stores/UserPrefStore.js b/src/stores/UserPrefStore.js index fa6f002..487405f 100644 --- a/src/stores/UserPrefStore.js +++ b/src/stores/UserPrefStore.js @@ -61,11 +61,15 @@ export const UserPrefStore = defineStore('userpref_store', () => { } }); + const getSelProj = computed(() => { + return selectedProject.value + }) + const getSelApp = computed(() => { return selectedApp.value }) - return { user,fetchUserData,userLoaded,selectedProject,availableApp,getSelApp,setSelectedApp,selectedApp, updateSelectedProject } + return { user,fetchUserData,userLoaded,selectedProject,availableApp,getSelApp,setSelectedApp,selectedApp, updateSelectedProject,getSelProj } }) \ No newline at end of file diff --git a/src/views/pages/ApplicationBrowser.vue b/src/views/pages/ApplicationBrowser.vue index 87f3e97..14f696d 100644 --- a/src/views/pages/ApplicationBrowser.vue +++ b/src/views/pages/ApplicationBrowser.vue @@ -5,26 +5,24 @@ -
-
-
-
File Browser
-
-
- - -
- -
-
- +
+
+
File Browser
+
+
+ +
+
-
+
+ +
+
File Explorer
@@ -44,15 +42,13 @@ import { LoadingStore } from '@/stores/LoadingStore.js'; import Tree from 'primevue/tree'; import { onMounted, ref, watch } from 'vue'; import { useRouter } from 'vue-router'; -import { UserPrefStore } from '../../stores/UserPrefStore.js'; +import { UserPrefStore } from '@/stores/UserPrefStore.js'; const nodes = ref(null) const expandedKeys = ref({}); const selectedFile = ref({}) const router = useRouter(); const userPrefStore = UserPrefStore(); -//const selectedApp = userPrefStore.getSelApp; -//const application=ref(selectedApp.fe_name) const loadingStore = LoadingStore() onMounted(() => { @@ -92,7 +88,7 @@ function onNodeSelect(e){ selectedFile.value = e.key } console.log(e) -} +}; const expandAll = () => { @@ -169,7 +165,13 @@ watch(selectedFile, () => { width: 100%; } -.flow-codeviewer{ - height:75vh +.flow-codeviewer { + height: 75vh; +} + +.flex-skeleton { + flex: 1; + min-width: 350px; + text-align: center; } \ No newline at end of file From 08115a68be9b23457bc0faeb1ee05a6ebc98a8ce Mon Sep 17 00:00:00 2001 From: Emanuele Ferrelli Date: Wed, 20 Nov 2024 17:29:18 +0100 Subject: [PATCH 2/5] updated layout --- src/components/FileFlowViewer.vue | 35 ++++++++++---- src/components/SingleClassViewer.vue | 2 +- src/layout/AppConfigurator.vue | 4 +- src/layout/AppTopbar.vue | 14 +++--- src/main.js | 71 +++++++++++++++++++++++++++- src/views/pages/ScenarioExec.vue | 4 +- src/views/pages/ScenarioList.vue | 1 + 7 files changed, 108 insertions(+), 23 deletions(-) diff --git a/src/components/FileFlowViewer.vue b/src/components/FileFlowViewer.vue index d88f2a8..9a00d1b 100644 --- a/src/components/FileFlowViewer.vue +++ b/src/components/FileFlowViewer.vue @@ -212,18 +212,35 @@ function defineNodes() { fill:#fffffb } +.vue-flow__node-default { + border: 1px solid #292524; + padding: 10px; + border-radius: 5px; + background: #f5f5f5; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + gap: 10px; + max-width: 250px; + min-width: 200px; + word-wrap: break-word; + overflow-wrap: break-word +} .vue-flow__node-class-node { - border:1px solid #dc07bc; - padding:10px; + border: 1px solid #a100ff; + padding: 10px; border-radius: 5px; - background:#f5f5f5; - display:flex; - flex-direction:column; - justify-content:space-between; - align-items:center; - gap:10px; - max-width:250px; + background: #f5f5f5; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + gap: 10px; + max-width: 250px; min-width: 200px; + word-wrap: break-word; + overflow-wrap: break-word } diff --git a/src/components/SingleClassViewer.vue b/src/components/SingleClassViewer.vue index c51db35..618530b 100644 --- a/src/components/SingleClassViewer.vue +++ b/src/components/SingleClassViewer.vue @@ -40,7 +40,7 @@
- +
diff --git a/src/layout/AppConfigurator.vue b/src/layout/AppConfigurator.vue index 5627abf..68e5440 100644 --- a/src/layout/AppConfigurator.vue +++ b/src/layout/AppConfigurator.vue @@ -32,7 +32,7 @@ const primaryColors = ref([ { name: 'sky', palette: { 50: '#f0f9ff', 100: '#e0f2fe', 200: '#bae6fd', 300: '#7dd3fc', 400: '#38bdf8', 500: '#0ea5e9', 600: '#0284c7', 700: '#0369a1', 800: '#075985', 900: '#0c4a6e', 950: '#082f49' } }, { name: 'blue', palette: { 50: '#eff6ff', 100: '#dbeafe', 200: '#bfdbfe', 300: '#93c5fd', 400: '#60a5fa', 500: '#3b82f6', 600: '#2563eb', 700: '#1d4ed8', 800: '#1e40af', 900: '#1e3a8a', 950: '#172554' } }, { name: 'indigo', palette: { 50: '#eef2ff', 100: '#e0e7ff', 200: '#c7d2fe', 300: '#a5b4fc', 400: '#818cf8', 500: '#6366f1', 600: '#4f46e5', 700: '#4338ca', 800: '#3730a3', 900: '#312e81', 950: '#1e1b4b' } }, - { name: 'violet', palette: { 50: '#f5f3ff', 100: '#ede9fe', 200: '#ddd6fe', 300: '#c4b5fd', 400: '#a78bfa', 500: '#8b5cf6', 600: '#7c3aed', 700: '#6d28d9', 800: '#5b21b6', 900: '#4c1d95', 950: '#2e1065' } }, + { name: 'violet', palette: { 50: '#a100ff', 100: '#a100ff', 200: '#a100ff', 300: '#a100ff', 400: '#a100ff', 500: '#a100ff', 600: '#a100ff', 700: '#a100ff', 800: '#a100ff', 900: '#a100ff', 950: '#a100ff' } }, { name: 'purple', palette: { 50: '#faf5ff', 100: '#f3e8ff', 200: '#e9d5ff', 300: '#d8b4fe', 400: '#c084fc', 500: '#a855f7', 600: '#9333ea', 700: '#7e22ce', 800: '#6b21a8', 900: '#581c87', 950: '#3b0764' } }, { name: 'fuchsia', palette: { 50: '#fdf4ff', 100: '#fae8ff', 200: '#f5d0fe', 300: '#f0abfc', 400: '#e879f9', 500: '#d946ef', 600: '#c026d3', 700: '#a21caf', 800: '#86198f', 900: '#701a75', 950: '#4a044e' } }, { name: 'pink', palette: { 50: '#fdf2f8', 100: '#fce7f3', 200: '#fbcfe8', 300: '#f9a8d4', 400: '#f472b6', 500: '#ec4899', 600: '#db2777', 700: '#be185d', 800: '#9d174d', 900: '#831843', 950: '#500724' } }, @@ -66,7 +66,7 @@ const surfaces = ref([ }, { name: 'viva', - palette: { 0: '#ffffff', 50: '#f3f3f3', 100: '#e7e7e8', 200: '#cfd0d0', 300: '#b7b8b9', 400: '#9fa1a1', 500: '#87898a', 600: '#6e7173', 700: '#565a5b', 800: '#3e4244', 900: '#262b2c', 950: '#0e1315' } + palette: { 0: '#d6d3d1', 50: '#f3f3f3', 100: '#e7e7e8', 200: '#cfd0d0', 300: '#b7b8b9', 400: '#9fa1a1', 500: '#87898a', 600: '#6e7173', 700: '#565a5b', 800: '#3e4244', 900: '#262b2c', 950: '#0e1315' } }, { name: 'ocean', diff --git a/src/layout/AppTopbar.vue b/src/layout/AppTopbar.vue index 19ca88d..6e5cd49 100644 --- a/src/layout/AppTopbar.vue +++ b/src/layout/AppTopbar.vue @@ -83,17 +83,17 @@ watch(() => userPrefStore.getSelApp, appUpdated, { immediate: true });
- - + +
- -
+
--> diff --git a/src/main.js b/src/main.js index 88ada23..25132d6 100644 --- a/src/main.js +++ b/src/main.js @@ -9,10 +9,13 @@ import App from './App.vue'; import router from './router'; +import Aura from '@primevue/themes/aura'; +import Lara from '@primevue/themes/lara'; import Nora from '@primevue/themes/nora'; import PrimeVue from 'primevue/config'; import ConfirmationService from 'primevue/confirmationservice'; import ToastService from 'primevue/toastservice'; +import { definePreset } from '@primevue/themes'; import BlockViewer from '@/components/BlockViewer.vue'; @@ -63,14 +66,78 @@ axios.defaults.baseURL = import.meta.env.VITE_BACKEND_URL;//'http://localhost:80 console.log(import.meta.env.VITE_BACKEND_URL); const app = createApp(App); -const pinia = createPinia() +const pinia = createPinia(); +const preset = definePreset(Nora, { + semantic: { + primary: { + 50: '{violet.50}', + 100: '{violet.100}', + 200: '{violet.200}', + 300: '{violet.300}', + 400: '{violet.400}', + 500: '{violet.500}', + 600: '{violet.600}', + 700: '{violet.700}', + 800: '{violet.800}', + 900: '{violet.900}', + 950: '{violet.950}' + }, + colorScheme: { + light: { + surface: { + 0: '#f3f3f3', + 50: '{viva.50}', + 100: '{viva.100}', + 200: '{viva.200}', + 300: '{viva.300}', + 400: '{viva.400}', + 500: '{viva.500}', + 600: '{viva.600}', + 700: '{viva.700}', + 800: '{viva.800}', + 900: '{viva.900}', + 950: '{viva.950}' + }, + formField: { + hoverBorderColor: '{primary.color}', + borderColor: '{primary.color}', + } + }, + dark: { + surface: { + 0: '#ffffff', + 50: '{slate.50}', + 100: '{slate.100}', + 200: '{slate.200}', + 300: '{slate.300}', + 400: '{slate.400}', + 500: '{slate.500}', + 600: '{slate.600}', + 700: '{slate.700}', + 800: '{slate.800}', + 900: '{slate.900}', + 950: '{slate.950}' + }, + formField: { + hoverBorderColor: '{primary.color}', + borderColor: '{primary.color}', + } + } + }, + focusRing: { + width: '2px', + color: '{primary.color}', + offset: '1px' + } + } +}); app.use(pinia); app.use(router); app.use(PrimeVue, { theme: { - preset: Nora, + preset: preset, options: { prefix: 'p', darkModeSelector: '.app-dark', diff --git a/src/views/pages/ScenarioExec.vue b/src/views/pages/ScenarioExec.vue index abdc4e3..5419739 100644 --- a/src/views/pages/ScenarioExec.vue +++ b/src/views/pages/ScenarioExec.vue @@ -51,7 +51,7 @@
-
+
@@ -60,7 +60,7 @@
Starting execution...
-
+

Time elapsed: 

00:00
diff --git a/src/views/pages/ScenarioList.vue b/src/views/pages/ScenarioList.vue index 5f8620c..8a21505 100644 --- a/src/views/pages/ScenarioList.vue +++ b/src/views/pages/ScenarioList.vue @@ -15,6 +15,7 @@ v-model="scenario_store.filterString" size="medium" variant="filled" + style="border: 1px solid #a100ff" />
From 112513182ec11a9d6cdcb4e7a8e8883f67880093 Mon Sep 17 00:00:00 2001 From: Emanuele Ferrelli Date: Thu, 21 Nov 2024 16:31:04 +0100 Subject: [PATCH 3/5] update layout --- index.html | 2 +- src/views/pages/ProjectList.vue | 1 + src/views/pages/ScenarioExec.vue | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 945256a..cd9c587 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ - Sakai Vue + Hermione diff --git a/src/views/pages/ProjectList.vue b/src/views/pages/ProjectList.vue index 5fb384a..3c0af0e 100644 --- a/src/views/pages/ProjectList.vue +++ b/src/views/pages/ProjectList.vue @@ -18,6 +18,7 @@ v-model="data.search" size="medium" variant="filled" + style="border: 1px solid #a100ff" />
diff --git a/src/views/pages/ScenarioExec.vue b/src/views/pages/ScenarioExec.vue index 5419739..ec438d1 100644 --- a/src/views/pages/ScenarioExec.vue +++ b/src/views/pages/ScenarioExec.vue @@ -54,8 +54,8 @@
-
- {{ scenario_response_message.split('-').join(' ') }} +
+ {{ scenario_response_message }}
Starting execution... From 42bfe0d3cbcc842c2501329d20e661610579776a Mon Sep 17 00:00:00 2001 From: Emanuele Ferrelli Date: Tue, 26 Nov 2024 12:02:07 +0100 Subject: [PATCH 4/5] cleared execution data after changing a scenario, added logic to change scenario execution from url --- src/views/pages/OldScenarioExec.vue | 30 +++++++++++++++++++++++----- src/views/pages/ScenarioExec.vue | 2 ++ src/views/pages/ScenarioExecList.vue | 16 +++++++-------- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/views/pages/OldScenarioExec.vue b/src/views/pages/OldScenarioExec.vue index 397e8f8..58b9020 100644 --- a/src/views/pages/OldScenarioExec.vue +++ b/src/views/pages/OldScenarioExec.vue @@ -23,7 +23,7 @@ + +
+
+
+ {{ index.replace(/_/g, ' ').replace(/\b\w/g, char => char.toUpperCase()) }}: + {{ input }} +
+
+
-
+
@@ -82,12 +91,22 @@ const exec_id = ref(null); const exec_scenario = ref({}); const debug_modal = ref(false); const scenario_execution_store = ScenarioExecutionStore(); -const execution_id = scenario_execution_store.getSelectedExecScenario; +const execution = scenario_execution_store.getSelectedExecScenario; +const execution_id = ref(null) +const inputs = ref(null); onMounted(() => { - console.log("scenario id: ", execution_id.id); - retrieveScenarioExec(execution_id.id) + if (execution){ + console.log("scenario id: ", execution); + execution_id.value = execution.id + console.log("execution_id: ",execution_id) + }else{ + const url = window.location.href; + execution_id.value = (new URL(url)).searchParams.get('id') + console.log(execution_id.value) + } + retrieveScenarioExec(execution_id.value) }); const retrieveScenarioExec = (id) => { @@ -102,6 +121,7 @@ const retrieveScenarioExec = (id) => { data_loaded.value = true; scenario_output.value = response.data.execSharedMap.scenario_output; exec_id.value = response.data.scenarioExecution_id + inputs.value = response.data.scenarioExecutionInput.inputs }); }; diff --git a/src/views/pages/ScenarioExec.vue b/src/views/pages/ScenarioExec.vue index ec438d1..0acbf5b 100644 --- a/src/views/pages/ScenarioExec.vue +++ b/src/views/pages/ScenarioExec.vue @@ -178,6 +178,8 @@ watch(() => route.params.id, fetchScenario); //Function to fetch scenarios function fetchScenario(id) { + data_loaded.value = false; + formData.value = {}; loading.value = true; axios.get(`/scenarios/${id}`) .then(response => { diff --git a/src/views/pages/ScenarioExecList.vue b/src/views/pages/ScenarioExecList.vue index f439eaa..45579c7 100644 --- a/src/views/pages/ScenarioExecList.vue +++ b/src/views/pages/ScenarioExecList.vue @@ -2,9 +2,9 @@
-
-
- -
+ +
-->

Executions List

- - + - +