From 0e63df2ebcb04a09654498ea29ce022787e3ece4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C5=BEe=20=C5=BDitnik?= <anze.zitnik@xlab.si> Date: Mon, 30 May 2022 13:32:21 +0200 Subject: [PATCH] Auto collapse and expand: start with collapsed nodes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squashed commit of the following: commit a83a43f586014412b6bb9b90e9bb1e22d822a1da Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Mon May 30 13:31:46 2022 +0200 Version 0.1.4 commit 05820fd40a5c015c0bcdbad8435d74a5c8ea83ac Merge: a19afbab 023e3fdd Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Mon May 30 11:30:14 2022 +0000 Merge branch 'auto-collapse' into 'develop' Start with collapsed nodes See merge request medina/cce-frontend!3 commit 023e3fddbe77f1b9f04ca796cbfbf530ee37b301 Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Mon May 30 11:30:14 2022 +0000 Start with collapsed nodes commit a19afbabad93e6654d7eefdf3c78335d5c051e6b Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Fri May 27 13:33:56 2022 +0200 Version up: 0.1.3 commit a2bf39a78579f0c17b215e96026a5a7c9edf9270 Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Thu May 26 17:39:06 2022 +0200 Add targetValue property. Rearrange properties in infoBox. Don't show 'code' if same as 'name'. commit d7dd3b66c66fc8718787e1347c6f72f405fc1dfa Merge: 0bedbed3 dc3d4b90 Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Fri May 20 10:04:47 2022 +0200 Merge branch 'master' into develop commit 0bedbed33cd8a0f5e58a570e51f7cdfe6d854f3f Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Fri May 20 10:00:02 2022 +0200 Minor fix in instructions. commit 8df42ada6f9eab247280c26b8518661ed721681f Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Fri May 20 09:47:09 2022 +0200 Revert "Updated getting for CI from package.json" This reverts commit 64b5b5152b2e065db8b31313ed756a8df10d61e2. commit e318c48589b14d32dd727584926c1318016192bb Author: Anže Žitnik <anze.zitnik@xlab.si> Date: Fri May 20 09:31:26 2022 +0200 Version up - 1.1.2 commit 95f07516f8593fdfc4e1c43e13020b6909cc661f Author: Aljaz Nuncic <aljaz.nuncic@xlab.si> Date: Thu May 19 19:26:49 2022 +0200 Added word breaking, permanent node description box option, instructions commit 64b5b5152b2e065db8b31313ed756a8df10d61e2 Author: Aljaz Nuncic <aljaz.nuncic@xlab.si> Date: Thu May 19 19:25:53 2022 +0200 Updated getting for CI from package.json --- package.json | 2 +- src/components/Tree.vue | 39 +++++++++++++++++++++++++------- src/mixins/collapseExpandTree.js | 38 +++++++++++++++++++++++++++++++ src/store/index.js | 4 ++++ 4 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 src/mixins/collapseExpandTree.js diff --git a/package.json b/package.json index 86a3d2bd..3dc04d1f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cce-frontend", - "version": "0.1.3", + "version": "0.1.4", "private": true, "scripts": { "serve": "vue-cli-service serve", diff --git a/src/components/Tree.vue b/src/components/Tree.vue index 2ad5f1e1..a98abc33 100644 --- a/src/components/Tree.vue +++ b/src/components/Tree.vue @@ -23,11 +23,19 @@ <p v-if="hoveredNode?.resource?.weight != null"><b>Resource weight:</b> {{hoveredNode.resource.weight}}</p> <p v-if="hoveredNode?.description != null"><b>Description:</b> {{hoveredNode.description}}</p> </div> - <div style="display: flex;"> - <button class="btn btn-outline-primary" @click="controlScale('bigger')">Zoom in</button> - <button class="btn btn-outline-primary" @click="controlScale('smaller')">Zoom out</button> - <button class="btn btn-outline-primary" @click="controlScale('restore')">Reset zoom</button> - <button class="btn btn-outline-success" @click="toogleInstructions">Instructions</button> + <div> + <span class="btn-group"> + <button class="btn btn-outline-primary" @click="controlScale('bigger')">Zoom in</button> + <button class="btn btn-outline-primary" @click="controlScale('smaller')">Zoom out</button> + <button class="btn btn-outline-primary" @click="controlScale('restore')">Reset zoom</button> + </span> + <span class="btn-group"> + <button class="btn btn-outline-primary" @click="collapseAll">Collapse all</button> + <button class="btn btn-outline-primary" @click="expandAll">Expand all</button> + </span> + <span class="btn-group"> + <button class="btn btn-outline-success" @click="toogleInstructions">Instructions</button> + </span> </div> <div class="box" id="instructions" v-show="showInstructions"> <div class="close-button"><i @click="toogleInstructions" title="Close" class="fa fa-solid fa-xmark"></i></div> @@ -70,6 +78,7 @@ import VueTree from "@ssthouse/vue3-tree-chart"; import "@ssthouse/vue3-tree-chart/dist/vue3-tree-chart.css"; import {formatDateHelper} from '../helpers/dataFormat'; import $ from 'jquery'; +import { collapseExpandTree } from '@/mixins/collapseExpandTree'; export default { name: 'Tree', @@ -77,6 +86,7 @@ export default { 'vue-tree': VueTree }, props: ['treeData'], + mixins: [collapseExpandTree], data() { return { treeConfig: { nodeWidth: 230, nodeHeight: 80, levelHeight: 200 }, @@ -127,6 +137,16 @@ export default { this.infoBoxHide(el); }, + collapseAll() { + this.collapseRecursively(this.$refs.scaleTree.nodeDataList[0].data) + this.$refs.scaleTree.draw(); + }, + + expandAll() { + this.expandRecursively(this.$refs.scaleTree.nodeDataList[0].data); + this.$refs.scaleTree.draw(); + }, + toogleInstructions() { this.showInstructions = !this.showInstructions; }, @@ -175,7 +195,7 @@ export default { padding-top: 10px; position: fixed; - top: 128px; + top: 134px; min-width: 340px; background-color: white; border: 1px solid; @@ -202,8 +222,11 @@ export default { } } -.btn { - margin: 5px 5px; +.btn-group { + margin: 3px 3px; + .btn { + margin: 5px 5px; + } } .node-unset { diff --git a/src/mixins/collapseExpandTree.js b/src/mixins/collapseExpandTree.js new file mode 100644 index 00000000..acc67618 --- /dev/null +++ b/src/mixins/collapseExpandTree.js @@ -0,0 +1,38 @@ +export const collapseExpandTree = { + methods: { + collapseRecursively(node) { + if(!node.children) { + return; + } + + node.children.forEach(i => { + this.collapseRecursively(i); + }); + + node._children = node.children; + node.children = null; + node._collapsed = true; + }, + + collapseAllFromLevel(node, level) { + if (level <= 0) { + this.collapseRecursively(node); + } else { + node.children?.forEach(i => { + this.collapseAllFromLevel(i, level - 1); + }); + } + }, + + expandRecursively(node) { + if (node._children) { + node.children = node._children; + node._children = null; + node._collapsed = false; + } + node.children?.forEach(n => { + this.expandRecursively(n); + }); + }, + } +} \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js index ae265e80..34eb412f 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,5 +1,6 @@ import {createStore} from 'vuex'; import {ApiService} from '../services/ApiService'; +import { collapseExpandTree } from '../mixins/collapseExpandTree'; const store = createStore({ state: { @@ -16,6 +17,9 @@ const store = createStore({ actions: { async getTreeData({commit}) { await ApiService.getEvaluationTreeData().then((response) => { + // collapse all except root + collapseExpandTree.methods.collapseAllFromLevel(response.data.root, 1); + commit('SAVE_TREE_DATA', response.data); }).catch((err) => { console.log("ERROR at action getTreeData: " + err); -- GitLab