| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- /**
- * Migration Progress Component
- * Displays detailed progress for comprehensive board migration
- */
- import { ReactiveVar } from 'meteor/reactive-var';
- import { ReactiveCache } from '/imports/reactiveCache';
- // Reactive variables for migration progress
- export const migrationProgress = new ReactiveVar(0);
- export const migrationStatus = new ReactiveVar('');
- export const migrationStepName = new ReactiveVar('');
- export const migrationStepProgress = new ReactiveVar(0);
- export const migrationStepStatus = new ReactiveVar('');
- export const migrationStepDetails = new ReactiveVar(null);
- export const migrationCurrentStep = new ReactiveVar(0);
- export const migrationTotalSteps = new ReactiveVar(0);
- export const isMigrating = new ReactiveVar(false);
- class MigrationProgressManager {
- constructor() {
- this.progressHistory = [];
- }
- /**
- * Update migration progress
- */
- updateProgress(progressData) {
- const {
- overallProgress,
- currentStep,
- totalSteps,
- stepName,
- stepProgress,
- stepStatus,
- stepDetails,
- boardId
- } = progressData;
- // Update reactive variables
- migrationProgress.set(overallProgress);
- migrationCurrentStep.set(currentStep);
- migrationTotalSteps.set(totalSteps);
- migrationStepName.set(stepName);
- migrationStepProgress.set(stepProgress);
- migrationStepStatus.set(stepStatus);
- migrationStepDetails.set(stepDetails);
- // Store in history
- this.progressHistory.push({
- timestamp: new Date(),
- ...progressData
- });
- // Update overall status
- migrationStatus.set(`${stepName}: ${stepStatus}`);
- }
- /**
- * Start migration
- */
- startMigration() {
- isMigrating.set(true);
- migrationProgress.set(0);
- migrationStatus.set('Starting migration...');
- migrationStepName.set('');
- migrationStepProgress.set(0);
- migrationStepStatus.set('');
- migrationStepDetails.set(null);
- migrationCurrentStep.set(0);
- migrationTotalSteps.set(0);
- this.progressHistory = [];
- }
- /**
- * Complete migration
- */
- completeMigration() {
- isMigrating.set(false);
- migrationProgress.set(100);
- migrationStatus.set('Migration completed successfully!');
-
- // Clear step details after a delay
- setTimeout(() => {
- migrationStepName.set('');
- migrationStepProgress.set(0);
- migrationStepStatus.set('');
- migrationStepDetails.set(null);
- migrationCurrentStep.set(0);
- migrationTotalSteps.set(0);
- }, 3000);
- }
- /**
- * Fail migration
- */
- failMigration(error) {
- isMigrating.set(false);
- migrationStatus.set(`Migration failed: ${error.message || error}`);
- migrationStepStatus.set('Error occurred');
- }
- /**
- * Get progress history
- */
- getProgressHistory() {
- return this.progressHistory;
- }
- /**
- * Clear progress
- */
- clearProgress() {
- isMigrating.set(false);
- migrationProgress.set(0);
- migrationStatus.set('');
- migrationStepName.set('');
- migrationStepProgress.set(0);
- migrationStepStatus.set('');
- migrationStepDetails.set(null);
- migrationCurrentStep.set(0);
- migrationTotalSteps.set(0);
- this.progressHistory = [];
- }
- }
- // Export singleton instance
- export const migrationProgressManager = new MigrationProgressManager();
- // Template helpers
- Template.migrationProgress.helpers({
- isMigrating() {
- return isMigrating.get();
- },
- overallProgress() {
- return migrationProgress.get();
- },
- overallStatus() {
- return migrationStatus.get();
- },
- currentStep() {
- return migrationCurrentStep.get();
- },
- totalSteps() {
- return migrationTotalSteps.get();
- },
- stepName() {
- return migrationStepName.get();
- },
- stepProgress() {
- return migrationStepProgress.get();
- },
- stepStatus() {
- return migrationStepStatus.get();
- },
- stepDetails() {
- return migrationStepDetails.get();
- },
- progressBarStyle() {
- const progress = migrationProgress.get();
- return `width: ${progress}%`;
- },
- stepProgressBarStyle() {
- const progress = migrationStepProgress.get();
- return `width: ${progress}%`;
- },
- stepNameFormatted() {
- const stepName = migrationStepName.get();
- if (!stepName) return '';
-
- // Convert snake_case to Title Case
- return stepName
- .split('_')
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
- .join(' ');
- },
- stepDetailsFormatted() {
- const details = migrationStepDetails.get();
- if (!details) return '';
-
- const formatted = [];
- for (const [key, value] of Object.entries(details)) {
- const formattedKey = key
- .split(/(?=[A-Z])/)
- .join(' ')
- .toLowerCase()
- .replace(/^\w/, c => c.toUpperCase());
- formatted.push(`${formattedKey}: ${value}`);
- }
-
- return formatted.join(', ');
- }
- });
- // Template events
- Template.migrationProgress.events({
- 'click .js-close-migration-progress'() {
- migrationProgressManager.clearProgress();
- }
- });
|