Files
robot-shop/web/static/js/controller.js

236 lines
7.7 KiB
JavaScript
Raw Normal View History

2018-01-10 16:31:49 +00:00
(function(angular) {
'use strict';
var robotshop = angular.module('robotshop', ['ngRoute'])
// Share user between controllers
robotshop.factory('currentUser', function() {
var data = {
uniqueid: '',
user: {},
};
return data;
});
robotshop.config(['$routeProvider', '$locationProvider', ($routeProvider, $locationProvider) => {
$routeProvider.when('/', {
templateUrl: 'splash.html',
controller: 'shopform'
}).when('/product/:sku', {
templateUrl: 'product.html',
controller: 'productform'
}).when('/login', {
templateUrl: 'login.html',
controller: 'loginform'
}).when('/cart', {
templateUrl: 'cart.html',
controller: 'cartform'
});
// needed for URL rewrite hash
$locationProvider.html5Mode(true);
}]);
// clear template fragment cache
robotshop.run(function($rootScope, $templateCache) {
$rootScope.$on('$viewContentLoaded', function() {
console.log('>>> clearing cache');
$templateCache.removeAll();
});
});
robotshop.controller('shopform', function($scope, $http, currentUser) {
$scope.data = {};
$scope.data.uniqueid = 'foo';
$scope.data.categories = [];
$scope.data.products = {};
$scope.getProducts = function(category) {
if($scope.data.products[category]) {
$scope.data.products[category] = null;
} else {
$http({
url: '/api/catalogue/products/' + category,
method: 'GET'
}).then((res) => {
$scope.data.products[category] = res.data;
}).catch((e) => {
console.log('ERROR', e);
});
}
};
function getCategories() {
$http({
url: '/api/catalogue/categories',
method: 'GET'
}).then((res) => {
$scope.data.categories = res.data;
console.log('categories loaded');
}).catch((e) => {
console.log('ERROR', e);
});
}
// unique id for cart etc
function getUniqueid() {
return new Promise((resolve, reject) => {
$http({
url: '/api/user/uniqueid',
method: 'GET'
}).then((res) => {
resolve(res.data.uuid);
}).catch((e) => {
console.log('ERROR', e);
reject(e);
});
});
}
// init
console.log('shopform starting...');
getCategories();
if(!currentUser.uniqueid) {
console.log('generating uniqueid');
getUniqueid().then((id) => {
$scope.data.uniqueid = id;
currentUser.uniqueid = id;
}).catch((e) => {
console.log('ERROR', e);
});
}
// watch for login
$scope.$watch(() => { return currentUser.uniqueid; }, (newVal, oldVal) => {
if(newVal !== oldVal) {
$scope.data.uniqueid = currentUser.uniqueid;
}
});
});
2018-01-10 17:36:37 +00:00
robotshop.controller('productform', function($scope, $http, $routeParams, $timeout, currentUser) {
2018-01-10 16:31:49 +00:00
$scope.data = {};
2018-01-10 17:36:37 +00:00
$scope.data.message = ' ';
2018-01-10 16:31:49 +00:00
$scope.data.product = {};
$scope.data.quantity = 1;
$scope.addToCart = function() {
var url = '/api/cart/add/' + currentUser.uniqueid + '/' + $scope.data.product.sku + '/' + $scope.data.quantity;
console.log('addToCart', url);
$http({
url: url,
method: 'GET'
}).then((res) => {
console.log('cart', res);
$scope.data.message = 'Added to cart';
2018-01-10 17:36:37 +00:00
$timeout(clearMessage, 3000);
2018-01-10 16:31:49 +00:00
}).catch((e) => {
console.log('ERROR', e);
$scope.data.message = 'ERROR ' + e;
2018-01-10 17:36:37 +00:00
$timeout(clearMessage, 3000);
2018-01-10 16:31:49 +00:00
});
};
function loadProduct(sku) {
$http({
url: '/api/catalogue/product/' + sku,
method: 'GET'
}).then((res) => {
$scope.data.product = res.data;
}).catch((e) => {
console.log('ERROR', e);
});
}
function clearMessage() {
2018-01-10 17:36:37 +00:00
console.log('clear message');
$scope.data.message = ' ';
2018-01-10 16:31:49 +00:00
}
2018-01-10 17:36:37 +00:00
2018-01-10 16:31:49 +00:00
loadProduct($routeParams.sku);
});
robotshop.controller('cartform', function($scope, $http, currentUser) {
$scope.data = {};
$scope.data.uniqueid = currentUser.uniqueid;
});
robotshop.controller('loginform', function($scope, $http, currentUser) {
$scope.data = {};
$scope.data.name = '';
$scope.data.email = '';
$scope.data.password = '';
$scope.data.password2 = '';
$scope.data.message = '';
$scope.data.user = {};
$scope.login = function() {
$scope.data.message = '';
$http({
url: '/api/user/login',
method: 'POST',
data: {
name: $scope.data.name,
password: $scope.data.password,
email: $scope.data.email
}
}).then((res) => {
$scope.data.user = res.data;
$scope.data.user.password = '';
$scope.data.password = $scope.data.password2 = '';
currentUser.user = $scope.data.user;
currentUser.uniqueid = $scope.data.user.name;
}).catch((e) => {
console.log('ERROR', e);
$scope.data.message = 'ERROR ' + e.data;
$scope.data.password = '';
});
};
$scope.register = function() {
$scope.data.message = '';
$scope.data.name = $scope.data.name.trim();
$scope.data.email = $scope.data.email.trim();
$scope.data.password = $scope.data.password.trim();
$scope.data.password2 = $scope.data.password2.trim();
// all fields complete
if($scope.data.name && $scope.data.email && $scope.data.password && $scope.data.password2) {
if($scope.data.password !== $scope.data.password2) {
$scope.data.message = 'Passwords do not match';
$scope.data.password = $scope.data.password2 = '';
return;
}
}
$http({
url: '/api/user/register',
method: 'POST',
data: {
name: $scope.data.name,
email: $scope.data.email,
password: $scope.data.password
}
}).then((res) => {
$scope.data.user = {
name: $scope.data.name,
email: $scope.data.email
};
$scope.data.password = $scope.data.password2 = '';
currentUser.user = $scope.data.user;
currentUser.uniqueid = $scope.data.user.name;
}).catch((e) => {
console.log('ERROR', e);
$scope.data.message = 'ERROR ' + e.data;
$scope.data.password = $scope.data.password2 = '';
});
};
console.log('loginform init');
if(!angular.equals(currentUser.user, {})) {
$scope.data.user = currentUser.user;
}
});
}) (window.angular);