| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | import { BlazeComponent } from 'meteor/peerlibrary:blaze-components';import { ReactiveVar } from 'meteor/reactive-var';import { Meteor } from 'meteor/meteor';import { Template } from 'meteor/templating';import './originalPositionsView.html';/** * Component to display original positions for all entities on a board */class OriginalPositionsViewComponent extends BlazeComponent {  onCreated() {    super.onCreated();    this.showOriginalPositions = new ReactiveVar(false);    this.boardHistory = new ReactiveVar([]);    this.isLoading = new ReactiveVar(false);    this.filterType = new ReactiveVar('all'); // 'all', 'swimlane', 'list', 'card'  }  onRendered() {    super.onRendered();    this.loadBoardHistory();  }  loadBoardHistory() {    const boardId = Session.get('currentBoard');    if (!boardId) return;    this.isLoading.set(true);        Meteor.call('positionHistory.getBoardHistory', boardId, (error, result) => {      this.isLoading.set(false);      if (error) {        console.error('Error loading board history:', error);        this.boardHistory.set([]);      } else {        this.boardHistory.set(result);      }    });  }  toggleOriginalPositions() {    this.showOriginalPositions.set(!this.showOriginalPositions.get());  }  isShowingOriginalPositions() {    return this.showOriginalPositions.get();  }  isLoading() {    return this.isLoading.get();  }  getBoardHistory() {    return this.boardHistory.get();  }  getFilteredHistory() {    const history = this.getBoardHistory();    const filterType = this.filterType.get();        if (filterType === 'all') {      return history;    }        return history.filter(item => item.entityType === filterType);  }  getSwimlanesHistory() {    return this.getBoardHistory().filter(item => item.entityType === 'swimlane');  }  getListsHistory() {    return this.getBoardHistory().filter(item => item.entityType === 'list');  }  getCardsHistory() {    return this.getBoardHistory().filter(item => item.entityType === 'card');  }  setFilterType(type) {    this.filterType.set(type);  }  getFilterType() {    return this.filterType.get();  }  getEntityDisplayName(entity) {    const position = entity.originalPosition || {};    return position.title || `Entity ${entity.entityId}`;  }  getEntityOriginalPositionDescription(entity) {    const position = entity.originalPosition || {};    let description = `Position: ${position.sort || 0}`;        if (entity.entityType === 'list' && entity.originalSwimlaneId) {      description += ` in swimlane ${entity.originalSwimlaneId}`;    } else if (entity.entityType === 'card') {      if (entity.originalSwimlaneId) {        description += ` in swimlane ${entity.originalSwimlaneId}`;      }      if (entity.originalListId) {        description += ` in list ${entity.originalListId}`;      }    }        return description;  }  getEntityTypeIcon(entityType) {    switch (entityType) {      case 'swimlane':        return 'fa-bars';      case 'list':        return 'fa-columns';      case 'card':        return 'fa-sticky-note';      default:        return 'fa-question';    }  }  getEntityTypeLabel(entityType) {    switch (entityType) {      case 'swimlane':        return 'Swimlane';      case 'list':        return 'List';      case 'card':        return 'Card';      default:        return 'Unknown';    }  }  formatDate(date) {    return new Date(date).toLocaleString();  }  refreshHistory() {    this.loadBoardHistory();  }}OriginalPositionsViewComponent.register('originalPositionsView');export default OriginalPositionsViewComponent;
 |