Skip to content

Commit 710098d

Browse files
committed
feat: made visualizations draggable when editing view
1 parent 5d51f0d commit 710098d

5 files changed

Lines changed: 35 additions & 3 deletions

File tree

package-lock.json

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
"vue-d3-sunburst": "^1.0.1",
123123
"vue-datetime": "^1.0.0-beta.13",
124124
"vue-property-decorator": "^8.5.1",
125+
"vuedraggable": "^2.24.3",
125126
"vuex": "^3.5.1",
126127
"weekstart": "^1.0.1"
127128
}

src/components/SelectableVisualization.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<template lang="pug">
22
div
3-
h5 {{ visualizations[type].title }}
3+
h5
4+
icon.handle(name="bars" v-if="editable" style="opacity: 0.6; cursor: grab;")
5+
| {{ visualizations[type].title }}
46
div(v-if="editable").vis-style-dropdown-btn
57
b-dropdown.mr-1(size="sm" variant="outline-secondary")
68
template(v-slot:button-content)
@@ -89,6 +91,7 @@ div
8991
import _ from 'lodash';
9092
import 'vue-awesome/icons/cog';
9193
import 'vue-awesome/icons/times';
94+
import 'vue-awesome/icons/bars';
9295
9396
import { split_by_hour_into_data } from '~/util/transforms';
9497

src/store/modules/views.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ const mutations = {
6969
}
7070
console.log('Loaded views:', state.views);
7171
},
72+
setElements(state, { view_id, elements }) {
73+
state.views.find(v => v.id == view_id).elements = elements;
74+
},
7275
restoreDefaults(state) {
7376
state.views = defaultViews;
7477
},

src/views/activity/ActivityView.vue

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<template lang="pug">
22
div(v-if="view")
3-
div.row
3+
draggable.row(v-model="elements" handle=".handle")
44
// TODO: Handle large/variable sized visualizations better
5-
div.col-md-6.col-lg-4.p-3(v-for="el, index in view.elements", :class="{'col-md-12': isVisLarge(el), 'col-lg-8': isVisLarge(el)}")
5+
div.col-md-6.col-lg-4.p-3(v-for="el, index in elements", :key="index", :class="{'col-md-12': isVisLarge(el), 'col-lg-8': isVisLarge(el)}")
66
aw-selectable-vis(:id="index" :type="el.type" @onTypeChange="onTypeChange" @onRemove="onRemove" :editable="editing")
77

88
div.col-md-6.col-lg-4.p-3(v-if="editing")
@@ -36,9 +36,13 @@ import 'vue-awesome/icons/save';
3636
import 'vue-awesome/icons/times';
3737
import 'vue-awesome/icons/trash';
3838
import 'vue-awesome/icons/undo';
39+
import draggable from 'vuedraggable';
3940
4041
export default {
4142
name: 'ActivityView',
43+
components: {
44+
draggable: draggable,
45+
},
4246
props: {
4347
view_id: { type: String, default: 'default' },
4448
periodLength: {
@@ -57,6 +61,14 @@ export default {
5761
return this.$store.state.views.views.find(v => v.id == this.view_id);
5862
}
5963
},
64+
elements: {
65+
get() {
66+
return this.view.elements;
67+
},
68+
set(elements) {
69+
this.$store.commit('views/setElements', { view_id: this.view.id, elements });
70+
},
71+
},
6072
},
6173
methods: {
6274
save() {

0 commit comments

Comments
 (0)