mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
98 lines
2.9 KiB
JavaScript
98 lines
2.9 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 './originalPosition.html';
|
|
|
|
/**
|
|
* Component to display original position information for swimlanes, lists, and cards
|
|
*/
|
|
class OriginalPositionComponent extends BlazeComponent {
|
|
onCreated() {
|
|
super.onCreated();
|
|
this.originalPosition = new ReactiveVar(null);
|
|
this.isLoading = new ReactiveVar(false);
|
|
this.hasMoved = new ReactiveVar(false);
|
|
|
|
this.autorun(() => {
|
|
const data = this.data();
|
|
if (data && data.entityId && data.entityType) {
|
|
this.loadOriginalPosition(data.entityId, data.entityType);
|
|
}
|
|
});
|
|
}
|
|
|
|
loadOriginalPosition(entityId, entityType) {
|
|
this.isLoading.set(true);
|
|
|
|
const methodName = `positionHistory.get${entityType.charAt(0).toUpperCase() + entityType.slice(1)}OriginalPosition`;
|
|
|
|
Meteor.call(methodName, entityId, (error, result) => {
|
|
this.isLoading.set(false);
|
|
if (error) {
|
|
console.error('Error loading original position:', error);
|
|
this.originalPosition.set(null);
|
|
} else {
|
|
this.originalPosition.set(result);
|
|
|
|
// Check if the entity has moved
|
|
const movedMethodName = `positionHistory.has${entityType.charAt(0).toUpperCase() + entityType.slice(1)}Moved`;
|
|
Meteor.call(movedMethodName, entityId, (movedError, movedResult) => {
|
|
if (!movedError) {
|
|
this.hasMoved.set(movedResult);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
getOriginalPosition() {
|
|
return this.originalPosition.get();
|
|
}
|
|
|
|
isLoading() {
|
|
return this.isLoading.get();
|
|
}
|
|
|
|
hasMovedFromOriginal() {
|
|
return this.hasMoved.get();
|
|
}
|
|
|
|
getOriginalPositionDescription() {
|
|
const position = this.getOriginalPosition();
|
|
if (!position) return 'No original position data';
|
|
|
|
if (position.originalPosition) {
|
|
const entityType = this.data().entityType;
|
|
let description = `Original position: ${position.originalPosition.sort || 0}`;
|
|
|
|
if (entityType === 'list' && position.originalSwimlaneId) {
|
|
description += ` in swimlane ${position.originalSwimlaneId}`;
|
|
} else if (entityType === 'card') {
|
|
if (position.originalSwimlaneId) {
|
|
description += ` in swimlane ${position.originalSwimlaneId}`;
|
|
}
|
|
if (position.originalListId) {
|
|
description += ` in list ${position.originalListId}`;
|
|
}
|
|
}
|
|
|
|
return description;
|
|
}
|
|
|
|
return 'No original position data';
|
|
}
|
|
|
|
getOriginalTitle() {
|
|
const position = this.getOriginalPosition();
|
|
return position ? position.originalTitle : '';
|
|
}
|
|
|
|
showOriginalPosition() {
|
|
return this.getOriginalPosition() !== null;
|
|
}
|
|
}
|
|
|
|
OriginalPositionComponent.register('originalPosition');
|
|
|
|
export default OriginalPositionComponent;
|