Initial commit
This commit is contained in:
Executable
+186
@@ -0,0 +1,186 @@
|
||||
var CoreView = require('backbone/core-view');
|
||||
var Notifier = require('builder/components/notifier/notifier');
|
||||
var UploadConfig = require('builder/config/upload-config');
|
||||
var ErrorDetailsView = require('./error-details-view');
|
||||
var WarningsDetailsView = require('./warnings-details-view');
|
||||
var TwitterImportDetailsDialog = require('./twitter-import-details-view');
|
||||
|
||||
/**
|
||||
* Import item within background importer
|
||||
*
|
||||
*/
|
||||
|
||||
var DELEGATIONS = {
|
||||
loading: require('./delegated-import-views/loading'),
|
||||
error: require('./delegated-import-views/failed'),
|
||||
warning: require('./delegated-import-views/warnings'),
|
||||
success: require('./delegated-import-views/success')
|
||||
};
|
||||
|
||||
module.exports = CoreView.extend({
|
||||
initialize: function (opts) {
|
||||
if (!opts.userModel) throw new Error('userModel is required');
|
||||
if (!opts.configModel) throw new Error('configModel is required');
|
||||
if (!opts.modals) throw new Error('modals is required');
|
||||
if (!opts.importModel) throw new Error('importModel is required');
|
||||
|
||||
this._userModel = opts.userModel;
|
||||
this._configModel = opts.configModel;
|
||||
this._modals = opts.modals;
|
||||
this._importModel = opts.importModel;
|
||||
this._showSuccessDetailsButton = opts.showSuccessDetailsButton;
|
||||
|
||||
this._notification = Notifier.addNotification({});
|
||||
|
||||
this._initBinds();
|
||||
},
|
||||
|
||||
_initBinds: function () {
|
||||
this._importModel.on('change', this.updateNotification, this);
|
||||
this._importModel.on('remove', this.clean, this);
|
||||
this._notification.on('notification:close', this._closeHandler, this);
|
||||
this._notification.on('notification:action', this._actionHandler, this);
|
||||
this.add_related_model(this._importModel);
|
||||
this.add_related_model(this._notification);
|
||||
},
|
||||
|
||||
_closeHandler: function () {
|
||||
this.trigger('remove', this._importModel, this);
|
||||
this._importModel.pause();
|
||||
this.clean();
|
||||
},
|
||||
|
||||
_actionHandler: function (action) {
|
||||
if (action === 'show_errors') {
|
||||
this._showImportError();
|
||||
} else if (action === 'show_stats') {
|
||||
this._showImportStats();
|
||||
} else if (action === 'show_table') {
|
||||
this._showImportDataset();
|
||||
} else if (action === 'show_warnings') {
|
||||
this._showImportWarnings();
|
||||
}
|
||||
},
|
||||
|
||||
_getStatus: function () {
|
||||
var status = 'loading';
|
||||
var failed = this._importModel.hasFailed();
|
||||
var completed = this._importModel.hasCompleted();
|
||||
var warnings = this._importModel.getWarnings();
|
||||
|
||||
if (failed) {
|
||||
status = 'error';
|
||||
} else if (completed && !warnings) {
|
||||
status = 'success';
|
||||
} else if (completed && warnings) {
|
||||
status = 'warning';
|
||||
}
|
||||
|
||||
return status;
|
||||
},
|
||||
|
||||
_getInfo: function () {
|
||||
var upload = this._importModel.get('upload');
|
||||
var imp = this._importModel.get('import');
|
||||
|
||||
var d = {
|
||||
name: '',
|
||||
state: this._importModel.get('state'),
|
||||
progress: '',
|
||||
service: '',
|
||||
step: this._importModel.get('step'),
|
||||
failed: this._importModel.hasFailed(),
|
||||
completed: this._importModel.hasCompleted(),
|
||||
warnings: this._importModel.getWarnings(),
|
||||
showSuccessDetailsButton: this._showSuccessDetailsButton,
|
||||
tables_created_count: imp.tables_created_count
|
||||
};
|
||||
|
||||
// Name
|
||||
if (upload.type) {
|
||||
if (upload.type === 'file') {
|
||||
if (upload.value.length > 1) {
|
||||
d.name = upload.value.length + ' files';
|
||||
} else {
|
||||
d.name = upload.value.name;
|
||||
}
|
||||
}
|
||||
if (upload.type === 'url' || upload.type === 'remote') {
|
||||
d.name = upload.value;
|
||||
}
|
||||
if (upload.type === 'service') {
|
||||
d.name = upload.value && upload.value.filename || '';
|
||||
}
|
||||
if (upload.service_name === 'twitter_search') {
|
||||
d.name = 'Twitter import';
|
||||
}
|
||||
if (upload.type === 'sql') {
|
||||
d.name = 'SQL';
|
||||
}
|
||||
if (upload.type === 'duplication') {
|
||||
d.name = upload.table_name || upload.value;
|
||||
}
|
||||
} else {
|
||||
d.name = imp.display_name || imp.item_queue_id || 'import';
|
||||
}
|
||||
|
||||
// Service
|
||||
d.service = upload.service_name;
|
||||
|
||||
// Progress
|
||||
if (this._importModel.get('step') === 'upload') {
|
||||
d.progress = this._importModel.get('upload').progress;
|
||||
} else {
|
||||
d.progress = Math.max(0, (UploadConfig.uploadStates.indexOf(d.state) / UploadConfig.uploadStates.length) * 100);
|
||||
}
|
||||
|
||||
d.progress = d.progress.toFixed(0);
|
||||
|
||||
return d;
|
||||
},
|
||||
|
||||
updateNotification: function () {
|
||||
var status = this._getStatus();
|
||||
var delegated = DELEGATIONS[status];
|
||||
delegated.call(this, this._importModel, this._notification, status, this._getInfo(), this._showSuccessDetailsButton);
|
||||
},
|
||||
|
||||
_showImportDataset: function () {
|
||||
var dataset = this._importModel.get('import').table_name;
|
||||
window.location = this._configModel.get('base_url') + '/dataset/' + dataset;
|
||||
},
|
||||
|
||||
_showImportStats: function () {
|
||||
var self = this;
|
||||
this._modals.create(function (modalModel) {
|
||||
return new TwitterImportDetailsDialog({
|
||||
modalModel: modalModel,
|
||||
userModel: self._userModel,
|
||||
model: self._importModel
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
_showImportError: function () {
|
||||
var self = this;
|
||||
this._modals.create(function (modalModel) {
|
||||
return new ErrorDetailsView({
|
||||
configModel: self._configModel,
|
||||
modalModel: modalModel,
|
||||
error: self._importModel.getError(),
|
||||
userModel: self._userModel
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
_showImportWarnings: function () {
|
||||
var self = this;
|
||||
this._modals.create(function (modalModel) {
|
||||
return new WarningsDetailsView({
|
||||
modalModel: modalModel,
|
||||
warnings: self._importModel.getWarnings(),
|
||||
userModel: self._userModel
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user