{"version":3,"file":"app.8990e14aa48c7aa48fe3.js","mappings":"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","sources":["webpack:///webpack/runtime/chunk loaded","webpack:///webpack/runtime/create fake namespace object","webpack:///./common/config.js","webpack:///./common/encoder.js","webpack:///./common/index.js","webpack:///./common/logger.js","webpack:///./payment-gateway/worldpay/index.js","webpack:///./payment-gateway/index.js","webpack:///./order/view/login-dialog.html","webpack:///./order/order-controller.js","webpack:///./order/view/modifer-dialog.html","webpack:///./order/view/update-postcode-modal.html","webpack:///./order/order.js","webpack:///./order/checkout-controller.js","webpack:///./order/view/change-address-dialog.html","webpack:///./order/view/update-personal-info-dialog.html","webpack:///./order/login-dialog-controller.js","webpack:///./order/change-address-dialog-controller.js","webpack:///./order/select-modifer-controller.js","webpack:///./order/update-personal-info-dialog-controller.js","webpack:///./order/update-poscode-controller.js","webpack:///./order/menu-item-directive.js","webpack:///./order/view/order.html","webpack:///./order/index.js","webpack:///./order/order-service.js","webpack:///./order/discount-service.js","webpack:///./order/delivery-service.js","webpack:///./order/view/menu-item.html","webpack:///./order/stripe-success-controller.js","webpack:///./order/view/stripe-success.html","webpack:///./order/view/stripe-cancel.html","webpack:///./order/view/checkout.html","webpack:///./common/store.js","webpack:///./security/oauth.js","webpack:///./common/user.js","webpack:///./security/current-user.js","webpack:///./security/index.js","webpack:///./security/add-token.js","webpack:///./security/login-redirect.js","webpack:///./user-management/login-controller.js","webpack:///./user-management/registration-controller.js","webpack:///./user-management/forgot-password-controller.js","webpack:///./user-management/reset-password-controller.js","webpack:///./common/axios.js","webpack:///./common/Topbar.jsx","webpack:///./user-management/Profile/index.jsx","webpack:///./common/dayjs.js","webpack:///./common/with-localization.js","webpack:///./common/with-react-query.js","webpack:///./common/with-angular.js","webpack:///./user-management/index.js","webpack:///./user-management/confirm-email-controller.js","webpack:///./user-management/account-service.js","webpack:///./user-management/view/login.html","webpack:///./user-management/view/registration.html","webpack:///./user-management/view/forgot-password.html","webpack:///./user-management/view/reset-password.html","webpack:///./user-management/view/confirm-email.html","webpack:///./reservation/Reservation/index.jsx","webpack:///./reservation/index.js","webpack:///./reservation/Reservation/SuccessView.jsx","webpack:///./admin/report-controller.js","webpack:///./admin/Settings/TimezoneSelect.jsx","webpack:///./admin/Settings/GeneralSettingsTab.jsx","webpack:///./admin/Settings/StyledComponents.jsx","webpack:///./admin/Settings/CloseStoreSwitch.jsx","webpack:///./admin/Settings/ServiceActivationAndDefaultSelector.jsx","webpack:///./admin/Settings/ServicesTab.jsx","webpack:///./admin/Settings/PaymentTypeToggle.jsx","webpack:///./admin/Settings/PaymentTypesTab.jsx","webpack:///./admin/Calendar/Day.jsx","webpack:///./admin/Calendar/AddHour.jsx","webpack:///./admin/Calendar/Hour.jsx","webpack:///./admin/Calendar/index.jsx","webpack:///./admin/StoreCalendar.jsx","webpack:///./admin/Settings/StoreHoursTab.jsx","webpack:///./admin/ReservationCalendar.jsx","webpack:///./admin/Settings/ReservationHoursTab.jsx","webpack:///./admin/Settings/AddressTab.jsx","webpack:///./admin/Settings/index.jsx","webpack:///./admin/index.js","webpack:///./admin/report.html","webpack:///./main-controller.js","webpack:///./main.js","webpack:///./RefundPolicy/index.jsx","webpack:///./TermsConditions/index.jsx","webpack:///./client-version.js","webpack:///./reload-latest.js","webpack:///./home-controller.js","webpack:///./main-view.html","webpack:///./contact-us.html","webpack:///./boot.js","webpack:///./img/menu-images|eager|/^/.*/.png$/|groupOptions: {}|namespace object","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/publicPath","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","const {appConfig} = window.posCube;\r\n\r\nconst paymentProvider = {\r\n  none: 0,\r\n  worldPay: 1,\r\n  stripe: 2\r\n};\r\n\r\nexport const config = {\r\n  ...appConfig,\r\n  paymentProvider\r\n};","function encoder() {\r\n\r\n  function encodeId(lines) {\r\n    var encodedList = [];\r\n\r\n    lines.forEach((line) => {\r\n      var encoded = [];\r\n      var id = line.menuItemId.toString().toUpperCase();\r\n\r\n      for (var i = 0; i < id.length; i++) {\r\n        var code = codeup1.indexOf(id[i]);\r\n        if (code < 0) {\r\n          throw new Error(\"Item code error for '\" + id + \"'' - invalid id character '\" + id[i] + \"' at position \" + i + \"\");\r\n        }\r\n        if (code > 9) {\r\n          code = codeup2[code];\r\n        }\r\n        encoded.push(code);\r\n      }\r\n\r\n      encoded.push(\"-\");\r\n      encoded.push(line.quantity.toString().length);\r\n      encoded.push(line.quantity);\r\n      encodedList.push(encoded);\r\n\r\n    });\r\n\r\n    var cartIdParts = [];\r\n    for (var i = 0; i < encodedList.length; i++) {\r\n      cartIdParts.push(encodedList[i].join(\"\"));\r\n    }\r\n    return cartIdParts.join(\"\");\r\n  }\r\n\r\n  function decodeId(idStr) {\r\n    var codes = [];\r\n    var parts = idStr.split(\"-\");\r\n    for (var i = 0, j = 1; j < parts.length; i++, j++) {\r\n      var code = [];\r\n      for (var p in parts[i]) {\r\n        var id = parts[i][p];\r\n        if (\"0123456789\".indexOf(id) < 0) {\r\n          id = codeup2.indexOf(id);\r\n        }\r\n        code.push(codeup1[id]);\r\n      }\r\n      var qlen = parseInt(parts[j][0], 10);\r\n      var qty = parseInt(parts[j].substr(1, qlen), 10);\r\n      codes.push({ id: code.join(\"\"), quantity: qty });\r\n      parts[j] = [].slice.call(parts[j], qlen + 1);\r\n    }\r\n    return codes;\r\n  }\r\n\r\n  return {\r\n    encodeId: encodeId,\r\n    decodeId: decodeId\r\n  };\r\n}\r\n\r\nexport default [encoder];","import logger from \"./logger\";\r\nimport {config} from \"./config\";\r\nimport encoder from \"./encoder\";\r\n\r\nfunction compareTo() {\r\n  return {\r\n    require: \"ngModel\",\r\n    scope: {\r\n      otherModelValue: \"=compareTo\"\r\n    },\r\n    link: function (scope, element, attributes, ngModel) {\r\n\r\n      ngModel.$validators.compareTo = function (modelValue) {\r\n        return modelValue == scope.otherModelValue;\r\n      };\r\n\r\n      scope.$watch(\"otherModelValue\", function () {\r\n        ngModel.$validate();\r\n      });\r\n    }\r\n  };\r\n}\r\n\r\nexport default angular\r\n.module(\"common\", [\"ngMaterial\"])\r\n.factory(\"common.config\", [\"$q\", \"$window\", function ($q, $window) {\r\n  const getStoreSettings = () => $q.when(config);\r\n  return {\r\n    apiUrl: config.apiUrl,\r\n    paymentProvider: config.paymentProvider,\r\n    getStoreSettings\r\n  };\r\n}])\r\n.factory(\"common.logger\", logger)\r\n.factory(\"common.encoder\", encoder)\r\n.directive(\"compareTo\", compareTo);","function logger($mdToast, $log) {\r\n  const clsMap = {\r\n    'warn': 'md-warn',\r\n    'info': 'md-primary',\r\n    'error': 'md-accent'\r\n  };\r\n  \r\n  const showInfo = function (msg) {\r\n    return showMessage(msg, 'info');\r\n  };\r\n\r\n  const showError = function (msg) {\r\n    return showMessage(msg, 'error');\r\n  };\r\n\r\n  const showWarning = function (msg) {\r\n    return showMessage(msg, 'warn');\r\n  };\r\n\r\n  function showMessage(msg, type) {\r\n    \r\n    return $mdToast.show(\r\n      $mdToast.simple()\r\n      .textContent(msg)\r\n      .action('OK')\r\n      .position('top, right')\r\n      .hideDelay(3000)\r\n      .highlightAction(true)\r\n      .highlightClass(clsMap[type])\r\n    );\r\n  }\r\n\r\n  return {\r\n    showInfo: showInfo,\r\n    showWarning: showWarning,\r\n    showError: showError\r\n  };\r\n}\r\n\r\nexport default [\"$mdToast\", \"$log\", logger];\r\n","import angular from 'angular';\r\n\r\nfunction worldpayGateWay() {\r\n  var self = this;\r\n  var instId, accId1, currency, embedGateway, hideCurrency, actionUrl, testMode;\r\n\r\n  var formTemplate =\r\n    \"<form id=\\\"checkoutForm\\\" name=\\\"worldpay\\\" action=\\\"{{actionUrl}}\\\" method=\\\"POST\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"amount\\\"  value=\\\"{{total}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"testMode\\\" value=\\\"{{testMode}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"instId\\\"  value=\\\"{{instId}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"cartId\\\" value=\\\"{{cartId}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"hideCurrency\\\" value=\\\"{{hideCurrency}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"currency\\\" value=\\\"{{currency}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"M_items\\\" value=\\\"{{sessionId}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"desc\\\" value=\\\"{{orderRemark}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"address1\\\" value=\\\"{{ address.houseNo + ' ' + address.flatNo + ' ' + address.building}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"address2\\\" value=\\\"{{address.road}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"town\\\" value=\\\"{{address.town}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"postcode\\\" value=\\\"{{address.postCode}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"country\\\" value=\\\"{{address.country}}\\\">\" +\r\n      \"<input type=\\\"hidden\\\" name=\\\"email\\\" value=\\\"{{address.email}}\\\">\" +\r\n      \"</form>\";\r\n\r\n  self.$get = [\r\n    \"common.logger\",\r\n    \"$http\",\r\n    \"$interpolate\",\r\n    \"common.config\",\r\n    \"common.encoder\",\r\n    getewayFactory\r\n  ];\r\n\r\n  self.configure = function(options) {\r\n    embedGateway = options.embed;\r\n    instId = options.instId;\r\n    currency = options.currency;\r\n    hideCurrency = options.hideCurrency;\r\n    actionUrl = options.actionUrl;\r\n    testMode = options.testMode;\r\n    return this;\r\n  };\r\n\r\n  function getewayFactory(logger, $http, $interpolate, config, encoder) {\r\n    return {\r\n      pay: function(cart, cartId) {\r\n        var formItems = angular.extend({\r\n          instId: instId,\r\n          cartId: cartId,\r\n          hideCurrency: hideCurrency,\r\n          testMode: testMode,\r\n          currency: currency,\r\n          actionUrl: actionUrl\r\n        }, cart);\r\n\r\n        let form = angular.element($interpolate(formTemplate, true, false)(formItems));\r\n        let body = angular.element(document).find('body');\r\n        body.append(form);\r\n\r\n        form[0].submit();\r\n        form.remove();\r\n      }\r\n    };\r\n  }\r\n}\r\n\r\nexport default [worldpayGateWay];","import worldPay from './worldpay/index';\r\n\r\nexport default angular\r\n  .module(\"paymentGateway\", [\"common\"])\r\n  .provider(\"paymentGateway.worldPay\", worldPay);\r\n\r\n\r\n","// Module\nvar code = \"<style>.separator{display:flex;align-items:center;text-align:center;margin-top:15px;margin-bottom:10px}.separator::after,.separator::before{content:'';flex:1;border-bottom:1px solid gray}.separator:not(:empty)::before{margin-right:.25em}.separator:not(:empty)::after{margin-left:.25em}</style> <md-dialog aria-label=\\\"Login/Registration\\\" id=\\\"login-dialog\\\"> <md-toolbar> <div class=\\\"md-toolbar-tools\\\"> <h2>Login/Registration</h2> <span flex></span> <md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.cancel()\\\"> <md-icon md-font-icon=\\\"fa fa-close\\\" aria-label=\\\"Close dialog\\\"></md-icon> </md-button> </div> </md-toolbar> <md-dialog-content> <md-tabs md-dynamic-height md-border-bottom md-selected=\\\"vm.selectedTab\\\" layout-margin> <md-tab label=\\\"Login\\\"> <form layout-margin name=\\\"loginForm\\\" flex layout=\\\"column\\\" novalidate> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-user fa-2x\\\"></md-icon> <input name=\\\"userName\\\" ng-model=\\\"vm.userName\\\" type=\\\"email\\\" placeholder=\\\"User Name/ Email\\\" required> <div ng-messages=\\\"loginForm.userName.$error\\\"> <div ng-message=\\\"required\\\">User name/email is required.</div> <div ng-message=\\\"email\\\">Must be a valid email address.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-key fa-2x\\\"></md-icon> <input name=\\\"password\\\" ng-model=\\\"vm.password\\\" type=\\\"password\\\" placeholder=\\\"Password\\\" required> <div ng-messages=\\\"loginForm.password.$error\\\"> <div ng-message=\\\"required\\\">Password is required.</div> </div> </md-input-container> <div layout=\\\"column\\\"> <md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.login(loginForm)\\\" style=\\\"margin-left:0\\\">Login</md-button> <a ng-click=\\\"vm.goToForgotPassword($event)\\\" href=\\\"#\\\">Forgot Password?</a> <div ng-if=\\\"vm.settings.isGuestOrderActive\\\" class=\\\"separator\\\">OR</div> <md-button ng-if=\\\"vm.settings.isGuestOrderActive\\\" class=\\\"md-secondary md-raised\\\" ng-click=\\\"vm.loginAsGuest()\\\">Login as Guest</md-button> </div> </form> </md-tab> <md-tab label=\\\"Register\\\"> <form layout-margin name=\\\"regForm\\\" flex novalidate layout=\\\"column\\\"> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-user fa-2x\\\"></md-icon> <input ng-model=\\\"vm.reg.customerName\\\" type=\\\"text\\\" required placeholder=\\\"Full Name\\\" name=\\\"customerName\\\"> <div ng-messages=\\\"regForm.customerName.$error\\\"> <div ng-message=\\\"required\\\">Full name is required.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-envelope fa-2x\\\"></md-icon> <input name=\\\"email\\\" ng-model=\\\"vm.reg.email\\\" type=\\\"email\\\" required placeholder=\\\"Email\\\"> <div ng-messages=\\\"regForm.email.$error\\\"> <div ng-message=\\\"required\\\">Email is required.</div> <div ng-message=\\\"email\\\">The email is not valid.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-key fa-2x\\\"></md-icon> <input ng-model=\\\"vm.reg.password\\\" required type=\\\"password\\\" name=\\\"password\\\" maxlength=\\\"15\\\" minlength=\\\"6\\\" placeholder=\\\"Password\\\"> <div ng-messages=\\\"regForm.password.$error\\\"> <div ng-message=\\\"required\\\">Password is required.</div> <div ng-message=\\\"maxlength\\\">Password must not be more than 15 characters</div> <div ng-message=\\\"minlength\\\">Password must be 6 to 15 characters long</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-phone fa-2x\\\"></md-icon> <input ng-model=\\\"vm.reg.phoneNumber\\\" type=\\\"text\\\" name=\\\"phoneNumber\\\" required placeholder=\\\"Phone Number\\\" md-maxlength=\\\"15\\\" minlength=\\\"11\\\"> <div ng-messages=\\\"regForm.phoneNumber.$error\\\"> <div ng-message=\\\"required\\\">Phone number is required.</div> <div ng-message=\\\"minlength\\\">Phone number must be 11 character long</div> <div ng-message=\\\"maxlength\\\">Must not be more than 15 charcter logn</div> </div> </md-input-container> <md-checkbox ng-model=\\\"vm.isTermsAccepted\\\" aria-label=\\\"Terms and condition\\\"> I have read and accept <a ui-sref=\\\"app.termsAndConditions\\\"> the terms and conditions. </a> </md-checkbox> <md-button ng-disabled=\\\"!regForm.$valid || !vm.isTermsAccepted\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.registerCustomer()\\\">Register</md-button> </form> </md-tab> </md-tabs> </md-dialog-content> </md-dialog> \";\n// Exports\nexport default code;","import get from 'lodash-es/get';\r\nimport debounce from 'lodash-es/debounce';\r\nimport loginDialogView from \"./view/login-dialog.html\";\r\nimport modifierDialogView from \"./view/modifer-dialog.html\";\r\nimport updatePostcodeModal from './view/update-postcode-modal.html';\r\n\r\n\r\nfunction OrderController(\r\n    order,\r\n    orderService,\r\n    $state,\r\n    $mdDialog,\r\n    currentUser,\r\n    oauth,\r\n    settings,\r\n    $mdSidenav,\r\n    $pusher,\r\n    $scope,\r\n    $mdToast\r\n) {\r\n\r\n    const vm = this;\r\n\r\n    vm.selectedGroup = null;\r\n    vm.groups = [];\r\n    vm.selectGroup = selectGroup;\r\n    vm.menus = [];\r\n    vm.order = order;\r\n\r\n    vm.placeOrder = placeOrder;\r\n    vm.canPlaceOrder = canPlaceOrder;\r\n    vm.login = login;\r\n    vm.signOut = signOut;\r\n    vm.currentUser = currentUser;\r\n    vm.settings = settings;\r\n\r\n    vm.showAllergyInfo = showAllergyInfo;\r\n\r\n    vm.toggleMenuGroupSidenav = () => {\r\n        $mdSidenav(\"menu-group-sidenav\").toggle();\r\n    };\r\n    vm.toggleCartSidenav = () => {\r\n        $mdSidenav(\"menu-cart-sidenav\").toggle();\r\n    };\r\n\r\n    vm.addLine = debounce((ev, menu, quantity) => {\r\n      if (ev.stopPropagation) {\r\n        ev.stopPropagation();\r\n      } \r\n\r\n      if (ev.preventDefault) {\r\n        ev.preventDefault();\r\n      }\r\n\r\n      if (!hasModifier(menu)) {\r\n        vm.order.addLine(menu, quantity);\r\n        return;\r\n      }\r\n      $mdDialog.show({\r\n        controller: \"order.SelectModifierDialogController\",\r\n        template: modifierDialogView,\r\n        controllerAs: \"vm\",\r\n        parent: angular.element(document.body),\r\n        targetEvent: ev,\r\n        clickOutsideToClose: true,\r\n        locals: {\r\n          menu: menu\r\n        }\r\n      })\r\n        .then(modifiers => vm.order.addLine(menu, quantity, modifiers))\r\n        .catch((err) => showToast(get(err, 'data.message', 'Could not add line; try again.')));\r\n    }, 600);\r\n    \r\n    vm.removeModifier = (l, m) => {\r\n        vm.order.removeModifier(l, m)\r\n            .catch(err => showToast(get(err, 'data.message', 'Could not remove modifier; try again.')));\r\n    };\r\n\r\n    vm.reduceQuantity = (l) => {\r\n        vm.order.reduceQuantity(l)\r\n            .catch(err => showToast(get(err, 'data.message', 'Could not reduce quantity; try again.')));\r\n    };\r\n\r\n    init();\r\n\r\n    function hasModifier(menu) {\r\n        return (menu.modifierLevels.length > 0\r\n            && menu.modifierLevels[0].modifiers.length > 0);\r\n    }\r\n\r\n    function signOut() {\r\n        oauth.signOut();\r\n    }\r\n\r\n    function login(ev) {\r\n        showLoginDialog(ev);\r\n    }\r\n\r\n    function showLoginDialog(ev) {\r\n        return $mdDialog.show({\r\n            controller: \"order.LoginDialogController\",\r\n            template: loginDialogView,\r\n            controllerAs: \"vm\",\r\n            locals: {\r\n                \"settings\": settings\r\n            },\r\n            parent: angular.element(document.body),\r\n            targetEvent: ev,\r\n            clickOutsideToClose: false,\r\n            fullscreen: false\r\n        });\r\n    }\r\n\r\n    function checkout() {\r\n        $state.go(\"app.checkout\", {orderId: vm.order.id});\r\n    }\r\n\r\n    function placeOrder(ev) {\r\n        if (vm.currentUser.isLoggedIn()) {\r\n            return checkout(ev);\r\n        }\r\n\r\n        return showLoginDialog(ev)\r\n            .then(() => checkout(ev));\r\n    }\r\n\r\n    function showAllergyInfo(ev) {\r\n        $mdDialog.show(\r\n            $mdDialog.alert()\r\n                .parent(angular.element(angular.element(document.body)))\r\n                .clickOutsideToClose(true)\r\n                .title(\"Allergy or dietary requirements\")\r\n                .htmlContent(\r\n                    \"If you have an allergy that could harm your health or any other dietary requirements, we strongly advise you to <b>contact the restaurant directly before you place your order</b>.\")\r\n                .ariaLabel(\"Allergy Info Dialog\")\r\n                .ok(\"Got it!\")\r\n                .targetEvent(ev)\r\n        );\r\n    }\r\n\r\n    function init() {\r\n        orderService\r\n            .getAllGroups()\r\n            .then((groups) => {\r\n                vm.groups = [].concat(groups);\r\n                selectGroup(groups[0]);\r\n            });\r\n    }\r\n\r\n    function showToast(message) {\r\n        const toast = $mdToast.simple()\r\n            .textContent(message)\r\n            .action('ok')\r\n            .capsule(true)\r\n            .highlightAction(true)\r\n            .highlightClass('md-warn')\r\n            .theme('alert')\r\n            .hideDelay(10000);\r\n\r\n        return $mdToast.show(toast);\r\n    }\r\n\r\n    vm.preOrderMessageShown = false;\r\n    vm.hasAddressError = () => vm.order.errors.some(x => x.type === 'ADDRESS');\r\n\r\n    vm.showPostCodePrompt = function (ev) {\r\n        ev && ev.preventDefault();\r\n        $mdDialog.show({\r\n            controller: \"order.UpdatePostcodeController\",\r\n            template: updatePostcodeModal,\r\n            controllerAs: \"vm\",\r\n            locals: {\r\n                \"settings\": settings,\r\n                \"order\": vm.order\r\n            },\r\n            parent: angular.element(document.body),\r\n            targetEvent: ev,\r\n            clickOutsideToClose: false,\r\n            fullscreen: false\r\n        }).then(() => this.order.refresh());\r\n    };\r\n\r\n    \r\n    $scope.$watchGroup([\r\n        () => vm.order.isStoreOpen,\r\n        () => vm.order.allowPreOrder,\r\n        () => vm.order.totalItem,\r\n    ], ([isStoreOpen, allowPreOrder, totalItem], ov) => {\r\n        if (!isStoreOpen && allowPreOrder && totalItem <= 0) {\r\n            return showPreOrderMessage();\r\n        }\r\n    });\r\n\r\n    $scope.$watchGroup([\r\n        () => vm.order.needPostCode,\r\n        () => vm.order.totalItem\r\n    ], ([needPostCode, totalItem], oldVal) => {\r\n        if (needPostCode === true && totalItem > 0) {\r\n            return vm.showPostCodePrompt();\r\n        }\r\n    });\r\n\r\n    function showPreOrderMessage(ev) {\r\n        return $mdDialog.show(\r\n            $mdDialog.alert()\r\n                .parent(angular.element(document.body))\r\n                .clickOutsideToClose(false)\r\n                .title(\"Pre-order now!\")\r\n                .textContent(settings.preOrderMessage)\r\n                .ariaLabel(\"Restaurant Closed\")\r\n                .ok(\"Pre-order\")\r\n                .targetEvent(ev)\r\n        );\r\n    }\r\n\r\n    function canPlaceOrder() {\r\n        return vm.order.errors.length <= 0;\r\n    }\r\n\r\n    function selectGroup(group) {\r\n        vm.selectedGroup = group;\r\n        orderService\r\n            .getMenusByGroup(vm.selectedGroup.id)\r\n            .then(menus => {\r\n                vm.menus = menus;\r\n            });\r\n\r\n        $mdSidenav(\"menu-group-sidenav\").close();\r\n    }\r\n}\r\n\r\nexport default [\r\n    \"order\",\r\n    \"order.orderService\",\r\n    \"$state\",\r\n    \"$mdDialog\",\r\n    \"security.currentUser\",\r\n    \"security.oauth\",\r\n    \"settings\",\r\n    \"$mdSidenav\",\r\n    \"$pusher\",\r\n    \"$scope\",\r\n    \"$mdToast\",\r\n    OrderController\r\n];","// Module\nvar code = \"<style>.force-modifier-dialog{min-width:60%;max-height:70%}.force-modifier-dialog .item-list{min-height:30vh}.force-modifier-dialog .max-allowed-error{font-weight:700;margin-left:16px;color:red}.force-modifier-dialog .max-allowed-error .max-allowed{font-weight:bolder;color:#000}.force-modifier-dialog .max-allowed-error .max-allowed-item{font-weight:700;color:#000}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.modifier-dialog-conent-view{flex-basis:auto}}</style> <md-dialog aria-label=\\\"Select Modifier\\\" class=\\\"force-modifier-dialog\\\"> <form layout=\\\"column\\\"> <md-toolbar> <div class=\\\"md-toolbar-tools\\\"> <h2>Select Item</h2> <span flex></span> <md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.cancel()\\\"> <md-icon md-font-icon=\\\"fa fa-close\\\" aria-label=\\\"Close dialog\\\"></md-icon> </md-button> </div> </md-toolbar> <md-dialog-content flex class=\\\"modifier-dialog-conent-view\\\"> <md-tabs md-border-bottom md-selected=\\\"vm.selectedTab\\\"> <md-tab label=\\\"{{ level.levelTitle }}\\\" ng-repeat=\\\"level in vm.levels track by level.level\\\"> <md-content class=\\\"md-padding\\\"> <md-list class=\\\"item-list\\\"> <md-list-item ng-repeat=\\\"modifier in level.modifiers\\\"> <p> {{ modifier.name }} </p> <md-checkbox class=\\\"md-secondary\\\" ng-model=\\\"modifier.isSelected\\\" ng-change=\\\"vm.switchTab(level)\\\"> </md-checkbox> </md-list-item> </md-list> </md-content> </md-tab> </md-tabs> </md-dialog-content> <md-dialog-actions layout=\\\"row\\\"> <div flex class=\\\"max-allowed-error\\\" ng-if=\\\"vm.selectedMoreThanAllowed()\\\"> <span> <span class=\\\"fa fa-exclamation-circle\\\"></span> &nbsp;Can't select more than <span class=\\\"max-allowed\\\">{{vm.selectedMoreThanAllowed().maxAllowed}} </span> <span class=\\\"max-allowed-item\\\">{{ vm.selectedMoreThanAllowed().levelTitle }} </span> items. </span> </div> <md-button ng-disabled=\\\"!vm.canAdd()\\\" class=\\\"md-primary\\\" ng-click=\\\"vm.select()\\\"> Done </md-button> </md-dialog-actions> </form> </md-dialog> \";\n// Exports\nexport default code;","// Module\nvar code = \"<style>@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.update-postcode-modal{flex-basis:auto}}</style> <md-dialog aria-label=\\\"Update postcode\\\" class=\\\"update-postcode-modal\\\"> <form name=\\\"postcodeForm\\\"> <md-toolbar> <div class=\\\"md-toolbar-tools\\\"> <h2>Update Postcode</h2> <span flex></span> <md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.cancel()\\\"> <md-icon md-font-icon=\\\"fa fa-close\\\" aria-label=\\\"Close dialog\\\"></md-icon> </md-button> </div> </md-toolbar> <md-dialog-content flex layout-padding=\\\"\\\" layout-margin=\\\"\\\"> <md-input-container class=\\\"md-block\\\" style=\\\"margin-top:20px;padding-left:0\\\"> <label for=\\\"postcode\\\">Enter full postcode</label> <input required placeholder=\\\"SM51AW\\\" id=\\\"postcode\\\" name=\\\"postcode\\\" ng-model=\\\"vm.postcode\\\"/> <div ng-messages=\\\"vm.error\\\" multiple=\\\"multiple\\\" md-auto-hide=\\\"false\\\"> <div ng-message=\\\"postcode\\\"> {{ vm.error.postcode.message }} </div> </div> <div ng-messages=\\\"postcodeForm.postcode.$error\\\" multiple=\\\"multiple\\\" md-auto-hide=\\\"false\\\"> <div ng-message=\\\"required\\\"> Postcode is required! </div> </div> </md-input-container> </md-dialog-content> <md-dialog-actions layout=\\\"row\\\"> <md-button class=\\\"md-primary\\\" ng-click=\\\"vm.updatePostcode(postcodeForm)\\\">OK</md-button> </md-dialog-actions> </form> </md-dialog>\";\n// Exports\nexport default code;","export default class Order {\r\n  constructor(orderSvc, config) {\r\n    this.orderSvc = orderSvc;\r\n    this.config = config;\r\n    \r\n    this.lines = [];\r\n    this.id = \"\";\r\n    this.discountLabel = \"\";\r\n    this.subTotal = 0;\r\n    this.total = 0;\r\n    this.deliveryCharge = 0;\r\n    this.totalDiscount = 0;\r\n    this.totalItem = 0;\r\n    this.instruction = \"\";\r\n    this.errors = [];\r\n    this.isServicesClosed = false;\r\n    this.isStoreOpen = true;\r\n    this.allowPreOrder = true;\r\n    this.needPostCode = false;\r\n    this.postCode = '';\r\n  }\r\n  \r\n  reset(order) {\r\n    this.id = order.id;\r\n    this.subTotal = order.subTotal;\r\n    this.totalDiscount = order.totalDiscount;\r\n    this.deliveryCharge = order.deliveryCharge;\r\n    this.total = order.total;\r\n    this.discountLabel = order.discountLabel;\r\n    this.orderType = order.orderType;\r\n    this.totalItem = order.totalItem;\r\n    this.lines = order.lines;\r\n    this.instruction = order.instruction;\r\n    this.orderTypes = order.orderTypes;\r\n    this.errors = [].concat(order.errors);\r\n    this.isStoreOpen = order.isStoreOpen;\r\n    this.isServicesClosed = order.isServicesClosed;\r\n    this.allowPreOrder = order.allowPreOrder;\r\n    this.needPostCode = order.needPostCode;\r\n    this.postCode = order.postCode;\r\n    return this;\r\n  }\r\n  \r\n  addLine(menuVm, qty, modifiers) {\r\n    const menu = menuVm.hasSubItem ? menuVm.selectedSubItem :menuVm;\r\n    const quantity = parseInt(qty, 10);\r\n    \r\n    return this.orderSvc.addLine({\r\n      orderId: this.id,\r\n      itemId: menu.id,\r\n      quantity: quantity,\r\n      modifiers: (modifiers && modifiers.length > 0) ? modifiers.map(x => x.id) : []\r\n    }).then((order) => this.reset(order));\r\n  }\r\n  \r\n  refresh() {\r\n    this.orderSvc.getDraftOrder()\r\n      .then(order => this.reset(order));\r\n  }\r\n  \r\n  changeType() {\r\n    this.orderSvc.update({\r\n      orderId: this.id,\r\n      orderType: this.orderType\r\n    }).then((order) => this.reset(order));\r\n  }\r\n  \r\n  removeModifier(line, modifier) {\r\n    return this.orderSvc.removeModifier({\r\n      orderId: this.id,\r\n      lineId: line.id,\r\n      lineModifierId: modifier.id\r\n    }).then((order) => this.reset(order));\r\n  }\r\n\r\n  removeLine(line) {\r\n    return this.orderSvc.removeLine({\r\n      orderId: this.id,\r\n      lineId: line.id,\r\n    }).then((order) => this.reset(order));\r\n  }\r\n\r\n  reduceQuantity(line) {\r\n    return this.orderSvc.reduceQuantity({\r\n      orderId: this.id,\r\n      lineId: line.id,\r\n      quantity: 1\r\n    }).then((order) => this.reset(order));\r\n  }\r\n}\r\n\r\nOrder.$inject = [\r\n  \"order.orderService\",\r\n  \"common.config\",\r\n];\r\n","import  get from 'lodash-es/get';\r\nimport changeAddressDialogView from './view/change-address-dialog.html';\r\nimport updatePersonalInfoDialogView from './view/update-personal-info-dialog.html';\r\n\r\nclass OrderState {\r\n    constructor() {\r\n        this.failedMessage = '';\r\n        this.placingMessage = '';\r\n        this.isPlacing = false;\r\n        this.isPlaced = false;\r\n        this.isFailed = false;\r\n    }\r\n\r\n    failed(msg) {\r\n        this.placingMessage = '';\r\n        this.isPlacing = false;\r\n        this.isPlaced = false;\r\n        this.isFailed = true;\r\n        this.failedMessage = msg;\r\n    }\r\n\r\n    placed() {\r\n        this.failedMessage = '';\r\n        this.placingMessage = '';\r\n        this.isFailed = false;\r\n        this.isPlacing = false;\r\n        this.isPlaced = true;\r\n    }\r\n\r\n    placing(msg) {\r\n        this.failedMessage = '';\r\n        this.isFailed = false;\r\n        this.isPlaced = false;\r\n        this.isPlacing = true;\r\n        this.placingMessage = msg;\r\n    }\r\n}\r\n\r\nfunction CheckoutController(\r\n    orderSvc,\r\n    config,\r\n    $state,\r\n    currentUser,\r\n    worldpayGateway,\r\n    $scope,\r\n    deliverySvc,\r\n    $mdDialog,\r\n    storeSettings,\r\n    $mdSidenav,\r\n    $mdMedia,\r\n    $stateParams,\r\n    $window,\r\n    data) {\r\n\r\n    const vm = this;\r\n\r\n    vm.orderState = new OrderState();\r\n    vm.storeAddress = storeSettings.storeAddress;\r\n    vm.order = data;\r\n    vm.placeOrder = placeOrder;\r\n    vm.canPlaceOrder = canPlaceOrder;\r\n    vm.backToOrder = backToOrder;\r\n    vm.uddateAddress = updateAddress;\r\n    vm.updatePersonalInfo = updatePersonalInfo;\r\n\r\n    vm.retry = (e) => {\r\n        e.preventDefault();\r\n        $window.location.reload();\r\n    };\r\n\r\n    vm.applyDiscount = function (id) {\r\n        orderSvc.applyDiscount({orderId: vm.order.id, discountId: id})\r\n            .then(_vm => {\r\n                vm.order = angular.extend(vm.order, _vm);\r\n            })\r\n            .catch(err => {\r\n                vm.order.errors.push({\r\n                    type: 'DISCOUNT',\r\n                    message: get(err, 'data.message', 'Could not apply discount. Unknown error occured')\r\n                });\r\n            });\r\n    };\r\n\r\n    vm.applyCoupon = function (coupon) {\r\n        if (!coupon) {\r\n            return;\r\n        }\r\n\r\n        orderSvc.applyCoupon({orderId: vm.order.id, coupon: coupon.trim()})\r\n            .then(_vm => {\r\n                vm.order = angular.extend(vm.order, _vm);\r\n            })\r\n            .catch(err => {\r\n                vm.order.errors.push({\r\n                    type: 'DISCOUNT',\r\n                    message: get(err, 'data.message', 'Could not apply coupon. Unknown error occured')\r\n                });\r\n            });\r\n    };\r\n\r\n\r\n    vm.isMobile = function () {\r\n        return $mdMedia('xs');\r\n    };\r\n\r\n    vm.toggleSidenav = () => {\r\n        $mdSidenav(\"checkout-sidenav\").toggle();\r\n    };\r\n\r\n\r\n    vm.paymentTypes = getPaymentTypes();\r\n    vm.getErrors = (type) => vm.order.errors.filter(x => x.type === type);\r\n    vm.showSubtotal = () => vm.order.totalDiscount > 0 || vm.order.deliveryCharge > 0;\r\n\r\n    function getPaymentTypes() {\r\n        return data.paymentTypes.map(x => ({\r\n            ...x,\r\n            icon: x.type === \"Cash\" ? \"fa-money\" : \"fa-credit-card\",\r\n            title: `${x.type} ${x.isActive ? '' : '(Inactive)'}`\r\n        }));\r\n    }\r\n\r\n    function updatePersonalInfo(ev) {\r\n        ev && ev.preventDefault();\r\n        $mdDialog\r\n            .show({\r\n                controller: \"order.UpdatePersonalInfoDialogController\",\r\n                template: updatePersonalInfoDialogView,\r\n                controllerAs: \"vm\",\r\n                parent: angular.element(document.body),\r\n                targetEvent: ev,\r\n                clickOutsideToClose: false,\r\n                locals: {\r\n                    \"order\": vm.order,\r\n                }\r\n            })\r\n            .then((info) => orderSvc.updatePersonalInfo({\r\n                ...info,\r\n                orderId: vm.order.id\r\n            }))\r\n            .then(_vm => {\r\n                vm.order = angular.extend(vm.order, _vm);\r\n            });\r\n    }\r\n\r\n\r\n    function updateAddress(ev) {\r\n        ev && ev.preventDefault();\r\n        $mdDialog\r\n            .show({\r\n                controller: \"order.ChangeAddressDialogController\",\r\n                template: changeAddressDialogView,\r\n                controllerAs: \"vm\",\r\n                parent: angular.element(document.body),\r\n                targetEvent: ev,\r\n                clickOutsideToClose: false,\r\n                locals: {\r\n                    \"orderId\": vm.order.id,\r\n                    \"address\": vm.order.address,\r\n                    \"orderSvc\": orderSvc\r\n                }\r\n            })\r\n            .then(_vm => {\r\n                vm.order = angular.extend(vm.order, _vm);\r\n            });\r\n    }\r\n\r\n    function backToOrder() {\r\n        $state.go(\"app.order\");\r\n    }\r\n\r\n    function createRequest() {\r\n        return ({\r\n            orderId: vm.order.id,\r\n            instruction: vm.order.instruction,\r\n            preferredTime: vm.order.preferredTime,\r\n            paymentMethod: vm.order.paymentMethod,\r\n            total: vm.order.total\r\n        });\r\n    }\r\n\r\n    function canPlaceOrder() {\r\n        return vm.order.errors.length <= 0;\r\n    }\r\n\r\n    function placeOrder() {\r\n        vm.orderState.placing('Your order is being processed...');\r\n        return orderSvc\r\n            .placeOrder(createRequest())\r\n            .then((resp) => {\r\n                if (resp.paymentMethod === 'Cash') {\r\n                    vm.orderState.placed();\r\n                    return;\r\n                }\r\n\r\n                if (resp.paymentMethod === 'Card'\r\n                    && resp.paymentProvider === config.paymentProvider.worldPay) {\r\n                    return worldpayGateway.pay(vm.order);\r\n                }\r\n\r\n                if (resp.paymentMethod === 'Card'\r\n                    && resp.paymentProvider === config.paymentProvider.stripe) {\r\n                    const stripe = Stripe(storeSettings.stripePublishableKey);\r\n                    return stripe.redirectToCheckout({sessionId: resp.sessionId})\r\n                        .then((result) => {\r\n                            // If `redirectToCheckout` fails due to a browser or network\r\n                            // error, you should display the localized error message to your\r\n                            // customer using `error.message`.\r\n                            if (result.error) {\r\n                                vm.orderState.failed(result.error.message);\r\n                            }\r\n                        });\r\n                }\r\n            })\r\n            .catch((err) => {\r\n                let message = err.message ? err.message : \"\";\r\n                if (err.data && err.data.message) {\r\n                    message = err.data.message;\r\n                }\r\n                vm.orderState.failed(message ? message : \"Something unexpected happend; contact the resturant.\");\r\n            });\r\n    }\r\n}\r\n\r\nexport default [\r\n    \"order.orderService\",\r\n    \"common.config\",\r\n    \"$state\",\r\n    \"security.currentUser\",\r\n    \"paymentGateway.worldPay\",\r\n    \"$scope\",\r\n    \"order.deliveryService\",\r\n    \"$mdDialog\",\r\n    \"storeSettings\",\r\n    \"$mdSidenav\",\r\n    \"$mdMedia\",\r\n    \"$stateParams\",\r\n    \"$window\",\r\n    \"data\",\r\n    CheckoutController\r\n];\r\n","// Module\nvar code = \"<style>#change-address-modal .validation-message{margin:14px;color:#dc143c;font-size:.9em}</style> <md-dialog aria-label=\\\"Change Address Dialog\\\" id=\\\"change-address-modal\\\"> <form name=\\\"addressForm\\\" flex layout=\\\"column\\\" novalidate> <md-toolbar class=\\\"md-toolbar-tools\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\"> <h2>Address</h2> <md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.cancel()\\\"> <md-icon md-font-icon=\\\"fa fa-close\\\" aria-label=\\\"Close dialog\\\"></md-icon> </md-button> </md-toolbar> <md-dialog-content> <div layout=\\\"column\\\" class=\\\"md-dialog-content\\\"> <div class=\\\"validation-message\\\" ng-if=\\\"vm.errors\\\"> <span class=\\\"fa fa-exclamation-circle\\\"></span> {{vm.errors}} </div> <div layout=\\\"row\\\"> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-home fa-2x\\\"></md-icon> <input ng-model=\\\"vm.address.houseNo\\\" type=\\\"text\\\" name=\\\"houseNo\\\" placeholder=\\\"House No/Name\\\"/> </md-input-container> <md-input-container md-no-float> <input ng-model=\\\"vm.address.flatNo\\\" type=\\\"text\\\" placeholder=\\\"Flat no\\\"/> </md-input-container> </div> <md-input-container md-no-float flex> <md-icon md-font-icon=\\\"fa fa-building-o fa-2x\\\"></md-icon> <input ng-model=\\\"vm.address.building\\\" type=\\\"text\\\" placeholder=\\\"Building Name\\\"/> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-road fa-2x\\\"></md-icon> <input ng-model=\\\"vm.address.road\\\" name=\\\"road\\\" required type=\\\"text\\\" placeholder=\\\"Road Name\\\"/> <div ng-messages=\\\"addressForm.road.$error\\\"> <div ng-message=\\\"required\\\">Road name is required.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-building fa-2x\\\"></md-icon> <input ng-model=\\\"vm.address.town\\\" name=\\\"town\\\" required type=\\\"text\\\" placeholder=\\\"Town\\\"/> <div ng-messages=\\\"addressForm.town.$error\\\"> <div ng-message=\\\"required\\\">Town is required.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-envelope fa-2x\\\"></md-icon> <input ng-model=\\\"vm.address.postCode\\\" type=\\\"text\\\" name=\\\"postCode\\\" required placeholder=\\\"Postcode\\\"/> <div ng-messages=\\\"addressForm.postCode.$error\\\"> <div ng-message=\\\"required\\\">Post code is required.</div> </div> </md-input-container> </div> </md-dialog-content> <md-dialog-actions layout=\\\"row\\\" layout-align=\\\"space-between center\\\"> <span ng-if=\\\"vm.allowUpdateDefaultAddress\\\"> <md-checkbox ng-model=\\\"vm.shouldUpdateDefaultAddress\\\">Update default address</md-checkbox> </span> <md-button class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!vm.canChangeAddress(addressForm)\\\" ng-click=\\\"vm.changeAddress(addressForm)\\\">Save </md-button> </md-dialog-actions> </form> </md-dialog> \";\n// Exports\nexport default code;","// Module\nvar code = \"<md-dialog aria-label=\\\"Update Personal Info\\\"> <md-toolbar> <div class=\\\"md-toolbar-tools\\\"> <h2>Update Personal Info</h2> <span flex></span> <md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.cancel()\\\"> <md-icon md-font-icon=\\\"fa fa-close\\\" aria-label=\\\"Close dialog\\\"></md-icon> </md-button> </div> </md-toolbar> <md-dialog-content> <form layout-margin name=\\\"guestForm\\\" flex novalidate layout=\\\"column\\\" layout-padding=\\\"\\\"> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-user fa-2x\\\"></md-icon> <input ng-model=\\\"vm.guest.fullName\\\" type=\\\"text\\\" required placeholder=\\\"Full Name\\\" name=\\\"fullName\\\"> <div ng-messages=\\\"guestForm.fullName.$error\\\"> <div ng-message=\\\"required\\\">Full name is required.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-envelope fa-2x\\\"></md-icon> <input name=\\\"email\\\" ng-model=\\\"vm.guest.email\\\" type=\\\"email\\\" required placeholder=\\\"Email\\\"> <div ng-messages=\\\"guestForm.email.$error\\\"> <div ng-message=\\\"required\\\">Email is required.</div> <div ng-message=\\\"email\\\">The email is not valid.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-phone fa-2x\\\"></md-icon> <input ng-model=\\\"vm.guest.phoneNumber\\\" type=\\\"text\\\" name=\\\"phoneNumber\\\" required placeholder=\\\"Phone Number\\\" md-maxlength=\\\"15\\\" minlength=\\\"11\\\"> <div ng-messages=\\\"guestForm.phoneNumber.$error\\\"> <div ng-message=\\\"required\\\">Phone number is required.</div> <div ng-message=\\\"minlength\\\">Phone number must be 11 character long</div> <div ng-message=\\\"maxlength\\\">Must not be more than 15 character long</div> </div> </md-input-container> <md-checkbox ng-model=\\\"vm.isTermsAccepted\\\" aria-label=\\\"Terms and condition\\\"> I have read and accept <a ui-sref=\\\"app.termsAndConditions\\\">the terms and conditions.</a> </md-checkbox> <md-button ng-disabled=\\\"!guestForm.$valid || !vm.isTermsAccepted\\\" class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.updateInfo(guestForm)\\\">Submit </md-button> </form> </md-dialog-content> </md-dialog> \";\n// Exports\nexport default code;","function LoginDialogController(oauth, logger, $mdDialog, $state, accountSvc, currentUser, settings) {\r\n  const vm = this;\r\n\r\n  vm.userName = \"\";\r\n  vm.password = \"\";\r\n\r\n  vm.login = login;\r\n  vm.cancel = cancel;\r\n  vm.goToForgotPassword = goToForgotPassword;\r\n  vm.registerCustomer = registerCustomer;\r\n  vm.loginAsGuest = loginAsGuest;\r\n  vm.isTermsAccepted = true;\r\n  vm.selectedTab = 0;\r\n  vm.settings = settings;\r\n  \r\n  vm.reg = {\r\n    userName: \"\",\r\n    email: \"\",\r\n    password: \"\",\r\n    customerName: \"\",\r\n    phoneNumber: \"\",\r\n    building: \"\",\r\n    flatNo: \"\",\r\n    houseNo: \"\",\r\n    road: \"\",\r\n    town: \"\"\r\n  };\r\n\r\n  let postCode = \"\";\r\n  vm.reg.postCode = function (value) {\r\n    if(arguments.length) {\r\n      angular.isDefined(value)\r\n        ? postCode = value.split(' ').join('') \r\n        : postCode = '';\r\n    } else {\r\n      return postCode;\r\n    }\r\n  };\r\n\r\n\r\n  /////////\r\n\r\n  function registerCustomer() {\r\n    let req = {\r\n      userName: vm.reg.userName,\r\n      password: vm.reg.password,\r\n      customerName: vm.reg.customerName,\r\n      building: vm.reg.building,\r\n      flatNo: vm.reg.flatNo,\r\n      houseNo: vm.reg.houseNo,\r\n      road: vm.reg.road,\r\n      town: vm.reg.town,\r\n      postCode: postCode,\r\n      phoneNumber: vm.reg.phoneNumber,\r\n      email: vm.reg.email,\r\n    };\r\n\r\n    return accountSvc\r\n      .registerCustomer(req)\r\n      .then(_ => oauth.login(req.email, req.password))\r\n      .then(_ => {\r\n        $mdDialog.hide();\r\n      })\r\n      .catch(err => {\r\n        logger.showError(createMessage(err, 'Error: could not register the user'));\r\n      });\r\n  }\r\n\r\n\r\n  function cancel() {\r\n    $mdDialog.cancel();\r\n  }\r\n\r\n  function goToForgotPassword($event) {\r\n      $event && $event.preventDefault();\r\n      \r\n    $state.go(\"app.forgotPassword\");\r\n    $mdDialog.hide();\r\n  }\r\n\r\n  function loginAsGuest() {\r\n    return oauth\r\n      .loginGuest()\r\n      .then(_ => {\r\n        $mdDialog.hide();\r\n      })\r\n      .catch((err) => {\r\n        logger.showError(createMessage(err, 'Error: could not log you in'));\r\n      });\r\n  }\r\n\r\n\r\n  function login(form) {\r\n    if (!form.$valid) {\r\n      logger.showError(\"Invalid user name or password\");\r\n      return false;\r\n    }\r\n\r\n    return oauth\r\n      .login(vm.userName, vm.password)\r\n      .then(_ => {\r\n        $mdDialog.hide();\r\n      })\r\n      .catch((err) => {\r\n        logger.showError(createMessage(err, 'Error: could not log you in'));\r\n      });\r\n  }\r\n\r\n  function createMessage(err, msg) {\r\n    return err.data.message\r\n      ? err.data.message\r\n      : `Error: ${msg}`;\r\n  }\r\n}\r\n\r\nexport default [\r\n  \"security.oauth\",\r\n  \"common.logger\",\r\n  \"$mdDialog\",\r\n  \"$state\",\r\n  \"userMgt.accountService\",\r\n  \"security.currentUser\",\r\n  \"settings\", // get's resolved from app level parent route\r\n  LoginDialogController\r\n];\r\n","import get from 'lodash-es/get';\r\nimport angular from \"angular\";\r\n\r\nfunction ChangeAddressDialogController($mdDialog, orderSvc, user, orderId, address) {\r\n    const vm = this;\r\n    vm.errors = '';\r\n    vm.address = {\r\n        houseNo: address.houseNo,\r\n        flatNo: address.flatNo,\r\n        building: address.building,\r\n        road: address.road,\r\n        town: address.town,\r\n        postCode: address.postCode\r\n    };\r\n\r\n    vm.cancel = cancel;\r\n    vm.shouldUpdateDefaultAddress = !user.isGuest();\r\n    vm.allowUpdateDefaultAddress = !user.isGuest();\r\n    vm.changeAddress = changeAddress;\r\n    vm.canChangeAddress = canChangeAddress;\r\n\r\n    function canChangeAddress(form) {\r\n        return form.$valid;\r\n    }\r\n\r\n    function cancel() {\r\n        $mdDialog.cancel();\r\n    }\r\n\r\n    function changeAddress(form) {\r\n        vm.errors = '';\r\n        if (!form.$valid) return false;\r\n        orderSvc.updateAddress({\r\n            ...vm.address,\r\n            shouldUpdateDefault: vm.shouldUpdateDefaultAddress,\r\n            orderId\r\n        })\r\n        .then(order => $mdDialog.hide(order))\r\n        .catch(err => {\r\n            vm.errors = get(err, 'data.message', 'Could not update address. Unknown error occured');\r\n        });\r\n    }\r\n}\r\n\r\nexport default [\r\n    \"$mdDialog\",\r\n    \"orderSvc\",\r\n    \"security.currentUser\",\r\n    \"orderId\",\r\n    \"address\",\r\n    ChangeAddressDialogController\r\n];\r\n","export default class SelectModifierController {\r\n  constructor(logger, $mdDialog, menu) {\r\n    this.$mdDialog = $mdDialog;\r\n    this.logger = logger;\r\n    this.menu = menu;\r\n    this.selectedTab = 0;\r\n\r\n    this.levels = this.menu.modifierLevels.map(level => ({\r\n      ...level,\r\n      totalSelected: 0,\r\n      modifiers: level.modifiers.map(modifier => ({\r\n        ...modifier,\r\n        isSelected: false\r\n      }))\r\n    })).sort((x, y) => {\r\n      if (parseInt(x.level, 10) > parseInt(y.level, 10)) {\r\n        return 1;\r\n      }\r\n\r\n      if (parseInt(y.level, 10) > parseInt(x.level, 10)) {\r\n        return -1;\r\n      }\r\n\r\n      return 0;\r\n    });\r\n  }\r\n\r\n  selectedMoreThanAllowed() {\r\n    return this.levels.find(\r\n      l => l.modifiers.filter(m => m.isSelected).length > l.maxAllowed\r\n    );\r\n  }\r\n\r\n  switchTab(_level) {\r\n    if (!_level) {\r\n      return;\r\n    }\r\n    const level = this.levels.find(l => l.level === _level.level);\r\n    const totalSelected = level.modifiers.filter(m => m.isSelected).length;\r\n    if ((totalSelected === _level.maxAllowed) && ((this.selectedTab + 1 ) < this.levels.length)) {\r\n      this.selectedTab = this.selectedTab + 1;\r\n    }\r\n\r\n  }\r\n\r\n  canAdd() {\r\n    return !this.selectedMoreThanAllowed();\r\n  }\r\n\r\n  cancel() {\r\n    this.$mdDialog.cancel();\r\n  }\r\n\r\n  select() {\r\n    this.$mdDialog.hide(\r\n      this.levels.flatMap(\r\n        l => l.modifiers.filter(m => m.isSelected)\r\n      )\r\n    );\r\n  }\r\n}\r\n\r\nSelectModifierController.$inject = [\r\n  \"common.logger\",\r\n  \"$mdDialog\",\r\n  \"menu\"\r\n];\r\n","export default class UpdatePersonalInfoDialogController {\r\n  constructor($mdDialog, $state, order) {\r\n    this.guest = {\r\n      email: order.customer.email,\r\n      fullName: order.customer.fullName,\r\n      phoneNumber: order.customer.mobilePhone\r\n    };\r\n    this.$mdDialog = $mdDialog;\r\n    this.$state = $state;\r\n    this.isTermsAccepted = true;\r\n  }\r\n\r\n  updateInfo(form) {\r\n    if (!form.$valid) {\r\n      return false;\r\n    }\r\n    this.$mdDialog.hide(this.guest);\r\n  }\r\n\r\n  cancel() {\r\n    this.$mdDialog.cancel();\r\n  }\r\n\r\n}\r\n\r\nUpdatePersonalInfoDialogController.$inject = [\r\n  \"$mdDialog\",\r\n  \"$state\",\r\n  \"order\"\r\n];\r\n","export default class UpdatePostcodeController {\r\n  constructor($mdDialog, orderSvc, settings, order) {\r\n    this.$mdDialog = $mdDialog;\r\n    this.orderSvc = orderSvc;\r\n    this.settings = settings;\r\n    this.order = order;\r\n    this.postcode = \"\";\r\n    this.error = {};\r\n  }\r\n\r\n  cancel() {\r\n    this.$mdDialog.hide();\r\n  }\r\n\r\n  updatePostcode(form) {\r\n    if (!form.$valid) {\r\n      return false;\r\n    }\r\n\r\n    this.error.postcode = null;\r\n\r\n    return this.orderSvc.addPostCode({\r\n      orderId: this.order.id,\r\n      postCode: this.postcode\r\n    }).then(_ => {\r\n        this.$mdDialog.hide();\r\n    })\r\n    .catch((err) => {\r\n      this.error.postcode = {\r\n        message: this.createMessage(err, 'Could update postcode')\r\n      };\r\n    });\r\n  }\r\n\r\n  createMessage(err, msg) {\r\n    return err.data.message\r\n      ? err.data.message\r\n      : `Error: ${msg}`;\r\n  }\r\n}\r\n\r\nUpdatePostcodeController.$inject = [\r\n  \"$mdDialog\",\r\n  \"order.orderService\",\r\n  \"settings\",\r\n  \"order\"\r\n];\r\n","import template from './view/menu-item.html';\r\n\r\nfunction DirectiveCtrl($scope) {\r\n  const images = {\r\n    'chilli': '',\r\n    'vegetarian': '',\r\n    'peanut': '',\r\n    'celery': '',\r\n    'crustaceans': '',\r\n    'dairy': '',\r\n    'egg': '',\r\n    'fish': '',\r\n    'gluten': '',\r\n    'molluscs': '',\r\n    'mustard': '',\r\n    'sesame': '',\r\n    'soya': '',\r\n    'vegan': '',\r\n    'nuts': '',\r\n    'sulphite': '',\r\n    'lupins': ''\r\n  };\r\n\r\n  Object\r\n    .keys(images)\r\n    .forEach(x => {\r\n      let imageKey = x;\r\n      import( /* webpackMode: \"eager\" */ `../img/menu-images/${x}.png`)\r\n        .then(img => images[imageKey] = img.default);\r\n    });\r\n\r\n  $scope.getImage = (imageName) => images[`${imageName}`];\r\n  $scope.addLine = (event, menu, quantity) => {\r\n    $scope.ctrlAddLine({\r\n      event: event,\r\n      menu: menu,\r\n      quantity: quantity\r\n    });\r\n  };\r\n}\r\n\r\nfunction MenuItemDirective() {\r\n  return {\r\n    scope: {\r\n      menus: '=',\r\n      ctrlAddLine: '&addLine'\r\n    },\r\n    template: template,\r\n    controller: ['$scope', DirectiveCtrl]\r\n  };\r\n}\r\n\r\nexport default MenuItemDirective;\r\n","// Imports\nimport ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ from \"../../../node_modules/html-loader/dist/runtime/getUrl.js\";\nvar ___HTML_LOADER_IMPORT_0___ = new URL(\"../../img/worldpay_card_sign.jpg\", import.meta.url);\n// Module\nvar ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);\nvar code = \"<style>.services-closed-message-container{position:fixed;left:0;top:0;z-index:10000;width:100%;height:100%;background-color:rgba(0,0,0,.84)}#order-screen .validation-message{padding:5px;color:#f08080;font-weight:700}.services-closed-message-container span{font-size:3.5em}.services-closed-message-container .message{color:#fff;font-size:1.6em;text-align:center;position:absolute;top:40%;z-index:10000;width:100%;height:100%}.shopping-cart-badge{position:absolute;top:-6px;left:35%;font-size:.95em}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){#order-screen{flex-basis:auto}}</style> <md-toolbar class=\\\"md-tools\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\"> <md-button class=\\\"md-icon-button\\\" aria-label=\\\"Menu Group\\\" ng-click=\\\"vm.toggleMenuGroupSidenav()\\\"> <md-icon style=\\\"font-size:1.3em\\\" hide-gt-xs md-font-icon=\\\"fa fa-bars\\\"></md-icon> </md-button> <div style=\\\"margin:0;font-size:.7em\\\" ng-if=\\\"!vm.order.isStoreOpen\\\"> Starts At: {{ vm.settings.businessStartHour}} </div> <span flex></span> <md-button hide-xs class=\\\"md-icon-button\\\" ng-if=\\\"!vm.currentUser.isLoggedIn()\\\" ng-click=\\\"vm.login($event)\\\"> <md-icon md-font-icon=\\\"fa fa-user fa-2x\\\"></md-icon> </md-button> <md-menu hide-xs ng-if=\\\"vm.currentUser.isLoggedIn()\\\" style=\\\"margin-right:10px\\\"> <div ng-click=\\\"$mdMenu.open($event)\\\" style=\\\"min-height:20px;min-width:20px\\\"> <img ng-src=\\\"{{vm.currentUser.getGravatarUrl()}}?s=25\\\" class=\\\"md-avatar\\\" alt=\\\"\\\"/> </div> <md-menu-content width=\\\"3\\\"> <md-menu-item> <md-button ui-sref=\\\"app.account\\\">Account</md-button> </md-menu-item> <md-menu-item ng-if=\\\"vm.currentUser.isAdmin()\\\"> <md-button ui-sref=\\\"app.admin\\\">Settings</md-button> </md-menu-item> <md-menu-item ng-if=\\\"vm.currentUser.isAdmin()\\\"> <md-button ui-sref=\\\"app.reports\\\">Reports</md-button> </md-menu-item> <md-menu-item> <md-button ng-click=\\\"vm.signOut($event)\\\">Sign Out</md-button> </md-menu-item> </md-menu-content> </md-menu> <md-button ng-click=\\\"vm.toggleCartSidenav()\\\" hide-gt-xs class=\\\"md-icon-button md-secondary\\\" aria-label=\\\"Shopping cart\\\"> <md-icon md-font-icon=\\\"fa fa-shopping-cart fa-2x\\\"></md-icon> <span ng-if=\\\"vm.order.totalItem > 0 && vm.order.totalItem < 100 \\\" class=\\\"shopping-cart-badge\\\">{{ (\\\"00\\\" + vm.order.totalItem).slice(-2) }}</span> <span ng-if=\\\"vm.order.totalItem >= 100\\\" class=\\\"shopping-cart-badge\\\" style=\\\"left:20%\\\">{{vm.order.totalItem}}</span> </md-button> </md-toolbar> <div layout=\\\"row\\\" flex id=\\\"order-screen\\\"> <md-sidenav class=\\\"md-sidenav-left md-whiteframe-z2\\\" md-component-id=\\\"menu-group-sidenav\\\" md-is-locked-open=\\\"$mdMedia('gt-xs')\\\" layout=\\\"column\\\"> <md-button ng-repeat=\\\"g in vm.groups\\\" class=\\\"md-raised menu-group-button\\\" ng-click=\\\"vm.selectGroup(g)\\\" ng-class=\\\"{'md-accent' : g === vm.selectedGroup, 'md-primary' : g !== vm.selectedGroup }\\\"> {{g.name | uppercase}} </md-button> </md-sidenav> <md-content id=\\\"mid-section\\\" class=\\\"menus-of-selected-group\\\" layout-padding layout=\\\"column\\\" flex=\\\"auto\\\" flex-gt-xs=\\\"75\\\"> <div class=\\\"services-closed-message-container\\\" ng-if=\\\"vm.order.isServicesClosed\\\"> <div class=\\\"message\\\"> <span class=\\\"fa fa-frown-o\\\"></span> <p bind-html-compile=\\\"vm.settings.storeCloseMessage\\\"></p> </div> </div> <xc-menu-items flex menus=\\\"vm.menus\\\" add-line=\\\"vm.addLine(event, menu, quantity)\\\"> </xc-menu-items> </md-content> <md-sidenav style=\\\"min-width:250px\\\" class=\\\"md-sidenav-right md-whiteframe-z2\\\" md-component-id=\\\"menu-cart-sidenav\\\" md-is-locked-open=\\\"$mdMedia('gt-xs')\\\"> <form layout=\\\"column\\\" style=\\\"padding:0 3px 0 3px\\\"> <md-button class=\\\"md-primary md-raised checkout-button\\\"> {{ (!vm.order.isStoreOpen && vm.order.allowPreOrder) ? 'PRE ORDER' : 'YOUR ORDER' }}</md-button> <md-radio-group md-no-ink ng-model=\\\"vm.order.orderType\\\" ng-change=\\\"vm.order.changeType()\\\" class=\\\"md-primary\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\" style=\\\"padding:0 5px 0 5px\\\"> <md-radio-button ng-repeat=\\\"m in vm.order.orderTypes\\\" ng-value=\\\"m.type\\\" ng-disabled=\\\"!m.isActive\\\"> <div>{{ m.label }} </div> <div>{{ m.subTitle }}</div> </md-radio-button> </md-radio-group> <md-divider></md-divider> <div ng-if=\\\"vm.order.postCode\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\" style=\\\"max-height:30px;padding:5px\\\"> <span flex></span> <md-button class=\\\"md-icon-button\\\" aria-label=\\\"Menu Group\\\" ng-click=\\\"vm.showPostCodePrompt()\\\"> <md-icon style=\\\"font-size:1.3em\\\" md-font-icon=\\\"fa fa-pencil\\\"></md-icon> </md-button> <span>{{vm.order.postCode}}</span> </div> <md-divider ng-if=\\\"vm.order.postCode\\\"></md-divider> <section layout=\\\"column\\\" ng-if=\\\"vm.order.lines.length > 0\\\"> <div class=\\\"menu-item-table\\\"> <table style=\\\"width:100%;margin-top:7px;margin-bottom:7px\\\"> <tr ng-if=\\\"0\\\" ng-repeat-start=\\\"l in vm.order.lines\\\"></tr> <tr> <td> <span>{{l.quantity}}</span> </td> <td>{{l.itemName}}</td> <td style=\\\"text-align:right\\\">{{l.total | currency:'&pound;'}}</td> <td style=\\\"width:10%;padding-left:5px\\\"> <span ng-click=\\\"vm.reduceQuantity(l)\\\" class=\\\"fa fa-minus-circle\\\"></span> </td> </tr> <tr ng-repeat=\\\"m in l.modifiers\\\"> <td></td> <td>{{m.modifierName}}</td> <td style=\\\"text-align:right\\\">{{m.price | currency:'&pound;'}}</td> <td style=\\\"width:10%;padding-left:5px\\\"> <span ng-click=\\\"vm.removeModifier(l, m)\\\" class=\\\"fa fa-minus-circle\\\"></span> </td> </tr> <tr ng-if=\\\"0\\\" ng-repeat-end></tr> </table> </div> <md-divider></md-divider> <div layout=\\\"column\\\" layout-align=\\\"center end\\\" style=\\\"margin-top:10px\\\"> <span ng-if=\\\"vm.order.totalDiscount > 0\\\" style=\\\"font-weight:700;margin-right:10px\\\"> Sub Total : {{vm.order.subTotal | currency: '&pound;' }} </span> <span ng-if=\\\"vm.order.totalDiscount > 0\\\" style=\\\"font-weight:700;margin-right:10px\\\"> {{vm.order.discountLabel}} : {{vm.order.totalDiscount | currency: '&pound;' }} </span> <span ng-if=\\\"vm.order.deliveryCharge > 0\\\" style=\\\"font-weight:700;margin-right:10px\\\"> Delivery Charge : {{vm.order.deliveryCharge | currency: '&pound;' }} </span> <span style=\\\"font-size:1.1em;font-weight:700;margin-right:10px\\\"> Total : {{vm.order.total | currency: '&pound;' }} </span> </div> <md-button ng-disabled=\\\"!vm.canPlaceOrder()\\\" ng-click=\\\"vm.placeOrder()\\\" class=\\\"md-primary md-raised checkout-button\\\"> Checkout( {{ vm.order.total | currency: '&pound;' }} ) </md-button> <div class=\\\"validation-message\\\" ng-if=\\\"vm.order.errors.length > 0\\\"> <div ng-repeat=\\\"err in vm.order.errors\\\"> <span class=\\\"fa fa-exclamation-circle\\\">&nbsp;</span><span bind-html-compile=\\\"err.message\\\"></span> </div> </div> <md-button ng-if=\\\"vm.hasAddressError()\\\" ng-click=\\\"vm.showPostCodePrompt()\\\" class=\\\"md-warn\\\">Add/chagne postcode</md-button> </section> <img style=\\\"width:100%\\\" src=\\\"\" + ___HTML_LOADER_REPLACEMENT_0___ + \"\\\" alt=\\\"\\\"/> <md-button class=\\\"md-warn\\\" ng-click=\\\"vm.showAllergyInfo($event)\\\">Allergy Awareness!</md-button> </form> </md-sidenav> </div> \";\n// Exports\nexport default code;","import \"angular-sanitize\";\r\nimport OrderController from \"./order-controller\";\r\nimport OrderService from \"./order-service\";\r\nimport DiscountService from \"./discount-service\";\r\nimport DeliveryService from \"./delivery-service\";\r\nimport Order from \"./order\";\r\nimport CheckoutController from \"./checkout-controller\";\r\nimport LoginDialogController from \"./login-dialog-controller\";\r\nimport ChangeAddressDialogController from \"./change-address-dialog-controller\";\r\nimport SelectModifierDialogController from \"./select-modifer-controller\";\r\nimport UpdatePersonalInfoDialogController from \"./update-personal-info-dialog-controller\";\r\nimport UpdatePostcodeController from \"./update-poscode-controller\";\r\nimport MenuItemDirective from \"./menu-item-directive\";\r\nimport StripeSuccessController from \"./stripe-success-controller\";\r\n\r\nimport orderView from './view/order.html';\r\nimport stripeSuccessView from './view/stripe-success.html';\r\nimport stripeCancelView from './view/stripe-cancel.html';\r\n\r\nimport checkoutView from './view/checkout.html';\r\n\r\nexport default angular\r\n    .module(\"order\", [\"ngMaterial\", \"ngMessages\", \"ngSanitize\", \"ui.router\", \"pusher-angular\", \"paymentGateway\", \"security\", \"common\", \"userMgt\"])\r\n    .service(\"order.orderService\", OrderService)\r\n    .service(\"order.discountService\", DiscountService)\r\n    .service(\"order.deliveryService\", DeliveryService)\r\n    .service(\"order.order\", Order)\r\n    .directive(\"xcMenuItems\", MenuItemDirective)\r\n    .directive('bindHtmlCompile', ['$compile', function ($compile) {\r\n        return {\r\n            restrict: 'A',\r\n            link: function (scope, element, attrs) {\r\n                scope.$watch(function () {\r\n                    return scope.$eval(attrs.bindHtmlCompile);\r\n                }, function (value) {\r\n                    element.html(value);\r\n                    $compile(element.contents())(scope);\r\n                });\r\n            }\r\n        };\r\n    }])\r\n    .controller(\"order.OrderController\", OrderController)\r\n    .controller(\"order.StripeSuccessController\", StripeSuccessController)\r\n    .controller(\"order.CheckoutController\", CheckoutController)\r\n    .controller(\"order.LoginDialogController\", LoginDialogController)\r\n    .controller(\"order.ChangeAddressDialogController\", ChangeAddressDialogController)\r\n    .controller(\"order.SelectModifierDialogController\", SelectModifierDialogController)\r\n    .controller(\"order.UpdatePersonalInfoDialogController\", UpdatePersonalInfoDialogController)\r\n    .controller(\"order.UpdatePostcodeController\", UpdatePostcodeController)\r\n    .config([\"$stateProvider\", config]);\r\n\r\nfunction config($stateProvider) {\r\n    $stateProvider\r\n        .state(\"app.order\", {\r\n            url: \"/\",\r\n            template: orderView,\r\n            controller: \"order.OrderController\",\r\n            controllerAs: \"vm\",\r\n            resolve: {\r\n                order: [\r\n                    \"order.orderService\", \"order.order\", function (svc, order) {\r\n                        return svc.getDraftOrder()\r\n                            .then(darftOrder => order.reset(darftOrder));\r\n                    }\r\n                ]\r\n            }\r\n        })\r\n        .state(\"app.orderStripeSuccess\", {\r\n            url: \"/orders/:orderId/success?session_id\",\r\n            template: stripeSuccessView,\r\n            controller: \"order.StripeSuccessController\",\r\n            controllerAs: \"vm\"\r\n        })\r\n        .state(\"app.orderStripeCancel\", {\r\n            url: \"/orders/:orderId/cancel\",\r\n            template: stripeCancelView\r\n        })\r\n        .state(\"app.checkout\", {\r\n            url: \"/orders/:orderId/checkout\",\r\n            template: checkoutView,\r\n            controller: \"order.CheckoutController\",\r\n            controllerAs: \"vm\",\r\n            resolve: {\r\n                storeSettings: [\r\n                    \"common.config\", function (cfg) {\r\n                        return cfg.getStoreSettings();\r\n                    }\r\n                ],\r\n                data: [\r\n                    \"order.orderService\", \"$stateParams\", function (svc, $stateParams) {\r\n                        return svc.checkout($stateParams.orderId);\r\n                    }\r\n                ]\r\n            }\r\n        });\r\n}\r\n","function OrderService($q, $http, config) {\r\n  let menus = [];\r\n\r\n  function getMenusByGroup(groupId) {\r\n    if (menus.length === 0) {\r\n      return $http.get(`${config.apiUrl}/menus`)\r\n        .then((response) => {\r\n          menus = response.data;\r\n          return filterMenusByGroup(menus, groupId);\r\n        });\r\n    }\r\n    return $q.when(filterMenusByGroup(menus, groupId));\r\n  }\r\n\r\n  function filterMenusByGroup(_menus, groupId) {\r\n    return _menus.filter((m) => {\r\n      return m.groupId === groupId;\r\n    });\r\n  }\r\n\r\n  function getAllGroups() {\r\n    return $http.get(`${config.apiUrl}/menus/groups`)\r\n      .then((response) => {\r\n        return response.data;\r\n      });\r\n  }\r\n\r\n  function placeOrder(req) {\r\n    return $http.post(`${config.apiUrl}/orders`, req)\r\n      .then((response) => {\r\n        return response.data;\r\n      });\r\n  }\r\n  \r\n  function success(orderId, sessionId) {\r\n    return $http.put(`${config.apiUrl}/orders/${orderId}/success`, {sessionId})\r\n      .then((response) => {\r\n        return response.data;\r\n      });\r\n  }\r\n  \r\n  function getDraftOrder() {\r\n    return $http.get(`${config.apiUrl}/orders/draft`)\r\n        .then((response) => {\r\n          return response.data;\r\n        });\r\n  }\r\n\r\n  function addLine(line) {\r\n    return $http.post(`${config.apiUrl}/orders/${line.orderId}/lines`, line)\r\n        .then(res => res.data);\r\n  }\r\n  \r\n  function addPostCode(req) {\r\n    return $http.patch(`${config.apiUrl}/orders/${req.orderId}/address`, req)\r\n        .then(res => res.data);\r\n  }\r\n  \r\n  function reduceQuantity(data) {\r\n    return $http.patch(`${config.apiUrl}/orders/${data.orderId}/lines/${data.lineId}`, data)\r\n        .then(res => res.data);\r\n  }\r\n  \r\n  function removeModifier(data) {\r\n    return $http.delete(`${config.apiUrl}/orders/${data.orderId}/lines/${data.lineId}/modifiers/${data.lineModifierId}`, data)\r\n        .then(res => res.data);\r\n  }\r\n  \r\n  function update(data) {\r\n    return $http.patch(`${config.apiUrl}/orders/${data.orderId}`, data)\r\n        .then(res => res.data);\r\n  }\r\n  \r\n  function checkout(id) {\r\n    return $http.post(`${config.apiUrl}/orders/${id}/checkout`, { orderId: id})\r\n        .then((response) => {\r\n          return response.data;\r\n        });\r\n  }\r\n  \r\n  function updateAddress(data) {\r\n    return $http.put(`${config.apiUrl}/orders/${data.orderId}/address`, data)\r\n        .then((response) => {\r\n          return response.data;\r\n        });\r\n  }\r\n  \r\n  function updatePersonalInfo(data) {\r\n    return $http.put(`${config.apiUrl}/orders/${data.orderId}/customer`, data)\r\n        .then((response) => {\r\n          return response.data;\r\n        });\r\n  }\r\n  \r\n  function applyDiscount(data) {\r\n    return $http.put(`${config.apiUrl}/orders/${data.orderId}/discount`, data)\r\n        .then((response) => {\r\n          return response.data;\r\n        });\r\n  }\r\n\r\n  function applyCoupon(data) {\r\n    return $http.put(`${config.apiUrl}/orders/${data.orderId}/coupon`, data)\r\n        .then((response) => {\r\n          return response.data;\r\n        });\r\n  }\r\n\r\n  return {\r\n    getAllGroups,\r\n    getMenusByGroup,\r\n    addLine,\r\n    addPostCode,\r\n    reduceQuantity,\r\n    removeModifier,\r\n    update,\r\n    updateAddress,\r\n    updatePersonalInfo,\r\n    getDraftOrder,\r\n    placeOrder,\r\n    success,\r\n    checkout,\r\n    applyDiscount,\r\n    applyCoupon\r\n  };\r\n}\r\n\r\nexport default [\"$q\", \"$http\", \"common.config\", OrderService];\r\n","function DiscountService($http, config) {\r\n  function getAllDiscounts() {\r\n    return $http.get(`${config.apiUrl}/discounts`)\r\n      .then((res) => {\r\n        return res.data;\r\n      });\r\n  }\r\n\r\n  return {\r\n    getAllDiscounts : getAllDiscounts\r\n  };\r\n}\r\n\r\nexport default [\"$http\", \"common.config\", DiscountService];\r\n","function DeliveryService($http, $q, config) {\r\n  function getDeliveryChargeByPostCode(postCode, total) {\r\n    return $http.get(`${config.apiUrl}/delivery/areas/${postCode}/order/${total}/charge`)\r\n      .then((res) => {\r\n        return res.data;\r\n      });\r\n  }\r\n\r\n  function isWithinDeliveryArea(postCode) {\r\n    return $http.get(`${config.apiUrl}/delivery/areas/${postCode}/covered`)\r\n      .then((response) => {\r\n        return response.data;\r\n      });\r\n  }\r\n\r\n  return {\r\n    getDeliveryChargeByPostCode : getDeliveryChargeByPostCode,\r\n    isWithinDeliveryArea : isWithinDeliveryArea\r\n  };\r\n}\r\n\r\nexport default [\"$http\", \"$q\", \"common.config\", DeliveryService];\r\n","// Module\nvar code = \"<style>.xc-menu-item-container{margin-bottom:8px}.xc-menu-item .description{margin:2px 0 1px 0}.xc-menu-item h4{margin:8px 0 8px 0}.allergy-info .allergy-caption{font-size:.9em;font-weight:700;color:grey}.allergy-info .allergy{font-size:.9em;color:grey;font-style:italic}.xc-menu-item p{margin:7px 0 7px 0}.xc-menu-item h5{margin:8px 0 8px 0}.menu-title-container{display:flex;align-items:center}.menu-title-container .menu-name{padding-right:5px}.menu-title-container .menu-image img{height:21px;width:20px}</style> <div class=\\\"xc-menu-item-container\\\" ng-repeat=\\\"m in menus track by m.id\\\" layout=\\\"column\\\" style=\\\"min-height:50px\\\"> <div class=\\\"xc-menu-item\\\" ng-if=\\\"m.hasSubItem\\\" layout=\\\"column\\\"> <h4 flex class=\\\"menu-title-container\\\"> <span class=\\\"menu-name\\\">{{m.name}}</span> <span class=\\\"menu-image\\\" ng-repeat=\\\"i in m.images track by $index\\\"> <img ng-src=\\\"{{getImage(i)}}\\\"> </span> </h4> <p class=\\\"description md-body-1\\\" ng-if=\\\"m.description.length > 0\\\">{{m.description}}</p> <div ng-repeat=\\\"subItem in m.subItems track by subItem.id\\\" layout=\\\"column\\\"> <div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"> <h5>{{subItem.name}}</h5> <div layout=\\\"row\\\" layout-align=\\\"end center\\\"> <span> {{ subItem.price | currency:'&pound;'}}</span> <md-button class=\\\"md-icon-button\\\" ng-click=\\\"addLine($event, subItem, subItem.suggestedQuantity)\\\"> <md-icon style=\\\"font-size:1.6em\\\" md-font-icon=\\\"fa fa-plus-circle\\\"></md-icon> </md-button> </div> </div> <p class=\\\"description md-body-1\\\" ng-if=\\\"subItem.description.length > 0\\\">{{subItem.description}}</p> <div ng-if=\\\"subItem.allergyInfo.length > 0\\\" class=\\\"md-body-1\\\"> <span>Allergy:&nbsp;</span> <span>{{subItem.allergyInfo}}</span> </div> </div> </div> <div class=\\\"xc-menu-item\\\" ng-if=\\\"!m.hasSubItem\\\" layout=\\\"column\\\"> <div layout=\\\"row\\\" layout-align=\\\"space-between center\\\"> <h4 class=\\\"menu-title-container\\\"> <span class=\\\"menu-name\\\">{{m.name}}</span> <span class=\\\"menu-image\\\" ng-repeat=\\\"i in m.images track by $index\\\"> <img ng-src=\\\"{{getImage(i)}}\\\"> <md-tooltip md-direction=\\\"right\\\">{{ i | uppercase }}</md-tooltip> </span> </h4> <div layout=\\\"row\\\" layout-align=\\\"end center\\\"> <span> {{ m.price | currency:'&pound;'}}</span> <md-button class=\\\"md-icon-button\\\" ng-click=\\\"addLine($event, m, m.suggestedQuantity)\\\"> <md-icon style=\\\"font-size:1.6em\\\" md-font-icon=\\\"fa fa-plus-circle\\\"></md-icon> </md-button> </div> </div> <p class=\\\"description md-body-1\\\" ng-if=\\\"m.description.length > 0\\\">{{m.description}}</p> <div class=\\\"allergy-info md-body-1\\\" ng-if=\\\"m.allergyInfo.length > 0\\\"> <span class=\\\"allergy-caption\\\">Allergy:&nbsp;</span> <span class=\\\"allergy\\\">{{m.allergyInfo}}</span> </div> </div> <md-divider></md-divider> </div> \";\n// Exports\nexport default code;","function StripeSuccessController(config, orderSvc, $stateParams) {\r\n  var vm = this;\r\n  vm.orderState = 'processing';\r\n  vm.error = { message: '' };\r\n\r\n\r\n  function init() {\r\n    orderSvc\r\n      .success($stateParams.orderId, $stateParams.session_id)\r\n      .then(() => {\r\n        vm.orderState = 'success';\r\n      })\r\n      .catch((err) => {\r\n        vm.error = {\r\n          message: err.data && err.data.message ? err.data.message : 'Sorry! we could not process the payment for your order',\r\n          orderId: $stateParams.orderId\r\n        };\r\n        vm.orderState = 'failed';\r\n      });\r\n  }\r\n\r\n  init();\r\n}\r\n\r\nexport default [\r\n  \"common.config\",\r\n  \"order.orderService\",\r\n  \"$stateParams\",\r\n  StripeSuccessController \r\n];","// Module\nvar code = \"<div class=\\\"refund-policy-view\\\" layout=\\\"column\\\" flex> <md-toolbar class=\\\"md-theme-light\\\"> <h4 class=\\\"md-toolbar-tools\\\" layout-align=\\\"center-center\\\"> <span>Payment Processing</span> </h4> </md-toolbar> <md-content flex layout-padding> <div class=\\\"modal-container\\\" ng-if=\\\"vm.orderState === 'success'\\\"> <div class=\\\"order-placed-message\\\"> <h2 style=\\\"margin-bottom:2px\\\"> <span style=\\\"font-size:5em;color:#006400\\\" class=\\\"fa fa-check-circle\\\"></span> </h2> <h2>Your order is placed successfully!</h2> <div style=\\\"margin-top:10px\\\">For any further assistance <a ui-sref=\\\"app.contact\\\">contact the restaurant.</a></div> <div style=\\\"margin-top:5px\\\"><a href=\\\"#\\\" ui-sref=\\\"app.order\\\">Click here to place another order.</a></div> </div> </div> <div class=\\\"modal-container\\\" ng-if=\\\"vm.orderState === 'processing'\\\"> <div class=\\\"message\\\"> <md-progress-circular class=\\\"md-accent\\\" md-diameter=\\\"40\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular> <span>&nbsp;We are processing your order; please wait...</span> </div> </div> <div class=\\\"modal-container\\\" ng-if=\\\"vm.orderState === 'failed'\\\"> <div class=\\\"fail-message\\\"> <h2 style=\\\"margin-bottom:2px\\\"> <span style=\\\"font-size:5em;color:#8b0000\\\" class=\\\"fa fa-frown-o\\\"></span> </h2> <h2>Payment processing error</h2> <div style=\\\"color:#8b0000\\\">{{vm.error.message}}</div> <div style=\\\"margin-top:10px\\\">Please <a ui-sref=\\\"app.contact\\\">contact the restaurant</a> for support with the order id {{vm.error.orderId}}</div> <div style=\\\"margin-top:5px\\\"><a href=\\\"#\\\" ui-sref=\\\"app.order\\\">Click here to re order.</a></div> </div> </div> </md-content> </div>\";\n// Exports\nexport default code;","// Module\nvar code = \"<div class=\\\"refund-policy-view\\\" layout=\\\"column\\\" flex> <md-toolbar class=\\\"md-theme-light\\\"> <h4 class=\\\"md-toolbar-tools\\\" layout-align=\\\"center-center\\\"> <span>Payment Processing</span> </h4> </md-toolbar> <md-content flex layout-padding> <div class=\\\"modal-container\\\"> <div class=\\\"fail-message\\\"> <h2 style=\\\"margin-bottom:2px\\\"> <span style=\\\"font-size:5em;color:#8b0000\\\" class=\\\"fa fa-frown-o\\\"></span> </h2> <h2>Seems like you canceled the payment.</h2> <div style=\\\"margin-top:10px\\\">If things are not to your satisfaction, please <a ui-sref=\\\"app.contact\\\">contact the restaurant</a> for further support.</div> <div style=\\\"margin-top:5px\\\"><a href=\\\"#\\\" ui-sref=\\\"app.order\\\">Click here to re order.</a></div> </div> </div> </md-content> </div>\";\n// Exports\nexport default code;","// Module\nvar code = \"<style>#checkout-view .validation-message{margin:14px;color:#dc143c;font-size:.9em}#checkout-view .validation-message .fa{color:#dc143c;font-size:1.1em}#checkout-view .list-box{margin-top:5px;margin-bottom:15px}#checkout-view md-card-header{padding-bottom:5px}#checkout-view .responsive{max-width:90%;height:auto}#checkout-view .card-content{margin-left:14px}#checkout-view .checkout-card.error{border:1px solid #dc143c}#checkout-view .contextual-errors{color:#dc143c;font-size:.9em;margin-top:20px}#checkout-view .payment-type-label{font-size:1.2em;font-weight:700;margin-left:10px;white-space:nowrap}#checkout-view .payment-type-radio-button{margin-bottom:0}#checkout-view .shopping-cart-badge{position:absolute;top:-6px;left:35%;font-size:.95em}#checkout-view .checkout-card{margin:5px}.checkout-card md-card-header{padding:5px}.checkout-card md-card-content{padding-top:5px;padding-bottom:10px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){#checkout-view{flex-basis:auto}}</style> <div class=\\\"modal-container\\\" ng-if=\\\"vm.orderState.isPlacing\\\"> <div class=\\\"message\\\"> <md-progress-circular class=\\\"md-accent\\\" md-diameter=\\\"40\\\" md-mode=\\\"indeterminate\\\"></md-progress-circular> <span>{{vm.orderState.placingMessage}}</span> </div> </div> <div class=\\\"modal-container\\\" ng-if=\\\"vm.orderState.isFailed\\\"> <div class=\\\"fail-message\\\"> <h2 style=\\\"margin-bottom:2px\\\"><span style=\\\"font-size:5em;color:tomato\\\" class=\\\"fa fa-frown-o\\\"></span></h2> <h2>We could not place your order.</h2> <div style=\\\"color:tomato\\\">{{vm.orderState.failedMessage}}</div> <div style=\\\"margin-top:10px\\\">Please try again or <a ui-sref=\\\"app.contact\\\">contact the restaurant</a> for support. </div> <div style=\\\"margin-top:5px\\\"><a href=\\\"#\\\" ng-click=\\\"vm.retry($event)\\\">Click here retry</a></div> </div> </div> <div class=\\\"modal-container\\\" ng-if=\\\"vm.orderState.isPlaced\\\"> <div class=\\\"order-placed-message\\\"> <h2 style=\\\"margin-bottom:2px\\\"><span style=\\\"font-size:5em;color:#006400\\\" class=\\\"fa fa-check-circle\\\"></span> </h2> <h2>Your order is placed successfully!</h2> <div style=\\\"margin-top:10px\\\">For any further assistance <a ui-sref=\\\"app.contact\\\">contact the restaurant.</a> </div> <div style=\\\"margin-top:5px\\\"><a href=\\\"#\\\" ng-click=\\\"vm.backToOrder()\\\">Click here to place another order.</a> </div> </div> </div> <div layout=\\\"column\\\" flex id=\\\"checkout-view\\\"> <md-toolbar layout=\\\"row\\\" class=\\\"md-tools\\\" layout-align=\\\"space-between center\\\"> <div> <h4 style=\\\"margin:10px\\\">{{ vm.order.orderType === 1 ? 'Delivery' : 'Collection' }} Checkout</h4> </div> <span flex></span> <md-button class=\\\"md-icon-button md-secondary\\\" hide-gt-xs aria-label=\\\"Shopping Cart\\\" ng-click=\\\"vm.toggleSidenav()\\\"> <md-icon md-font-icon=\\\"fa fa-shopping-cart fa-2x\\\"></md-icon> <span ng-if=\\\"vm.order.totalItem > 0 && vm.order.totalItem < 100\\\" class=\\\"shopping-cart-badge\\\">{{ (\\\"00\\\" + vm.order.totalItem).slice(-2) }}</span> <span ng-if=\\\"vm.order.totalItem >= 100\\\" class=\\\"shopping-cart-badge\\\" style=\\\"left:20%\\\">{{vm.order.totalItem}}</span> </md-button> </md-toolbar> <div layout=\\\"row\\\" flex> <div layout=\\\"column\\\" flex> <md-content flex layout=\\\"column\\\"> <md-card class=\\\"checkout-card\\\" ng-class=\\\"{ 'error': vm.getErrors('CUSTOMER').length > 0 }\\\"> <md-card-header> <md-card-header-text> <div layout=\\\"row\\\" layout-align=\\\"space-between start\\\" flex=\\\"1\\\"> <div layout=\\\"row\\\" flex layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button md-accent\\\" aria-label=\\\"Update personal info\\\"> <md-icon md-font-icon=\\\"fa fa-user-circle fa-2x\\\"></md-icon> </md-button> <span class=\\\"md-title\\\">Personal Details</span> </div> <md-button class=\\\"md-icon-button md-primary\\\" aria-label=\\\"Edit Detials\\\" ng-click=\\\"vm.updatePersonalInfo()\\\"> Edit </md-button> </div> </md-card-header-text> </md-card-header> <md-card-content class=\\\"card-content\\\"> <div ng-if=\\\"!vm.order.customer.isNone\\\"> <h4 ng-if=\\\"vm.order.customer.fullName.trim()\\\" style=\\\"margin-bottom:1px;margin-top:1px\\\"> {{vm.order.customer.fullName}}</h4> <div ng-if=\\\"vm.order.customer.mobilePhone.trim()\\\"> <span class=\\\"fa fa-phone\\\"></span> <span>{{vm.order.customer.mobilePhone}}</span> </div> <div ng-if=\\\"vm.order.customer.email.trim()\\\"> <span class=\\\"fa fa-envelope\\\"></span> <span>{{vm.order.customer.email}}</span> </div> </div> <div ng-if=\\\"vm.getErrors('CUSTOMER').length > 0\\\" class=\\\"contextual-errors\\\"> <md-divider></md-divider> <div ng-repeat=\\\"err in vm.getErrors('CUSTOMER')\\\" style=\\\"margin-top:5px\\\"> <span class=\\\"fa fa-exclamation-circle\\\">&nbsp;</span><span bind-html-compile=\\\"err.message\\\"></span> </div> </div> </md-card-content> </md-card> <md-card class=\\\"checkout-card\\\" ng-if=\\\"vm.order.orderType === 1\\\" ng-class=\\\"{ 'error': vm.getErrors('ADDRESS').length > 0 }\\\"> <md-card-header> <md-card-header-text> <div layout=\\\"row\\\" layout-align=\\\"space-between start\\\" flex=\\\"1\\\"> <div layout=\\\"row\\\" flex layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button md-accent\\\" aria-label=\\\"Update delivery address\\\"> <md-icon md-font-icon=\\\"fa fa-address-card-o fa-2x\\\"></md-icon> </md-button> <span class=\\\"md-title\\\">Delivery Address</span> </div> <md-button class=\\\"md-icon-button md-primary\\\" aria-label=\\\"Edit address\\\" ng-click=\\\"vm.uddateAddress()\\\"> Edit </md-button> </div> </md-card-header-text> </md-card-header> <md-card-content class=\\\"card-content\\\"> <div ng-if=\\\"!vm.order.address.isNone && vm.getErrors('ADDRESS').length <= 0\\\"> <div> {{vm.order.address.houseNo}} {{vm.order.address.flatNo ? ', ' + vm.order.address.flatNo : ''}} {{vm.order.address.building ? ', ' + vm.order.address.building : ''}} </div> <div>{{vm.order.address.road}}</div> <div>{{vm.order.address.town}}</div> <div>{{vm.order.address.postCode}}</div> </div> <div ng-if=\\\"vm.getErrors('ADDRESS').length > 0\\\"> <md-button class=\\\"md-primary\\\" ng-click=\\\"vm.uddateAddress()\\\"> Update delivery address </md-button> </div> <div ng-if=\\\"vm.getErrors('ADDRESS').length > 0\\\" class=\\\"contextual-errors\\\"> <md-divider></md-divider> <div ng-repeat=\\\"err in vm.getErrors('ADDRESS')\\\" style=\\\"margin-top:5px\\\"> <span class=\\\"fa fa-exclamation-circle\\\">&nbsp;</span><span bind-html-compile=\\\"err.message\\\"></span> </div> </div> </md-card-content> </md-card> <md-card class=\\\"checkout-card\\\" ng-if=\\\"vm.order.orderType === 0\\\"> <md-card-header> <md-card-header-text> <div layout=\\\"row\\\" flex layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button md-accent\\\" aria-label=\\\"Collection address\\\"> <md-icon md-font-icon=\\\"fa fa-address-card-o fa-2x\\\"></md-icon> </md-button> <span class=\\\"md-title\\\">Collection Address</span> </div> </md-card-header-text> </md-card-header> <md-card-content class=\\\"card-content\\\"> <div>{{vm.storeName}}</div> <div>{{vm.storeAddress.addressLine1}}</div> <div>{{vm.storeAddress.addressLine2}}</div> <div>{{vm.storeAddress.addressLine3}}</div> </md-card-content> </md-card> <md-card class=\\\"checkout-card\\\" ng-if=\\\"vm.order.discounts.length > 0\\\" ng-class=\\\"{ 'error': vm.getErrors('DISCOUNT').length > 0 }\\\"> <md-card-header> <md-card-header-text> <div layout=\\\"row\\\" flex layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button md-accent\\\" aria-label=\\\"Select preferred time\\\"> <md-icon md-font-icon=\\\"fa fa-gift fa-2x\\\"></md-icon> </md-button> <span class=\\\"md-title\\\">Discount</span> </div> </md-card-header-text> </md-card-header> <md-card-content class=\\\"card-content\\\"> <md-select ng-model=\\\"vm.order.discountId\\\" class=\\\"list-box\\\" ng-change=\\\"vm.applyDiscount(vm.order.discountId)\\\" ng-model-options=\\\"{ trackBy: '$value' }\\\"> <md-option ng-repeat=\\\"d in vm.order.discounts\\\" ng-value=\\\"d.id\\\">{{d.title}}</md-option> </md-select> <div ng-if=\\\"vm.getErrors('DISCOUNT').length > 0\\\" class=\\\"contextual-errors\\\"> <md-divider></md-divider> <div ng-repeat=\\\"err in vm.getErrors('DISCOUNT')\\\" style=\\\"margin-top:5px\\\"> <span class=\\\"fa fa-exclamation-circle\\\">&nbsp;</span><span bind-html-compile=\\\"err.message\\\"></span> </div> </div> </md-card-content> </md-card> <md-card class=\\\"checkout-card\\\" ng-class=\\\"{ 'error': vm.getErrors('PREFERRED_TIME').length > 0 }\\\"> <md-card-header> <md-card-header-text> <div layout=\\\"row\\\" flex layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button md-accent\\\" aria-label=\\\"Select preferred time\\\"> <md-icon md-font-icon=\\\"fa fa-clock-o fa-2x\\\"></md-icon> </md-button> <span class=\\\"md-title\\\">{{ vm.order.orderType === 1 ? 'Delivery' : 'Collection'}} Time</span> </div> </md-card-header-text> </md-card-header> <md-card-content class=\\\"card-content\\\"> <md-select ng-model=\\\"vm.order.preferredTime\\\" class=\\\"list-box\\\"> <md-option ng-repeat=\\\"t in vm.order.preferredTimes\\\" ng-value=\\\"t\\\">{{t}}</md-option> </md-select> <div ng-if=\\\"vm.getErrors('PREFERRED_TIME').length > 0\\\" class=\\\"contextual-errors\\\"> <md-divider></md-divider> <div ng-repeat=\\\"err in vm.getErrors('PREFERRED_TIME')\\\" style=\\\"margin-top:5px\\\"> <span class=\\\"fa fa-exclamation-circle\\\">&nbsp;</span><span bind-html-compile=\\\"err.message\\\"></span> </div> </div> </md-card-content> </md-card> <md-card class=\\\"checkout-card\\\"> <md-card-header> <md-card-header-text> <div layout=\\\"row\\\" flex layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button md-accent\\\" aria-label=\\\"Add instruction\\\"> <md-icon md-font-icon=\\\"fa fa-sticky-note-o fa-2x\\\"></md-icon> </md-button> <span class=\\\"md-title\\\">Instructions</span> </div> </md-card-header-text> </md-card-header> <md-card-content class=\\\"card-content\\\"> <md-input-container style=\\\"margin:1px\\\"> <label for=\\\"instruction-text\\\">Instruction</label> <textarea cols=\\\"80\\\" id=\\\"instruction-text\\\" ng-model=\\\"vm.order.instruction\\\" ng-model-options=\\\"{debounce: 1000}\\\" md-maxlength=\\\"100\\\" rows=\\\"2\\\" md-select-on-focus>\\r\\n                            </textarea> </md-input-container> </md-card-content> </md-card> <md-card class=\\\"checkout-card\\\"> <md-card-header> <md-card-header-text> <div layout=\\\"row\\\" flex layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button md-accent\\\" aria-label=\\\"Apply coupon\\\"> <md-icon md-font-icon=\\\"fa fa-gift fa-2x\\\"></md-icon> </md-button> <span class=\\\"md-title\\\">Coupon</span> </div> </md-card-header-text> </md-card-header> <md-card-content class=\\\"card-content\\\"> <div> <input ng-model=\\\"vm.coupon\\\" type=\\\"text\\\" name=\\\"coupon\\\" style=\\\"border:1px solid gray;border-radius:5px;height:30px;outline:0\\\"/> <md-button class=\\\"md-accent md-raised\\\" ng-click=\\\"vm.applyCoupon(vm.coupon)\\\">Apply</md-button> </div> <div ng-if=\\\"vm.getErrors('DISCOUNT').length > 0\\\" class=\\\"contextual-errors\\\"> <md-divider></md-divider> <div ng-repeat=\\\"err in vm.getErrors('DISCOUNT')\\\" style=\\\"margin-top:5px\\\"> <span class=\\\"fa fa-exclamation-circle\\\">&nbsp;</span><span bind-html-compile=\\\"err.message\\\"></span> </div> </div> </md-card-content> </md-card> </md-content> <div layout=\\\"column\\\" style=\\\"margin:5px 0 0 0\\\"> <md-card class=\\\"checkout-card\\\"> <md-card-header> <md-card-header-text> <div layout=\\\"row\\\" flex layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button md-accent\\\" aria-label=\\\"Select preferred time\\\"> <md-icon md-font-icon=\\\"fa fa-credit-card-alt fa-2x\\\"></md-icon> </md-button> <span class=\\\"md-title\\\">Payment</span> </div> </md-card-header-text> </md-card-header> <md-card-content> <md-radio-group ng-model=\\\"vm.order.paymentMethod\\\" aria-labelledby=\\\"selectedUser\\\" layout=\\\"row\\\"> <div ng-repeat=\\\"type in vm.paymentTypes\\\"> <div flex layout=\\\"row\\\" layout-padding layout-align=\\\"space-between center\\\"> <md-radio-button ng-disabled=\\\"!type.isActive\\\" ng-value=\\\"type.type\\\" class=\\\"md-primary payment-type-radio-button\\\"> <span class=\\\"payment-type-label\\\">{{type.title}}</span> </md-radio-button> </div> </div> </md-radio-group> </md-card-content> </md-card> <div class=\\\"validation-message\\\" ng-if=\\\"vm.getErrors('ORDER').length > 0\\\"> <div ng-repeat=\\\"err in vm.getErrors('ORDER')\\\"> <span class=\\\"fa fa-exclamation-circle\\\">&nbsp;</span><span bind-html-compile=\\\"err.message\\\"></span> </div> </div> <div class=\\\"validation-message\\\" ng-if=\\\"vm.getErrors('ORDER').length === 0 && vm.order.errors.length > 0\\\"> <span class=\\\"fa fa-exclamation-circle\\\">&nbsp;</span><span>Please resolve all errors before placing the order</span> </div> <md-button layout=\\\"row\\\" layout-align=\\\"center center\\\" class=\\\"md-primary md-raised\\\" ng-disabled=\\\"!vm.canPlaceOrder()\\\" ng-class=\\\"{'checkout-invalid': vm.canPlaceOrder() === false}\\\" ng-click=\\\"vm.placeOrder()\\\" flex> <md-progress-circular ng-if=\\\"vm.isPlacingOrder\\\" class=\\\"md-accent\\\" md-diameter=\\\"30\\\"></md-progress-circular> <span>{{ vm.canPlaceOrder() === true ? '' : 'Cannot' }} Place Order ({{ vm.order.total | currency: '&pound;' }}) </span> </md-button> </div> </div> <md-sidenav style=\\\"min-width:250px\\\" class=\\\"md-sidenav-right md-whiteframe-z2\\\" md-is-locked-open=\\\"$mdMedia('gt-xs')\\\" md-component-id=\\\"checkout-sidenav\\\"> <form layout=\\\"column\\\" style=\\\"padding:0 3px 0 3px\\\"> <md-button class=\\\"md-raised md-primary checkout-button\\\"> YOUR ORDER</md-button> <section layout=\\\"column\\\" ng-if=\\\"vm.order.lines.length > 0\\\"> <div class=\\\"menu-item-table\\\" layout-padding=\\\"\\\"> <table style=\\\"width:100%;margin-top:7px;margin-bottom:7px\\\"> <tr ng-if=\\\"0\\\" ng-repeat-start=\\\"l in vm.order.lines\\\"></tr> <tr> <td> <span>{{l.quantity}} &nbsp;<span style=\\\"color:gray\\\">x</span></span> </td> <td>{{l.itemName}}</td> <td style=\\\"text-align:right\\\">{{l.total | currency:'&pound;'}}</td> </tr> <tr ng-repeat=\\\"m in l.modifiers\\\"> <td></td> <td>{{m.modifierName}}</td> <td style=\\\"text-align:right\\\">{{m.price | currency:'&pound;'}}</td> </tr> <tr ng-if=\\\"0\\\" ng-repeat-end></tr> </table> </div> <md-divider></md-divider> <div layout=\\\"column\\\" layout-align=\\\"center end\\\" style=\\\"margin-top:10px\\\"> <span ng-if=\\\"vm.showSubtotal()\\\" style=\\\"font-weight:700;margin-right:20px\\\"> Sub Total :{{vm.order.subTotal | currency: '&pound;' }} </span> <span ng-if=\\\"vm.order.totalDiscount > 0\\\" style=\\\"font-weight:700;margin-right:20px\\\"> {{vm.order.discountLabel}} : {{vm.order.totalDiscount | currency: '&pound;' }} </span> <span ng-if=\\\"vm.order.deliveryCharge > 0\\\" style=\\\"font-weight:700;margin-right:20px\\\"> Delivery Charge : {{vm.order.deliveryCharge | currency: '&pound;' }} </span> <md-divider></md-divider> <span style=\\\"font-size:1.1em;font-weight:700;margin-right:20px\\\"> Total :{{vm.order.total | currency: '&pound;' }} </span> </div> </section> <md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.backToOrder()\\\">Continue Shopping</md-button> </form> </md-sidenav> </div> </div>\";\n// Exports\nexport default code;","function hasLocalStorage() {\r\n  let test = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At`;\r\n  try {\r\n    window.localStorage.setItem(test, test);\r\n    window.localStorage.removeItem(test);\r\n    return true;\r\n  } catch (e) {\r\n    return false;\r\n  }\r\n}\r\n\r\nclass MemoryStore {\r\n  constructor() {\r\n    this._store = {};\r\n  }\r\n\r\n  getItem(key) {\r\n    return this._store[key];\r\n  }\r\n\r\n  getObject(key) {\r\n    return this._store[key] || {};\r\n  }\r\n\r\n  setItem(key, value) {\r\n    this._store[key] = value;\r\n  }\r\n\r\n  removeItem(key) {\r\n    delete this._store[key];\r\n  }\r\n}\r\n\r\nexport default class SessionStore {\r\n  constructor() {\r\n    this._store = hasLocalStorage() ? window.localStorage : new MemoryStore();\r\n  }\r\n\r\n  getItem(key) {\r\n    return this._store.getItem(key);\r\n  }\r\n\r\n  getObject(key) {\r\n    return JSON.parse(this._store.getItem(key) || '{}');\r\n  }\r\n\r\n  setItem(key, value) {\r\n    return this._store.setItem(key, value);\r\n  }\r\n\r\n  setObject(key, value) {\r\n    return this._store.setItem(key, value);\r\n  }\r\n\r\n  removeItem(key) {\r\n    return this._store.removeItem(key);\r\n  }\r\n}","function OAuth($http, $log, currentUser, accountSvc, commonCfg) {\r\n  function signOut() {\r\n    currentUser.signOut();\r\n  }\r\n\r\n  function login(userName, password) {\r\n    const body = formEncode({\r\n      userName: userName,\r\n      password: password,\r\n      client_id: \"xencube_web\",\r\n      grant_type: \"password\"\r\n    });\r\n\r\n    const config = {\r\n      headers: {\r\n        \"Content-Type\": \"application/x-www-form-urlencoded\"\r\n      }\r\n    };\r\n\r\n    return $http.post(`${commonCfg.apiUrl}/token`, body, config)\r\n      .then((response) => {\r\n        currentUser.reset(response.data);\r\n      });\r\n  }\r\n  \r\n  function loginGuest() {\r\n    \r\n    const body = formEncode( {\r\n      userName: \"guest\",\r\n      password: \"guest_guest\",\r\n      client_id: \"xencube_web\",\r\n      grant_type: \"password\"\r\n    });\r\n    \r\n\r\n    const config = {\r\n      headers: {\r\n        \"Content-Type\": \"application/x-www-form-urlencoded\"\r\n      }\r\n    };\r\n\r\n    return $http.post(`${commonCfg.apiUrl}/token`, body, config)\r\n        .then((response) => {\r\n          currentUser.reset(response.data);\r\n        });\r\n  }\r\n\r\n  function formEncode(data) {\r\n    const pairs = [];\r\n    Object.keys(data)\r\n      .forEach(key => {\r\n        pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`);\r\n      });\r\n    return pairs.join(\"&\").replace(/%20/g, \"+\");\r\n  }\r\n\r\n  return {\r\n    login,\r\n    loginGuest,\r\n    signOut\r\n  };\r\n}\r\n\r\nexport default [\"$http\", \"$log\", \"security.currentUser\", \"userMgt.accountService\", \"common.config\", OAuth];\r\n","import jwt_decode from \"jwt-decode\";\r\n\r\nexport class User {\r\n  constructor(store) {\r\n    this.store = store;\r\n    this.USER = \"user\";\r\n    this.ACCESS_TOKEN = \"access_token\";\r\n  }\r\n\r\n  getRole = () => this.store.getObject(this.USER).role;\r\n  isAdmin = () => this.getRole() === \"Admin\";\r\n  isGuest = () => this.getRole() === \"Guest\";\r\n  getToken = () => this.store.getItem(this.ACCESS_TOKEN) || \"\";\r\n\r\n  getGravatarUrl = () => this.store.getObject(this.USER).gravatarUrl;\r\n  isLoggedIn = () => {\r\n    const token = this.getToken();\r\n    if (!token) {\r\n      return false;\r\n    }\r\n    const decoded = jwt_decode(token);\r\n    return Date.now() < decoded.exp * 1000;\r\n  };\r\n\r\n  reset = (data) => {\r\n    this.store.setItem(this.ACCESS_TOKEN, data.access_token);\r\n    this.store.setObject(this.USER, data.userInfo);\r\n  };\r\n\r\n  signOut = () => {\r\n    this.store.removeItem(this.ACCESS_TOKEN);\r\n    this.store.removeItem(this.USER);\r\n  };\r\n}","import {User} from \"../common/user\";\r\n\r\nUser.$inject = [\r\n  \"security.sessionStore\",\r\n];\r\n\r\nexport default User;\r\n","import SessionStore from '../common/store';\r\nimport OAuth from \"./oauth\";\r\nimport CurrentUser from \"./current-user\";\r\nimport addToken from \"./add-token\";\r\nimport loginRedirect from \"./login-redirect\";\r\n\r\nexport default angular\r\n  .module(\"security\", [\"common\"])\r\n  .service(\"security.sessionStore\", SessionStore)\r\n  .service(\"security.currentUser\", CurrentUser)\r\n  .factory(\"security.oauth\", OAuth)\r\n  .factory(\"security.addToken\", addToken)\r\n  .factory(\"security.loginRedirect\", loginRedirect)\r\n  .config([\r\n    \"$httpProvider\",\r\n    function($httpProvider) {\r\n      $httpProvider.interceptors.push(\"security.addToken\");\r\n      $httpProvider.interceptors.push(\"security.loginRedirect\");\r\n    }\r\n  ]);\r\n","function addToken(currentUsr, $q) {\r\n  function request(config) {\r\n    if (currentUsr.isLoggedIn()) {\r\n      config.headers.Authorization = `Bearer ${currentUsr.getToken()}`;\r\n    }\r\n    return $q.when(config);\r\n  }\r\n\r\n  return {\r\n    request\r\n  };\r\n}\r\n\r\nexport default ['security.currentUser', '$q', addToken];\r\n","function loginRedirect($q, $location) {\r\n    let lastPath = \"/\";\r\n\r\n    const responseError = function (response) {\r\n        if (response.status === 401) {\r\n            lastPath = $location.path();\r\n            $location.path(\"/login\");\r\n        }\r\n        return $q.reject(response);\r\n    };\r\n\r\n    const redirectPostLogin = function () {\r\n        $location.path(lastPath);\r\n        lastPath = \"/\";\r\n    };\r\n\r\n    return {\r\n        responseError: responseError,\r\n        redirectPostLogin: redirectPostLogin\r\n    };\r\n}\r\n\r\nexport default [\"$q\", \"$location\", loginRedirect];\r\n","export default class LoginController {\r\n  constructor(oauth, logger, loginRedirect) {\r\n    this.oauth = oauth;\r\n    this.logger = logger;\r\n    this.loginRedirect = loginRedirect;\r\n    this.userName = \"\";\r\n    this.password = \"\";\r\n  }\r\n\r\n  login(form) {\r\n    if (!form.$valid) {\r\n      this.logger.showError(\"Invalid user name or password\");\r\n      return;\r\n    }\r\n    this.oauth\r\n      .login(this.userName, this.password)\r\n      .then(() => {\r\n        this.loginRedirect.redirectPostLogin();\r\n      })\r\n      .catch((err) => {\r\n        this.logger.showError(\"Could not log in.\");\r\n      });\r\n  }\r\n}\r\n\r\nLoginController.$inject = [\r\n  \"security.oauth\", \"common.logger\", \"security.loginRedirect\"\r\n];\r\n","function RegistrationController(accountSvc, logger, $state) {\r\n  var vm = this;\r\n\r\n  vm.userName = \"\";\r\n  vm.email = \"\";\r\n  vm.password = \"\";\r\n  vm.confirmPassword = \"\";\r\n  vm.customerName = \"\";\r\n  vm.phoneNumber = \"\";\r\n  vm.building = \"\";\r\n  vm.flatNo = \"\";\r\n  vm.houseNo = \"\";\r\n  vm.road = \"\";\r\n  vm.town = \"\";\r\n\r\n  let postCode = \"\";\r\n  vm.postCode = function (value) {\r\n    if(arguments.length) {\r\n      angular.isDefined(value)\r\n        ? postCode = value.split(' ').join('') \r\n        : postCode = '';\r\n    } else {\r\n      return postCode;\r\n    }\r\n  };\r\n\r\n  vm.registerCustomer = registerCustomer;\r\n  vm.isTermsAccepted = false;\r\n\r\n  /////////\r\n\r\n  function registerCustomer() {\r\n    let req = {\r\n      userName: vm.userName,\r\n      password: vm.password,\r\n      customerName: vm.customerName,\r\n      building: vm.building,\r\n      flatNo: vm.flatNo,\r\n      houseNo: vm.houseNo,\r\n      road: vm.road,\r\n      town: vm.town,\r\n      postCode: postCode,\r\n      phoneNumber: vm.phoneNumber,\r\n      email: vm.email,\r\n    };\r\n\r\n    accountSvc\r\n      .registerCustomer(req)\r\n      .then((res) => {\r\n        logger.showInfo(\"Registration successful; Confirm your email address.\");\r\n        $state.go(\"app.login\");\r\n      })\r\n      .catch((err) => {\r\n        logger.showError(err.data.message);\r\n      });\r\n  }\r\n\r\n}\r\n\r\nexport default [\"userMgt.accountService\", \"common.logger\", \"$state\", RegistrationController];\r\n","function ForgotPasswordController(accountSvc, logger, $state) {\r\n  var vm = this;\r\n  vm.email = \"\";\r\n\r\n  vm.sendResetLink = sendResetLink;\r\n  vm.canSendLink = canSendLink;\r\n  vm.goBack = goBack;\r\n  vm.linkSent = false;\r\n  vm.loading = false;\r\n\r\n  function canSendLink(form) {\r\n    return form.$valid === true;\r\n  }\r\n\r\n  function goBack() {\r\n    window.history.back();\r\n  }\r\n\r\n  function sendResetLink(form) {\r\n    if (!form.$valid) {\r\n      logger.showError(\"Invalid user name or password\");\r\n      return;\r\n    }\r\n    vm.loading = true;\r\n\r\n    var req = { email: vm.email };\r\n    accountSvc\r\n      .sendPasswordResetLink(req)\r\n      .then(() => {\r\n        vm.linkSent = true;\r\n        logger.showInfo(\"Reset link sent; check your mail.\");\r\n      })\r\n      .catch((err) => {\r\n        vm.linkSent = false;\r\n        logger.showError(\"Could not send reset link.\");\r\n      })\r\n      .finally(() => {\r\n        vm.loading = false;\r\n      });\r\n  }\r\n}\r\n\r\nexport default [\r\n  \"userMgt.accountService\",\r\n  \"common.logger\",\r\n  \"$state\",\r\n  ForgotPasswordController\r\n];\r\n","function ResetPasswordController(accountSvc, logger, $stateParams, $state) {\r\n  var vm = this;\r\n  vm.userId = $stateParams.userId;\r\n  vm.code = $stateParams.code;\r\n\r\n  vm.password = \"\";\r\n  vm.confirmPassword = \"\";\r\n\r\n  vm.resetPassword = resetPassword;\r\n  vm.canResetPassword = canResetPassword;\r\n  vm.goBack = goBack;\r\n  vm.loading = false;\r\n\r\n  function canResetPassword(form) {\r\n    return form.$valid === true;\r\n  }\r\n\r\n  function goBack() {\r\n    window.history.back();\r\n  }\r\n\r\n  function resetPassword(form) {\r\n    if (!form.$valid) {\r\n      logger.showError(\"Invalid user name or password\");\r\n      return;\r\n    }\r\n\r\n    vm.loading = true;\r\n    var req = { userId: vm.userId, password: vm.password, code: vm.code };\r\n\r\n    accountSvc\r\n      .resetPassword(req)\r\n      .then(() => {\r\n        logger.showInfo(\"Password reset successful.\");\r\n        $state.go('app.login');\r\n      })\r\n      .catch((err) => {\r\n        logger.showError(\"Could not reset password.\");\r\n      })\r\n      .finally(_ => {\r\n        vm.loading = false;\r\n      });\r\n  }\r\n}\r\n\r\nexport default [\r\n  \"userMgt.accountService\",\r\n  \"common.logger\",\r\n  \"$stateParams\",\r\n  \"$state\",\r\n  ResetPasswordController\r\n];\r\n","import axios from \"axios\";\r\nimport SessionStore from \"./store\";\r\nimport {User} from \"./user\";\r\n\r\nconst user = new User(new SessionStore());\r\n\r\naxios.interceptors.request.use(function (config) {\r\n  if (user.isLoggedIn()) {\r\n    config.headers.Authorization = `Bearer ${user.getToken()}`;\r\n  }\r\n  return config;\r\n}, function (error) {\r\n  // Do something with request error\r\n  return Promise.reject(error);\r\n});\r\n\r\nexport default axios;\r\n","import React from \"react\";\r\nimport {\r\n  Toolbar,\r\n  AppBar,\r\n  Typography,\r\n} from \"@mui/material\";\r\n\r\nexport const Topbar = React.forwardRef(({ title }, ref) => (\r\n  <AppBar ref={ref} position=\"static\">\r\n    <Toolbar>\r\n      <Typography variant=\"h6\" component=\"div\" sx={{ flexGrow: 1 }}>\r\n        {title}\r\n      </Typography>\r\n    </Toolbar>\r\n  </AppBar>\r\n));\r\n\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { config } from \"app/common/config\";\r\nimport axios from \"app/common/axios\";\r\nimport { Topbar } from \"app/common/Topbar\";\r\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\r\nimport {\r\n  Alert,\r\n  AlertTitle,\r\n  Grid,\r\n  TextField,\r\n  Typography,\r\n  Box,\r\n  Card,\r\n  CardContent,\r\n  Avatar,\r\n  Button,\r\n  FormGroup,\r\n  Checkbox,\r\n  FormControlLabel,\r\n} from \"@mui/material\";\r\n\r\nimport { red } from '@mui/material/colors';\r\nimport \"./Profile.css\";\r\n\r\nconst getProfile = () => axios.get(`${config.apiUrl}/accounts/current`).then(res => res.data);\r\nconst deactiveAccount = (payload) => axios.delete(`${config.apiUrl}/accounts/current`, { data: payload }).then(res => res.data);\r\n\r\nfunction ProfileCard({ data }) {\r\n  return (\r\n    <Box component=\"form\" noValidate sx={{ mt: 3 }}>\r\n      <Card>\r\n        <CardContent>\r\n          <Grid container spacing={2} >\r\n            <Grid item xs={12}>\r\n              <TextField\r\n                required\r\n                fullWidth\r\n                id=\"fullName\"\r\n                label=\"Full Name\"\r\n                name=\"fullName\"\r\n                autoComplete=\"full-name\"\r\n                disabled\r\n                value={data.fullName}\r\n              />\r\n            </Grid>\r\n            <Grid item xs={12}>\r\n              <TextField\r\n                required\r\n                fullWidth\r\n                id=\"email\"\r\n                label=\"Email Address\"\r\n                name=\"email\"\r\n                autoComplete=\"email\"\r\n                disabled\r\n                value={data.email}\r\n              />\r\n            </Grid>\r\n          </Grid>\r\n          <Button\r\n            type=\"submit\"\r\n            fullWidth\r\n            variant=\"contained\"\r\n            sx={{ mt: 3, mb: 2 }}\r\n            disabled\r\n          >\r\n            Update\r\n          </Button>\r\n        </CardContent>\r\n      </Card>\r\n    </Box>\r\n  );\r\n}\r\n\r\nfunction DeactivateAcount({ $state }) {\r\n  const queryClient = useQueryClient();\r\n  const [signOut, setSignOut] = useState(false);\r\n  const { mutate, reset, isLoading, isError, isSuccess, error } = useMutation(deactiveAccount, {\r\n    onSuccess: () => {\r\n      queryClient.invalidateQueries(\"profile\");\r\n      setSignOut(true);\r\n    }\r\n  });\r\n\r\n  useEffect(() => {\r\n    let timer = null;\r\n    if (signOut) {\r\n      timer = setTimeout(() => $state.go(\"app.logout\"), 5000);\r\n    }\r\n    return () => timer && clearTimeout(timer);\r\n\r\n  }, [signOut]);\r\n\r\n  const handleDeactivate = (event) => {\r\n    event.preventDefault();\r\n    const data = new FormData(event.currentTarget);\r\n    mutate({ email: data.get('email'), hasConsent: data.get('consent') === 'on' ? true : false });\r\n  };\r\n\r\n  if (isLoading) {\r\n    return (\r\n      <Card sx={{ mt: 3 }}>\r\n        <CardContent>\r\n          <span>Deactivating...!</span>\r\n        </CardContent>\r\n      </Card>\r\n    );\r\n  }\r\n\r\n  if (isError) {\r\n    return (\r\n      <Card sx={{ mt: 3 }}>\r\n        <CardContent>\r\n          <Alert\r\n            severity=\"error\"\r\n            action={\r\n              <Button color=\"inherit\" size=\"small\" onClick={() => reset()}>\r\n                Retry\r\n              </Button>\r\n            }\r\n          >\r\n            <AlertTitle>Error</AlertTitle>\r\n            {error.response.data.message}\r\n          </Alert>\r\n        </CardContent>\r\n      </Card>\r\n    );\r\n  }\r\n\r\n  if (isSuccess) {\r\n    return (\r\n      <Card sx={{ mt: 3 }}>\r\n        <CardContent>\r\n          <Typography component=\"div\" sx={{ flexGrow: 1 }}>\r\n            Account deletion request received! You will receive emails confirming the request and subsequent removal of data. We will be logging you out soon.\r\n          </Typography>\r\n        </CardContent>\r\n      </Card>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <Box component=\"form\" noValidate onSubmit={handleDeactivate} sx={{ mt: 3 }}>\r\n      <Card>\r\n        <CardContent>\r\n          <Grid container spacing={2}>\r\n            <Grid item xs={12}>\r\n              <TextField\r\n                required\r\n                fullWidth\r\n                id=\"email\"\r\n                label=\"Email Address\"\r\n                name=\"email\"\r\n                autoComplete=\"off\"\r\n              />\r\n            </Grid>\r\n            <Grid item xs={12}>\r\n              <FormGroup >\r\n                <FormControlLabel control={<Checkbox name=\"consent\" />} label=\"I want to delete my account\" />\r\n              </FormGroup>\r\n            </Grid>\r\n          </Grid>\r\n          <Button\r\n            color=\"warning\"\r\n            type=\"submit\"\r\n            fullWidth\r\n            variant=\"contained\"\r\n            sx={{ mt: 3, mb: 2 }}\r\n          >\r\n            Delete Account\r\n          </Button>\r\n        </CardContent>\r\n      </Card>\r\n    </Box>\r\n  );\r\n}\r\n\r\nexport function ProfileView({$state}) {\r\n  const { isLoading, isError, data, error } = useQuery('profile', getProfile);\r\n\r\n  if (isLoading) {\r\n    return <span>Loading...</span>;\r\n  }\r\n\r\n  if (isError) {\r\n    return <span>Error: {error.message}</span>;\r\n  }\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Topbar title=\"Profile\" />\r\n      <Box sx={{ overflowY: 'auto'}}>\r\n        <Grid container direction=\"column\" justifyContent=\"center\" alignItems=\"stretch\" spacing={2}>\r\n          <Grid item>\r\n            <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\r\n              <Avatar sx={{ m: 1, bgcolor: red[500] }} aria-label=\"avatar\" src={data.gravatarUrl} sx={{ width: 56, height: 56 }} />\r\n              <Typography variant=\"h6\" component=\"div\" sx={{ flexGrow: 1 }}>\r\n                {data.fullName}\r\n              </Typography>\r\n            </Box>\r\n          </Grid>\r\n          <Grid item>\r\n            <ProfileCard data={data} />\r\n          </Grid>\r\n          <Grid item>\r\n            <DeactivateAcount $state={$state} />\r\n          </Grid>\r\n        </Grid>\r\n      </Box>\r\n    </React.Fragment>\r\n  );\r\n}\r\n","import dayjs from 'dayjs';\r\nimport timezone from \"dayjs/plugin/timezone\";\r\nimport dayjsUTC from 'dayjs/plugin/utc';\r\nimport {config} from \"./config\";\r\nimport \"dayjs/locale/en-gb\";\r\n\r\ndayjs.extend(dayjsUTC);\r\ndayjs.extend(timezone);\r\n\r\ndayjs.tz.setDefault(config.ianaTimezone || 'Europe/London');\r\ndayjs.locale('en-gb');\r\n\r\nexport default dayjs;","import React from \"react\";\r\nimport AdapterDayjs from '@mui/lab/AdapterDayjs';\r\nimport LocalizationProvider from '@mui/lab/LocalizationProvider';\r\nimport dayjs from \"app/common/dayjs\";\r\n\r\nexport function withLocalization(Component) {\r\n  return (props) => (\r\n    <LocalizationProvider\r\n      dateAdapter={AdapterDayjs}\r\n      dateLibInstance={dayjs}\r\n      locale=\"en-gb\"\r\n    >\r\n      <Component {...props}/>\r\n    </LocalizationProvider>\r\n  );\r\n}","import React from \"react\";\r\n\r\nimport {\r\n  QueryClient,\r\n  QueryClientProvider,\r\n} from 'react-query';\r\n\r\n\r\nexport function withReactQuery(Component) {\r\n  const queryClient = new QueryClient();\r\n  return (props) => (\r\n    <QueryClientProvider client={queryClient}>\r\n      <Component {...props} />\r\n    </QueryClientProvider>\r\n  );\r\n}","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport {createTheme, ThemeProvider} from '@mui/material/styles';\r\nimport * as colors from '@mui/material/colors';\r\nimport {config} from \"app/common/config\";\r\nimport { withLocalization } from \"./with-localization\";\r\nimport { withReactQuery } from \"./with-react-query\";\r\n\r\nconst theme = createTheme({\r\n  palette: {\r\n    primary: {\r\n      main: colors[config.colorPalette][500],\r\n    },\r\n  },\r\n});\r\n\r\nfunction withAngular(ReactComponent, bindings = {}, deps = []) {\r\n  const Component = withReactQuery(withLocalization(ReactComponent));\r\n  class Controller {\r\n    constructor($element, ...injectedDeps) {\r\n      this.$element = $element;\r\n      this.services = deps.reduce((acc, cv, ci) => ({...acc, [cv]: injectedDeps[ci]}), {});\r\n      this.$element.on('$destroy', () => {\r\n        ReactDOM.unmountComponentAtNode(this.$element[0]);\r\n      });\r\n    }\r\n\r\n    $onChanges() {\r\n      const comp = this;\r\n      const binds = Object.keys(bindings).reduce((acc, cv) => ({...acc, [cv]: comp[cv]}), {});\r\n      const props = Object.assign(binds, this.services);\r\n      ReactDOM.render(\r\n        <ThemeProvider theme={theme}>\r\n          <Component {...props} />\r\n        </ThemeProvider>,\r\n        this.$element[0]\r\n      );\r\n    }\r\n  }\r\n\r\n  Controller.$inject = ['$element', ...deps];\r\n\r\n  return {\r\n    transclude: false,\r\n    bindings,\r\n    controller: Controller,\r\n  };\r\n}\r\n\r\nexport default withAngular;","import LoginController from \"./login-controller\";\r\nimport RegistrationController from \"./registration-controller\";\r\nimport AccountService from \"./account-service\";\r\nimport ForgotPasswordController from \"./forgot-password-controller\";\r\nimport ResetPasswordController from \"./reset-password-controller\";\r\nimport ConfirmEmailController from \"./confirm-email-controller\";\r\n\r\nimport confirmEmailView from \"./view/confirm-email.html\";\r\nimport forgotPasswordView from \"./view/forgot-password.html\";\r\nimport loginView from \"./view/login.html\";\r\nimport registrationView from \"./view/registration.html\";\r\nimport resetPasswordView from \"./view/reset-password.html\";\r\nimport { ProfileView } from \"./Profile\";\r\nimport withAngular from \"../common/with-angular\";\r\n\r\nexport default angular\r\n  .module(\"userMgt\", [\"ui.router\", \"security\", \"common\"])\r\n  .component(\"xsProfileView\", withAngular(ProfileView, [], ['$state']))\r\n  .controller(\"userMgt.LoginController\", LoginController)\r\n  .controller(\"userMgt.RegistrationController\", RegistrationController)\r\n  .controller(\"userMgt.ForgotPasswordController\", ForgotPasswordController)\r\n  .controller(\"userMgt.ResetPasswordController\", ResetPasswordController)\r\n  .controller(\"userMgt.ConfirmEmailController\", ConfirmEmailController)\r\n  .service(\"userMgt.accountService\", AccountService)\r\n  .config([\"$stateProvider\", \"$urlRouterProvider\", Config]);\r\n\r\nfunction Config($stateProvider, $urlRouterProvider) {\r\n  $stateProvider\r\n    .state(\"app.login\", {\r\n      url: \"/login\",\r\n      template: loginView,\r\n      controller: \"userMgt.LoginController\",\r\n      controllerAs: \"vm\"\r\n    })\r\n    .state(\"app.logout\", {\r\n      url: \"/logout\",\r\n      template: '<div style=\"text-align: center; font-size: 2em;\">You are logged out!</div>',\r\n      resolve: {\r\n        signOutInfo: [\r\n          \"security.oauth\", function (oauth) {\r\n            return oauth.signOut();\r\n          }\r\n        ]\r\n      }\r\n    })\r\n    .state(\"app.account\", {\r\n      url: \"/account\",\r\n      component: \"xsProfileView\",\r\n    })\r\n    .state(\"app.registration\", {\r\n      url: \"/registration\",\r\n      template: registrationView,\r\n      controller: \"userMgt.RegistrationController\",\r\n      controllerAs: \"vm\"\r\n    })\r\n    .state(\"app.forgotPassword\", {\r\n      url: \"/forgot-password\",\r\n      template: forgotPasswordView,\r\n      controller: \"userMgt.ForgotPasswordController\",\r\n      controllerAs: \"vm\"\r\n    })\r\n    .state(\"app.resetPassword\", {\r\n      url: \"/reset-password/{userId:int}/{code:string}\",\r\n      template: resetPasswordView,\r\n      controller: \"userMgt.ResetPasswordController\",\r\n      controllerAs: \"vm\"\r\n    })\r\n    .state(\"app.confirmEmail\", {\r\n      url: \"/confirm-email/{userId:int}/{token:string}\",\r\n      template: confirmEmailView,\r\n      controller: \"userMgt.ConfirmEmailController\",\r\n      controllerAs: \"vm\"\r\n    });\r\n}\r\n","function ResetPasswordController(accountSvc, logger, $stateParams) {\r\n  var vm = this;\r\n  vm.userId = $stateParams.userId;\r\n  vm.token = $stateParams.token;\r\n\r\n  vm.message = \"\";\r\n  vm.error = \"\";\r\n\r\n  confirmEmail();\r\n\r\n  function confirmEmail() {\r\n    var req = { userId: vm.userId, token: vm.token };\r\n    accountSvc\r\n      .confirmEmail(req)\r\n      .then(() => {\r\n        vm.message = \"Your email address is confirmed\";\r\n      })\r\n      .catch((err) => {\r\n        vm.error = \"Could not confirm email.\";\r\n      });\r\n  }\r\n}\r\n\r\nexport default [\r\n  \"userMgt.accountService\",\r\n  \"common.logger\",\r\n  \"$stateParams\",\r\n  ResetPasswordController\r\n];\r\n","function AccountService($http, config) {\r\n  return {\r\n    registerCustomer : registerCustomer,\r\n    resetPassword : resetPassword,\r\n    sendPasswordResetLink : sendPasswordResetLink,\r\n    getUserInfo : getUserInfo,\r\n    confirmEmail : confirmEmail,\r\n    changeAddress : changeAddress,\r\n  };\r\n\r\n  function changeAddress(req) {\r\n    return $http.post(`${config.apiUrl}/accounts/current/address`, req);\r\n  }\r\n\r\n  function confirmEmail(req) {\r\n    return $http.post(`${config.apiUrl}/accounts/confirm-email`, req);\r\n  }\r\n\r\n  function sendPasswordResetLink(req) {\r\n    return $http.post(`${config.apiUrl}/accounts/send-password-reset-link`, req);\r\n  }\r\n\r\n  function resetPassword(req) {\r\n    return $http.post(`${config.apiUrl}/accounts/reset-password`, req);\r\n  }\r\n\r\n  function registerCustomer(req) {\r\n    return $http.post(`${config.apiUrl}/accounts/register`, req);\r\n  }\r\n\r\n  function getUserInfo() {\r\n    return $http.get(`${config.apiUrl}/accounts/current`)\r\n      .then((response) => {\r\n        return response.data;\r\n      });\r\n  }\r\n}\r\n\r\nexport default [\"$http\", \"common.config\", AccountService];\r\n","// Module\nvar code = \"<div class=\\\"user-login-view\\\" layout=\\\"column\\\" flex> <md-toolbar class=\\\"md-theme-light\\\"> <h4 class=\\\"md-toolbar-tools\\\" layout-align=\\\"center-center\\\"> <span>Login</span> </h4> </md-toolbar> <form name=\\\"loginForm\\\" flex layout=\\\"column\\\" layout-padding novalidate> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-user fa-2x\\\"></md-icon> <input name=\\\"userName\\\" ng-model=\\\"vm.userName\\\" type=\\\"email\\\" placeholder=\\\"User Name/ Email\\\" required> <div ng-messages=\\\"loginForm.userName.$error\\\"> <div ng-message=\\\"required\\\">User name/email is required.</div> <div ng-message=\\\"email\\\">Must be a valid email address.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-key fa-2x\\\"></md-icon> <input name=\\\"password\\\" ng-model=\\\"vm.password\\\" type=\\\"password\\\" placeholder=\\\"Password\\\" required> <div ng-messages=\\\"loginForm.password.$error\\\"> <div ng-message=\\\"required\\\">Password is required.</div> </div> </md-input-container> <div layout=\\\"row\\\" layout-align=\\\"center center\\\"> <md-button class=\\\"md-primary md-raised\\\" ng-click=\\\"vm.login(loginForm)\\\">Login</md-button> <md-button class=\\\"md-raised\\\" ui-sref=\\\"app.registration\\\">Register</md-button> </div> <a ui-sref=\\\"app.forgotPassword\\\">Forgot Password?</a> </form> </div> \";\n// Exports\nexport default code;","// Module\nvar code = \"<style>.user-registration-view .form-body{background-color:#fff}.user-registration-view .register-button{margin-left:0;margin-right:0}</style> <div class=\\\"user-registration-view\\\" layout=\\\"column\\\" flex> <md-toolbar class=\\\"md-theme-light\\\"> <h4 class=\\\"md-toolbar-tools\\\" layout-align=\\\"center-center\\\"> <span>Registration</span> </h4> </md-toolbar> <form name=\\\"regForm\\\" flex layout=\\\"column\\\" layout-padding novalidate> <md-content class=\\\"form-body\\\" layout=\\\"column\\\" layout-gt-xs=\\\"row\\\" layout-align-gt-xs=\\\"center start\\\"> <div layout=\\\"column\\\" layout-margin flex-gt-xs> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-user fa-2x\\\"></md-icon> <input ng-model=\\\"vm.customerName\\\" type=\\\"text\\\" required placeholder=\\\"Full Name\\\" name=\\\"customerName\\\"> <div ng-messages=\\\"regForm.customerName.$error\\\"> <div ng-message=\\\"required\\\">Full name is required.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-envelope fa-2x\\\"></md-icon> <input name=\\\"email\\\" ng-model=\\\"vm.email\\\" type=\\\"email\\\" required placeholder=\\\"Email\\\"> <div ng-messages=\\\"regForm.email.$error\\\"> <div ng-message=\\\"required\\\">Email is required.</div> <div ng-message=\\\"email\\\">The email is not valid.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-key fa-2x\\\"></md-icon> <input ng-model=\\\"vm.password\\\" required type=\\\"password\\\" name=\\\"password\\\" maxlength=\\\"8\\\" minlength=\\\"6\\\" placeholder=\\\"Password\\\"> <div ng-messages=\\\"regForm.password.$error\\\"> <div ng-message=\\\"required\\\">Password is required.</div> <div ng-message=\\\"maxlength\\\">Password must not be more than 8 character</div> <div ng-message=\\\"minlength\\\">Password must be 6 character long</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-key fa-2x\\\"></md-icon> <input ng-model=\\\"vm.confirmPassword\\\" type=\\\"password\\\" name=\\\"confirmPassword\\\" compare-to=\\\"vm.password\\\" placeholder=\\\"Comfirm Password\\\" required maxlength=\\\"8\\\" minlength=\\\"6\\\"> <div ng-messages=\\\"regForm.confirmPassword.$error\\\"> <div ng-message=\\\"required\\\">Password is required.</div> <div ng-message=\\\"maxlength\\\">Password must not be more than 8 character</div> <div ng-message=\\\"minlength\\\">Password must be 6 character long</div> <div ng-message=\\\"compareTo\\\">Password and confirm password must match</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-phone fa-2x\\\"></md-icon> <input ng-model=\\\"vm.phoneNumber\\\" type=\\\"text\\\" name=\\\"phoneNumber\\\" required placeholder=\\\"Phone Number\\\" md-maxlength=\\\"15\\\" minlength=\\\"11\\\"> <div ng-messages=\\\"regForm.phoneNumber.$error\\\"> <div ng-message=\\\"required\\\">Phone number is required.</div> <div ng-message=\\\"minlength\\\">Phone number must be 11 character long</div> <div ng-message=\\\"maxlength\\\">Must not be more than 15 charcter logn</div> </div> </md-input-container> </div> <div layout=\\\"column\\\" layout-margin flex-gt-xs> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-home fa-2x\\\"></md-icon> <input ng-model=\\\"vm.houseNo\\\" type=\\\"text\\\" placeholder=\\\"House No / Name\\\"> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-address-card-o fa-2x\\\"></md-icon> <input ng-model=\\\"vm.flatNo\\\" type=\\\"text\\\" placeholder=\\\"Flat No\\\"> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-building fa-2x\\\"></md-icon> <input ng-model=\\\"vm.building\\\" type=\\\"text\\\" placeholder=\\\"Building Name\\\"> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-road fa-2x\\\"></md-icon> <input ng-model=\\\"vm.road\\\" type=\\\"text\\\" placeholder=\\\"Road Name\\\"> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-building-o fa-2x\\\"></md-icon> <input ng-model=\\\"vm.town\\\" type=\\\"text\\\" placeholder=\\\"Town\\\"> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-id-card-o fa-2x\\\"></md-icon> <input ng-model=\\\"vm.postCode\\\" ng-model-options=\\\"{getterSetter: true}\\\" type=\\\"text\\\" placeholder=\\\"Post Code\\\"> </md-input-container> </div> </md-content> <div layout=\\\"column\\\" layout-margin> <md-checkbox ng-model=\\\"vm.isTermsAccepted\\\" aria-label=\\\"Terms and condition\\\"> I have read and accept <a ui-sref=\\\"app.termsAndConditions\\\"> the terms and conditions. </a> </md-checkbox> <md-button ng-disabled=\\\"!regForm.$valid || !vm.isTermsAccepted\\\" class=\\\"md-primary md-raised register-button\\\" ng-click=\\\"vm.registerCustomer()\\\">Register</md-button> </div> </form> </div> \";\n// Exports\nexport default code;","// Module\nvar code = \"<style>.reset-password-view button{margin-left:0;margin-right:0}.reset-password-view .highlight{font-weight:700;color:red}.reset-password-view .hint{font-size:12px;line-height:14px;transition:all .3s cubic-bezier(.55,0,.55,.2);color:rgba(0,0,0,.54)}</style> <div layout=\\\"column\\\" flex class=\\\"reset-password-view\\\"> <md-toolbar class=\\\"md-theme-light\\\"> <h4 class=\\\"md-toolbar-tools\\\" layout-align=\\\"center-center\\\"> <span>Forgot Password?</span> </h4> </md-toolbar> <form name=\\\"forgotPasswordForm\\\" flex layout=\\\"column\\\" layout-padding novalidate> <div layout=\\\"column\\\" style=\\\"margin:40px 0 0 0;padding:0\\\" ng-if=\\\"!vm.linkSent\\\"> <md-input-container> <md-icon md-font-icon=\\\"fa fa-envelope fa-2x\\\"></md-icon> <input name=\\\"email\\\" ng-model=\\\"vm.email\\\" type=\\\"email\\\" placeholder=\\\"Email\\\" required> <div class=\\\"hint\\\">We will send a password reset link to the email address you typed in above.</div> <div ng-messages=\\\"forgotPasswordForm.email.$error\\\"> <div ng-message=\\\"required\\\">Email address is required.</div> <div ng-message=\\\"email\\\">Must be a valid email address.</div> </div> </md-input-container> <md-button class=\\\"md-primary md-raised send-button\\\" ng-disabled=\\\"vm.loading\\\" ng-click=\\\"vm.sendResetLink(forgotPasswordForm)\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"> <md-progress-circular ng-if=\\\"vm.loading\\\" class=\\\"md-warn md-hue-3\\\" md-diameter=\\\"30\\\"></md-progress-circular> <span ng-if=\\\"vm.loading\\\">&nbsp;Sending...</span> <span ng-if=\\\"!vm.loading\\\">Send Link</span> </md-button> </div> <div layout=\\\"column\\\" style=\\\"margin:0;padding:0\\\" ng-if=\\\"vm.linkSent\\\"> <h2>Password reset link sent.</h2> <p>Go to your inbox, open the email and follow the link in there to reset your password.</p> <p>Email may take a minute to reach to you. If you don't see the email in your inbox, make sure to check the&nbsp;<span class=\\\"highlight\\\">Spam/Junk folder</span>.</p> </div> <md-button class=\\\"md-primary\\\" ng-click=\\\"vm.goBack()\\\">Back</md-button> </form> </div> \";\n// Exports\nexport default code;","// Module\nvar code = \"<div layout=\\\"column\\\" flex class=\\\"reset-password--reset-view\\\"> <md-toolbar class=\\\"md-theme-light\\\"> <h4 class=\\\"md-toolbar-tools\\\" layout-align=\\\"center-center\\\"> <span>Reset Password</span> </h4> </md-toolbar> <form name=\\\"resetPasswordForm\\\" layout-padding flex layout=\\\"column\\\" novalidate> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-key fa-2x\\\"></md-icon> <input ng-model=\\\"vm.password\\\" required type=\\\"password\\\" name=\\\"password\\\" placeholder=\\\"Password\\\"> <div ng-messages=\\\"registrationForm.password.$error\\\"> <div ng-message=\\\"required\\\">Password is required.</div> </div> </md-input-container> <md-input-container md-no-float> <md-icon md-font-icon=\\\"fa fa-key fa-2x\\\"></md-icon> <input ng-model=\\\"vm.confirmPassword\\\" type=\\\"password\\\" placeholder=\\\"Comfirm Password\\\"> </md-input-container> <div layout=\\\"column\\\"> <md-button class=\\\"md-primary md-raised send-button\\\" ng-disabled=\\\"vm.loading\\\" ng-click=\\\"vm.resetPassword(resetPasswordForm)\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"> <md-progress-circular ng-if=\\\"vm.loading\\\" class=\\\"md-warn md-hue-3\\\" md-diameter=\\\"30\\\"></md-progress-circular> <span ng-if=\\\"vm.loading\\\">&nbsp;Resetting...</span> <span ng-if=\\\"!vm.loading\\\">Reset</span> </md-button> <md-button ng-click=\\\"vm.goBack()\\\">Back</md-button> </div> </form> </div>\";\n// Exports\nexport default code;","// Module\nvar code = \"<div> <h3>{{vm.error}}</h3> <h3>{{vm.message}}</h3> <div ng-if=\\\"vm.message.length > 0\\\"> <a ui-sref=\\\"app.order\\\">Order Food</a> </div> </div> \";\n// Exports\nexport default code;","import React, { useState, useEffect } from \"react\";\r\n\r\nimport {\r\n  Grid,\r\n  TextField,\r\n  Stack,\r\n  Box,\r\n  Alert\r\n} from \"@mui/material\";\r\n\r\nimport \"./Reservation.css\";\r\n\r\n//import { Image } from 'mui-image';\r\nimport SaveOutlinedIcon from '@mui/icons-material/SaveOutlined';\r\nimport { LoadingButton, DatePicker } from \"@mui/lab\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { useTheme } from '@mui/material/styles';\r\nimport useMediaQuery from '@mui/material/useMediaQuery';\r\n\r\nimport axios from \"app/common/axios\";\r\nimport dayjs from \"app/common/dayjs\";\r\nimport { config } from \"app/common/config\";\r\nimport { Topbar } from \"app/common/Topbar\";\r\n\r\nconst getSlots = (date) => axios.get(`${config.apiUrl}/stores/default/reservation/calendar/${date}/slots`).then(res => res.data.slots);\r\nconst getBlacklist = () => axios.get(`${config.apiUrl}/stores/default/reservation/blacklist`).then(res => res.data.blacklist);\r\nconst saveReservation = (payload) => axios.post(`${config.apiUrl}/reservations`, payload).then(res => res.data);\r\n\r\nconst defaultForm = {\r\n  date: dayjs().endOf('date'),\r\n  name: \"\",\r\n  email: \"\",\r\n  time: \"\",\r\n  contactNo: \"\",\r\n  notes: \"\",\r\n  guests: 1,\r\n};\r\n\r\n\r\nexport function ReservationView({ $state }) {\r\n  const { handleSubmit, control, watch, formState: { errors }, setValue } = useForm({\r\n    defaultValues: defaultForm\r\n  });\r\n\r\n  const [slots, setSlots] = useState([]);\r\n  const [blacklist, setBlacklist] = useState([]);\r\n  const [minDate, setMinDate] = useState(null);\r\n  const [loading, setLoading] = useState(false);\r\n  const theme = useTheme();\r\n  const matches = useMediaQuery(theme.breakpoints.up('sm'));\r\n\r\n  const populateSlots = (dt) => {\r\n    getSlots(dt.unix())\r\n      .then(slots => {\r\n        setSlots(slots);\r\n        if (slots.length) {\r\n          setValue('time', slots[0]);\r\n        }\r\n      });\r\n  };\r\n\r\n  const loadBlacklist = () =>\r\n    getBlacklist()\r\n      .then(bl => bl.map(x => dayjs(x, \"YYYY-MM-DD\")));\r\n\r\n  const createTzDate = (dt) => dayjs.tz(dayjs(dt).endOf('date').format('DD-MM-YYYY'), \"DD-MM-YYYY\", config.ianaTimezone).endOf('date');\r\n\r\n  const getFirstOpenDay = (bl) => {\r\n    let day = dayjs();\r\n\r\n    while (bl.some(dd => day.isSame(dd, 'day'))) {\r\n      day = day.add(1, 'day');\r\n    }\r\n    return day;\r\n  };\r\n\r\n  useEffect(() => {\r\n    loadBlacklist()\r\n      .then((bl) => {\r\n        setBlacklist(bl);\r\n        const fod = getFirstOpenDay(bl);\r\n        setMinDate(fod);\r\n        setValue('date', fod);\r\n        populateSlots(createTzDate(fod));\r\n      });\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    const subscription = watch((value, { name, type }) => {\r\n      if (name === 'date' && type === 'change') {\r\n        setValue('time', '');\r\n        populateSlots(createTzDate(value.date));\r\n      }\r\n    });\r\n\r\n    return () => subscription.unsubscribe();\r\n  }, [watch]);\r\n\r\n  const shouldDisableDate = (date) => {\r\n    return blacklist.some(dd => dayjs(date).isSame(dd, 'day'));\r\n  };\r\n\r\n  const onSubmit = data => {\r\n    setLoading(true);\r\n\r\n    const [time, modifier] = data.time.split(' ');\r\n    let [hours, minutes] = time.split(':');\r\n\r\n    if (hours === '12') {\r\n      hours = '00';\r\n    }\r\n\r\n    if (modifier === 'PM') {\r\n      hours = parseInt(hours, 10) + 12;\r\n    }\r\n\r\n    minutes = parseInt(minutes, 10);\r\n\r\n    let date = dayjs(data.date).startOf('date').format('YYYY-MM-DD');\r\n\r\n    let rd = dayjs.tz(`${date} ${hours}:${minutes}:00`, config.ianaTimezone).utc().format();\r\n\r\n    const req = {\r\n      reservationDate: rd,\r\n      name: data.name,\r\n      contactNo: data.contactNo,\r\n      guest: data.guests,\r\n      email: data.email,\r\n      note: data.notes\r\n    };\r\n\r\n    saveReservation(req)\r\n      .then(() => $state.go('app.reservationSuccess'))\r\n      .finally(() => setLoading(false));\r\n  };\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Topbar title=\"Reservation\" />\r\n      <Box sx={{ overflowY: 'auto' }}>\r\n        <form onSubmit={handleSubmit(onSubmit)}>\r\n          <Stack spacing={2} sx={{ p: '10px' }}>\r\n            {config.reservationHeaderMessage && (\r\n              <Alert variant=\"outlined\" severity=\"info\">\r\n                {config.reservationHeaderMessage}\r\n              </Alert>\r\n            )}\r\n\r\n            {!config.isReservationActive && (\r\n              <Alert variant=\"outlined\" severity=\"warning\">\r\n                {config.reservationClosedMessage}\r\n              </Alert>\r\n            )}\r\n\r\n            <Controller\r\n              name=\"date\"\r\n              control={control}\r\n              rules={{\r\n                required: \"Date is required\"\r\n              }}\r\n              render={({ field }) => (\r\n                <DatePicker\r\n                  {...field}\r\n                  label=\"Date\"\r\n                  minDate={minDate}\r\n                  views={['day']}\r\n                  shouldDisableDate={shouldDisableDate}\r\n                  renderInput={(params) => (\r\n                    <TextField\r\n                      {...params}\r\n                      error={!!errors.date}\r\n                      helperText={errors.date?.message}\r\n                    />\r\n                  )}\r\n                />\r\n              )}\r\n            />\r\n\r\n            <Controller\r\n              name=\"time\"\r\n              control={control}\r\n              rules={{\r\n                required: \"Time is required\"\r\n              }}\r\n              render={({ field }) => (\r\n                <TextField\r\n                  {...field}\r\n                  select\r\n                  label=\"Time\"\r\n                  SelectProps={{ native: true }}\r\n                  error={!!errors.time}\r\n                  helperText={errors.time?.message}\r\n                >\r\n                  {slots.map((slot) => (\r\n                    <option key={slot} value={slot}>{slot}</option>\r\n                  ))}\r\n                </TextField>\r\n              )}\r\n            />\r\n\r\n            <Controller\r\n              name=\"name\"\r\n              control={control}\r\n              rules={{ required: \"Name is required\" }}\r\n              render={({ field }) => (\r\n                <TextField\r\n                  {...field}\r\n                  label={\"Name\"}\r\n                  error={!!errors.name}\r\n                  helperText={errors.name?.message}\r\n                />\r\n              )}\r\n            />\r\n\r\n            <Controller\r\n              name=\"contactNo\"\r\n              control={control}\r\n              rules={{\r\n                required: \"Contact no is required\",\r\n                minLength: { value: 10, message: \"Number is too short\" },\r\n                maxLength: { value: 15, message: \"Number is too long\" },\r\n              }}\r\n              render={({ field }) => (\r\n                <TextField\r\n                  {...field}\r\n                  type=\"tel\"\r\n                  label={\"Contact No\"}\r\n                  error={!!errors.contactNo}\r\n                  helperText={errors.contactNo?.message}\r\n                />\r\n              )}\r\n            />\r\n\r\n            <Controller\r\n              name=\"guests\"\r\n              control={control}\r\n              rules={{\r\n                required: \"Guest is required\",\r\n                min: { value: 1, message: \"At least one guest required\" }\r\n              }}\r\n              render={({ field }) => (\r\n                <TextField\r\n                  {...field}\r\n                  type=\"number\"\r\n                  label={\"No of Guests\"}\r\n                  error={!!errors.guests}\r\n                  helperText={errors.guests?.message}\r\n                />\r\n              )}\r\n            />\r\n\r\n            <Controller\r\n              name=\"email\"\r\n              control={control}\r\n              rules={{\r\n                required: \"Email is required\",\r\n                pattern: { value: /^\\S+@\\S+$/i, message: 'Must be a valid email address' }\r\n              }}\r\n              render={({ field }) => (\r\n                <TextField\r\n                  {...field}\r\n                  type=\"email\"\r\n                  label={\"Email\"}\r\n                  error={!!errors.email}\r\n                  helperText={errors.email?.message}\r\n                />\r\n              )}\r\n            />\r\n\r\n            <Controller\r\n              name=\"notes\"\r\n              control={control}\r\n              render={({ field }) => (\r\n                <TextField\r\n                  {...field}\r\n                  multiline\r\n                  rows={3}\r\n                  label={\"Notes\"}\r\n                />\r\n              )}\r\n            />\r\n            <LoadingButton\r\n              sx={{ mt: '10px', mb: '10px' }}\r\n              color=\"primary\"\r\n              loading={loading}\r\n              loadingPosition=\"start\"\r\n              startIcon={<SaveOutlinedIcon />}\r\n              variant=\"contained\"\r\n              onClick={handleSubmit(onSubmit)}\r\n            >\r\n              Submit\r\n            </LoadingButton>\r\n          </Stack>\r\n        </form>\r\n      </Box>\r\n    </React.Fragment>\r\n  );\r\n}\r\n","import {ReservationView} from \"./Reservation\";\r\nimport {SuccessView} from \"./Reservation/SuccessView\";\r\nimport withAngular from \"../common/with-angular\";\r\n\r\nexport default angular\r\n.module(\"reservation\", [\"ui.router\"])\r\n.component(\"xsReservationView\", withAngular(ReservationView, [], ['$state']))\r\n.component(\"xsReservationSuccessView\", withAngular(SuccessView))\r\n.config([\"$stateProvider\", \"$urlRouterProvider\", Config]);\r\n\r\nfunction Config($stateProvider) {\r\n  $stateProvider\r\n  .state(\"app.reservationSuccess\", {\r\n    url: \"/reservation/success\",\r\n    component: 'xsReservationSuccessView',\r\n  })\r\n  .state(\"app.reservation\", {\r\n    url: \"/reservation\",\r\n    component: 'xsReservationView'\r\n  });\r\n}\r\n","import React from \"react\";\r\nimport { Alert, AlertTitle, Grid } from \"@mui/material\";\r\nimport { Topbar } from \"app/common/Topbar\";\r\nimport { config } from \"app/common/config\";\r\n\r\nexport function SuccessView() {\r\n  const url = \"#!/contact\";\r\n  return (\r\n    <Grid\r\n      container\r\n      direction=\"column\"\r\n      justifyContent=\"flex-start\"\r\n      alignItems=\"stretch\"\r\n    >\r\n      <Grid item>\r\n        <Topbar title={\"Reservation\"} />\r\n      </Grid>\r\n      <Grid item sx={{ py: '130px' }}>\r\n        <Alert severity=\"success\">\r\n          <AlertTitle>Success</AlertTitle>\r\n          {config.reservationSubmitMessage} — <strong><a href={url}>Contact restaurant for any further\r\n            assistence.</a></strong>\r\n        </Alert>\r\n      </Grid>\r\n    </Grid>\r\n  )\r\n}\r\n","import dayjs from 'dayjs';\r\n\r\nexport default class ReportController {\r\n  constructor(oauth, loginRedirect, logger, settings, $http, config, $timeout, $mdSidenav) {\r\n    this.oauth = oauth;\r\n    this.loginRedirect = loginRedirect;\r\n    this.logger = logger;\r\n    this.settings = settings;\r\n    this.reportUrl = `${config.apiUrl}/reports`;\r\n    this.$http = $http;\r\n    this.$timeout = $timeout;\r\n    this.$mdSidenav = $mdSidenav;\r\n    this.loading = false;\r\n    this.message = \"\";\r\n    this.report = \"\";\r\n    this.reportTitle = \"\";\r\n    this.reportParams = {\r\n      dateFrom: new Date(),\r\n      dateTo: new Date()\r\n    };\r\n\r\n    this.init();\r\n  }\r\n\r\n  showDailySales() {\r\n    this.reportTitle = \"Daily Sales\";\r\n    this.loading = true;\r\n    this.getReport('sales/daily', {\r\n      date: dayjs(this.reportParams.dateFrom).startOf('day').toISOString()\r\n    })\r\n      .then(resp => this.report = resp.data)\r\n      .finally(() => {\r\n        this.loading = false;\r\n        this.toggleSidenav();\r\n      });\r\n  }\r\n\r\n  showDetailSummary() {\r\n    this.reportTitle = \"Detail Summary\";\r\n    this.loading = true;\r\n    this.getReport('sales/summary', {\r\n      dateFrom: dayjs(this.reportParams.dateFrom).startOf('day').toISOString(),\r\n      dateTo: dayjs(this.reportParams.dateTo).startOf('day').toISOString()\r\n    })\r\n      .then(resp => this.report = resp.data)\r\n      .finally(() => {\r\n        this.loading = false;\r\n        this.toggleSidenav();\r\n      });\r\n  }\r\n\r\n  showSalesByCategory() {\r\n    this.reportTitle = \"Sales By Category\";\r\n    this.loading = true;\r\n    this.getReport('sales/by/category', {\r\n      dateFrom: dayjs(this.reportParams.dateFrom).startOf('day').toISOString(),\r\n      dateTo: dayjs(this.reportParams.dateTo).startOf('day').toISOString()\r\n    })\r\n      .then(resp => this.report = resp.data)\r\n      .finally(() => {\r\n        this.loading = false;\r\n        this.toggleSidenav();\r\n      });\r\n  }\r\n\r\n  showTimeCard() {\r\n    this.reportTitle = \"Time Card\";\r\n    this.loading = true;\r\n    this.getReport('timecard', {\r\n      dateFrom: dayjs(this.reportParams.dateFrom).startOf('day').toISOString(),\r\n      dateTo: dayjs(this.reportParams.dateTo).startOf('day').toISOString()\r\n    })\r\n      .then(resp => this.report = resp.data)\r\n      .finally(() => {\r\n        this.loading = false;\r\n        this.toggleSidenav();\r\n      });\r\n  }\r\n\r\n  init() {\r\n    this.showDailySales();\r\n  }\r\n\r\n  getReport(url, params) {\r\n    return this.$http({\r\n      url: `${this.reportUrl}/${url}`,\r\n      params: params,\r\n      method: 'GET',\r\n      responseType: 'text'\r\n    });\r\n  }\r\n\r\n  toggleSidenav() {\r\n    this.$mdSidenav(\"report-left-sidenav\").toggle();\r\n  }\r\n}\r\n\r\nReportController.$inject = [\r\n  \"security.oauth\",\r\n  \"security.loginRedirect\",\r\n  \"common.logger\",\r\n  \"settings\",\r\n  \"$http\",\r\n  \"common.config\",\r\n  \"$timeout\",\r\n  \"$mdSidenav\",\r\n];\r\n","import React from 'react';\r\nimport { Controller } from 'react-hook-form';\r\nimport { FormControl, InputLabel, NativeSelect } from '@mui/material';\r\n\r\nconst TimezoneSelect = ({ control, timezones, timezone }) => {\r\n  return (\r\n    <FormControl fullWidth>\r\n      <InputLabel htmlFor=\"timezone-select\">Timezone</InputLabel>\r\n      <Controller\r\n        name=\"timezone\"\r\n        control={control}\r\n        defaultValue={timezone}\r\n        render={({ field }) => (\r\n          <NativeSelect\r\n            {...field}\r\n            id=\"timezone-select\"\r\n          >\r\n            {timezones.map((timezone) => (\r\n              <option key={timezone.id} value={timezone.id}>\r\n                {timezone.displayName}\r\n              </option>\r\n            ))}\r\n          </NativeSelect>\r\n        )}\r\n      />\r\n    </FormControl>\r\n  );\r\n};\r\n\r\nexport default TimezoneSelect;\r\n","import React from 'react';\r\n\r\nimport { Grid, TextField, Button } from '@mui/material';\r\nimport { Controller } from 'react-hook-form';\r\nimport TimezoneSelect from './TimezoneSelect';\r\n\r\nconst GeneralSettingsTab = ({ tabValue, control, data, errors, isSaving, isSuccess, message }) => {\r\n  if (tabValue !== 1) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <Grid container spacing={2}>\r\n      <Grid item xs={12}>\r\n        <TimezoneSelect\r\n          control={control}\r\n          timezone={data.timezone}\r\n          timezones={data.timezones}\r\n        />\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <Controller\r\n          name=\"storeCloseMessage\"\r\n          control={control}\r\n          render={({ field }) => (\r\n            <TextField\r\n              {...field}\r\n              label=\"Store Close Message\"\r\n              fullWidth\r\n              helperText=\"Specify what message you want customers to see when the store is closed.\"\r\n            />\r\n          )}\r\n        />\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <Controller\r\n          name=\"preOrderMessage\"\r\n          control={control}\r\n          render={({ field }) => (\r\n            <TextField\r\n              {...field}\r\n              label=\"Pre Order Message\"\r\n              fullWidth\r\n              helperText=\"Specify what message you want customers to see for pre-order when the store is closed.\"\r\n            />\r\n          )}\r\n        />\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <Controller\r\n          name=\"reservationClosedMessage\"\r\n          control={control}\r\n          render={({ field }) => (\r\n            <TextField\r\n              {...field}\r\n              label=\"Reservation Close Message\"\r\n              fullWidth\r\n              helperText=\"Specify what message you want customers to see when the reservation is closed.\"\r\n            />\r\n          )}\r\n        />\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <Controller\r\n          name=\"reservationSubmitMessage\"\r\n          control={control}\r\n          render={({ field }) => (\r\n            <TextField\r\n              {...field}\r\n              label=\"Reservation Submit Message\"\r\n              fullWidth\r\n              helperText=\"Specify what message you want customers to see when they submit reservation request.\"\r\n            />\r\n          )}\r\n        />\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <Controller\r\n          name=\"reservationHeaderMessage\"\r\n          control={control}\r\n          render={({ field }) => (\r\n            <TextField\r\n              {...field}\r\n              label=\"Reservation Header Message\"\r\n              fullWidth\r\n              helperText=\"Specify what message you want customers to see in the header of the reservation screen.\"\r\n            />\r\n          )}\r\n        />\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <Button\r\n          type=\"submit\"\r\n          variant=\"contained\"\r\n          color=\"primary\"\r\n          disabled={isSaving}\r\n        >\r\n          Submit\r\n        </Button>\r\n      </Grid>\r\n      {message && (\r\n        <Grid item xs={12}>\r\n          <Typography color={isSuccess ? \"primary\" : \"error\"}>\r\n            {message}\r\n          </Typography>\r\n        </Grid>\r\n      )}\r\n    </Grid>\r\n  );\r\n};\r\n\r\nexport default GeneralSettingsTab;\r\n","import { styled } from '@mui/material/styles';\r\n\r\nexport const Legend = styled('legend')({\r\n  color: (theme) => theme.palette.primary.main,\r\n  fontWeight: 'bold',\r\n  paddingBottom: '8px'\r\n});\r\n","import React, { useMemo } from \"react\";\r\nimport Switch from \"@mui/material/Switch\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport { FormGroup, Grid } from \"@mui/material\";\r\nimport { Legend } from './StyledComponents';\r\n\r\nfunction CloseStoreSwitch({ watch, setValue }) {\r\n  const isDeliveryActive = watch(\"isDeliveryActive\");\r\n  const isCollectionActive = watch(\"isCollectionActive\");\r\n  const allowPreOrder = watch(\"allowPreOrder\");\r\n\r\n  const isStoreOpen = useMemo(() => {\r\n    return isDeliveryActive || isCollectionActive || allowPreOrder;\r\n  }, [isDeliveryActive, isCollectionActive, allowPreOrder]);\r\n\r\n  const handleStoreOpenChange = (event) => {\r\n    const isOpen = event.target.checked;\r\n    setValue(\"isDeliveryActive\", isOpen);\r\n    setValue(\"isCollectionActive\", isOpen);\r\n    setValue(\"allowPreOrder\", isOpen);\r\n  };\r\n\r\n  return (\r\n    <Grid container>\r\n      <Grid item xs={12} sm={6}>\r\n        <FormGroup>\r\n          <Legend>Store Status</Legend>\r\n          <FormControlLabel\r\n            control={\r\n              <Switch\r\n                checked={isStoreOpen}\r\n                onChange={handleStoreOpenChange}\r\n                color=\"primary\"\r\n                inputProps={{ \"aria-label\": \"Open/Close Store\" }}\r\n              />\r\n            }\r\n            label={isStoreOpen ? 'Open': 'Closed'}\r\n          />\r\n        </FormGroup>\r\n      </Grid>\r\n    </Grid>\r\n  );\r\n}\r\n\r\nexport default CloseStoreSwitch;\r\n","import React from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport {\r\n  Switch,\r\n  FormControlLabel,\r\n  FormGroup,\r\n  Radio,\r\n  RadioGroup,\r\n} from \"@mui/material\";\r\n\r\nimport { Legend } from './StyledComponents';\r\n\r\nexport default function ServiceActivationAndDefaultSelector({\r\n  control,\r\n  setValue,\r\n  watch,\r\n}) {\r\n\r\n  const selectedValue = watch(\"isCollectionDefault\") ? \"collection\" : \"delivery\";\r\n\r\n  const handleStatusChange = (field) => (event) => {\r\n    setValue(field, event.target.checked);\r\n  };\r\n\r\n  const handleDefaultChange = (event) => {\r\n    const value = event.target.value;\r\n    if (value === \"collection\") {\r\n      setValue(\"isCollectionDefault\", true);\r\n      setValue(\"isDeliveryDefault\", false);\r\n    } else {\r\n      setValue(\"isCollectionDefault\", false);\r\n      setValue(\"isDeliveryDefault\", true);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <FormGroup sx={{ pt: '10px' }}>\r\n        <Legend>Active Services</Legend>\r\n        <FormControlLabel\r\n          control={\r\n            <Controller\r\n              name=\"isCollectionActive\"\r\n              control={control}\r\n              render={({ field }) => (\r\n                <Switch\r\n                  checked={field.value}\r\n                  onChange={handleStatusChange(\"isCollectionActive\")}\r\n                  color=\"primary\"\r\n                />\r\n              )}\r\n            />\r\n          }\r\n          label=\"Collection\"\r\n        />\r\n\r\n        <FormControlLabel\r\n          control={\r\n            <Controller\r\n              name=\"isDeliveryActive\"\r\n              control={control}\r\n              render={({ field }) => (\r\n                <Switch\r\n                  checked={field.value}\r\n                  onChange={handleStatusChange(\"isDeliveryActive\")}\r\n                  color=\"primary\"\r\n                />\r\n              )}\r\n            />\r\n          }\r\n          label=\"Delivery\"\r\n        />\r\n      </FormGroup>\r\n\r\n      <FormGroup sx={{ pt: '10px' }}>\r\n        <Legend>Default Service</Legend>\r\n        <RadioGroup\r\n          value={selectedValue}\r\n          onChange={handleDefaultChange}\r\n          row\r\n        >\r\n          <FormControlLabel\r\n            value=\"collection\"\r\n            control={<Radio />}\r\n            label=\"Collection\"\r\n          />\r\n          <FormControlLabel\r\n            value=\"delivery\"\r\n            control={<Radio />}\r\n            label=\"Delivery\"\r\n          />\r\n        </RadioGroup>\r\n      </FormGroup>\r\n    </>\r\n  );\r\n}\r\n","import React from 'react';\r\nimport { Grid, TextField, FormControlLabel, Checkbox, Button, FormGroup, styled } from '@mui/material';\r\nimport { Controller } from 'react-hook-form';\r\nimport CloseStoreSwitch from './CloseStoreSwitch';\r\nimport ServiceActivationAndDefaultSelector from './ServiceActivationAndDefaultSelector';\r\nimport { Legend } from './StyledComponents';\r\n\r\nconst ServicesTab = ({ tabValue, control, errors, watch, setValue, isSaving, isSuccess, message }) => {\r\n  if (tabValue !== 0) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <Grid container spacing={2}>\r\n      <Grid item xs={12}>\r\n        <FormGroup sx={{ p: '5x' }}>\r\n          <Legend>Service Time</Legend>\r\n          <Grid container spacing={2} sx={{ pt: '10px' }}>\r\n            <Grid item xs={12}>\r\n              <Controller\r\n                name=\"collectionWaitingTime\"\r\n                control={control}\r\n                rules={{\r\n                  required: \"Collection time is required\",\r\n                  min: { value: 1, message: \"Minimum collection time is 1 minute\" }\r\n                }}\r\n                render={({ field }) => (\r\n                  <TextField\r\n                    {...field}\r\n                    type=\"number\"\r\n                    onChange={(e) => field.onChange(e.target.value)}\r\n                    label=\"Collection Time\"\r\n                    error={!!errors.collectionWaitingTime}\r\n                    helperText={errors.collectionWaitingTime?.message}\r\n                  />\r\n                )}\r\n              />\r\n            </Grid>\r\n            <Grid item xs={12}>\r\n              <Controller\r\n                name=\"deliveryWaitingTime\"\r\n                control={control}\r\n                rules={{\r\n                  required: \"Delivery time is required\",\r\n                  min: { value: 1, message: \"Minimum delivery time is 1 minute\" }\r\n                }}\r\n                render={({ field }) => (\r\n                  <TextField\r\n                    {...field}\r\n                    type=\"number\"\r\n                    onChange={(e) => field.onChange(e.target.value)}\r\n                    label=\"Delivery Time\"\r\n                    error={!!errors.deliveryWaitingTime}\r\n                    helperText={errors.deliveryWaitingTime?.message}\r\n                  />\r\n                )}\r\n              />\r\n            </Grid>\r\n          </Grid>\r\n        </FormGroup>\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <FormGroup sx={{ p: '5x' }}>\r\n          <Legend>Service Status</Legend>\r\n          <Controller\r\n            name=\"isGuestOrderActive\"\r\n            control={control}\r\n            render={({ field }) => (\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    {...field}\r\n                    checked={field.value}\r\n                    onChange={field.onChange}\r\n                  />\r\n                }\r\n                label=\"Allow guest orders\"\r\n              />\r\n            )}\r\n          />\r\n          <Controller\r\n            name=\"isReservationActive\"\r\n            control={control}\r\n            render={({ field }) => (\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    {...field}\r\n                    checked={field.value}\r\n                    onChange={(e) => field.onChange(e.target.checked)}\r\n                    color=\"primary\"\r\n                  />\r\n                }\r\n                label=\"Reservation active?\"\r\n              />\r\n            )}\r\n          />\r\n          <Controller\r\n            name=\"allowPreOrder\"\r\n            control={control}\r\n            render={({ field }) => (\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    {...field}\r\n                    checked={field.value}\r\n                    onChange={field.onChange}\r\n                  />\r\n                }\r\n                label=\"Pre-order active?\"\r\n              />\r\n            )}\r\n          />\r\n        </FormGroup>\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <CloseStoreSwitch\r\n          watch={watch}\r\n          setValue={setValue}\r\n        />\r\n      </Grid>\r\n\r\n\r\n      <Grid item xs={12}>\r\n        <ServiceActivationAndDefaultSelector\r\n          control={control}\r\n          setValue={setValue}\r\n          watch={watch}\r\n        />\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <Button\r\n          type=\"submit\"\r\n          variant=\"contained\"\r\n          color=\"primary\"\r\n          disabled={isSaving}\r\n        >\r\n          Submit\r\n        </Button>\r\n      </Grid>\r\n      {\r\n        message && (\r\n          <Grid item xs={12}>\r\n            <Typography color={isSuccess ? \"primary\" : \"error\"}>\r\n              {message}\r\n            </Typography>\r\n          </Grid>\r\n        )\r\n      }\r\n\r\n    </Grid >\r\n  );\r\n};\r\n\r\nexport default ServicesTab;\r\n","import React from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport {\r\n  Switch,\r\n  FormControlLabel,\r\n  FormGroup,\r\n  Radio,\r\n  RadioGroup,\r\n} from \"@mui/material\";\r\n\r\nimport { Legend } from './StyledComponents';\r\n\r\nexport default function PaymentTypeToggle({\r\n  control,\r\n  setValue,\r\n  watch,\r\n}) {\r\n\r\n  const selectedValue = watch(\"isCardDefault\") ? \"card\" : \"cash\";\r\n\r\n  const handleStatusChange = (field) => (event) => {\r\n    setValue(field, event.target.checked);\r\n  };\r\n\r\n  const handleDefaultChange = (event) => {\r\n    const value = event.target.value;\r\n    if (value === \"card\") {\r\n      setValue(\"isCardDefault\", true);\r\n      setValue(\"isCashDefault\", false);\r\n    } else {\r\n      setValue(\"isCardDefault\", false);\r\n      setValue(\"isCashDefault\", true);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <FormGroup>\r\n        <Legend>Active Payments</Legend>\r\n\r\n        <FormControlLabel\r\n          control={\r\n            <Controller\r\n              name=\"isCardActive\"\r\n              control={control}\r\n              render={({ field }) => (\r\n                <Switch\r\n                  checked={field.value}\r\n                  onChange={handleStatusChange(\"isCardActive\")}\r\n                  color=\"primary\"\r\n                />\r\n              )}\r\n            />\r\n          }\r\n          label=\"Card\"\r\n        />\r\n\r\n        <FormControlLabel\r\n          control={\r\n            <Controller\r\n              name=\"isCashActive\"\r\n              control={control}\r\n              render={({ field }) => (\r\n                <Switch\r\n                  checked={field.value}\r\n                  onChange={handleStatusChange(\"isCashActive\")}\r\n                  color=\"primary\"\r\n                />\r\n              )}\r\n            />\r\n          }\r\n          label=\"Cash\"\r\n        />\r\n      </FormGroup>\r\n\r\n      <FormGroup>\r\n        <Legend>Default Payment</Legend>\r\n\r\n        <RadioGroup\r\n          value={selectedValue}\r\n          onChange={handleDefaultChange}\r\n          row\r\n        >\r\n          <FormControlLabel\r\n            value=\"card\"\r\n            control={<Radio />}\r\n            label=\"Card\"\r\n          />\r\n          <FormControlLabel\r\n            value=\"cash\"\r\n            control={<Radio />}\r\n            label=\"Cash\"\r\n          />\r\n        </RadioGroup>\r\n      </FormGroup>\r\n    </>\r\n  );\r\n}\r\n","import React from 'react';\r\nimport { Grid, Button } from '@mui/material';\r\nimport PaymentTypeToggle from './PaymentTypeToggle';\r\n\r\nconst PaymentTypesTab = ({ tabValue, control, setValue, watch, isSaving, isSuccess, message }) => {\r\n  if (tabValue !== 2) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <Grid container spacing={2}>\r\n      <Grid item xs={12}>\r\n        <PaymentTypeToggle\r\n          control={control}\r\n          setValue={setValue}\r\n          watch={watch}\r\n        />\r\n      </Grid>\r\n\r\n      <Grid item xs={12}>\r\n        <Button\r\n          type=\"submit\"\r\n          variant=\"contained\"\r\n          color=\"primary\"\r\n          disabled={isSaving}\r\n        >\r\n          Submit\r\n        </Button>\r\n      </Grid>\r\n      {message && (\r\n        <Grid item xs={12}>\r\n          <Typography color={isSuccess ? \"primary\" : \"error\"}>\r\n            {message}\r\n          </Typography>\r\n        </Grid>\r\n      )}\r\n\r\n    </Grid>\r\n  );\r\n};\r\n\r\nexport default PaymentTypesTab;\r\n","import React from \"react\";\r\nimport {\r\n  Switch,\r\n  Grid,\r\n  FormControlLabel,\r\n} from \"@mui/material\";\r\n\r\n\r\nexport function Day({day, onChange}) {\r\n  const handleChange = (e) => onChange({nameOfDay: day.nameOfDay, checked: e.target.checked});\r\n  return (\r\n    <React.Fragment>\r\n      <Grid item>\r\n        {day.nameOfDay}\r\n      </Grid>\r\n      <Grid item>\r\n        <FormControlLabel control={\r\n          <Switch\r\n            checked={day.isOpen}\r\n            onChange={handleChange}\r\n            inputProps={{'aria-label': 'Open?'}}\r\n          />\r\n        } label={day.isOpen ? 'Open' : 'Close'}/>\r\n      </Grid>\r\n    </React.Fragment>\r\n  );\r\n}\r\n","import React, {useState} from \"react\";\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport {\r\n  IconButton,\r\n  Grid,\r\n  NativeSelect,\r\n  FormControl,\r\n  InputLabel,\r\n} from \"@mui/material\";\r\n\r\nconst _hours = [...Array(24).keys()];\r\nconst _minutes = [...Array(60).keys()].filter(x => x % 15 === 0);\r\nconst HOURS = _hours.map(h => _minutes.map(m => `${String(h).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")}`)).flatMap(x => x);\r\n\r\n\r\nfunction Dropdown({label, hour, onChange}) {\r\n  const handleChange = (event) => {\r\n    onChange(event.target.value);\r\n  };\r\n\r\n  return (\r\n    <FormControl fullWidth>\r\n      <InputLabel>{label}</InputLabel>\r\n      <NativeSelect\r\n        defaultValue={hour}\r\n        onChange={handleChange}\r\n      >\r\n        {\r\n          HOURS.map(h => (\r\n            <option key={h} value={h}>{h}</option>\r\n          ))\r\n        }\r\n      </NativeSelect>\r\n    </FormControl>\r\n  );\r\n}\r\n\r\nexport function AddHour({day, onAdd}) {\r\n  const [openHour, setOpenHour] = useState(HOURS[0]);\r\n  const [closeHour, setCloseHour] = useState(HOURS[0]);\r\n\r\n  const handleOpenChange = (x) => setOpenHour(x);\r\n  const handleCloseChange = (x) => setCloseHour(x);\r\n  const handleAddHour = () => onAdd({nameOfDay: day.nameOfDay, open: openHour, close: closeHour});\r\n\r\n  return (\r\n    <Grid container item direction=\"row\" justifyContent=\"flex-end\" alignItems=\"center\" spacing={2} sx={{mt: '10px'}}>\r\n      <Grid item>\r\n        <Dropdown label=\"Opens At\" hour={openHour} onChange={handleOpenChange}/>\r\n      </Grid>\r\n      <Grid item>\r\n        <Dropdown label=\"Closes At\" hour={closeHour} onChange={handleCloseChange}/>\r\n      </Grid>\r\n      <Grid item>\r\n        <IconButton aria-label=\"add hours\" onClick={handleAddHour}>\r\n          <CheckIcon/>\r\n        </IconButton>\r\n      </Grid>\r\n    </Grid>\r\n  );\r\n}","import React from \"react\";\r\nimport CloseIcon from '@mui/icons-material/Close';\r\n\r\nimport {\r\n  IconButton,\r\n  Grid,\r\n} from \"@mui/material\";\r\n\r\nexport function Hour({day, hour, onDelete}) {\r\n  const handleDelete = () => onDelete({nameOfDay: day.nameOfDay, hour: hour});\r\n  return (\r\n    <Grid container item direction=\"row\" justifyContent=\"flex-end\" alignItems=\"center\" spacing={2}>\r\n      <Grid item>\r\n        <span>{String(hour.start.hour).padStart(2, \"0\")}:{String(hour.start.minute).padStart(2, \"0\")}-{String(hour.end.hour).padStart(2, \"0\")}:{String(hour.end.minute).padStart(2, \"0\")}</span>\r\n      </Grid>\r\n      <Grid item>\r\n        <IconButton aria-label=\"delete hours\" onClick={handleDelete}>\r\n          <CloseIcon/>\r\n        </IconButton>\r\n      </Grid>\r\n    </Grid>\r\n  );\r\n}\r\n\r\n\r\n","import React, {useState, useEffect} from \"react\";\r\nimport {useImmer} from \"use-immer\";\r\nimport SaveOutlinedIcon from '@mui/icons-material/SaveOutlined';\r\n\r\nimport {\r\n  Alert,\r\n  Box,\r\n  CircularProgress,\r\n  Divider,\r\n  Grid,\r\n} from \"@mui/material\";\r\n\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\nimport {Day} from \"./Day\";\r\nimport {AddHour} from \"./AddHour\";\r\nimport {Hour} from \"./Hour\";\r\n\r\nexport function Calendar({getCalendar, updateCalendar}) {\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(false);\r\n  const [calendar, setCalendar] = useImmer([]);\r\n\r\n  useEffect(() => {\r\n    getCalendar()\r\n    .then(x => {\r\n      setCalendar(x.days);\r\n      setError(false);\r\n    })\r\n    .catch(() => setError(true))\r\n    .finally(() => setLoading(false));\r\n  }, []);\r\n\r\n  const handleUpdateCalendar = () => {\r\n    setLoading(true);\r\n    updateCalendar(calendar)\r\n      .then(() => setError(false))\r\n      .catch(() => setError(true))\r\n      .finally(() => setLoading(false));\r\n  };\r\n\r\n  const handleAddHour = (target) => {\r\n    setCalendar((draft) => {\r\n      const day = draft.find(x => x.nameOfDay === target.nameOfDay);\r\n      if (!day) {\r\n        return;\r\n      }\r\n      const [sh, sm] = target.open.split(\":\");\r\n      const [eh, em] = target.close.split(\":\");\r\n      day.openHours.push({\r\n        start: {hour: sh, minute: sm},\r\n        end: {hour: eh, minute: em}\r\n      });\r\n      day.isOpen = true;\r\n    });\r\n  };\r\n\r\n  const handleDeleteHour = (target) => {\r\n    setCalendar((draft) => {\r\n      const day = draft.find(x => x.nameOfDay === target.nameOfDay);\r\n      if (!day) {\r\n        return;\r\n      }\r\n      const index = day.openHours.findIndex(\r\n        x => target.hour.start.hour === x.start.hour\r\n          && target.hour.start.minute === x.start.minute\r\n          && target.hour.end.hour === x.end.hour\r\n          && target.hour.end.minute === x.end.minute\r\n      );\r\n      if (index === -1) {\r\n        return;\r\n      }\r\n      day.openHours.splice(index, 1);\r\n    });\r\n  };\r\n\r\n  const handleToggleDay = (ev) => {\r\n    setCalendar(draft => {\r\n      const day = draft.find(x => x.nameOfDay === ev.nameOfDay);\r\n      if (!day) {\r\n        return;\r\n      }\r\n      day.isOpen = ev.checked;\r\n      if (!ev.checked) {\r\n        day.openHours = [];\r\n      }\r\n    });\r\n  };\r\n\r\n  return (\r\n    <Box\r\n      display=\"flex\"\r\n      flexDirection=\"column\"\r\n      justifyContent=\"center\"\r\n      alignItems=\"center\"\r\n      minHeight=\"70vh\"\r\n    >\r\n      {loading && <CircularProgress color=\"inherit\"/>}\r\n      {error && <Alert severity=\"error\">Could not load/update the calendar — something bad happend!</Alert>}\r\n      {\r\n        calendar.length > 0 && (\r\n          <Grid container spacing={2}>\r\n            {calendar.map(day => (\r\n              <React.Fragment key={day.nameOfDay}>\r\n                <Grid container item sx={{p: '15px', mt: '15px', ml: '5px', mr: '5px'}}>\r\n                  <Grid xs={4} container item direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\r\n                    <Day day={day} onChange={handleToggleDay}/>\r\n                  </Grid>\r\n                  <Grid xs={8} item container direction=\"column\" alignItems=\"center\">\r\n                    {\r\n                      day.openHours.map((hour, idx) => (\r\n                        <Hour key={idx} day={day} hour={hour} onDelete={handleDeleteHour}/>\r\n                      ))\r\n                    }\r\n                    <AddHour day={day} onAdd={handleAddHour}/>\r\n                  </Grid>\r\n                </Grid>\r\n                <Grid item xs={12}>\r\n                  <Divider/>\r\n                </Grid>\r\n              </React.Fragment>\r\n            ))}\r\n            <Grid item>\r\n              <LoadingButton\r\n                sx={{mt: '10px', ml: '10px', mb: '10px'}}\r\n                color=\"primary\"\r\n                loading={loading}\r\n                loadingPosition=\"start\"\r\n                startIcon={<SaveOutlinedIcon/>}\r\n                variant=\"contained\"\r\n                onClick={handleUpdateCalendar}\r\n              >\r\n                Update\r\n              </LoadingButton>\r\n            </Grid>\r\n          </Grid>\r\n        )\r\n      }\r\n    </Box>\r\n  );\r\n}","import React from \"react\";\r\nimport {config} from \"../common/config\";\r\nimport axios from '../common/axios';\r\n\r\nimport {Calendar} from \"./Calendar\";\r\n\r\nconst getCalendar = () => axios.get(`${config.apiUrl}/stores/default/schedule`).then(res => res.data);\r\nconst updateCalendar = (data) => axios.put(`${config.apiUrl}/stores/default/schedule`, {weekSchedule: data}).then(res => res.data);\r\n\r\nexport function StoreCalendar() {\r\n  return (\r\n    <Calendar getCalendar={getCalendar} updateCalendar={updateCalendar} />\r\n  );\r\n}\r\n","import React from 'react';\r\nimport { Grid } from '@mui/material';\r\nimport { StoreCalendar } from '../StoreCalendar';\r\n\r\nexport default function StoreHoursTab({ tabValue }) {\r\n  if (tabValue !== 3) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <Grid container spacing={2}>\r\n      <Grid item xs={12}>\r\n        <StoreCalendar />\r\n      </Grid>\r\n    </Grid>\r\n  );\r\n}\r\n","import React from \"react\";\r\nimport {config} from \"../common/config\";\r\nimport axios from '../common/axios';\r\n\r\nimport {Calendar} from \"./Calendar\";\r\n\r\nconst getCalendar = () => axios.get(`${config.apiUrl}/stores/default/reservation/calendar`).then(res => res.data);\r\nconst updateCalendar = (data) => axios.put(`${config.apiUrl}/stores/default/reservation/calendar`, {weekSchedule: data}).then(res => res.data);\r\n\r\nexport function ReservationCalendar() {\r\n  return (\r\n    <Calendar getCalendar={getCalendar} updateCalendar={updateCalendar} />\r\n  );\r\n}\r\n","import React from 'react';\r\nimport { Box, Grid } from '@mui/material';\r\nimport { ReservationCalendar } from '../ReservationCalendar';\r\n\r\nexport default function ReservationHoursTab({ tabValue }) {\r\n  if (tabValue !== 4) {\r\n    return null;\r\n  }\r\n  return (\r\n    <Grid container spacing={2}>\r\n      <Grid item xs={12}>\r\n        <ReservationCalendar />\r\n      </Grid>\r\n    </Grid>\r\n  );\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Grid, Alert, AlertTitle } from '@mui/material';\r\nimport axios from \"app/common/axios\";\r\nimport { config } from \"app/common/config\";\r\nimport { useMutation, } from 'react-query';\r\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\r\nimport { styled } from '@mui/material/styles';\r\nimport LoadingButton from '@mui/lab/LoadingButton';\r\n\r\nconst upload = (formData) => axios.post(`${config.apiUrl}/stores/default/address/upload`, formData);\r\n\r\nconst VisuallyHiddenInput = styled('input')({\r\n  clip: 'rect(0 0 0 0)',\r\n  clipPath: 'inset(50%)',\r\n  height: 1,\r\n  overflow: 'hidden',\r\n  position: 'absolute',\r\n  bottom: 0,\r\n  left: 0,\r\n  whiteSpace: 'nowrap',\r\n  width: 1,\r\n});\r\n\r\nconst eventName = \"address-import-completed\";\r\n\r\nexport default function AddressTab({ tabValue }) {\r\n  if (tabValue !== 5) {\r\n    return null;\r\n  }\r\n\r\n  const [op, setState] = useState({ state: \"notInitiated\" });\r\n\r\n  const { mutate, isLoading, isError, isSuccess, error } = useMutation(upload, {\r\n    onSuccess: () => setState(prevState => ({ ...prevState, state: \"importing\" }))\r\n  });\r\n\r\n  const handler = () => {\r\n    setState(prevState => ({ ...prevState, state: \"imported\" }));\r\n  };\r\n\r\n  useEffect(() => {\r\n    const channel = window.pusher.subscribe(config.pusherChannel);\r\n    channel.bind(eventName, handler);\r\n    return () => channel.unbind(eventName, handler);\r\n  }, []);\r\n\r\n\r\n  const onFileUpload = async (e) => {\r\n    e.preventDefault();\r\n\r\n    const file = e.target.files[0];\r\n    if (!file) { return; }\r\n\r\n    const formData = new FormData();\r\n    formData.append('file', file);\r\n    mutate(formData);\r\n  };\r\n\r\n  const buttonLoading = () => {\r\n    if (isLoading) {\r\n      return true;\r\n    }\r\n    if (op.state === \"importing\") {\r\n      return true;\r\n    }\r\n    return false;\r\n  };\r\n\r\n  const buttonLabel = () => {\r\n    if (isLoading) {\r\n      return \"Uploading...\";\r\n    }\r\n    if (op.state === \"importing\") {\r\n      return \"Importing...\";\r\n    }\r\n    return \"Upload CSV\";\r\n  };\r\n\r\n  const showMessage = () => {\r\n    if (op.state === \"imported\") {\r\n      return (\r\n        <Alert severity=\"success\">\r\n          <AlertTitle>Import</AlertTitle>\r\n          Address imported succesfully!\r\n        </Alert>\r\n      );\r\n    }\r\n\r\n    if (isError) {\r\n      return (\r\n        <Alert severity=\"error\">\r\n          <AlertTitle>Error</AlertTitle>\r\n          Could not upload address file � <strong>{error?.message}</strong>\r\n        </Alert>\r\n      );\r\n    }\r\n\r\n    if (isSuccess) {\r\n      return (\r\n        <Alert severity=\"info\">\r\n          <AlertTitle>Upload</AlertTitle>\r\n          File uploaded successfully - <strong>wait for the import to complete...</strong>\r\n        </Alert>\r\n      );\r\n    }\r\n\r\n  };\r\n\r\n  return (\r\n    <Grid container spacing={2}>\r\n      <Grid item xs={12}>\r\n        {showMessage()}\r\n      </Grid>\r\n      <Grid item xs={12}>\r\n        <LoadingButton\r\n          sx={{ mt: '10px', mb: '10px' }}\r\n          color=\"primary\"\r\n          loadingPosition=\"start\"\r\n          component=\"label\"\r\n          variant=\"contained\"\r\n          loading={buttonLoading()}\r\n          startIcon={<CloudUploadIcon />}>\r\n            {buttonLabel()}\r\n          <VisuallyHiddenInput type=\"file\" accept=\".csv\" onChange={onFileUpload} />\r\n        </LoadingButton>\r\n      </Grid>\r\n    </Grid>\r\n  );\r\n}\r\n","import React, { useEffect, useState, useRef } from \"react\";\r\n\r\nimport {\r\n  Tabs,\r\n  Tab,\r\n  Box,\r\n  Grid,\r\n  useTheme,\r\n  useMediaQuery,\r\n} from \"@mui/material\";\r\n\r\nimport { useForm } from \"react-hook-form\";\r\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\r\n\r\nimport axios from \"app/common/axios\";\r\nimport { Topbar } from \"app/common/Topbar\";\r\nimport { config } from \"app/common/config\";\r\nimport GeneralSettingsTab from \"./GeneralSettingsTab\";\r\nimport ServicesTab from \"./ServicesTab\";\r\nimport PaymentTypesTab from \"./PaymentTypesTab\";\r\nimport StoreHoursTab from \"./StoreHoursTab\";\r\nimport ReservationHoursTab from \"./ReservationHoursTab\";\r\nimport AddressTab from \"./AddressTab\";\r\n\r\nimport \"./Settings.css\";\r\n\r\nconst getSettings = () => axios.get(`${config.apiUrl}/stores/default/settings/backoffice`).then(res => res.data);\r\nconst saveSettings = (data) => axios.post(`${config.apiUrl}/stores/default/settings`, data).then(res => res.data);\r\n\r\nexport function Settings() {\r\n  const queryClient = useQueryClient();\r\n\r\n  const theme = useTheme();\r\n  const matches = useMediaQuery(theme.breakpoints.up('sm'));\r\n  const [headerHeight, setHeaderHeight] = useState(0);\r\n  const headerRef = useRef(null);\r\n\r\n  const [tabValue, setTab] = useState(0);\r\n  const [message, setMessage] = useState('');\r\n\r\n  const { handleSubmit, control, watch, reset, formState: { errors }, setValue } = useForm({\r\n    defaultValues: {\r\n      timezone: '',\r\n      isGuestOrderActive: false,\r\n      isReservationActive: false,\r\n      isCollectionActive: false,\r\n      isDeliveryActive: false,\r\n      isCashActive: false,\r\n      isCardActive: false,\r\n      isCashDefault: false,\r\n      isCardDefault: true,\r\n      isCollectionDefault: true,\r\n      isDeliveryDefault: false,\r\n      allowPreOrder: false,\r\n      preOrderMessage: '',\r\n      collectionWaitingTime: '',\r\n      deliveryWaitingTime: '',\r\n      storeCloseMessage: '',\r\n      reservationSubmitMessage: '',\r\n      reservationClosedMessage: '',\r\n      reservationHeaderMessage: '',\r\n    }\r\n  });\r\n\r\n  const { isLoading, isError, isSuccess, data, error } = useQuery('settings', getSettings);\r\n\r\n  const { mutate, isLoading: isSaving, isError: isSaveError, isSuccess: isSaveSuccess, error: saveError } = useMutation(saveSettings, {\r\n    onSuccess: () => queryClient.invalidateQueries(\"settings\")\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (headerRef.current) {\r\n      let height = matches ? 220 : 150;\r\n      setHeaderHeight(headerRef.current.clientHeight + height);\r\n    }\r\n  }, [headerRef.current, matches]);\r\n\r\n  useEffect(() => {\r\n    if (isSuccess && data) {\r\n      reset({\r\n        timezone: data.timezone,\r\n        isGuestOrderActive: data.isGuestOrderActive,\r\n        isReservationActive: data.isReservationActive,\r\n        isCollectionActive: data.isCollectionActive,\r\n        isDeliveryActive: data.isDeliveryActive,\r\n        allowPreOrder: data.allowPreOrder,\r\n        isCashActive: data.isCashActive,\r\n        isCardActive: data.isCardActive,\r\n        isCashDefault: data.isCashDefault,\r\n        isCardDefault: data.isCardDefault,\r\n        isCollectionDefault: data.isCollectionDefault,\r\n        isDeliveryDefault: data.isDeliveryDefault,\r\n        collectionWaitingTime: data.collectionWaitingTime,\r\n        deliveryWaitingTime: data.deliveryWaitingTime,\r\n        storeCloseMessage: data.storeCloseMessage,\r\n        reservationSubmitMessage: data.reservationSubmitMessage,\r\n        reservationClosedMessage: data.reservationClosedMessage,\r\n        reservationHeaderMessage: data.reservationHeaderMessage,\r\n        preOrderMessage: data.preOrderMessage\r\n      });\r\n    }\r\n  }, [data, isSuccess, reset]);\r\n\r\n  if (isLoading) {\r\n    return <span>Loading...</span>;\r\n  }\r\n\r\n  if (isError) {\r\n    return <span>Error: {error.message}</span>;\r\n  }\r\n\r\n  if (isSaveError) {\r\n    setMessage('Error saving settings.');\r\n  }\r\n\r\n  if (isSaveSuccess) {\r\n    setMessage('Settings saved successfully.');\r\n  }\r\n\r\n  const onSubmit = (formData) => mutate({\r\n    ...formData,\r\n    collectionTime: formData.collectionWaitingTime,\r\n    deliveryTime: formData.deliveryWaitingTime\r\n  });\r\n\r\n  const handleTabChange = (_, newValue) => setTab(newValue);\r\n\r\n  return (\r\n    <div className=\"settings\">\r\n      <Topbar title=\"Settings\" ref={headerRef} />\r\n      <form onSubmit={handleSubmit(onSubmit)}>\r\n        <Grid container spacing={2}>\r\n          <Grid item xs={12}>\r\n            <Tabs\r\n              value={tabValue}\r\n              onChange={handleTabChange}\r\n              variant=\"scrollable\"\r\n              scrollButtons=\"auto\"\r\n              allowScrollButtonsMobile\r\n            >\r\n              <Tab label=\"Service\" />\r\n              <Tab label=\"General\" />\r\n              <Tab label=\"Payment\" />\r\n              <Tab label=\"Store Hours\" />\r\n              <Tab label=\"Reservation Hours\" />\r\n              <Tab label=\"Address\" />\r\n            </Tabs>\r\n          </Grid>\r\n\r\n          <Grid item xs={12}>\r\n            <Box sx={{ maxHeight: `calc(100vh - ${headerHeight}px)`, overflowY: \"auto\", p: '10px' }}>\r\n              <ServicesTab\r\n                tabValue={tabValue}\r\n                control={control}\r\n                setValue={setValue}\r\n                watch={watch}\r\n                errors={errors}\r\n                isSuccess={isSaveSuccess}\r\n                message={message}\r\n                isSaving={isSaving}\r\n              />\r\n              <GeneralSettingsTab\r\n                tabValue={tabValue}\r\n                control={control}\r\n                data={data}\r\n                errors={errors}\r\n                isSuccess={isSaveSuccess}\r\n                message={message}\r\n                isSaving={isSaving}\r\n              />\r\n              <PaymentTypesTab\r\n                tabValue={tabValue}\r\n                control={control}\r\n                setValue={setValue}\r\n                watch={watch}\r\n                errors={errors}\r\n                isSuccess={isSaveSuccess}\r\n                message={message}\r\n                isSaving={isSaving}\r\n              />\r\n              <StoreHoursTab tabValue={tabValue} />\r\n              <ReservationHoursTab tabValue={tabValue} />\r\n              <AddressTab tabValue={tabValue} />\r\n            </Box>\r\n          </Grid>\r\n        </Grid>\r\n      </form>\r\n    </div>\r\n  );\r\n}\r\n","import ReportController from \"./report-controller\";\r\nimport  withAngular from \"app/common/with-angular\";\r\nimport { Settings } from \"./Settings\";\r\n\r\nimport reportView from \"./report.html\";\r\n\r\nexport default angular\r\n  .module(\"admin\", [\"ui.router\", \"security\", \"common\"])\r\n  .component(\"xsSettingsView\", withAngular(Settings))\r\n  .controller(\"admin.ReportController\", ReportController)\r\n  .config([\"$stateProvider\", \"$urlRouterProvider\", Config]);\r\n\r\nfunction Config($stateProvider) {\r\n  $stateProvider\r\n    //.state(\"app.admin\", {\r\n    //  url: \"/admin\",\r\n    //  template: adminView,\r\n    //  controller: \"admin.AdminController\",\r\n    //  resolve: {\r\n    //    \"storeSettings\": [\"common.config\", \"$http\", function (config, $http) {\r\n    //      const url = `${config.apiUrl}/stores/default/settings/backoffice`;\r\n    //      return $http.get(url).then(res => res.data);\r\n    //    }]\r\n    //  },\r\n    //  controllerAs: \"vm\"\r\n    //})\r\n    .state(\"app.admin\", {\r\n      url: \"/admin\",\r\n      component: 'xsSettingsView',\r\n    })\r\n    .state(\"app.reports\", {\r\n      url: \"/reports\",\r\n      template: reportView,\r\n      controller: \"admin.ReportController\",\r\n      controllerAs: \"vm\"\r\n    });\r\n}\r\n\r\n\r\n","// Module\nvar code = \"<style>.report-page div.flex-xs{min-height:40px}.report-page p{padding-left:8px}.report-page fieldset.standard{border-style:solid;border-width:1px;margin:8px}.report-page legend{color:#3f51b5}.report-page legend code{color:#3f51b5;font-weight:400}.report-page .ipsum{color:#8b4513}.report-page .hint{font-size:12px;line-height:14px;transition:all .3s cubic-bezier(.55,0,.55,.2);color:rgba(0,0,0,.54)}.report-page .message{padding:5px}</style> <div class=\\\"report-page\\\" layout=\\\"column\\\" flex> <section layout=\\\"row\\\" flex> <md-sidenav class=\\\"md-sidenav-left\\\" md-component-id=\\\"report-left-sidenav\\\" md-is-locked-open=\\\"$mdMedia('gt-xs')\\\" md-whiteframe=\\\"1\\\" md-disable-backdrop=\\\"false\\\"> <md-toolbar class=\\\"md-theme-indigo\\\" layout=\\\"row\\\" layout-align=\\\"center space-between\\\"> <h1 class=\\\"md-toolbar-tools\\\">Reports</h1> <md-button hide-gt-xs icon=\\\"fa fa-close\\\" style=\\\"margin:1px\\\" ng-click=\\\"vm.toggleSidenav()\\\"> <md-icon md-font-icon=\\\"fa fa-close\\\"></md-icon> </md-button> </md-toolbar> <md-content layout-padding> <form> <fieldset class=\\\"standard\\\" layout=\\\"column\\\" style=\\\"overflow-x:hidden\\\"> <legend>Daily Sales</legend> <md-datepicker ng-model=\\\"vm.reportParams.dateFrom\\\" md-placeholder=\\\"From Date\\\" md-open-on-focus></md-datepicker> <md-button class=\\\"md-accent md-raised\\\" ng-click=\\\"vm.showDailySales()\\\">Show</md-button> </fieldset> </form> <form> <fieldset class=\\\"standard\\\" layout=\\\"column\\\" style=\\\"overflow-x:hidden\\\"> <legend>Detail Summary</legend> <md-datepicker ng-model=\\\"vm.reportParams.dateFrom\\\" md-placeholder=\\\"From Date\\\" md-open-on-focus></md-datepicker> <md-datepicker ng-model=\\\"vm.reportParams.dateTo\\\" md-placeholder=\\\"From To\\\" md-open-on-focus></md-datepicker> <md-button class=\\\"md-accent md-raised\\\" ng-click=\\\"vm.showDetailSummary()\\\">Show</md-button> </fieldset> </form> <form> <fieldset class=\\\"standard\\\" layout=\\\"column\\\" style=\\\"overflow-x:hidden\\\"> <legend>Sales By Category</legend> <md-datepicker ng-model=\\\"vm.reportParams.dateFrom\\\" md-placeholder=\\\"From Date\\\" md-open-on-focus></md-datepicker> <md-datepicker ng-model=\\\"vm.reportParams.dateTo\\\" md-placeholder=\\\"From To\\\" md-open-on-focus></md-datepicker> <md-button class=\\\"md-accent md-raised\\\" ng-click=\\\"vm.showSalesByCategory()\\\">Show</md-button> </fieldset> </form> <form> <fieldset class=\\\"standard\\\" layout=\\\"column\\\" style=\\\"overflow-x:hidden\\\"> <legend>Time Card</legend> <md-datepicker ng-model=\\\"vm.reportParams.dateFrom\\\" md-placeholder=\\\"From Date\\\" md-open-on-focus></md-datepicker> <md-datepicker ng-model=\\\"vm.reportParams.dateTo\\\" md-placeholder=\\\"From To\\\" md-open-on-focus></md-datepicker> <md-button class=\\\"md-accent md-raised\\\" ng-click=\\\"vm.showTimeCard()\\\">Show</md-button> </fieldset> </form> </md-content> </md-sidenav> <section class=\\\"report-detail\\\" flex layout=\\\"column\\\"> <md-toolbar class=\\\"md-theme-indigo\\\" layout=\\\"row\\\" layout=\\\"row\\\" layout-align=\\\"center space-between\\\"> <md-button style=\\\"margin:1px;height:auto\\\" class=\\\"md-icon-button\\\" aria-label=\\\"Report Menu\\\" ng-click=\\\"vm.toggleSidenav()\\\"> <md-icon hide-gt-xs md-font-icon=\\\"fa fa-bars\\\"></md-icon> </md-button> <h1 flex class=\\\"md-toolbar-tools\\\">{{vm.reportTitle}}</h1> </md-toolbar> <md-content flex layout=\\\"column\\\" layout-padding> <div ng-if=\\\"vm.loading\\\" style=\\\"font-size:20px;text-align:center\\\"><span class=\\\"fa fa-spinner fa-spin\\\"></span>&nbsp; Loading...</div> <pre ng-if=\\\"!vm.loading\\\">{{ vm.report }}</pre> </md-content> </section> </section> </div> \";\n// Exports\nexport default code;","import  angular from 'angular';\r\nimport loginDialogView from './order/view/login-dialog.html';\r\n\r\nfunction MainController(config, currentUser, $mdDialog, oauth, logger, settings, $pusher, $window) {\r\n  const vm = this;\r\n  const pusher = $pusher(window.pusher);\r\n  const channel = pusher.subscribe(settings.pusherChannel);\r\n\r\n  channel.bind('timetable-updated', () => $window.location.reload(true));\r\n  channel.bind('store-data-updated', () => $window.location.reload(true));\r\n  channel.bind('store-settings-updated', () => $window.location.reload(true));\r\n\r\n  vm.currentUser = currentUser;\r\n  vm.settings = settings;\r\n  vm.styles = {\r\n    header: {\r\n      'background-color': settings.colors.headerBackground,\r\n      'color': settings.colors.headerFont\r\n    }\r\n  };\r\n\r\n  vm.signOut = function() {\r\n    oauth.signOut();\r\n  };\r\n\r\n  vm.login = function(ev) {\r\n    $mdDialog.show({\r\n      controller: \"order.LoginDialogController\",\r\n      template: loginDialogView,\r\n      controllerAs: \"vm\",\r\n      parent: angular.element(document.body),\r\n      targetEvent: ev,\r\n      clickOutsideToClose: false,\r\n      fullscreen: false,\r\n      locals: {\r\n        \"settings\": settings\r\n      }\r\n    });\r\n  };\r\n}\r\n\r\nexport default [\r\n  \"common.config\",\r\n  \"security.currentUser\",\r\n  \"$mdDialog\",\r\n  \"security.oauth\",\r\n  \"common.logger\",\r\n  \"settings\",\r\n  \"$pusher\",\r\n  \"$window\",\r\n  MainController\r\n];\r\n","import \"angular\";\r\nimport \"angular-animate\";\r\nimport \"angular-aria\";\r\nimport \"angular-messages\";\r\nimport \"angular-ui-router\";\r\nimport \"angular-material\";\r\n\r\nimport \"pusher-js\";\r\nimport \"pusher-angular\";\r\n\r\nimport \"font-awesome/css/font-awesome.css\";\r\nimport \"angular-material/angular-material.min.css\";\r\n\r\nimport \"./style/app.css\";\r\n\r\nimport common from \"./common\";\r\nimport paymentGateway from \"./payment-gateway\";\r\nimport order from \"./order\";\r\nimport security from \"./security\";\r\nimport userMgt from \"./user-management\";\r\nimport reservation from \"./reservation\";\r\nimport admin from \"./admin\";\r\n\r\nimport MainController from \"./main-controller\";\r\nimport addVersion from \"./client-version\";\r\nimport reloadLatest from \"./reload-latest\";\r\nimport mainView from \"./main-view.html\";\r\n\r\nimport HomeController from \"./home-controller\";\r\n\r\nimport contactUsView from \"./contact-us.html\";\r\nimport dayjs from './common/dayjs';\r\n\r\nimport { TermsAndConditionsView } from \"./TermsConditions\";\r\nimport { RefundPolicyView } from \"./RefundPolicy\";\r\nimport withAngular from \"app/common/with-angular\";\r\n\r\n\r\n\r\nconst { appConfig } = window.posCube;\r\nwindow.pusher = new window.Pusher(appConfig.pusherAppKey, { cluster: appConfig.pusherCluster });\r\n\r\nlet modules = [\"ngMaterial\", \"ngMessages\", \"ui.router\", \"pusher-angular\"]\r\n  .concat([\r\n    `${order.name}`,\r\n    `${security.name}`,\r\n    `${userMgt.name}`,\r\n    `${common.name}`,\r\n    `${paymentGateway.name}`,\r\n    `${reservation.name}`,\r\n    `${admin.name}`\r\n  ]);\r\n\r\nexport default angular\r\n  .module(\"xencube\", modules)\r\n  .filter(\"trustAsResourceUrl\",\r\n    [\r\n      \"$sce\", function ($sce) {\r\n        return function (val) {\r\n          return $sce.trustAsResourceUrl(val);\r\n        };\r\n      }\r\n    ])\r\n  .component(\"xsRefundPolicyView\", withAngular(RefundPolicyView))\r\n  .component(\"xsTermsAndConditionsView\", withAngular(TermsAndConditionsView))\r\n  .factory(\"xencube.addVersion\", addVersion)\r\n  .factory(\"xencube.reloadLatest\", reloadLatest)\r\n  .controller(\"xencube.MainController\", MainController)\r\n  .controller(\"xencube.HomeController\", HomeController)\r\n  .config(config)\r\n  .run(run);\r\n\r\nfunction run($transitions, $currentUser) {\r\n  $transitions.onBefore({},\r\n    function (trans) {\r\n      const isAdmin = $currentUser.getRole() === \"Admin\";\r\n      const isAdminState = trans.to().name === \"app.admin\";\r\n      if (isAdminState && !isAdmin) {\r\n        return trans.router.stateService.target(\"app.login\");\r\n      }\r\n    });\r\n}\r\n\r\nrun.$inject = [\r\n  \"$transitions\",\r\n  \"security.currentUser\"\r\n];\r\n\r\nfunction config($mdThemingProvider,\r\n  $stateProvider,\r\n  $urlRouterProvider,\r\n  $mdDateLocaleProvider,\r\n  $httpProvider,\r\n  worldPay) {\r\n  $httpProvider.defaults.headers.common[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n  $httpProvider.interceptors.push(\"xencube.addVersion\");\r\n  $httpProvider.interceptors.push(\"xencube.reloadLatest\");\r\n\r\n  $mdDateLocaleProvider.formatDate = function (date) {\r\n    return date ? dayjs(date).format('DD/MM/YYYY') : '';\r\n  };\r\n\r\n  $mdDateLocaleProvider.parseDate = function (dateString) {\r\n    const m = dayjs(dateString, 'DD/MM/YYYY', true);\r\n    return m.isValid() ? m.toDate() : new Date(NaN);\r\n  };\r\n\r\n  $mdDateLocaleProvider.isDateComplete = function (dateString) {\r\n    dateString = dateString.trim();\r\n    // Look for two chunks of content (either numbers or text) separated by delimiters.\r\n    const re = /^(([a-zA-Z]{3,}|[0-9]{1,4})([ .,]+|[/-]))([a-zA-Z]{3,}|[0-9]{1,4})/;\r\n    return re.test(dateString);\r\n  };\r\n\r\n  $urlRouterProvider.otherwise(\"/\");\r\n\r\n  $mdThemingProvider\r\n    .theme(\"default\")\r\n    .primaryPalette(appConfig.colors.palette);\r\n\r\n  $stateProvider\r\n    .state(\"app\",\r\n      {\r\n        url: \"\",\r\n        abstract: true,\r\n        views: {\r\n          '': {\r\n            template: mainView,\r\n            controller: \"xencube.MainController\",\r\n            controllerAs: \"vm\"\r\n          }\r\n        },\r\n        resolve: {\r\n          settings: [\r\n            \"common.config\", function (cfg) {\r\n              return cfg.getStoreSettings();\r\n            }\r\n          ]\r\n        }\r\n      })\r\n    .state(\"app.contact\",\r\n      {\r\n        url: \"/contact\",\r\n        resolve: {\r\n          \"schedule\": [\"common.config\", \"$http\", function (config, $http) {\r\n            const url = `${config.apiUrl}/stores/default/schedule`;\r\n            return $http.get(url).then(res => res.data);\r\n          }]\r\n        },\r\n        controller: [\r\n          \"settings\", \"schedule\", function (settings, schedule) {\r\n            const vm = this;\r\n            schedule.days.forEach(x => x.openHours.forEach(oh => {\r\n              oh.start.hour = String(oh.start.hour).padStart(2, 0);\r\n              oh.start.minute = String(oh.start.minute).padStart(2, 0);\r\n              oh.end.hour = String(oh.end.hour).padStart(2, 0);\r\n              oh.end.minute = String(oh.end.minute).padStart(2, 0);\r\n            }));\r\n\r\n            vm.settings = settings;\r\n            vm.schedule = schedule;\r\n            vm.primaryColor = {\r\n              color: settings.colors.primary\r\n            };\r\n          }\r\n        ],\r\n        controllerAs: \"vm\",\r\n        template: contactUsView,\r\n      })\r\n    .state(\"app.refundPolicy\", {\r\n      url: \"/refund-policy\",\r\n      component: 'xsRefundPolicyView'\r\n    })\r\n    .state(\"app.termsAndConditions\", {\r\n      url: \"/terms-conditions\",\r\n      component: 'xsTermsAndConditionsView'\r\n    });\r\n\r\n  worldPay.configure({\r\n    embed: false,\r\n    hideCurrency: true,\r\n    currency: \"GBP\",\r\n    instId: appConfig.worldPayInstId,\r\n    testMode: appConfig.worldPayTestMode,\r\n    actionUrl: appConfig.worldPayActionUrl\r\n  });\r\n}\r\n\r\nconfig.$inject = [\r\n  \"$mdThemingProvider\",\r\n  \"$stateProvider\",\r\n  \"$urlRouterProvider\",\r\n  \"$mdDateLocaleProvider\",\r\n  \"$httpProvider\",\r\n  \"paymentGateway.worldPayProvider\"\r\n];\r\n","import React from \"react\";\r\nimport { Box } from \"@mui/material\";\r\nimport { Topbar } from \"app/common/Topbar\";\r\nimport { config } from \"app/common/config\";\r\n\r\nimport \"./RefundPolicy.css\";\r\n\r\nexport function RefundPolicyView() {\r\n  return (\r\n    <React.Fragment>\r\n      <Topbar title={\"Refund Policy\"} />\r\n      <Box sx={{ p: \"10px\", overflowY: 'auto' }}>\r\n        <p>Thank you for shopping at {config.websiteUrl} If you are not entirely satisfied with your purchase, we're happy to help.</p>\r\n\r\n        <h4>Refunds</h4>\r\n        <p>\r\n          If you cancel your order within 5 minutes of placing your order than we will be able to cancel and refund your orders.\r\n          In other case if there is any problem on our service(delivery late) and if you are not happy than we will refund your payment.\r\n          we will initiate a refund to your credit card (or original method of payment). You will receive the credit within 7 Working days, depending\r\n          on your card issuer's policies.\r\n        </p>\r\n\r\n        <h4>Contact Us </h4>\r\n        <p>If you have any questions on how to return your item to us, Please contact us. </p>\r\n\r\n      </Box>\r\n    </React.Fragment>\r\n  )\r\n}","import React from \"react\";\r\nimport { Box } from \"@mui/material\";\r\nimport { Topbar } from \"app/common/Topbar\";\r\nimport { config } from \"app/common/config\";\r\nimport \"./TermsConditions.css\";\r\n\r\n\r\nexport function TermsAndConditionsView() {\r\n  return (\r\n    <React.Fragment>\r\n      <Topbar title={\"Terms & Conditions\"} />\r\n      <Box sx={{ p: \"10px\", overflowY: 'auto' }}>\r\n        <p>\r\n          The following Terms and Conditions set forth the rules and regulations regarding all services performed by\r\n          {config.webiteUrl}\r\n          By using {config.websiteUrl} you (the ''User'', the customer that uses the website) agree to these terms and conditions.\r\n          If you do not agree to the terms and conditions of this agreement, you should immediately stop using the website. We\r\n          reserve the right, at any time, to modify, or update the terms and conditions of this agreement without further\r\n          notice.\r\n          Modifications will be effective immediately upon being posted at {config.websiteUrl} Your continued use of the Service\r\n          after alterations are posted constitutes an acknowledgment and acceptance of the Agreement and its updates.\r\n        </p>\r\n\r\n        <h3>Website And Applications Terms Of Use</h3>\r\n        <p>\r\n          These terms of use set out the terms on which you may make use of the website {config.websiteUrl} as a registered user. Use\r\n          of our Site includes accessing, browsing, or registering to use the Site.Please read these terms of use carefully\r\n          before\r\n          you start using our Site, as these terms will apply to your use of our Site. We recommend that you print a copy for\r\n          future\r\n          reference. By accessing, browsing and using our Site, you confirm that you accept these terms of use and that you\r\n          agree\r\n          to comply with them. If you do not agree to these terms of use, you must not use the Site.Our Terms and Conditions\r\n          of\r\n          Sale, Privacy Policy and our Cookie Policy govern your use of our Site, including any orders you place. Please take\r\n          the\r\n          time to read these, as they include important terms, which apply to you.\r\n        </p>\r\n\r\n        <h3>Accessing Our Site</h3>\r\n        <p>\r\n          Our Site is made available free of charge for your personal use.We do not guarantee that our Site, or any content on\r\n          them,\r\n          will always be available or be uninterrupted. Access to our Site is permitted on a temporary basis. We may suspend,\r\n          withdraw,\r\n          discontinue or change all or any part of our Site without notice. We will not be liable to you if for any reason our\r\n          Site are unavailable at any time or for any period. You are responsible for making all arrangements necessary for\r\n          you\r\n          to have access to our Site. You are also responsible for ensuring that all persons who access our Site through your\r\n          internet\r\n          connection are aware of these terms of use and other applicable terms and conditions, and that they comply with\r\n          them.\r\n        </p>\r\n\r\n        <h3>Intellectual Property Rights</h3>\r\n        <p>\r\n          Our Site, and its content, functionality and design, are protected in the UK and elsewhere in the world by copyright\r\n          laws\r\n          and treaties, trademarks and other intellectual property rights, which are either used by us under licence or owned\r\n          by\r\n          us. All such rights are reserved. You may not distribute, reproduce, modify, transmit, reuse, re-post or use our\r\n          Site,\r\n          or the content, functionality or design of our Site (or any part of each) in any manner whatsoever, except as\r\n          provided\r\n          in these terms of use or the text on our Site or within the terms of any written permission granted by us in advance\r\n          of such use (and in respect of which we neither warrant nor represent that your proposed use will not infringe any\r\n          third\r\n          party rights). You may print off one copy, and download extracts, of any page(s) from our Site for your personal use\r\n          provided that (a) you do not remove or alter any copyright and other proprietary notices contained on the materials\r\n          and\r\n          (b) all use is for lawful purposes only. You must not modify the paper or digital copies of any materials you have\r\n          printed\r\n          off or downloaded in any way, and you must not use any illustrations, photographs, video or audio sequences or any\r\n          graphics\r\n          separately from any accompanying text. If you print off, copy or download any part of our Site in breach of these\r\n          terms\r\n          of use, your right to use our Site will cease immediately and you must, at our option, return or destroy any copies\r\n          of\r\n          the materials you have made.\r\n        </p>\r\n\r\n        <h3>Links To Other Websites And Apps </h3>\r\n        Where our Site contain links to other sites and resources provided by third parties, these links are provided for your\r\n        information\r\n        only. We are not responsible for, or control or endorse, the content of any websites and applications linked to our\r\n        Sites.\r\n        We will not be liable for any loss or damage that may arise from your use of them.\r\n\r\n        <h3>Changes To These Terms</h3>\r\n        <p>\r\n          We may revise these terms of use at any time by amending this page. Please check this page from time to time to take\r\n          notice\r\n          of any changes we made, as they are binding on you.\r\n        </p>\r\n\r\n        <h3>Changes To Our Site</h3>\r\n        <p>\r\n          We may update our Site from time to time, and may change the content at any time. However, please note that any of\r\n          the\r\n          content\r\n          on our Sites may be out of date at any given time, and we are under no obligation to update it.\r\n        </p>\r\n\r\n        <h3>Third Party Rights</h3>\r\n        <p>\r\n          Only you and we shall be entitled to enforce these terms of use. No third party shall be entitled to enforce any of\r\n          these\r\n          terms of use, whether by virtue of the Contracts (Rights of Third Parties) Act 1999 or otherwise.\r\n        </p>\r\n\r\n        <h3>Law, Jurisdiction & Language</h3>\r\n        <p>\r\n          English law shall govern these terms of use and any matter that arises out of your use of our Site. You and we both\r\n          agree\r\n          that the courts of England and Wales shall have exclusive jurisdiction. All contracts shall be construed in English.\r\n          You are responsible for compliance with applicable local laws relating to your use of our Site. To the extent that\r\n          our\r\n          Site or any activity contemplated by them would infringe any law of a jurisdiction other than England, you are\r\n          prohibited\r\n          from accessing our Sites or attempting to carry on any such offending activity and this provision shall override all\r\n          other provisions of these terms of use.\r\n        </p>\r\n        <h3>Ordering</h3>\r\n        <p>\r\n          If you place an order via our Site, you will be presented with confirmation on your screen that your order has been\r\n          received\r\n          and accepted by the Restaurant. Your contract with the restaurant is only formed when you have been presented with\r\n          this\r\n          confirmation. You will also receive a confirmation email. Please make sure that the email address, home address and\r\n          telephone\r\n          number you provide are correct and in proper working order, as these are required to fulfil your order. Please also\r\n          ensure\r\n          that, where you have placed an order for collection, you have ordered from the correct Store. If you place an order\r\n          in\r\n          a Store, your contract will be formed when you receive your receipt of purchase.\r\n        </p>\r\n\r\n        <h3>Products</h3>\r\n        <p>\r\n          The restaurant is a busy working environment and there is a risk of cross-contamination. If you have an allergy we\r\n          kindly\r\n          ask that you do not order online. Instead, please telephone us directly and explain in full your allergies. If you\r\n          are\r\n          a vegetarian please inform your order-taker who will do their best to ensure that any risk of cross-contamination\r\n          with\r\n          your order is minimised.\r\n        </p>\r\n\r\n        <h3>Availability And Delivery</h3>\r\n        <p>\r\n          We strive to maintain our excellent reputation for on-time delivery. However, unfortunately, things do not always go\r\n          to plan\r\n          and factors such as the weather and traffic conditions may occasionally prevent us from achieving this. If your\r\n          order\r\n          is for delivery and you have requested delivery 'asap', the restaurant will do its best to fulfil your order within\r\n          a\r\n          reasonable time of your confirmation email, taking into account the volume of orders and circumstances facing the\r\n          restaurant\r\n          at the time.\r\n        </p>\r\n\r\n\r\n\r\n        <h3>Refunds</h3>\r\n        <p>\r\n          If you cancel your order within 5 minutes of placing your order than we will be able to cancel and refund your orders.\r\n          In other case if there is any problem on our service(delivery late) and if you are not happy than we will refund your payment.\r\n          we will initiate a refund to your credit card (or original method of payment). You will receive the credit within 7 Working days, depending\r\n          on your card issuer's policies.\r\n        </p>\r\n\r\n        <h3>Allergy Information</h3>\r\n\r\n        <p>\r\n          If you suffer from an allergy that could endanger your health we strongly advise that you contact us before placing\r\n          your\r\n          order. Please refer to the contact us page for our contact details.\r\n        </p>\r\n\r\n        <h3>Use of Cookies</h3>\r\n        <p>\r\n          This website uses cookies to better the users experience while visiting the website. Where applicable this website\r\n          uses a\r\n          cookie control system allowing the user on their first visit to the website to allow or disallow the use of cookies\r\n          on\r\n          their computer / device. This complies with recent legislation requirements for websites to obtain explicit consent\r\n          from\r\n          users before leaving behind or reading files such as cookies on a user's computer / device. Cookies are small files\r\n          saved\r\n          to the user's computers hard drive that track, save and store information about the user's interactions and usage of\r\n          the website. This allows the website, through its server to provide the users with a tailored experience within this\r\n          website. Users are advised that if they wish to deny the use and saving of cookies from this website on to their\r\n          computers\r\n          hard drive they should take necessary steps within their web browsers security settings to block all cookies from\r\n          this\r\n          website and its external serving vendors. This website uses tracking software to monitor its visitors to better\r\n          understand\r\n          how they use it. This software is provided by Google Analytics which uses cookies to track visitor usage. The\r\n          software\r\n          will save a cookie to your computers hard drive in order to track and monitor your engagement and usage of the\r\n          website,\r\n          but will not store, save or collect personal information. You can read Google's privacy policy here for further\r\n          information\r\n          [ http://www.google.com/privacy.html ] . Other cookies may be stored to your computers hard drive by external\r\n          vendors\r\n          when this website uses referral programs, sponsored links or adverts. Such cookies are used for conversion and\r\n          referral\r\n          tracking and typically expire after 30 days, though some may take longer. No personal information is stored, saved\r\n          or\r\n          collected.\r\n        </p>\r\n\r\n        <h3>Contact & Communication</h3>\r\n        <p>\r\n          Users contacting this website and/or its owners do so at their own discretion and provide any such personal details\r\n          requested\r\n          at their own risk. Your personal information is kept private and stored securely until a time it is no longer\r\n          required\r\n          or has no use, as detailed in the Data Protection Act 1998. Every effort has been made to ensure a safe and secure\r\n          form\r\n          to email submission process but advise users using such form to email processes that they do so at their own risk.\r\n          This\r\n          website and its owners use any information submitted to provide you with further information about the products /\r\n          services\r\n          they offer or to assist you in answering any questions or queries you may have submitted. This includes using your\r\n          details\r\n          to subscribe you to any email newsletter program the website operates but only if this was made clear to you and\r\n          your\r\n          express permission was granted when submitting any form to email process. Or whereby you the consumer have\r\n          previously\r\n          purchased from or enquired about purchasing from the company a product or service that the email newsletter relates\r\n          to.This\r\n          is by no means an entire list of your user rights in regard to receiving email marketing material. Your details are\r\n          not\r\n          passed on to any third parties.\r\n        </p>\r\n\r\n        <h3>Email Newsletter</h3>\r\n        <p>\r\n          This website operates an email newsletter program, used to inform subscribers about products and services supplied\r\n          by\r\n          this\r\n          website. Users can subscribe through an online automated process should they wish to do so but do so at their own\r\n          discretion.\r\n          Some subscriptions may be manually processed through prior written agreement with the user. Subscriptions are taken\r\n          in\r\n          compliance with UK Spam Laws detailed in the Privacy and Electronic Communications Regulations 2003. All personal\r\n          details\r\n          relating to subscriptions are held securely and in accordance with the Data Protection Act 1998. No personal details\r\n          are passed on to third parties nor shared with companies / people outside of the company that operates this website.\r\n          Under the Data Protection Act 1998 you may request a copy of personal information held about you by this website's\r\n          email\r\n          newsletter program. A small fee will be payable. If you would like a copy of the information held on you please\r\n          write\r\n          to the business address at the bottom of this policy. Email marketing campaigns published by this website or its\r\n          owners\r\n          may contain tracking facilities within the actual email. Subscriber activity is tracked and stored in a database for\r\n          future analysis and evaluation. Such tracked activity may include; the opening of emails, forwarding of emails, the\r\n          clicking\r\n          of links within the email content, times, dates and frequency of activity [this is by no far a comprehensive list].\r\n          This\r\n          information is used to refine future email campaigns and supply the user with more relevant content based around\r\n          their\r\n          activity. In compliance with UK Spam Laws and the Privacy and Electronic Communications Regulations 2003 subscribers\r\n          are given the opportunity to un-subscribe at any time through an automated system. This process is detailed at the\r\n          footer\r\n          of each email campaign. If an automated un-subscription system is unavailable clear instructions on how to\r\n          un-subscribe\r\n          will by detailed instead.\r\n        </p>\r\n\r\n        <h3>External Links</h3>\r\n        <p>\r\n          Although this website only looks to include quality, safe and relevant external links, users are advised adopt a\r\n          policy of\r\n          caution before clicking any external web links mentioned throughout this website. (External links are clickable text\r\n          / banner / image links to other websites, similar to; Folded Book Art or Used Model Trains For Sale.) The owners of\r\n          this\r\n          website cannot guarantee or verify the contents of any externally linked website despite their best efforts. Users\r\n          should\r\n          therefore note they click on external links at their own risk and this website and its owners cannot be held liable\r\n          for\r\n          any damages or implications caused by visiting any external links mentioned.\r\n        </p>\r\n      </Box>\r\n    </React.Fragment>\r\n  )\r\n}","function addVersion($window, $q) {\r\n  const {appConfig} = $window.posCube;\r\n  function request(config) {\r\n    config.headers[\"X-PosCube-Client-Version\"] = appConfig.version;\r\n    return $q.when(config);\r\n  }\r\n\r\n  return {\r\n    request: request\r\n  };\r\n}\r\n\r\nexport default ['$window', '$q', addVersion];\r\n","function reloadLatest($q, $window) {\r\n  var responseError = function (response) {\r\n    if (response.status === 418) {\r\n      $window.location.reload(true);\r\n    }\r\n    return $q.reject(response);\r\n  };\r\n\r\n  return {\r\n    responseError\r\n  };\r\n}\r\n\r\nexport default [\"$q\", \"$window\", reloadLatest];\r\n","function HomeController(config) {\r\n  var vm = this;\r\n  vm.interval = 8000;\r\n  vm.noWrapSlides = false;\r\n  vm.slides = [\r\n    {\r\n      image: \"assets/img/slide1.jpg\",\r\n      text: \"The food is great..!\"\r\n    },\r\n    {\r\n      image: \"assets/img/slide2.jpg\",\r\n      text: \"Holly Cow\"\r\n    },\r\n    {\r\n      image: \"assets/img/slide3.jpg\",\r\n      text: \"Holly Cow\"\r\n    },\r\n    {\r\n      image: \"assets/img/slide4.jpg\",\r\n      text: \"Holly Cow\"\r\n    }\r\n  ];\r\n}\r\n\r\nexport default [\r\n  \"common.config\",\r\n  HomeController\r\n];","// Module\nvar code = \"<div layout=\\\"column\\\" class=\\\"host-page\\\"> <md-toolbar hide-xs class=\\\"md-tools md-tall top-header\\\" ng-style=\\\"vm.styles.header\\\" layout=\\\"row\\\" ng-cloak> <span flex></span> <div layout=\\\"row\\\" flex=\\\"100\\\" flex-gt-md=\\\"80\\\" layout-align=\\\"space-between center\\\" layout-padding> <div flex> <img ng-src=\\\"{{vm.settings.logoUrl}}\\\" alt=\\\"Restaurant Logo\\\"/> </div> <div layout=\\\"column\\\" layout-align=\\\"space-between end\\\"> <div class=\\\"phone-number\\\" ng-style=\\\"vm.styles.header\\\"> <span class=\\\"fa fa-phone\\\"></span>&nbsp;<span> {{vm.settings.storeAddress.storePhone}}</span> </div> <div hide-xs class=\\\"top-menu\\\" layout=\\\"row\\\" layout-align=\\\"center center\\\"> <a class=\\\"menu-item\\\" ng-style=\\\"vm.styles.header\\\" ng-href=\\\"{{vm.settings.websiteUrl}}\\\">Home</a> <a class=\\\"menu-item\\\" ng-style=\\\"vm.styles.header\\\" ui-sref=\\\"app.order\\\">Order</a> <a class=\\\"menu-item\\\" ng-style=\\\"vm.styles.header\\\" ui-sref=\\\"app.reservation\\\" ng-if=\\\"vm.settings.isReservationActive\\\">Reservation</a> <a class=\\\"menu-item\\\" ng-style=\\\"vm.styles.header\\\" ui-sref=\\\"app.contact\\\">Contact Us</a> </div> <div></div> </div> </div> <span flex></span> </md-toolbar> <section layout=\\\"row\\\" flex ng-cloak> <section flex></section> <section id=\\\"main-view\\\" flex-gt-md=\\\"80\\\" flex=\\\"100\\\" ui-view layout=\\\"column\\\"> </section> <section flex></section> </section> <md-toolbar hide-gt-xs ng-cloak> <div class=\\\"md-toolbar-tools\\\" layout=\\\"row\\\" layout-align=\\\"space-between center\\\"> <div layout=\\\"column\\\" layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button\\\" aria-label=\\\"Order\\\" ui-sref=\\\"app.order\\\"> <md-icon md-font-icon=\\\"fa fa-cutlery fa-2x\\\"></md-icon> </md-button> <div style=\\\"font-size:.7em\\\">Order</div> </div> <div layout=\\\"column\\\" layout-align=\\\"start center\\\" ng-if=\\\"vm.settings.isReservationActive\\\"> <md-button class=\\\"md-icon-button\\\" aria-label=\\\"Reservation\\\" ui-sref=\\\"app.reservation\\\"> <md-icon md-font-icon=\\\"fa fa-calendar-check-o fa-2x\\\"></md-icon> </md-button> <div style=\\\"font-size:.7em\\\">Booking</div> </div> <div layout=\\\"column\\\" layout-align=\\\"start center\\\"> <md-button class=\\\"md-icon-button\\\" aria-label=\\\"Contact\\\" ui-sref=\\\"app.contact\\\"> <md-icon md-font-icon=\\\"fa fa-phone-square fa-2x\\\"></md-icon> </md-button> <div style=\\\"font-size:.7em\\\">Contact</div> </div> <div layout=\\\"column\\\" layout-align=\\\"start center\\\" ng-if=\\\"!vm.currentUser.isLoggedIn()\\\"> <md-button class=\\\"md-icon-button\\\" ng-click=\\\"vm.login($event)\\\"> <md-icon md-font-icon=\\\"fa fa-user fa-2x\\\"></md-icon> </md-button> <div style=\\\"font-size:.7em\\\">Log In</div> </div> <md-menu ng-if=\\\"vm.currentUser.isLoggedIn()\\\" style=\\\"margin-right:10px;margin-left:5px\\\"> <div ng-click=\\\"$mdMenu.open($event)\\\" layout-align=\\\"start center\\\" layout=\\\"column\\\"> <img ng-src=\\\"{{vm.currentUser.getGravatarUrl()}}?s=25\\\" style=\\\"min-height:24px;min-width:24px;padding:8px\\\" class=\\\"md-avatar\\\" alt=\\\"\\\"/> <div style=\\\"font-size:.7em\\\">Account</div> </div> <md-menu-content width=\\\"4\\\"> <md-menu-item> <md-button ui-sref=\\\"app.account\\\">Account</md-button> </md-menu-item> <md-menu-item> <md-button ng-click=\\\"vm.signOut($event)\\\">Sign Out</md-button> </md-menu-item> <md-menu-item ng-if=\\\"vm.currentUser.isAdmin()\\\"> <md-button ui-sref=\\\"app.admin\\\">Settings</md-button> </md-menu-item> <md-menu-item ng-if=\\\"vm.currentUser.isAdmin()\\\"> <md-button ui-sref=\\\"app.reports\\\">Reports</md-button> </md-menu-item> </md-menu-content> </md-menu> </div> </md-toolbar> </div> \";\n// Exports\nexport default code;","// Module\nvar code = \"<style>.contact-us-view{border:0 grey solid;border-radius:5px;background-color:#fff}.contact-us-view address{font-size:1.2em;font-style:normal;border:0 grey solid;border-radius:5px;padding:5px;background-color:#fff}.map-responsive{overflow:hidden;padding-bottom:56.25%;position:relative;height:0}.map-responsive iframe{left:0;top:0;height:100%;width:100%;position:absolute}</style> <div class=\\\"contact-us-view\\\" layout=\\\"column\\\" flex> <md-toolbar class=\\\"md-theme-light\\\"> <h3 class=\\\"md-toolbar-tools\\\" layout-align=\\\"center-center\\\"> <span>Contact Us</span> </h3> </md-toolbar> <md-content flex> <div class=\\\"contact-body\\\" layout=\\\"column\\\" layout-gt-xs=\\\"row\\\"> <address flex style=\\\"margin:5px\\\"> <div> <md-icon md-font-icon=\\\"fa fa-map-marker\\\" class=\\\"md-warn\\\"></md-icon>Address </div> <br><strong>{{vm.settings.storeAddress.storeName}}</strong> <br>{{vm.settings.storeAddress.addressLine1}} <br>{{vm.settings.storeAddress.addressLine2}} <br>{{vm.settings.storeAddress.addressLine3}} </address> <address flex style=\\\"margin:5px\\\"> <div> <md-icon md-font-icon=\\\"fa fa-phone\\\" class=\\\"md-warn\\\"></md-icon>{{vm.settings.storeAddress.storePhone}} </div> <div> <md-icon md-font-icon=\\\"fa fa-envelope\\\" class=\\\"md-warn\\\"></md-icon>{{vm.settings.storeAddress.storeEmail}} </div> </address> <address flex style=\\\"margin:5px\\\"> <div> <md-icon md-font-icon=\\\"fa fa-clock-o\\\" class=\\\"md-warn\\\"></md-icon>Opening Hours </div> <div ng-repeat=\\\"day in vm.schedule.days\\\" style=\\\"margin-bottom:5px\\\"> <div layout=\\\"row\\\" layout-align=\\\"space-between start\\\"> <div class=\\\"schedule-cell\\\">{{day.nameOfDay}} </div> <div class=\\\"schedule-cell\\\" layout-align=\\\"start\\\"> <div ng-if=\\\"day.openHours.length > 0\\\" ng-repeat=\\\"hour in day.openHours\\\" layout=\\\"row\\\" layout-align=\\\"end center\\\"> <div>{{hour.start.hour}}:{{hour.start.minute}}</div> <div>-</div> <div>{{hour.end.hour}}:{{hour.end.minute}}</div> </div> <span ng-if=\\\"day.openHours.length <= 0\\\">Closed</span> </div> </div> <md-divider></md-divider> </div> </address> </div> <div class=\\\"map-responsive\\\" flex hide-xs> <iframe width=\\\"600\\\" height=\\\"450\\\" id=\\\"gmap_canvas\\\" src=\\\"{{vm.settings.mapLink | trustAsResourceUrl}}\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\" marginheight=\\\"0\\\" marginwidth=\\\"0\\\"></iframe> </div> </md-content> <div layout=\\\"row\\\" layout-align=\\\"start center\\\" layout-padding> <span style=\\\"color:#000\\\"></span> <span flex></span> <a ui-sref=\\\"app.refundPolicy\\\">Refund Policy</a> <span>|</span> <a ui-sref=\\\"app.termsAndConditions\\\">Terms &amp; Conditions</a> </div> </div> \";\n// Exports\nexport default code;","import main from \"./main\";\r\n\r\nangular\r\n  .element(document)\r\n  .ready(() => {\r\n    let body = document.getElementsByTagName(\"body\")[0];\r\n    let spinner = document.getElementById('loader-container');\r\n\r\n    let sub = setInterval(() => {\r\n      if (document.getElementById('main-view')) {\r\n        spinner.classList.add('hide-loader');\r\n        clearInterval(sub);\r\n      }\r\n    }, 500);\r\n\r\n    angular.bootstrap(body, [main.name], {\r\n      strictDi: true\r\n    });\r\n  });\r\n","var map = {\n\t\"./celery.png\": 4263,\n\t\"./chilli.png\": 5416,\n\t\"./crustaceans.png\": 2671,\n\t\"./dairy.png\": 2058,\n\t\"./egg.png\": 7533,\n\t\"./fish.png\": 6436,\n\t\"./gluten.png\": 8987,\n\t\"./lupins.png\": 5970,\n\t\"./molluscs.png\": 3142,\n\t\"./mustard.png\": 9477,\n\t\"./nuts.png\": 6698,\n\t\"./peanut.png\": 6169,\n\t\"./sesame.png\": 9081,\n\t\"./soya.png\": 1733,\n\t\"./sulphite.png\": 1265,\n\t\"./vegan.png\": 3886,\n\t\"./vegetarian.png\": 1427\n};\n\n\nfunction webpackAsyncContext(req) {\n\treturn webpackAsyncContextResolve(req).then(function(id) {\n\t\treturn __webpack_require__.t(id, 1);\n\t});\n}\nfunction webpackAsyncContextResolve(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tif(!__webpack_require__.o(map, req)) {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\t\treturn map[req];\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.resolve = webpackAsyncContextResolve;\nwebpackAsyncContext.id = 5322;\nmodule.exports = webpackAsyncContext;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [736], function() { return __webpack_require__(4613); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","config","window","posCube","appConfig","paymentProvider","none","worldPay","stripe","encodeId","lines","encodedList","forEach","line","encoded","id","menuItemId","toString","toUpperCase","i","length","code","codeup1","indexOf","Error","codeup2","push","quantity","cartIdParts","join","decodeId","idStr","codes","parts","split","j","p","qlen","parseInt","qty","substr","slice","call","angular","module","factory","$q","$window","apiUrl","getStoreSettings","when","$mdToast","$log","clsMap","showMessage","msg","type","show","simple","textContent","action","position","hideDelay","highlightAction","highlightClass","showInfo","showWarning","showError","encoder","directive","require","scope","otherModelValue","link","element","attributes","ngModel","$validators","compareTo","modelValue","$watch","$validate","instId","currency","hideCurrency","actionUrl","testMode","this","$get","logger","$http","$interpolate","pay","cart","cartId","formItems","form","document","find","append","submit","remove","configure","options","embed","provider","order","orderService","$state","$mdDialog","currentUser","oauth","settings","$mdSidenav","$pusher","$scope","vm","showLoginDialog","ev","controller","template","loginDialogView","controllerAs","locals","parent","body","targetEvent","clickOutsideToClose","fullscreen","checkout","go","orderId","showToast","message","toast","capsule","theme","selectGroup","group","selectedGroup","getMenusByGroup","then","menus","close","groups","placeOrder","isLoggedIn","canPlaceOrder","errors","login","signOut","showAllergyInfo","alert","title","htmlContent","ariaLabel","ok","toggleMenuGroupSidenav","toggle","toggleCartSidenav","addLine","debounce","menu","stopPropagation","preventDefault","modifierLevels","modifiers","hasModifier","catch","err","get","removeModifier","l","m","reduceQuantity","getAllGroups","concat","preOrderMessageShown","hasAddressError","some","x","showPostCodePrompt","refresh","$watchGroup","isStoreOpen","allowPreOrder","totalItem","ov","preOrderMessage","needPostCode","oldVal","Order","orderSvc","discountLabel","subTotal","total","deliveryCharge","totalDiscount","instruction","isServicesClosed","postCode","orderType","orderTypes","menuVm","hasSubItem","selectedSubItem","itemId","map","reset","getDraftOrder","update","modifier","lineId","lineModifierId","removeLine","$inject","OrderState","failedMessage","placingMessage","isPlacing","isPlaced","isFailed","worldpayGateway","deliverySvc","storeSettings","$mdMedia","$stateParams","data","orderState","storeAddress","placing","preferredTime","paymentMethod","resp","Stripe","stripePublishableKey","redirectToCheckout","sessionId","result","error","failed","placed","backToOrder","uddateAddress","address","_vm","extend","updatePersonalInfo","info","retry","e","location","reload","applyDiscount","discountId","applyCoupon","coupon","trim","isMobile","toggleSidenav","paymentTypes","icon","isActive","getErrors","filter","showSubtotal","accountSvc","userName","password","$valid","_","hide","createMessage","cancel","goToForgotPassword","$event","registerCustomer","req","reg","customerName","building","flatNo","houseNo","road","town","phoneNumber","email","loginAsGuest","loginGuest","isTermsAccepted","selectedTab","value","arguments","isDefined","user","shouldUpdateDefaultAddress","isGuest","allowUpdateDefaultAddress","changeAddress","updateAddress","shouldUpdateDefault","canChangeAddress","SelectModifierController","levels","level","totalSelected","isSelected","sort","y","maxAllowed","_level","selectedMoreThanAllowed","flatMap","UpdatePersonalInfoDialogController","guest","customer","fullName","mobilePhone","UpdatePostcodeController","postcode","addPostCode","DirectiveCtrl","images","Object","keys","imageKey","img","default","getImage","imageName","event","ctrlAddLine","___HTML_LOADER_IMPORT_0___","URL","service","filterMenusByGroup","_menus","groupId","response","post","res","patch","delete","put","success","getAllDiscounts","getDeliveryChargeByPostCode","isWithinDeliveryArea","$compile","restrict","attrs","$eval","bindHtmlCompile","html","contents","OrderController","session_id","CheckoutController","LoginDialogController","ChangeAddressDialogController","SelectModifierDialogController","$stateProvider","state","url","orderView","resolve","svc","darftOrder","cfg","MemoryStore","_store","key","SessionStore","test","localStorage","setItem","removeItem","hasLocalStorage","getItem","JSON","parse","commonCfg","formEncode","pairs","encodeURIComponent","replace","client_id","grant_type","headers","User","store","getObject","USER","role","getRole","ACCESS_TOKEN","gravatarUrl","token","getToken","decoded","jwt_decode","Date","now","exp","access_token","setObject","userInfo","CurrentUser","OAuth","currentUsr","request","Authorization","$location","lastPath","responseError","status","path","reject","redirectPostLogin","$httpProvider","interceptors","LoginController","loginRedirect","confirmPassword","sendResetLink","loading","sendPasswordResetLink","linkSent","finally","canSendLink","goBack","history","back","userId","resetPassword","canResetPassword","axios","Promise","Topbar","React","ref","AppBar","Toolbar","variant","component","sx","flexGrow","getProfile","deactiveAccount","payload","ProfileCard","Box","noValidate","mt","Card","CardContent","Grid","container","spacing","item","xs","TextField","required","fullWidth","label","name","autoComplete","disabled","Button","mb","DeactivateAcount","queryClient","useQueryClient","useState","setSignOut","useMutation","onSuccess","invalidateQueries","mutate","isLoading","isError","isSuccess","useEffect","timer","setTimeout","clearTimeout","Alert","severity","color","size","onClick","AlertTitle","onSubmit","FormData","currentTarget","hasConsent","FormGroup","FormControlLabel","control","Checkbox","dayjs","dayjsUTC","timezone","ianaTimezone","withLocalization","Component","props","LocalizationProvider","dateAdapter","AdapterDayjs","dateLibInstance","locale","withReactQuery","QueryClient","QueryClientProvider","client","createTheme","palette","primary","main","colors","colorPalette","ReactComponent","bindings","deps","Controller","$element","injectedDeps","services","reduce","acc","cv","ci","on","ReactDOM","comp","binds","assign","ThemeProvider","transclude","withAngular","useQuery","overflowY","direction","justifyContent","alignItems","display","flexDirection","Avatar","width","height","bgcolor","red","src","RegistrationController","ForgotPasswordController","ResetPasswordController","confirmEmail","getUserInfo","$urlRouterProvider","signOutInfo","defaultForm","date","endOf","time","contactNo","notes","guests","useForm","defaultValues","handleSubmit","watch","formState","setValue","slots","setSlots","blacklist","setBlacklist","minDate","setMinDate","setLoading","useTheme","populateSlots","useMediaQuery","breakpoints","up","dt","unix","createTzDate","tz","format","bl","fod","day","dd","isSame","add","getFirstOpenDay","subscription","unsubscribe","shouldDisableDate","hours","minutes","startOf","reservationDate","utc","note","Stack","reservationHeaderMessage","isReservationActive","reservationClosedMessage","rules","render","field","DatePicker","views","renderInput","params","helperText","select","SelectProps","native","slot","minLength","maxLength","min","pattern","multiline","rows","LoadingButton","loadingPosition","startIcon","SaveOutlined","py","reservationSubmitMessage","href","ReportController","$timeout","reportUrl","report","reportTitle","reportParams","dateFrom","dateTo","init","getReport","toISOString","showDailySales","method","responseType","timezones","FormControl","InputLabel","htmlFor","defaultValue","NativeSelect","displayName","tabValue","isSaving","Typography","Legend","styled","fontWeight","paddingBottom","isDeliveryActive","isCollectionActive","useMemo","sm","Switch","checked","onChange","isOpen","target","inputProps","ServiceActivationAndDefaultSelector","selectedValue","handleStatusChange","pt","RadioGroup","row","Radio","collectionWaitingTime","deliveryWaitingTime","PaymentTypeToggle","Day","nameOfDay","_hours","Array","_minutes","HOURS","h","String","padStart","Dropdown","hour","AddHour","onAdd","openHour","setOpenHour","closeHour","setCloseHour","IconButton","open","Check","Hour","onDelete","start","minute","end","Close","Calendar","getCalendar","updateCalendar","setError","useImmer","calendar","setCalendar","days","handleAddHour","draft","sh","eh","em","openHours","handleDeleteHour","index","findIndex","splice","handleToggleDay","minHeight","CircularProgress","ml","mr","idx","Divider","weekSchedule","StoreCalendar","StoreHoursTab","ReservationCalendar","ReservationHoursTab","upload","formData","VisuallyHiddenInput","clip","clipPath","overflow","bottom","left","whiteSpace","eventName","AddressTab","op","setState","prevState","handler","channel","pusher","subscribe","pusherChannel","bind","unbind","onFileUpload","file","files","CloudUpload","accept","getSettings","saveSettings","matches","headerHeight","setHeaderHeight","headerRef","useRef","setTab","setMessage","isGuestOrderActive","isCashActive","isCardActive","isCashDefault","isCardDefault","isCollectionDefault","isDeliveryDefault","storeCloseMessage","isSaveError","isSaveSuccess","current","clientHeight","className","collectionTime","deliveryTime","Tabs","newValue","scrollButtons","allowScrollButtonsMobile","Tab","maxHeight","styles","header","headerBackground","headerFont","Pusher","pusherAppKey","cluster","pusherCluster","modules","security","userMgt","common","paymentGateway","reservation","admin","$sce","val","trustAsResourceUrl","websiteUrl","webiteUrl","version","MainController","interval","noWrapSlides","slides","image","text","run","$transitions","$currentUser","onBefore","trans","isAdmin","to","router","stateService","$mdThemingProvider","$mdDateLocaleProvider","defaults","formatDate","parseDate","dateString","isValid","toDate","NaN","isDateComplete","otherwise","primaryPalette","abstract","schedule","oh","primaryColor","worldPayInstId","worldPayTestMode","worldPayActionUrl","ready","getElementsByTagName","spinner","getElementById","sub","setInterval","classList","clearInterval","bootstrap","strictDi","webpackAsyncContext","webpackAsyncContextResolve","__webpack_require__","t","o","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","r","n","getter","__esModule","d","a","getPrototypeOf","obj","__proto__","mode","ns","create","def","getOwnPropertyNames","definition","defineProperty","enumerable","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","scriptUrl","importScripts","currentScript","scripts","b","baseURI","self","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}