diff --git a/package-lock.json b/package-lock.json
index 176fb51..5220498 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10583,6 +10583,11 @@
"is-plain-obj": "^1.0.0"
}
},
+ "sortablejs": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.1.tgz",
+ "integrity": "sha512-N6r7GrVmO8RW1rn0cTdvK3JR0BcqecAJ0PmYMCL3ZuqTH3pY+9QyqkmJSkkLyyDvd+AJnwaxTP22Ybr/83V9hQ=="
+ },
"source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
@@ -11938,6 +11943,14 @@
"vue-script2": "^2.0.3"
}
},
+ "vuedraggable": {
+ "version": "2.23.2",
+ "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.23.2.tgz",
+ "integrity": "sha512-PgHCjUpxEAEZJq36ys49HfQmXglattf/7ofOzUrW2/rRdG7tu6fK84ir14t1jYv4kdXewTEa2ieKEAhhEMdwkQ==",
+ "requires": {
+ "sortablejs": "^1.10.1"
+ }
+ },
"vuex": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.1.tgz",
diff --git a/package.json b/package.json
index 3ee4f8a..03614c0 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,7 @@
"vue-socket.io": "^3.0.4",
"vue-socket.io-extended": "^3.2.0",
"vue-twitter": "^0.1.0",
+ "vuedraggable": "^2.23.2",
"vuex": "^3.0.1"
},
"devDependencies": {
diff --git a/src/components/app/Navigation.vue b/src/components/app/Navigation.vue
index 0c2957f..41b9350 100644
--- a/src/components/app/Navigation.vue
+++ b/src/components/app/Navigation.vue
@@ -41,14 +41,22 @@
>error
+
-
+
+
+
+
+
+
+
import { bus } from "@/main.js";
import config from "@/config.js";
+import settingsService from '@/services/settingsService';
import ServerTemplate from "@/components/app/ServerTemplate/ServerTemplate";
-
+import draggable from 'vuedraggable'
+import { isMobile } from "@/utils/Mobile";
export default {
- components: { ServerTemplate },
+ components: { ServerTemplate, draggable },
data() {
return {
avatarDomain: config.domain + "/avatars",
toolTipShown: false,
toolTipTopPosition: 0,
toolTipServerID: null,
- toolTipLocalName: null
+ toolTipLocalName: null,
+ mobile: isMobile(),
+
+ drag: false,
};
},
methods: {
+ async onEnd(event) {
+ this.drag = false;
+ const serverIDArr = this.serversArr.map(s => s.server_id);
+ await settingsService.setServerPositions(serverIDArr);
+ },
+ onStart() {
+ this.toolTipShown = false;
+ this.drag = true;
+ this.$store.dispatch("setAllPopout", {show: false});
+ },
dismissNotification(channelID) {
const notifications = this.$store.getters.notifications.find(function(e) {
return e.channelID === channelID;
@@ -156,6 +179,7 @@ export default {
this.toolTipShown = true;
},
serverToolTipEvent({ serverID, top }) {
+ if (this.drag) return;
this.toolTipLocalName = null;
this.toolTipServerID = serverID;
this.toolTipTopPosition = top - this.getTopHeight() + 16;
@@ -198,14 +222,25 @@ export default {
servers() {
return this.$store.getters["servers/servers"];
},
- serversArr() {
- const data = this.servers;
- return Object.keys(data)
+ serversArr: {
+ get() {
+ const data = this.servers;
+ return Object.keys(data)
.map(key => {
return data[key];
})
- .slice()
.reverse();
+ },
+ set(value) {
+ const reversedServers = value.reverse()
+ // convert array to json
+ const json = {};
+ for (let index = 0; index < reversedServers.length; index++) {
+ const element = reversedServers[index];
+ json[element.server_id] = element;
+ }
+ this.$store.dispatch("servers/setServers", json);
+ }
},
selectedServerID() {
return this.$store.getters["servers/selectedServerID"];
@@ -261,7 +296,25 @@ export default {
};
+