Fix channel sorting to work across clients on Vue

This commit is contained in:
Pavel Djundik 2019-07-12 19:47:29 +03:00
parent 820a67802d
commit bf2c6a6bcf
1 changed files with 13 additions and 25 deletions

View File

@ -1,39 +1,27 @@
"use strict"; "use strict";
const $ = require("jquery");
const socket = require("../socket"); const socket = require("../socket");
const {vueApp} = require("../vue");
socket.on("sync_sort", function(data) { socket.on("sync_sort", function(data) {
const type = data.type;
const order = data.order; const order = data.order;
const container = $(".networks");
const network = container.find(`.network[data-uuid="${data.target}"]`);
if (type === "networks") { switch (data.type) {
$.each(order, function(index, value) { case "networks":
const position = $(container.children(".network")[index]); vueApp.networks.sort((a, b) => order.indexOf(a.uuid) - order.indexOf(b.uuid));
if (Number(position.attr("data-id")) === value) { // Network in correct place break;
return true; // No point in continuing
case "channels": {
const network = vueApp.networks.find((n) => n.uuid === data.target);
if (!network) {
return;
} }
network.insertBefore(position); network.channels.sort((a, b) => order.indexOf(a.id) - order.indexOf(b.id));
});
} else if (type === "channels") { break;
$.each(order, function(index, value) {
if (index === 0) { // Shouldn't attempt to move lobby
return true; // same as `continue` -> skip to next item
} }
const position = $(network.children(".chan")[index]); // Target channel at position
if (Number(position.attr("data-id")) === value) { // Channel in correct place
return true; // No point in continuing
}
const channel = network.find(".chan[data-id=" + value + "]"); // Channel at position
channel.insertBefore(position);
});
} }
}); });