Throttle kanban refresh on remote changes

pull/1/head
yflory 4 years ago
parent d4fa64a1bf
commit b6ccff28db

@ -133,6 +133,12 @@ define([
return tags; return tags;
}; };
var updateBoards = Util.throttle(function (framework, kanban, boards) {
kanban.setBoards(Util.clone(boards));
kanban.inEditMode = false;
addEditItemButton(framework, kanban);
}, 500);
var addEditItemButton = function () {}; var addEditItemButton = function () {};
var onRemoteChange = Util.mkEvent(); var onRemoteChange = Util.mkEvent();
var editModal; var editModal;
@ -146,10 +152,9 @@ define([
var isBoard, id; var isBoard, id;
var offline = false; var offline = false;
var update = Util.throttle(function () { var update = function () {
kanban.setBoards(kanban.options.boards); updateBoards(framework, kanban, kanban.options.boards);
addEditItemButton(framework, kanban); };
}, 400);
var commit = function () { var commit = function () {
framework.localChange(); framework.localChange();
@ -830,7 +835,8 @@ define([
openLink: openLink, openLink: openLink,
getTags: getExistingTags, getTags: getExistingTags,
cursors: remoteCursors, cursors: remoteCursors,
boards: boards boards: boards,
_boards: Util.clone(boards),
}); });
framework._.cpNfInner.metadataMgr.onChange(function () { framework._.cpNfInner.metadataMgr.onChange(function () {
@ -841,7 +847,7 @@ define([
// If the rendering has changed, update the value and redraw // If the rendering has changed, update the value and redraw
kanban.options.tagsAnd = tagsAnd; kanban.options.tagsAnd = tagsAnd;
_tagsAnd = tagsAnd; _tagsAnd = tagsAnd;
kanban.setBoards(kanban.options.boards); updateBoards(kanban.options.boards);
}); });
if (migrated) { framework.localChange(); } if (migrated) { framework.localChange(); }
@ -1166,9 +1172,8 @@ define([
if (Sortify(currentContent) !== Sortify(remoteContent)) { if (Sortify(currentContent) !== Sortify(remoteContent)) {
var cursor = getCursor(); var cursor = getCursor();
verbose("Content is different.. Applying content"); verbose("Content is different.. Applying content");
kanban.setBoards(remoteContent); kanban.options.boards = remoteContent;
kanban.inEditMode = false; updateBoards(framework, kanban, remoteContent);
addEditItemButton(framework, kanban);
restoreCursor(cursor); restoreCursor(cursor);
onRemoteChange.fire(); onRemoteChange.fire();
} }

@ -32,7 +32,8 @@ define([
data: {}, data: {},
items: {}, items: {},
list: [] list: []
}, }, // The realtime kanban
_boards: {}, // The displayed kanban. We need to remember the old columns when we redraw
getAvatar: function () {}, getAvatar: function () {},
openLink: function () {}, openLink: function () {},
getTags: function () {}, getTags: function () {},
@ -707,21 +708,29 @@ define([
}; };
this.addBoard = function (board) { this.addBoard = function (board) {
if (!board || !board.id) { return; } if (!board || !board.id) { return; }
// We need to store all the columns in _boards too because it's used to
// remember what columns were already displayed when we redraw (in order to
// preserve their scroll value)
var boards = self.options.boards; var boards = self.options.boards;
boards.data = boards.data || {}; boards.data = boards.data || {};
boards.list = boards.list || []; boards.list = boards.list || [];
var _boards = self.options._boards;
_boards.data = _boards.data || {};
_boards.list = _boards.list || [];
// If it already there, abort // If it already there, abort
boards.data[board.id] = board; boards.data[board.id] = board;
_boards.data[board.id] = board;
if (boards.list.indexOf(board.id) !== -1) { return; } if (boards.list.indexOf(board.id) !== -1) { return; }
boards.list.push(board.id); boards.list.push(board.id);
_boards.list.push(board.id);
var boardNode = getBoardNode(board); var boardNode = getBoardNode(board);
self.container.appendChild(boardNode); self.container.appendChild(boardNode);
}; };
this.addBoards = function() { this.addBoards = function() {
//for on all the boards //for on all the boards
var boards = self.options.boards; var boards = self.options._boards;
boards.list = boards.list || []; boards.list = boards.list || [];
boards.data = boards.data || {}; boards.data = boards.data || {};
var toRemove = []; var toRemove = [];
@ -759,10 +768,10 @@ define([
var $el = $(self.element); var $el = $(self.element);
var scrollLeft = $el.scrollLeft(); var scrollLeft = $el.scrollLeft();
// Get existing boards list // Get existing boards list
var list = Util.clone(this.options.boards.list); var list = Util.clone(this.options._boards.list);
// Update memory // Update memory
this.options.boards = boards; this.options._boards = boards;
// If the tab is not focused but a handler already exists: abort // If the tab is not focused but a handler already exists: abort
if (!Visible.currently() && onVisibleHandler) { return; } if (!Visible.currently() && onVisibleHandler) { return; }
@ -779,7 +788,7 @@ define([
self.addBoards(); self.addBoards();
self.options.refresh(); self.options.refresh();
// Preserve scroll // Preserve scroll
self.options.boards.list.forEach(function (id) { self.options._boards.list.forEach(function (id) {
if (!scroll[id]) { return; } if (!scroll[id]) { return; }
$('.kanban-board[data-id="'+id+'"] .kanban-drag').scrollTop(scroll[id]); $('.kanban-board[data-id="'+id+'"] .kanban-drag').scrollTop(scroll[id]);
}); });

Loading…
Cancel
Save