mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 23:40:13 +01:00
148 lines
3.6 KiB
JavaScript
148 lines
3.6 KiB
JavaScript
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;
|