originalPositionsView.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { BlazeComponent } from 'meteor/peerlibrary:blaze-components';
  2. import { ReactiveVar } from 'meteor/reactive-var';
  3. import { Meteor } from 'meteor/meteor';
  4. import { Template } from 'meteor/templating';
  5. import './originalPositionsView.html';
  6. /**
  7. * Component to display original positions for all entities on a board
  8. */
  9. class OriginalPositionsViewComponent extends BlazeComponent {
  10. onCreated() {
  11. super.onCreated();
  12. this.showOriginalPositions = new ReactiveVar(false);
  13. this.boardHistory = new ReactiveVar([]);
  14. this.isLoading = new ReactiveVar(false);
  15. this.filterType = new ReactiveVar('all'); // 'all', 'swimlane', 'list', 'card'
  16. }
  17. onRendered() {
  18. super.onRendered();
  19. this.loadBoardHistory();
  20. }
  21. loadBoardHistory() {
  22. const boardId = Session.get('currentBoard');
  23. if (!boardId) return;
  24. this.isLoading.set(true);
  25. Meteor.call('positionHistory.getBoardHistory', boardId, (error, result) => {
  26. this.isLoading.set(false);
  27. if (error) {
  28. console.error('Error loading board history:', error);
  29. this.boardHistory.set([]);
  30. } else {
  31. this.boardHistory.set(result);
  32. }
  33. });
  34. }
  35. toggleOriginalPositions() {
  36. this.showOriginalPositions.set(!this.showOriginalPositions.get());
  37. }
  38. isShowingOriginalPositions() {
  39. return this.showOriginalPositions.get();
  40. }
  41. isLoading() {
  42. return this.isLoading.get();
  43. }
  44. getBoardHistory() {
  45. return this.boardHistory.get();
  46. }
  47. getFilteredHistory() {
  48. const history = this.getBoardHistory();
  49. const filterType = this.filterType.get();
  50. if (filterType === 'all') {
  51. return history;
  52. }
  53. return history.filter(item => item.entityType === filterType);
  54. }
  55. getSwimlanesHistory() {
  56. return this.getBoardHistory().filter(item => item.entityType === 'swimlane');
  57. }
  58. getListsHistory() {
  59. return this.getBoardHistory().filter(item => item.entityType === 'list');
  60. }
  61. getCardsHistory() {
  62. return this.getBoardHistory().filter(item => item.entityType === 'card');
  63. }
  64. setFilterType(type) {
  65. this.filterType.set(type);
  66. }
  67. getFilterType() {
  68. return this.filterType.get();
  69. }
  70. getEntityDisplayName(entity) {
  71. const position = entity.originalPosition || {};
  72. return position.title || `Entity ${entity.entityId}`;
  73. }
  74. getEntityOriginalPositionDescription(entity) {
  75. const position = entity.originalPosition || {};
  76. let description = `Position: ${position.sort || 0}`;
  77. if (entity.entityType === 'list' && entity.originalSwimlaneId) {
  78. description += ` in swimlane ${entity.originalSwimlaneId}`;
  79. } else if (entity.entityType === 'card') {
  80. if (entity.originalSwimlaneId) {
  81. description += ` in swimlane ${entity.originalSwimlaneId}`;
  82. }
  83. if (entity.originalListId) {
  84. description += ` in list ${entity.originalListId}`;
  85. }
  86. }
  87. return description;
  88. }
  89. getEntityTypeIcon(entityType) {
  90. switch (entityType) {
  91. case 'swimlane':
  92. return 'fa-bars';
  93. case 'list':
  94. return 'fa-columns';
  95. case 'card':
  96. return 'fa-sticky-note';
  97. default:
  98. return 'fa-question';
  99. }
  100. }
  101. getEntityTypeLabel(entityType) {
  102. switch (entityType) {
  103. case 'swimlane':
  104. return 'Swimlane';
  105. case 'list':
  106. return 'List';
  107. case 'card':
  108. return 'Card';
  109. default:
  110. return 'Unknown';
  111. }
  112. }
  113. formatDate(date) {
  114. return new Date(date).toLocaleString();
  115. }
  116. refreshHistory() {
  117. this.loadBoardHistory();
  118. }
  119. }
  120. OriginalPositionsViewComponent.register('originalPositionsView');
  121. export default OriginalPositionsViewComponent;