mavensmate
Version:
Core APIs that drive MavensMate IDEs for Salesforce1/Force.com
101 lines (93 loc) • 3.45 kB
JavaScript
/**
* @file Opens existing metadata in the Salesforce UI
* @author Joseph Ferraro <@joeferraro>
*/
;
var Promise = require('bluebird');
var util = require('../../util');
var inherits = require('inherits');
var BaseCommand = require('../../command');
var _ = require('lodash');
var EditorService = require('../../services/editor');
var MavensMateFile = require('../../file').MavensMateFile;
var mavensMateFileTypes = require('../../file').types;
var logger = require('winston');
function Command() {
Command.super_.call(this, Array.prototype.slice.call(arguments, 0));
}
inherits(Command, BaseCommand);
Command.prototype.execute = function() {
var self = this;
return new Promise(function(resolve, reject) {
var paths = self.payload.paths;
var project = self.getProject();
var frontdoorUrl = project.sfdcClient.getInstanceUrl() + '/secur/frontdoor.jsp?sid=' + project.sfdcClient.getAccessToken() + '&retURL=';
var openUrlPromises = [];
var urls = {};
_.each(paths, function(p) {
var mmFile = new MavensMateFile({ project: project, path: p });
var retUrl = '';
if (mmFile.type.xmlName === 'ApexPage' && self.payload.preview) {
retUrl = '/apex/' + mmFile.name;
} else if (mmFile.isLightningType && self.payload.preview) {
var bundleName;
if (mmFile.classification === mavensMateFileTypes.LIGHTNING_BUNDLE_ITEM) {
bundleName = mmFile.folderBaseName;
} else {
bundleName = mmFile.name;
}
// retUrl = project.sfdcClient.getInstanceUrl() + '/' + project.sfdcClient.getNamespace() + '/' + bundleName + '.app'; // TODO: non app lightning will not work
retUrl = '/' + project.sfdcClient.getNamespace() + '/' + bundleName + '.app'; // TODO: non app lightning will not work
} else {
if (mmFile.type.xmlName === 'CustomObject') {
retUrl = '/p/setup/layout/LayoutFieldList?type=' + mmFile.name + '%23CustomFieldRelatedList_target';
} else {
retUrl = '/' + mmFile.id;
}
}
logger.debug('url generated : '+frontdoorUrl+retUrl);
if (self.payload.callThrough) {
openUrlPromises.push( self.editorService.openUrl(frontdoorUrl+retUrl) );
} else {
urls[mmFile.basename] = frontdoorUrl+retUrl;
}
});
if (self.payload.callThrough) {
Promise.all(openUrlPromises)
.then(function() {
resolve('Success');
})
.catch(function(error) {
reject(error);
});
} else {
resolve(urls);
}
});
};
exports.command = Command;
exports.addSubCommand = function(program) {
program
.command('open-metadata [path]')
.description('Opens metadata in the browser')
.action(function(path){
if (path) {
program.commandExecutor.execute({
name: this._name,
body: {
paths : util.getAbsolutePaths( [ path ] )
}
});
} else {
var self = this;
util.getPayload()
.then(function(payload) {
program.commandExecutor.execute({
name: self._name,
body: payload,
editor: self.parent.editor
});
});
}
});
};