From efe50a65eedcaf912dc9bc40cbe3e53d0fcfa4f7 Mon Sep 17 00:00:00 2001 From: Nadav Tasher Date: Sat, 7 Dec 2024 18:59:01 +0200 Subject: [PATCH] Add list constraint support in set-width popup --- client/components/lists/listHeader.jade | 1 + client/components/lists/listHeader.js | 16 +++++++++++++-- models/users.js | 26 ++++++++++++++++++++++++- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 037d91fd9..9686330a6 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -191,6 +191,7 @@ template(name="setListWidthPopup") label {{_ 'set-list-width-value'}} p input.list-width-value(type="number" value="{{ listWidthValue }}" min="100") + input.list-constraint-value(type="number" value="{{ listConstraintValue }}" min="100") input.list-width-apply(type="submit" value="{{_ 'apply'}}") input.list-width-error diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index c50772e9a..027261675 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -347,14 +347,20 @@ BlazeComponent.extendComponent({ .val(), 10, ); + const constraint = parseInt( + Template.instance() + .$('.list-constraint-value') + .val(), + 10, + ); // FIXME(mark-i-m): where do we put constants? - if (width < 100 || !width) { + if (width < 100 || !width || constraint < 100 || !constraint) { Template.instance() .$('.list-width-error') .click(); } else { - Meteor.call('applyListWidth', board, list._id, width); + Meteor.call('applyListWidth', board, list._id, width, constraint); Popup.back(); } }, @@ -365,6 +371,12 @@ BlazeComponent.extendComponent({ return ReactiveCache.getCurrentUser().getListWidth(board, list._id); }, + listConstraintValue() { + const list = Template.currentData(); + const board = list.boardId; + return ReactiveCache.getCurrentUser().getListConstraint(board, list._id); + }, + events() { return [ { diff --git a/models/users.js b/models/users.js index c649d1c2d..2ecdb6f3b 100644 --- a/models/users.js +++ b/models/users.js @@ -417,6 +417,15 @@ Users.attachSchema( defaultValue: {}, blackbox: true, }, + 'profile.listConstraints': { + /** + * User-specified constraint of each list (or nothing if default). + * profile[boardId][listId] = constraint; + */ + type: Object, + defaultValue: {}, + blackbox: true, + }, 'profile.autoWidthBoards': { /** * User-specified flag for enabling auto-width for boards (false is the default). @@ -1173,6 +1182,19 @@ Users.mutations({ }; }, + setListConstraint(boardId, listId, constraint) { + let currentConstraints = this.getListConstraints(); + if (!currentConstraints[boardId]) { + currentConstraints[boardId] = {}; + } + currentConstraints[boardId][listId] = constraint; + return { + $set: { + 'profile.listConstraints': currentConstraints, + }, + }; + }, + setSwimlaneHeight(boardId, swimlaneId, height) { let currentHeights = this.getSwimlaneHeights(); if (!currentHeights[boardId]) { @@ -1224,12 +1246,14 @@ Meteor.methods({ check(startDay, Number); ReactiveCache.getCurrentUser().setStartDayOfWeek(startDay); }, - applyListWidth(boardId, listId, width) { + applyListWidth(boardId, listId, width, constraint) { check(boardId, String); check(listId, String); check(width, Number); + check(constraint, Number); const user = ReactiveCache.getCurrentUser(); user.setListWidth(boardId, listId, width); + user.setListConstraint(boardId, listId, constraint); }, applySwimlaneHeight(boardId, swimlaneId, height) { check(boardId, String);