Skip to content

Commit e181fe5

Browse files
committed
added member group move drag and drop
1 parent 4a041a0 commit e181fe5

2 files changed

Lines changed: 70 additions & 22 deletions

File tree

public/modules/breakout/overview.js

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,7 @@ modules["breakout/overview"] = class {
869869
return;
870870
}
871871
groupMember.tile.remove();
872+
groupMember.tile = null;
872873
if (refresh != false) {
873874
this.layout.refreshTileSpots(this.layout.tileLayout.indexOf(groupMember.group));
874875
}
@@ -1409,6 +1410,7 @@ modules["breakout/overview"] = class {
14091410
this.layout.memberSessions[data.modify] = [];
14101411
session = this.layout.memberSessions[data.modify];
14111412
if (data.group == null) {
1413+
14121414
updateUnassignedMemberCount(1);
14131415
}
14141416
} else if (existingMember != null && existingMember.group != null && data.group == null) {
@@ -1452,28 +1454,24 @@ modules["breakout/overview"] = class {
14521454
this.layout.updateMemberTile(this.parent.parent.collaborators[data.modify]);
14531455
}
14541456
}, { sort: 1 });
1455-
this.pipeline.subscribe("memberUpdate", "update", (data) => {
1456-
let member = this.parent.parent.members[data._id];
1457-
if (member == null || member.access > 3) {
1458-
return;
1459-
}
1460-
let groupMember = this.layout.members[member.modify];
1457+
let updateMember = (modify, data) => {
1458+
let groupMember = this.layout.members[modify];
14611459
if (groupMember == null) {
14621460
return;
14631461
}
14641462
if (data.hasOwnProperty("group") == true && data.group != groupMember.group) {
14651463
if (groupMember.group != null) {
14661464
let oldGroupTile = this.layout.tiles[groupMember.group] ?? {};
14671465
if (oldGroupTile.members != null) {
1468-
let index = oldGroupTile.members.indexOf(member.modify);
1466+
let index = oldGroupTile.members.indexOf(modify);
14691467
if (index > -1) {
14701468
oldGroupTile.members.splice(index, 1);
14711469
}
14721470
}
1473-
this.layout.removeMemberTile(member.modify);
14741471
} else if (data.group != null) {
14751472
updateUnassignedMemberCount(-1);
14761473
}
1474+
this.layout.removeMemberTile(modify);
14771475
groupMember.group = data.group;
14781476
if (data.group != null) {
14791477
let groupTile = this.layout.tiles[data.group];
@@ -1486,17 +1484,34 @@ modules["breakout/overview"] = class {
14861484
if (pending.includes(data.modify) == false) {
14871485
pending.push(data.modify);
14881486
}
1489-
} else if (groupTile.members != null && groupTile.members.includes(member.modify) == false) {
1490-
groupTile.members.push(member.modify);
1491-
this.layout.addMemberTile(member.modify);
1487+
} else if (groupTile.members != null && groupTile.members.includes(modify) == false) {
1488+
groupTile.members.push(modify);
1489+
this.layout.addMemberTile(modify);
14921490
}
1493-
} else {
1491+
} else if ((this.layout.memberSessions[modify] ?? []).length > 0) {
1492+
this.layout.addMemberTile(modify);
14941493
updateUnassignedMemberCount(1);
14951494
}
1496-
} else {
1497-
this.layout.updateMemberTile(member);
14981495
}
1496+
}
1497+
this.pipeline.subscribe("memberUpdate", "update", (data) => {
1498+
let member = this.parent.parent.members[data._id];
1499+
if (member == null || member.access > 3) {
1500+
return;
1501+
}
1502+
updateMember(member.modify, data);
14991503
}, { sort: 1 });
1504+
this.pipeline.subscribe("groupMemberMove", "move", (data) => {
1505+
let existingMember = this.layout.members[data.modify];
1506+
if (existingMember != null) {
1507+
existingMember = {
1508+
...data,
1509+
group: existingMember.group,
1510+
tile: existingMember.tile
1511+
};
1512+
updateMember(data.modify, { group: data.group });
1513+
}
1514+
});
15001515
this.pipeline.subscribe("memberLeave", "leave", (data) => {
15011516
if (data.member != null) {
15021517
if (data.member.access > 3) {
@@ -1510,8 +1525,10 @@ modules["breakout/overview"] = class {
15101525
}
15111526
if (session.length < 1) {
15121527
delete this.layout.memberSessions[data.member.modify];
1513-
this.layout.updateMemberTile(this.parent.parent.collaborators[data.member.modify]);
1514-
if (data.member.group == null) {
1528+
if (data.member.group != null) {
1529+
this.layout.updateMemberTile(this.parent.parent.collaborators[data.member.modify]);
1530+
} else {
1531+
this.layout.removeMemberTile(data.member.modify);
15151532
updateUnassignedMemberCount(-1);
15161533
}
15171534
}
@@ -1649,6 +1666,7 @@ modules["breakout/overview"] = class {
16491666
let originalRect = dragContext.tileData.tile.getBoundingClientRect();
16501667
if (moved != true) {
16511668
removeElement.style.transform = "translate(" + ((originalRect.x - pageRect.x) - (dragContext.lastX - dragContext.offsetX)) + "px, " + (originalRect.y - pageRect.y - dragContext.lastY + dragContext.offsetY) + "px) scale(.975)";
1669+
dragContext.tileData.tile.removeAttribute("disabled");
16521670
} else {
16531671
removeElement.style.transformOrigin = dragContext.offsetX + "px " + dragContext.offsetY + "px";
16541672
removeElement.style.transform = "translate(0px, 0px) scale(0)";
@@ -1659,7 +1677,6 @@ modules["breakout/overview"] = class {
16591677
button.removeAttribute("disabled");
16601678
}
16611679
})();
1662-
dragContext.tileData.tile.removeAttribute("disabled");
16631680
} else {
16641681
removeElement.style.transformOrigin = "center";
16651682
removeElement.style.transform = "translate(0px, 0px) scale(0)";
@@ -1784,11 +1801,20 @@ modules["breakout/overview"] = class {
17841801
if (dragContext.tileData.group == groupID) { // Same group:
17851802
return removeDrag();
17861803
}
1804+
let path = "lessons/breakout/move?collaborator=" + dragContext.tileData.modify;
1805+
if (groupID != null) {
1806+
path += "&group=" + groupID;
1807+
}
1808+
let revertTile = dragContext.tileData.tile;
17871809
removeDrag(true);
1788-
// Send request to change group
1810+
let [code] = await sendRequest("PUT", path, null, { session: this.parent.parent.session });
1811+
if (code != 200) {
1812+
if (revertTile != null) {
1813+
revertTile.removeAttribute("disabled");
1814+
}
1815+
}
17891816
return;
17901817
}
1791-
17921818
removeDrag();
17931819
}
17941820
this.pipeline.subscribe("dragMemberEnd", "click_end", (data) => { dragEnd(data.event); });

public/modules/lesson/breakout.js

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ modules["lesson/breakout"] = class {
2121
this.currentPage = id;
2222
this.currentPagePath = path;
2323

24-
let existingPage = this.frame.querySelector('.brPage[pageid="' + id + '"][path="' + path + '"]');
24+
let existingPage = this.frame.querySelector('.brPage[pageid="' + id + '"][path="' + path + '"]:not([hidden])');
2525
if (existingPage != null) {
2626
existingPage.removeAttribute("hidden");
2727
let page = this.pages[id];
@@ -56,10 +56,10 @@ modules["lesson/breakout"] = class {
5656
}
5757
closePage = (id) => {
5858
if (this.currentPage == id) {
59-
this.currentPage;
59+
this.currentPage = null;
6060
}
6161
if (this.currentPagePath == id) {
62-
this.currentPagePath;
62+
this.currentPagePath = null;
6363
}
6464
let pageData = this.pages[id] ?? {};
6565
if (pageData.onClose != null) {
@@ -213,9 +213,31 @@ modules["lesson/breakout"] = class {
213213
this.pipeline.publish("contextmenu", { event: event });
214214
});
215215

216+
this.pipeline.subscribe("selfMemberUpdate", "update", (data) => {
217+
if (data.hasOwnProperty("group") == false) {
218+
return;
219+
}
220+
let member = this.parent.members[data._id] ?? {};
221+
if (this.parent.self.modify != member.modify) {
222+
return;
223+
}
224+
if (this.parent.self.group != this.currentGroupID && this.parent.self.access < 4) {
225+
this.currentGroupID = this.parent.self.group;
226+
this.closePage("primary");
227+
if (this.parent.self.group != null) {
228+
this.openPage("primary", "breakout/group");
229+
alertModule.open("info", "<b>You've Been Moved</b>The lesson owner has moved you to a new team.");
230+
} else {
231+
this.openPage("primary", "breakout/groups");
232+
alertModule.open("info", "<b>You've Been Removed</b>The lesson owner has removed you from the team.");
233+
}
234+
}
235+
}, { sort: 1 });
236+
216237
// Initialize Breakout:
217238
if (this.parent.self.access < 4) { // Open to a Member View:
218239
if (this.parent.self.group != null) { // Open to the Group:
240+
this.currentGroupID = this.parent.self.group;
219241
await this.openPage("primary", "breakout/group");
220242
} else {
221243
await this.openPage("primary", "breakout/groups");

0 commit comments

Comments
 (0)