Fix card issues with ReactiveCache when using keyboard shortcuts

When using ReactiveCache.getCard, a buggy instance of Card is returned.
The bug experienced is that .assignees and .members are not always up-to-date.

This can be reproduced by trying to hover over cards and triggering a keyboard
shortcut that interacts with a card.
This commit is contained in:
Nadav Tasher 2025-01-03 12:08:08 +02:00
parent 9516b75d65
commit e5e4b8ebfb

View file

@ -133,7 +133,7 @@ Mousetrap.bind(numbArray, (evt, key) => {
const cardIds = MultiSelection.getSelectedCardIds(); const cardIds = MultiSelection.getSelectedCardIds();
for (const cardId of cardIds) for (const cardId of cardIds)
{ {
card = ReactiveCache.getCard(cardId); card = Cards.findOne(cardId);
if(num <= board.labels.length) if(num <= board.labels.length)
{ {
card.removeLabel(labels[num-1]["_id"]); card.removeLabel(labels[num-1]["_id"]);
@ -157,7 +157,7 @@ Mousetrap.bind(numArray, (evt, key) => {
const cardIds = MultiSelection.getSelectedCardIds(); const cardIds = MultiSelection.getSelectedCardIds();
for (const cardId of cardIds) for (const cardId of cardIds)
{ {
card = ReactiveCache.getCard(cardId); card = Cards.findOne(cardId);
if(num <= board.labels.length) if(num <= board.labels.length)
{ {
card.addLabel(labels[num-1]["_id"]); card.addLabel(labels[num-1]["_id"]);
@ -171,7 +171,7 @@ Mousetrap.bind(numArray, (evt, key) => {
return; return;
} }
if (ReactiveCache.getCurrentUser().isBoardMember()) { if (ReactiveCache.getCurrentUser().isBoardMember()) {
const card = ReactiveCache.getCard(cardId); const card = Cards.findOne(cardId);
if(num <= board.labels.length) if(num <= board.labels.length)
{ {
card.toggleLabel(labels[num-1]["_id"]); card.toggleLabel(labels[num-1]["_id"]);
@ -197,14 +197,14 @@ Mousetrap.bind(_.range(1, 10).map(x => `ctrl+alt+${x}`), (evt, key) => {
if (MultiSelection.isActive()) { if (MultiSelection.isActive()) {
for (const cardId of MultiSelection.getSelectedCardIds()) for (const cardId of MultiSelection.getSelectedCardIds())
ReactiveCache.getCard(cardId).toggleAssignee(boardMembers[memberIndex]._id); Cards.findOne(cardId).toggleAssignee(boardMembers[memberIndex]._id);
} else { } else {
const cardId = getSelectedCardId(); const cardId = getSelectedCardId();
if (!cardId) if (!cardId)
return; return;
ReactiveCache.getCard(cardId).toggleAssignee(boardMembers[memberIndex]._id); Cards.findOne(cardId).toggleAssignee(boardMembers[memberIndex]._id);
} }
}); });
@ -220,7 +220,7 @@ Mousetrap.bind('m', evt => {
} }
if (ReactiveCache.getCurrentUser().isBoardMember()) { if (ReactiveCache.getCurrentUser().isBoardMember()) {
const card = ReactiveCache.getCard(cardId); const card = Cards.findOne(cardId);
card.toggleAssignee(currentUserId); card.toggleAssignee(currentUserId);
// We should prevent scrolling in card when spacebar is clicked // We should prevent scrolling in card when spacebar is clicked
// This should do it according to Mousetrap docs, but it doesn't // This should do it according to Mousetrap docs, but it doesn't
@ -240,7 +240,7 @@ Mousetrap.bind('space', evt => {
} }
if (ReactiveCache.getCurrentUser().isBoardMember()) { if (ReactiveCache.getCurrentUser().isBoardMember()) {
const card = ReactiveCache.getCard(cardId); const card = Cards.findOne(cardId);
card.toggleMember(currentUserId); card.toggleMember(currentUserId);
// We should prevent scrolling in card when spacebar is clicked // We should prevent scrolling in card when spacebar is clicked
// This should do it according to Mousetrap docs, but it doesn't // This should do it according to Mousetrap docs, but it doesn't
@ -260,7 +260,7 @@ const archiveCard = evt => {
} }
if (Utils.canModifyBoard()) { if (Utils.canModifyBoard()) {
const card = ReactiveCache.getCard(cardId); const card = Cards.findOne(cardId);
card.archive(); card.archive();
// We should prevent scrolling in card when spacebar is clicked // We should prevent scrolling in card when spacebar is clicked
// This should do it according to Mousetrap docs, but it doesn't // This should do it according to Mousetrap docs, but it doesn't
@ -289,7 +289,7 @@ Mousetrap.bind('n', evt => {
if (Utils.canModifyBoard()) { if (Utils.canModifyBoard()) {
// Find the current hovered card // Find the current hovered card
const card = ReactiveCache.getCard(cardId); const card = Cards.findOne(cardId);
// Find the button and click it // Find the button and click it
$(`#js-list-${card.listId} .list-body .minicards .open-minicard-composer`).click(); $(`#js-list-${card.listId} .list-body .minicards .open-minicard-composer`).click();