dueCards.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. BlazeComponent.extendComponent({
  2. dueCardsView() {
  3. // eslint-disable-next-line no-console
  4. // console.log('sort:', Utils.dueCardsView());
  5. return Utils.dueCardsView();
  6. },
  7. events() {
  8. return [
  9. {
  10. 'click .js-toggle-my-cards-choose-sort'() {
  11. // eslint-disable-next-line no-console
  12. // console.log('open sort');
  13. // Popup.open('dueCardsViewChange');
  14. Utils.dueCardsViewToggle();
  15. },
  16. },
  17. ];
  18. },
  19. }).register('dueCardsHeaderBar');
  20. Template.dueCards.helpers({
  21. userId() {
  22. return Meteor.userId();
  23. },
  24. });
  25. BlazeComponent.extendComponent({
  26. events() {
  27. return [
  28. {
  29. 'click .js-my-cards-sort-board'() {
  30. Utils.setMyCardsSort('board');
  31. Popup.close();
  32. },
  33. 'click .js-my-cards-sort-dueat'() {
  34. Utils.setMyCardsSort('dueAt');
  35. Popup.close();
  36. },
  37. },
  38. ];
  39. },
  40. }).register('dueCardsViewChangePopup');
  41. BlazeComponent.extendComponent({
  42. onCreated() {
  43. Meteor.subscribe('setting');
  44. Meteor.subscribe('dueCards');
  45. },
  46. dueCardsView() {
  47. // eslint-disable-next-line no-console
  48. console.log('sort:', Utils.dueCardsView());
  49. return Utils.dueCardsView();
  50. },
  51. sortByBoard() {
  52. return this.dueCardsView() === 'board';
  53. },
  54. dueCardsList() {
  55. const allUsers = false;
  56. const user = Meteor.user();
  57. const archivedBoards = [];
  58. Boards.find({ archived: true }).forEach(board => {
  59. archivedBoards.push(board._id);
  60. });
  61. const permiitedBoards = [];
  62. let selector = {
  63. archived: false,
  64. };
  65. // if user is not an admin allow her to see cards only from public boards
  66. // or those where she is a member
  67. if (!user.isAdmin) {
  68. selector.$or = [
  69. { permission: 'public' },
  70. { members: { $elemMatch: { userId: user._id, isActive: true } } },
  71. ];
  72. }
  73. Boards.find(selector).forEach(board => {
  74. permiitedBoards.push(board._id);
  75. });
  76. const archivedSwimlanes = [];
  77. Swimlanes.find({ archived: true }).forEach(swimlane => {
  78. archivedSwimlanes.push(swimlane._id);
  79. });
  80. const archivedLists = [];
  81. Lists.find({ archived: true }).forEach(list => {
  82. archivedLists.push(list._id);
  83. });
  84. selector = {
  85. archived: false,
  86. boardId: {
  87. $nin: archivedBoards,
  88. $in: permiitedBoards,
  89. },
  90. swimlaneId: { $nin: archivedSwimlanes },
  91. listId: { $nin: archivedLists },
  92. dueAt: { $ne: null },
  93. endAt: null,
  94. };
  95. if (!allUsers) {
  96. selector.$or = [{ members: user._id }, { assignees: user._id }];
  97. }
  98. const cards = [];
  99. // eslint-disable-next-line no-console
  100. // console.log('cards selector:', selector);
  101. Cards.find(selector).forEach(card => {
  102. cards.push(card);
  103. // eslint-disable-next-line no-console
  104. // console.log(
  105. // 'board:',
  106. // card.board(),
  107. // 'swimlane:',
  108. // card.swimlane(),
  109. // 'list:',
  110. // card.list(),
  111. // );
  112. });
  113. cards.sort((a, b) => {
  114. const x = a.dueAt === null ? Date('2100-12-31') : a.dueAt;
  115. const y = b.dueAt === null ? Date('2100-12-31') : b.dueAt;
  116. if (x > y) return 1;
  117. else if (x < y) return -1;
  118. return 0;
  119. });
  120. // eslint-disable-next-line no-console
  121. // console.log('cards:', cards);
  122. return cards;
  123. },
  124. }).register('dueCards');