From 5f2820d7e0a12a0d1ef22c29ddc137b442928347 Mon Sep 17 00:00:00 2001 From: helioguardabaxo Date: Fri, 15 Apr 2022 13:19:37 -0300 Subject: [PATCH 1/2] Added members list and board card count per list on My Boards --- client/components/boards/boardsList.jade | 11 +++++ client/components/boards/boardsList.js | 20 +++++++++ client/components/boards/boardsList.styl | 23 ++++++++++ client/components/sidebar/sidebar.jade | 21 +++++++++ client/components/sidebar/sidebar.js | 55 ++++++++++++++++++++++++ i18n/en.i18n.json | 1 + models/boards.js | 22 ++++++++++ server/migrations.js | 33 ++++++++++++++ 8 files changed, 186 insertions(+) diff --git a/client/components/boards/boardsList.jade b/client/components/boards/boardsList.jade index 30d28d8cb..1b502f9ea 100644 --- a/client/components/boards/boardsList.jade +++ b/client/components/boards/boardsList.jade @@ -94,6 +94,17 @@ template(name="boardList") span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}") +viewer = title + unless isMiniScreen + if allowsBoardMemberList + .minicard-members + each member in boardMembers _id + a.name + +userAvatar(userId=member noRemove=true) + if allowsCardCounterList + .minicard-lists.flex.flex-wrap + each list in boardLists _id + .item + | {{ list }} i.fa.js-star-board( class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}" title="{{_ 'star-board-title'}}") diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js index 467e5686a..7c44d3cd6 100644 --- a/client/components/boards/boardsList.js +++ b/client/components/boards/boardsList.js @@ -194,6 +194,26 @@ BlazeComponent.extendComponent({ sort: { sort: 1 /* boards default sorting */ }, }); }, + boardLists(boardId) { + let boardLists = []; + const lists = Lists.find({'boardId' : boardId}) + lists.forEach(list => { + let cardCount = Cards.find({'boardId':boardId, 'listId':list._id}).count() + boardLists.push(`${list.title}: ${cardCount}`); + }); + return boardLists + }, + + boardMembers(boardId) { + let boardMembers = []; + const lists = Boards.findOne({'_id' : boardId}) + let members = lists.members + members.forEach(member => { + boardMembers.push(member.userId); + }); + return boardMembers + }, + isStarred() { const user = Meteor.user(); return user && user.hasStarred(this.currentData()._id); diff --git a/client/components/boards/boardsList.styl b/client/components/boards/boardsList.styl index 70f2e3e90..1af4c6293 100644 --- a/client/components/boards/boardsList.styl +++ b/client/components/boards/boardsList.styl @@ -251,3 +251,26 @@ $spaceBetweenTiles = 16px .js-board display: block; + +.minicard-members + padding: 6px 0 6px 8px + width: 100% + margin-bottom: 2px + margin-left: -4px + display: inline-block + +.minicard-lists + margin: 0 auto + max-width: 95% + height: 100% + +.flex + display: flex + +.flex-wrap + flex-wrap: wrap + + .item + margin: 2px; + padding-right: 6px + text-align: center diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index fa1dde411..aee5963c6 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -138,6 +138,22 @@ template(name="boardChangeColorPopup") if isSelected i.fa.fa-check +template(name="boardInfoOnMyBoardsPopup") + form.board-info-on-my-boards + h3 {{_ 'board-info-on-my-boards'}} + div.check-div + a.flex.js-field-has-cardcounterlist(class="{{#if allowsCardCounterList}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsCardCounterList}}is-checked{{/if}}") + span + i.fa.fa-sign-out + | {{_ 'Show card counter per list'}} + div.check-div + a.flex.js-field-has-boardmemberlist(class="{{#if allowsBoardMember}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsBoardMember}}is-checked{{/if}}") + span + i.fa.fa-hourglass-start + | {{_ 'Show Board member avatars'}} + template(name="boardCardSettingsPopup") form.board-card-settings h3 {{_ 'show-on-card'}} @@ -387,6 +403,11 @@ template(name="boardMenuPopup") a.js-change-board-color i.fa.fa-paint-brush | {{_ 'board-change-color'}} + if currentUser.isBoardAdmin + li + a.js-board-info-on-my-boards(title="{{_ 'board-info-on-my-boards'}}") + i.fa.fa-paint-brush + | {{_ 'board-info-on-my-boards'}} hr ul.pop-over-list if withApi diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index d8c0721fd..0894c250e 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -199,6 +199,7 @@ Template.boardMenuPopup.events({ Popup.back(); }, 'click .js-change-board-color': Popup.open('boardChangeColor'), + 'click .js-board-info-on-my-boards': Popup.open('boardInfoOnMyBoards'), 'click .js-change-language': Popup.open('changeLanguage'), 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() { const currentBoard = Boards.findOne(Session.get('currentBoard')); @@ -648,6 +649,60 @@ BlazeComponent.extendComponent({ }, }).register('boardChangeColorPopup'); +BlazeComponent.extendComponent({ + onCreated() { + this.currentBoard = Boards.findOne(Session.get('currentBoard')); + }, + + allowsCardCounterList() { + return this.currentBoard.allowsCardCounterList; + }, + + allowsBoardMemberList() { + return this.currentBoard.allowsBoardMemberList; + }, + + events() { + return [ + { + 'click .js-field-has-cardcounterlist'(evt) { + evt.preventDefault(); + this.currentBoard.allowsCardCounterList = !this.currentBoard + .allowsCardCounterList; + this.currentBoard.setAllowsCardCounterList( + this.currentBoard.allowsCardCounterList, + ); + $(`.js-field-has-cardcounterlist ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsCardCounterList, + ); + $('.js-field-has-cardcounterlist').toggleClass( + CKCLS, + this.currentBoard.allowsCardCounterList, + ); + }, + + 'click .js-field-has-boardmemberlist'(evt) { + evt.preventDefault(); + this.currentBoard.allowsBoardMemberList = !this.currentBoard + .allowsBoardMemberList; + this.currentBoard.setAllowsBoardMemberList( + this.currentBoard.allowsBoardMemberList, + ); + $(`.js-field-has-boardmemberlist ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsBoardMemberList, + ); + $('.js-field-has-boardmemberlist').toggleClass( + CKCLS, + this.currentBoard.allowsBoardMemberList, + ); + }, + }, + ]; + }, +}).register('boardInfoOnMyBoardsPopup'); + BlazeComponent.extendComponent({ onCreated() { this.currentBoard = Boards.findOne(Session.get('currentBoard')); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index f365c21f2..a2cc81011 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -135,6 +135,7 @@ "avatar-too-big": "The avatar is too large (520KB max)", "back": "Back", "board-change-color": "Change color", + "board-info-on-my-boards" : "Board info on My Boards", "board-nb-stars": "%s stars", "board-not-found": "Board not found", "board-private-info": "This board will be private.", diff --git a/models/boards.js b/models/boards.js index bc7d18972..8b7c2a927 100644 --- a/models/boards.js +++ b/models/boards.js @@ -292,6 +292,20 @@ Boards.attachSchema( } }, }, + allowsCardCounterList: { + /** + * Show card counter per list + */ + type: Boolean, + defaultValue: false, + }, + allowsBoardMemberList: { + /** + * Show board member list + */ + type: Boolean, + defaultValue: false, + }, description: { /** * The description of the board @@ -1434,6 +1448,14 @@ Boards.mutations({ return { $set: { allowsReceivedDate } }; }, + setAllowsCardCounterList(allowsCardCounterList) { + return { $set: { allowsCardCounterList } }; + }, + + setAllowsBoardMemberList(allowsBoardMemberList) { + return { $set: { allowsBoardMemberList } }; + }, + setAllowsStartDate(allowsStartDate) { return { $set: { allowsStartDate } }; }, diff --git a/server/migrations.js b/server/migrations.js index e97064a45..848a0c8d9 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -73,6 +73,39 @@ Migrations.add('board-background-color', () => { ); }); +Migrations.add('add-cardcounterlist-allowed', () => { + Boards.update( + { + allowsCardCounterList: { + $exists: false, + }, + }, + { + $set: { + allowsCardCounterList: true, + }, + }, + noValidateMulti, + ); +}); + +Migrations.add('add-boardmemberlist-allowed', () => { + Boards.update( + { + allowsBoardMemberList: { + $exists: false, + }, + }, + { + $set: { + allowsBoardMemberList: true, + }, + }, + noValidateMulti, + ); +}); + + Migrations.add('lowercase-board-permission', () => { ['Public', 'Private'].forEach(permission => { Boards.update( From ab077e7eb9612707a0fd6bab60e966ced36e3d43 Mon Sep 17 00:00:00 2001 From: helioguardabaxo Date: Fri, 15 Apr 2022 13:38:24 -0300 Subject: [PATCH 2/2] Fix strings to be translate --- client/components/sidebar/sidebar.jade | 4 ++-- i18n/en.i18n.json | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index aee5963c6..ac8ad1907 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -146,13 +146,13 @@ template(name="boardInfoOnMyBoardsPopup") .materialCheckBox(class="{{#if allowsCardCounterList}}is-checked{{/if}}") span i.fa.fa-sign-out - | {{_ 'Show card counter per list'}} + | {{_ 'show-card-counter-per-list'}} div.check-div a.flex.js-field-has-boardmemberlist(class="{{#if allowsBoardMember}}is-checked{{/if}}") .materialCheckBox(class="{{#if allowsBoardMember}}is-checked{{/if}}") span i.fa.fa-hourglass-start - | {{_ 'Show Board member avatars'}} + | {{_ 'show-board_members-avatar'}} template(name="boardCardSettingsPopup") form.board-card-settings diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index a2cc81011..11bb4c951 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -136,6 +136,8 @@ "back": "Back", "board-change-color": "Change color", "board-info-on-my-boards" : "Board info on My Boards", + "show-card-counter-per-list": "Show card counter per list", + "show-board_members-avatar": "Show Board members avatars", "board-nb-stars": "%s stars", "board-not-found": "Board not found", "board-private-info": "This board will be private.",