1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 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;
|