Merged PR 66: Create multilayer menù using type field in application collection (db)

Create multilayer menù using type field in application collection (db)
This commit is contained in:
2025-02-25 15:35:45 +00:00
2 changed files with 68 additions and 34 deletions

View File

@@ -96,7 +96,6 @@
<!-- Dialog per selezionare lo scenario --> <!-- Dialog per selezionare lo scenario -->
<Dialog v-model:visible="showScenarioDialog" header="Select a Scenario" :closable="false" :modal="true" style="width: 400px;"> <Dialog v-model:visible="showScenarioDialog" header="Select a Scenario" :closable="false" :modal="true" style="width: 400px;">
<div> <div>
<h5>Select a Scenario</h5>
<Dropdown <Dropdown
v-model="selectedScenario" v-model="selectedScenario"
:options="scenario_store.scenariosForRE" :options="scenario_store.scenariosForRE"

View File

@@ -35,55 +35,90 @@ function updateApplicationsMenu() {
console.log("selectedApp", selectedApp); console.log("selectedApp", selectedApp);
if (selectedApp != null) { if (selectedApp != null) {
// Aggiorna il label dell'app //Aggiorna il label dell'app
model.value[1].label = selectedApp.fe_name; model.value[1].label = selectedApp.fe_name;
// Inizializza l'array degli item come vuoto //Inizializza il menu principale
model.value[1].items = []; model.value[1].items = [];
// Se ci sono scenari disponibili, aggiungili come sottovoci //Se ci sono scenari disponibili, processali
if (selectedApp.available_scenarios.length > 0) { if (selectedApp.available_scenarios.length > 0) {
const groupedScenarios = {};
//Raggruppa gli scenari per categoria (solo se type non è null)
selectedApp.available_scenarios.forEach(app => { selectedApp.available_scenarios.forEach(app => {
let scenarioItem = { if (app.type) {
label: app.label, const type = app.type;
icon: 'pi pi-fw pi-wrench', if (!groupedScenarios[type]) {
items: [], // Sub-items per ogni scenario groupedScenarios[type] = [];
command: () => {
route.push({ path: `/scenario/exec/${app.scenario_id}` });
} }
}; groupedScenarios[type].push(app);
} else {
//Se non ha categoria, lo trattiamo singolarmente
model.value[1].items.push(createScenarioItem(app));
}
});
// Aggiungi la sottovoce "Execution List" //Creazione del menu in base ai gruppi
scenarioItem.items.push({ Object.keys(groupedScenarios).forEach(type => {
label: 'Execution List', const scenarios = groupedScenarios[type];
icon: 'pi pi-fw pi-list',
to: '/executions/filter',
command: () => {
// Salva il nome dello scenario nello store
userPrefStore.setSelectedScenario(app.label);
}
});
// Aggiungi lo scenario alla lista principale if (scenarios.length >= 2) {
model.value[1].items.push(scenarioItem); //Se ci sono almeno 2 scenari nella stessa categoria, creiamo un gruppo
const typeItem = {
label: type,
icon: 'pi pi-fw pi-folder',
items: []
};
scenarios.forEach(app => {
typeItem.items.push(createScenarioItem(app));
});
model.value[1].items.push(typeItem);
}else {
//Se c'è solo un elemento, lo aggiungiamo direttamente
model.value[1].items.push(createScenarioItem(scenarios[0]));
}
});
//Aggiungi "Rev Eng Code" alla fine della lista
model.value[1].items.push({
label: 'Rev Eng Code',
icon: 'pi pi-fw pi-cog',
command: () => {
route.push({ path: '/app-browser' });
}
}); });
} }
// Aggiungi "Rev Eng Code" alla fine della lista
model.value[1].items.push({
label: 'Rev Eng Code',
icon: 'pi pi-fw pi-wrench',
command: () => {
route.push({ path: '/app-browser' });
}
});
} else { } else {
// Se selectedApp è nullo, svuota gli item //Se selectedApp è nullo, svuota il menu
model.value[1].label = ''; model.value[1].label = '';
model.value[1].items = []; model.value[1].items = [];
} }
} }
//Funzione per creare un item scenario con Execution List
function createScenarioItem(app) {
return {
label: app.label,
icon: 'pi pi-fw pi-wrench',
items: [
{
label: 'Execution List',
icon: 'pi pi-fw pi-list',
to: '/executions/filter',
command: () => {
userPrefStore.setSelectedScenario(app.label);
}
}
],
command: () => {
route.push({ path: `/scenario/exec/${app.scenario_id}` });
}
};
}