devshare
Version:
Library to communicate with devshare development sharing platform.
89 lines (71 loc) • 3.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _config = require('../config');
var _auth = require('../auth');
var _template = require('../template');
var _template2 = _interopRequireDefault(_template);
var _firebaser = require('../utils/firebaser');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function (username) {
var addProject = function addProject(project) {
if (!project.name) return Promise.reject('Name is required.');
if (project.name.match(/[/\s]/g)) {
return Promise.reject('Name may not contain spaces.');
}
if (project.name.match(/[.$#[\]/]/g)) {
return Promise.reject('Name may contain letters and symbols except for ., $, #, [, ], /.');
}
var currentUser = (0, _auth.getCurrentUser)();
if (!currentUser || !currentUser.uid) {
console.error('You must be logged in to create a project');
return Promise.reject('You must be logged in to create a project');
}
// TODO: Handle project owner being username or uid
// TODO: Handle project owner being object
// TODO: Handle project owner not being provided
// if (!project.owner) {
// get([paths.projects, currentUser.uid, 'username'])().then(username => )
// }
// Check for existance of project name
return (0, _firebaser.get)([_config.paths.projects, username || project.owner, project.name])().then(function (loadedProject) {
return (
// Push new project to projects list if it does not already exist
loadedProject && loadedProject.name === project.name ? Promise.reject('Error adding project: User already has a project named ' + project.name) : (0, _firebaser.setWithMeta)([_config.paths.projects, username || project.owner, project.name])(project).then(function (newProject) {
return (
// get list of projects within user
(0, _firebaser.get)([_config.paths.users, currentUser.uid, _config.paths.projects])().then(function (projectsList) {
return projectsList === null ? (0, _firebaser.set)([_config.paths.users, currentUser.uid, _config.paths.projects])([project.name]).then(function () {
return project;
}) : (0, _firebaser.set)([_config.paths.users, currentUser.uid, _config.paths.projects, projectsList.length])(project.name).then(function () {
return project;
});
})
);
})
);
});
};
var methods = {
search: function search(query) {
return username ? (0, _firebaser.search)([_config.paths.projects, username])('name', query) : (0, _firebaser.search)(_config.paths.projects)('name', query);
},
get: function get() {
return (0, _firebaser.get)([_config.paths.usernames, username])().then(function (uid) {
return (0, _firebaser.get)([_config.paths.projects, uid])();
});
},
add: addProject,
addFromTemplate: function addFromTemplate(templateName, project) {
return (0, _firebaser.get)([_config.paths.usernames, (0, _auth.getCurrentUser)().uid])().then(function (username) {
return addProject(_extends({}, project, { owner: username })).then(function (newProject) {
return (0, _template2.default)(templateName).copyToProject(username, newProject.name);
});
});
}
};
return _extends({}, methods);
};
module.exports = exports['default'];