client-ui
Version:
Testing implementation of nodeJs Backend, angular frontend, and hopefully in a way that this can be deployed to s3/cloudfront
58 lines (54 loc) • 2.03 kB
JavaScript
angular.module(moduleName).service('stateChangeManager', ['$interval', '$state', '$rootScope', function ($interval, $state, $rootScope) {
var self = this;
self.tasks = [];
self.doTasks = doTasks;
self.addTask = addTask;
self.doUntilStateChange = doUntilStateChange;
self.doAfterStateChange = doAfterStateChange;
function doTasks() {
var currentTask;
while (currentTask = self.tasks.pop()) {
if (typeof currentTask === 'function') {
currentTask();
}
}
}
function addTask(task) {
self.tasks.push(task);
}
function doUntilStateChange(task, ms) {
var intervalCancelled = false;
var currentState = $state.$current.self.name;
if (typeof task === 'function') {
task();
if (typeof ms === 'undefined') {
ms = 5000;
}
var interval = $interval(function () {
if ($state.$current.self.name === currentState) {
task();
} else {
if (!intervalCancelled) {
$interval.cancel(interval);
intervalCancelled = true;
}
}
}, ms);
self.addTask(function () {
if (!intervalCancelled) {
$interval.cancel(interval);
intervalCancelled = true;
}
});
}
}
function doAfterStateChange(task) {
var currentState = $state.$current.self.name;
var interval = $interval(function () {
if ($state.$current.self.name !== currentState) {
task();
$interval.cancel(interval);
}
}, 1000);
}
}]);