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);
|