dueCards.js 3.2 KB

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