The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/app/importer/client/admin/adminImportProgress.js

85 lines
2.3 KiB

import { Meteor } from 'meteor/meteor';
import { ReactiveVar } from 'meteor/reactive-var';
import { Importers, ImporterWebsocketReceiver, ProgressStep } from '..';
import { FlowRouter } from 'meteor/kadira:flow-router';
import { Template } from 'meteor/templating';
import toastr from 'toastr';
import { t, handleError } from '../../../utils';
Template.adminImportProgress.helpers({
step() {
return Template.instance().step.get();
},
completed() {
return Template.instance().completed.get();
},
total() {
return Template.instance().total.get();
},
});
Template.adminImportProgress.onCreated(function() {
const instance = this;
this.step = new ReactiveVar(t('Loading...'));
this.completed = new ReactiveVar(0);
this.total = new ReactiveVar(0);
// Ensure there is an importer how they're accessing it
const key = FlowRouter.getParam('importer').toLowerCase();
if (key === '' || !Importers.get(key)) {
FlowRouter.go('/admin/import');
return;
}
function _updateProgress(progress) {
switch (progress.step) {
case ProgressStep.DONE:
toastr.success(t(progress.step[0].toUpperCase() + progress.step.slice(1)));
return FlowRouter.go('/admin/import');
case ProgressStep.ERROR:
toastr.error(t(progress.step[0].toUpperCase() + progress.step.slice(1)));
return FlowRouter.go(`/admin/import/prepare/${ key }`);
default:
instance.step.set(t(progress.step[0].toUpperCase() + progress.step.slice(1)));
instance.completed.set(progress.count.completed);
instance.total.set(progress.count.total);
break;
}
}
this.progressUpdated = function _progressUpdated(progress) {
if (progress.key.toLowerCase() !== key) {
return;
}
_updateProgress(progress);
};
Meteor.call('getImportProgress', key, function(error, progress) {
if (error) {
console.warn('Error on getting the import progress:', error);
handleError(error);
return FlowRouter.go('/admin/import');
}
if (!progress) {
toastr.warning(t('Importer_not_in_progress'));
return FlowRouter.go(`/admin/import/prepare/${ key }`);
}
const whereTo = _updateProgress(progress);
if (!whereTo) {
ImporterWebsocketReceiver.registerCallback(instance.progressUpdated);
}
});
});
Template.adminImportProgress.onDestroyed(function() {
const instance = this;
ImporterWebsocketReceiver.unregisterCallback(instance.progressUpdated);
});