cobuild-angular-stack
Version:
Base stack angular sass jade gulp
125 lines (106 loc) • 4.7 kB
JavaScript
/**
* Created by garusis on 16/06/16.
*
* This Module use Restangular to make API request. You can define a base url, default headers, etc... using RestangularProvider
*/
(function (module) {
var settings = {};
var defaultSettings = {};
module
.provider('Onboarding', OnboardingProvider);
OnboardingProvider.$inject = ['RestangularProvider'];
function OnboardingProvider(RestangularProvider) {
var onboardingProvider = this;
this.$get = [
'OnboardingInternalService', 'OnboardingInternalRelation', 'Restangular', '$uibModal',
function (OnboardingInternalService, OnboardingInternalRelation, Restangular, $uibModal) {
var resource = 'onboardings';
var service = new OnboardingInternalService('onboardings');
var oldPost = service.post;
service.post = function () {
return oldPost.apply(this, arguments)
.then(function (onboarding) {
return service
.getFrom(onboarding.id).steps()
.post({title: 'step ' + onboarding.stepsList.length})
.then(function () {
return onboarding;
});
});
};
Restangular.extendModel(service.serviceResource, function (onboarding) {
onboarding.addRestangularMethod('reorderSteps', 'post', 'reorderSteps');
return onboarding;
});
service.reorderSteps = function (indexesData) {
return Restangular.one(this.serviceResource, id).reorderSteps(indexesData);
};
service.getFrom = function (id) {
return {
steps: function () {
return new OnboardingInternalRelation(Restangular.one(resource, id), 'steps');
}
};
};
//User interaction with onboarding methods
var activeOnboardings = {};
/**
* Start an onboarding.
* @param id
*/
service.start = function (id, facebook) {
if (!id || activeOnboardings[id]) {
return;
}
activeOnboardings[id] = {};
return service.get(id)
.then(function (onboardingData) {
var onboarding = activeOnboardings[id] = $uibModal.open({
animation: false,
templateUrl: 'partials/onboarding.display-template.html',
controller: 'OnboardingModalController',
controllerAs: 'sBCtrl',
size: 'lg',
backdrop: 'static',
resolve: {
currentOnboarding: function () {
onboardingData.facebook = facebook;
return onboardingData;
}
}
});
onboarding.result
.catch(function () {
delete activeOnboardings[id];
});
return onboarding.result;
});
};
/**
* Stop an onboarding.
* @param id
*/
service.stop = function (id) {
var onboarding = activeOnboardings[id];
if (!onboarding) {
return;
}
onboarding.dismiss();
delete activeOnboardings[id];
};
/**
* End an onboarding
* @param id
*/
service.end = function (id) {
var onboarding = activeOnboardings[id];
if (!onboarding) {
return;
}
onboarding.close();
delete activeOnboardings[id];
};
return service;
}];
}
})(angular.module('rokk3rlabs.onboarding'));