Commit b8d5a268 by kevin

29/11/2019

parent 321ee0b9
<?xml version='1.0' encoding='utf-8'?>
<widget id="io.ionic.starter" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>MyApp</name>
<description>An awesome Ionic/Cordova app.</description>
<widget id="com.techware.kevin.allorepo" version="0.0.2" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Allorepo</name>
<description>Mechanic App</description>
<author email="[email protected]" href="http://ionicframework.com/">Ionic Framework Team</author>
<content src="index.html" />
<access origin="*" />
......@@ -18,7 +18,8 @@
<preference name="FadeSplashScreenDuration" value="300" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="3000" />
<preference name="SplashScreenDelay" value="1000" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:networkSecurityConfig="@xml/network_security_config" />
......
......@@ -4,6 +4,14 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@agm/core": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@agm/core/-/core-1.0.0.tgz",
"integrity": "sha512-tgrobTyAHCZ3cdi21IdiBafiHLxsC5/6ncq6+f9RV+HrLg0XDuk+DA7upfdE34o2Ui3fNRDYDIgExRVFLsSPCw==",
"requires": {
"tslib": "^1.9.0"
}
},
"@angular-devkit/architect": {
"version": "0.13.9",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz",
......@@ -474,6 +482,11 @@
"tslib": "^1.9.0"
}
},
"@angular/fire": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@angular/fire/-/fire-5.2.1.tgz",
"integrity": "sha512-pS4zWhLLANzMbYVIKNtebDQKhm9+KANUDvDV6DwKP24XHzkZdvazKe1HC6uXWlf7QmDxSPFleCSBkn0tnQQzdQ=="
},
"@angular/forms": {
"version": "7.2.15",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.15.tgz",
......@@ -680,6 +693,248 @@
}
}
},
"@firebase/analytics": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.2.3.tgz",
"integrity": "sha512-dOyi9los/Urc/eIj3gi76jRA+wkLcR8VoFWMODeqfK0GszkgAajMGs39xmQS84pqeUqFhdQHMlqbghkYPLQaRA==",
"requires": {
"@firebase/analytics-types": "0.2.2",
"@firebase/installations": "0.3.2",
"@firebase/util": "0.2.31",
"tslib": "1.10.0"
}
},
"@firebase/analytics-types": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.2.2.tgz",
"integrity": "sha512-5qLwkztNdRiLMQCsxmol1FxfGddb9xpensM2y++3rv1e0L4yI+MRR9SHSC00i847tGZDrMt2u67Dyko/xmrgCA=="
},
"@firebase/app": {
"version": "0.4.21",
"resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.4.21.tgz",
"integrity": "sha512-AAZJKnIrWdZrRIv03+TXw8vRxCJkMA3a25FDBtT3TI5MWGrsdTFeNOQmX+N3HAjY+8RFB4Hzg/j0fbeVDoUPmg==",
"requires": {
"@firebase/app-types": "0.4.6",
"@firebase/logger": "0.1.28",
"@firebase/util": "0.2.31",
"dom-storage": "2.1.0",
"tslib": "1.10.0",
"xmlhttprequest": "1.8.0"
}
},
"@firebase/app-types": {
"version": "0.4.6",
"resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.4.6.tgz",
"integrity": "sha512-LLh4vnuyhmYfT00fByo8rR4NAjQH7Yj63gUpT18DRYPVvwbVmrCbzOHJw3rQnfJPpbSkMXfnEY/pzbohvj8DuA=="
},
"@firebase/auth": {
"version": "0.12.3",
"resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.12.3.tgz",
"integrity": "sha512-w4bDznykC4rJIq/Zk8AxB+tpTi5/HT+ti0yLyoyPihLRulWVz4HVB9zghQfeyqMPoBGH1YtwaiZWG7Kk9Tyo8Q==",
"requires": {
"@firebase/auth-types": "0.8.2"
}
},
"@firebase/auth-types": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.8.2.tgz",
"integrity": "sha512-qcP7wZ76CIb7IN+K544GomA42cCS36KZmQ3n9Ou1JsYplEaMo52x4UuQTZFqlRoMaUWi61oQ9jiuE5tOAMJwDA=="
},
"@firebase/database": {
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.9.tgz",
"integrity": "sha512-Vzj4mtk/QnUxWze7Cqs0kqOWBmjTUJncEjU8zTpJLSBVjtLBPt/MNV+9RY2gk9Mc5fXmsKAbqY8tfpQA/tKnAg==",
"requires": {
"@firebase/database-types": "0.4.6",
"@firebase/logger": "0.1.28",
"@firebase/util": "0.2.31",
"faye-websocket": "0.11.3",
"tslib": "1.10.0"
},
"dependencies": {
"faye-websocket": {
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
"integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
"requires": {
"websocket-driver": ">=0.5.1"
}
}
}
},
"@firebase/database-types": {
"version": "0.4.6",
"resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.6.tgz",
"integrity": "sha512-7D55FCSLJRrTcMTm25NDevwSMU0mNgr+ylqkE4zq68MV3xQ6J3z1kxzQ90DCU7MxrpaKqexMWRihQZ+oU0bULw==",
"requires": {
"@firebase/app-types": "0.4.6"
}
},
"@firebase/firestore": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.6.3.tgz",
"integrity": "sha512-JvAo2tVqPBF32+wdquYkwg/bkoAGeGlxfTg2WwS+uf8OVSrxlk6tWjZqQeYmHJ3BAaRoddDzsefbHaYUOXoCvQ==",
"requires": {
"@firebase/firestore-types": "1.6.2",
"@firebase/logger": "0.1.28",
"@firebase/util": "0.2.31",
"@firebase/webchannel-wrapper": "0.2.29",
"@grpc/proto-loader": "^0.5.0",
"grpc": "1.24.1",
"tslib": "1.10.0"
}
},
"@firebase/firestore-types": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.6.2.tgz",
"integrity": "sha512-GsBlAqNft1pwEWNKnQWwwqzLoyfUSC3bSb1e7yxu5+NKaJO+uUD48KrZUTDu94pgPLkJslj8SLkl9FVjNJa8Xw=="
},
"@firebase/functions": {
"version": "0.4.22",
"resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.22.tgz",
"integrity": "sha512-c1XbGZDh7GG6mTqLhkg13GFLrjdBkP3DTWYfJCt7zm0XvEemaum3NGc2pBmd6zzfoMUCfXOGAU8uHmgTc0FvEw==",
"requires": {
"@firebase/functions-types": "0.3.10",
"@firebase/messaging-types": "0.3.4",
"isomorphic-fetch": "2.2.1",
"tslib": "1.10.0"
}
},
"@firebase/functions-types": {
"version": "0.3.10",
"resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.10.tgz",
"integrity": "sha512-QDh7HOxfUzLxj49szekgXxdkXz6ZwwK/63DKeDbRYMKzxo17I01+2GVisdBmUW5NkllVLgVvtOfqKbbEfndqdw=="
},
"@firebase/installations": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.3.2.tgz",
"integrity": "sha512-5DpaorndyVhYMCQvhCyWQIDP2uQyspUaKjPfamORStWP5FedDVvYdQxI3m++8i/bOO1Usg2povYuZwCiQh1HsQ==",
"requires": {
"@firebase/installations-types": "0.2.1",
"@firebase/util": "0.2.31",
"idb": "3.0.2",
"tslib": "1.10.0"
}
},
"@firebase/installations-types": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.2.1.tgz",
"integrity": "sha512-647hwBhMKOjoLndCyi9XmT1wnrRc2T8aGIAoZBqy7rxFqu3c9jZRk3THfufLy1xvAJC3qqYavETrRYF3VigM7Q=="
},
"@firebase/logger": {
"version": "0.1.28",
"resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.28.tgz",
"integrity": "sha512-bzCJ6v5JrgQdut+3R+t6hVU7O3QnV15ay+HA9ejATZqQfMtwewDAYendNRmSZBjoR8BcrVO490L4vVhPQJRJNw=="
},
"@firebase/messaging": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.5.3.tgz",
"integrity": "sha512-ivFckScGF/BJXSARr4/8LZHOqSsCw1Lv+pTK4HzzRqq6TamrZtRf79NsMUKU9AxbjRk1xV59Wu2m9FVYcgg17w==",
"requires": {
"@firebase/installations": "0.3.2",
"@firebase/messaging-types": "0.3.4",
"@firebase/util": "0.2.31",
"tslib": "1.10.0"
}
},
"@firebase/messaging-types": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.3.4.tgz",
"integrity": "sha512-ytOzB08u8Z15clbq9cAjhFzUs4WRy13A7gRphjnf5rQ+gsrqb4mpcsGIp0KeOcu7MjcN9fqjO5nbVaw0t2KJpQ=="
},
"@firebase/performance": {
"version": "0.2.22",
"resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.2.22.tgz",
"integrity": "sha512-j5Ts5HLoHDvCHi2pcvF6rfY1ElyG2me3j/5vcplWctvj4DKVKwrNyd89Etmd7DyEYip/hm8TR8CJ/API6VlQrA==",
"requires": {
"@firebase/installations": "0.3.2",
"@firebase/logger": "0.1.28",
"@firebase/performance-types": "0.0.5",
"@firebase/util": "0.2.31",
"tslib": "1.10.0"
}
},
"@firebase/performance-types": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.5.tgz",
"integrity": "sha512-7BOQ2sZZzaIvxscgan/uP8GcH2FZXzqGcQnXvUZBXfXignAM80hJ7UOjVRETa4UjtDehWcD/pZDDivupKtKUyg=="
},
"@firebase/polyfill": {
"version": "0.3.26",
"resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.26.tgz",
"integrity": "sha512-x3dyOQG7E0Pfaw0UuevXBOsjX/etTwCVMbEXPtzLKsaV7woB/6aep2iz16YC7s5vgShUGkwrQwvP+S6rcnu1Fw==",
"requires": {
"core-js": "3.3.3",
"promise-polyfill": "8.1.3",
"whatwg-fetch": "2.0.4"
},
"dependencies": {
"core-js": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.3.tgz",
"integrity": "sha512-0xmD4vUJRY8nfLyV9zcpC17FtSie5STXzw+HyYw2t8IIvmDnbq7RJUULECCo+NstpJtwK9kx8S+898iyqgeUow=="
},
"whatwg-fetch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
"integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
}
}
},
"@firebase/remote-config": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.3.tgz",
"integrity": "sha512-KNNSWW2j7kQkTNo1AETORKS2Bqh5merlUBtSgdeiZkwlz50MJ7xi837H8U017Bzn0tYyAHbseMz/yZG2M8E5OA==",
"requires": {
"@firebase/installations": "0.3.2",
"@firebase/logger": "0.1.28",
"@firebase/remote-config-types": "0.1.2",
"@firebase/util": "0.2.31",
"tslib": "1.10.0"
}
},
"@firebase/remote-config-types": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.2.tgz",
"integrity": "sha512-V1LutCn9fHC5ckkjJFGGB7z72xdg50RVaCkR80x4iJXqac0IpbEr1/k29HSPKiAlf+aIYyj6gFzl7gn4ZzsUcA=="
},
"@firebase/storage": {
"version": "0.3.16",
"resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.16.tgz",
"integrity": "sha512-1hDes0lLT3XK/Da+bFcPoxGJdc1ZAnS1Se0hvF98aS2oI+1vy9GoEjPlOePAi+9W7phJCH6gVdatdPZXvryqDg==",
"requires": {
"@firebase/storage-types": "0.3.5",
"@firebase/util": "0.2.31",
"tslib": "1.10.0"
}
},
"@firebase/storage-types": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.5.tgz",
"integrity": "sha512-rbG6ge3xmte0nUt0asMToPqmNRU4tCJuu73Uy0UJV4uMBQA7e27EXbPza3nBpeOrgASBV9eWPD5AzecjBvTyzQ=="
},
"@firebase/util": {
"version": "0.2.31",
"resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.31.tgz",
"integrity": "sha512-Iv+M2oluKHgDux5PqKFy8VtujO/1gOURmWKVLXyVLnrZKAFrU6etdBeWA1n+eXLnGJzreQF1JD9k8caMDD7CoQ==",
"requires": {
"tslib": "1.10.0"
}
},
"@firebase/webchannel-wrapper": {
"version": "0.2.29",
"resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.29.tgz",
"integrity": "sha512-veAoFK0EdzeGcoje7ssiMxoU3WBXuEP+TUPEbd6mqVhBECcLDCQrBQNU3e2Z05BWQMoDLKkLI+cSvkAr+En7bA=="
},
"@grpc/proto-loader": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.2.tgz",
"integrity": "sha512-eBKD/FPxQoY1x6QONW2nBd54QUEyzcFP9FenujmoeDPy1rutVSHki1s/wR68F6O1QfCNDx+ayBH1O2CVNMzyyw==",
"requires": {
"lodash.camelcase": "^4.3.0",
"protobufjs": "^6.8.6"
}
},
"@ionic-native/call-number": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/@ionic-native/call-number/-/call-number-5.15.0.tgz",
......@@ -703,6 +958,21 @@
"@types/cordova": "^0.0.34"
}
},
"@ionic-native/file-transfer": {
"version": "5.15.1",
"resolved": "https://registry.npmjs.org/@ionic-native/file-transfer/-/file-transfer-5.15.1.tgz",
"integrity": "sha512-LPvEu+gHxn+cXkx8OWJX2A/bR97X0z39nR+X+gcpBkTm1T0CA4e41X8cXcF6fcyLriKNIxIlF1+vUGOQP03mvQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/geolocation": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/@ionic-native/geolocation/-/geolocation-5.15.0.tgz",
......@@ -718,6 +988,36 @@
}
}
},
"@ionic-native/image-picker": {
"version": "5.15.1",
"resolved": "https://registry.npmjs.org/@ionic-native/image-picker/-/image-picker-5.15.1.tgz",
"integrity": "sha512-JJy86oHVkIEc7fehcxkrIOaK4K+hrIhdahurVHetEjtHxiEPTyZGloH9qe/o4zf9xb+zI7KcKKDQ7w8QKBJDQw==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/native-geocoder": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@ionic-native/native-geocoder/-/native-geocoder-5.0.0.tgz",
"integrity": "sha512-bL9foHNMhRHGP0oiH9jVwVhSpuGXwUdGI6in3ZDOL7QMXOHOhogua4PCpPlHMkk6w7U8ZTITp6eu/4xcZ9pUQA==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/splash-screen": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/splash-screen/-/splash-screen-5.8.0.tgz",
......@@ -810,6 +1110,76 @@
}
}
},
"@ngx-translate/core": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-11.0.1.tgz",
"integrity": "sha512-nBCa1ZD9fAUY/3eskP3Lql2fNg8OMrYIej1/5GRsfcutx9tG/5fZLCv9m6UCw1aS+u4uK/vXjv1ctG/FdMvaWg==",
"requires": {
"tslib": "^1.9.0"
}
},
"@ngx-translate/http-loader": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-4.0.0.tgz",
"integrity": "sha512-x8LumqydWD7eX9yQTAVeoCM9gFUIGVTUjZqbxdAUavAA3qVnk9wCQux7iHLPXpydl8vyQmLoPQR+fFU+DUDOMA==",
"requires": {
"tslib": "^1.9.0"
}
},
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
"integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
},
"@protobufjs/base64": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
},
"@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
},
"@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
"integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
},
"@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
"integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
"requires": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"@protobufjs/float": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
"integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
},
"@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
"integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
},
"@protobufjs/path": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
"integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
},
"@protobufjs/pool": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
"integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
},
"@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"@schematics/angular": {
"version": "7.3.9",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.9.tgz",
......@@ -856,6 +1226,15 @@
}
}
},
"@types/bytebuffer": {
"version": "5.0.40",
"resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.40.tgz",
"integrity": "sha512-h48dyzZrPMz25K6Q4+NCwWaxwXany2FhQg/ErOcdZS1ZpsaDnDMZg8JYLMTGz7uvXKrcKGJUZJlZObyfgdaN9g==",
"requires": {
"@types/long": "*",
"@types/node": "*"
}
},
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
......@@ -884,11 +1263,15 @@
"@types/sizzle": "*"
}
},
"@types/long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
"integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
},
"@types/node": {
"version": "12.0.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz",
"integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==",
"dev": true
"integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ=="
},
"@types/q": {
"version": "0.0.32",
......@@ -1189,6 +1572,11 @@
"humanize-ms": "^1.2.1"
}
},
"agm-direction": {
"version": "0.7.9",
"resolved": "https://registry.npmjs.org/agm-direction/-/agm-direction-0.7.9.tgz",
"integrity": "sha512-62W/no1HimT2rS3jjqjcduPZHhJwHLa9V7f0cAk2rcjvpC2f18+IEVsdMBJ+Kv/YsTDoyzP5d0HhknUubFfx1w=="
},
"ajv": {
"version": "6.9.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz",
......@@ -1256,6 +1644,14 @@
"tslib": "^1.9.0"
}
},
"angularfire2": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/angularfire2/-/angularfire2-5.2.1.tgz",
"integrity": "sha512-5C0wtm5V1LLJD3TdWzzqa0PwUeM8OEQc+WIRVpD27XyDqAXEr/ejH09eKDwC74fUNF0I65+w1o01Mz0KHkrufQ==",
"requires": {
"@angular/fire": "5.2.1"
}
},
"animation-frame-polyfill": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/animation-frame-polyfill/-/animation-frame-polyfill-1.0.1.tgz",
......@@ -1287,8 +1683,7 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"ansi-styles": {
"version": "3.2.1",
......@@ -1437,6 +1832,15 @@
"dev": true,
"optional": true
},
"ascli": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
"integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
"requires": {
"colour": "~0.7.1",
"optjs": "~3.2.2"
}
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
......@@ -2110,6 +2514,21 @@
"integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
"dev": true
},
"bytebuffer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
"integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
"requires": {
"long": "~3"
},
"dependencies": {
"long": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
"integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
}
}
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
......@@ -2197,9 +2616,7 @@
"camelcase": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
"integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
"dev": true,
"optional": true
"integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
},
"camelcase-keys": {
"version": "2.1.0",
......@@ -2369,7 +2786,6 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
"dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
......@@ -2403,8 +2819,7 @@
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"dev": true
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"codelyzer": {
"version": "4.5.0",
......@@ -2465,6 +2880,11 @@
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
"dev": true
},
"colour": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
"integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
......@@ -2750,9 +3170,9 @@
}
},
"graceful-fs": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
"integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q=="
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
},
"strip-bom": {
"version": "3.0.0",
......@@ -2766,6 +3186,16 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.2.tgz",
"integrity": "sha1-/Ajzci5n7ve2xnv8mag99q3Quro="
},
"cordova-plugin-file": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-6.0.2.tgz",
"integrity": "sha512-m7cughw327CjONN/qjzsTpSesLaeybksQh420/gRuSXJX5Zt9NfgsSbqqKDon6jnQ9Mm7h7imgyO2uJ34XMBtA=="
},
"cordova-plugin-file-transfer": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-file-transfer/-/cordova-plugin-file-transfer-1.7.1.tgz",
"integrity": "sha1-p12L4uvDu5sjxbG70ZkhTsJnWGs="
},
"cordova-plugin-geolocation": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-geolocation/-/cordova-plugin-geolocation-4.0.2.tgz",
......@@ -2781,6 +3211,11 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-ionic-webview/-/cordova-plugin-ionic-webview-4.1.1.tgz",
"integrity": "sha512-y8drBhMdkHKUr0zu+UGkFGsDrkCsxjbCd3RzzlyDxcEzdHWvasRM5gyDiKBHkziT2iHYzEAjXwkT1ZXKU3OY9Q=="
},
"cordova-plugin-nativegeocoder": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-nativegeocoder/-/cordova-plugin-nativegeocoder-3.2.2.tgz",
"integrity": "sha512-3ZmfA01H6EYPsfUqv3DHPvWgn2yBVtqCbTe8CAMalT3qlFZBOUBdJemydSmgKNRhTgQvHSFc20jUJXiH67vt4w=="
},
"cordova-plugin-splashscreen": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-splashscreen/-/cordova-plugin-splashscreen-5.0.2.tgz",
......@@ -2791,6 +3226,11 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.2.tgz",
"integrity": "sha1-/B+9wNjXAzp+jh8ff/FnrJvU+vY="
},
"cordova-plugin-telerik-imagepicker": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-telerik-imagepicker/-/cordova-plugin-telerik-imagepicker-2.3.3.tgz",
"integrity": "sha512-eL16EIxDueDo+dky5lNuzC+bDbKHPLPDfd/mtNpaCTNoT6iZqFd9/qJwSMnidXqCeExJZkN4ACsEHmtUA+vQ7Q=="
},
"cordova-plugin-whitelist": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz",
......@@ -3003,8 +3443,7 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"decode-uri-component": {
"version": "0.2.0",
......@@ -3301,6 +3740,11 @@
"iselement": "^1.1.4"
}
},
"dom-storage": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
"integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
},
"domain-browser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
......@@ -3395,7 +3839,6 @@
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"dev": true,
"requires": {
"iconv-lite": "~0.4.13"
}
......@@ -3563,9 +4006,9 @@
}
},
"es-abstract": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz",
"integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==",
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
"integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
"requires": {
"es-to-primitive": "^1.2.0",
"function-bind": "^1.1.1",
......@@ -4047,6 +4490,27 @@
"locate-path": "^2.0.0"
}
},
"firebase": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/firebase/-/firebase-7.2.2.tgz",
"integrity": "sha512-GFGpZBVF0yW1qNUjf64Y1IdY6E6rWV58S8hrXlCrb+ZqAxuFWtjxdqI2TcMOIpr3dpqX2uJKiSbe1eO5IDXKwg==",
"requires": {
"@firebase/analytics": "0.2.3",
"@firebase/app": "0.4.21",
"@firebase/app-types": "0.4.6",
"@firebase/auth": "0.12.3",
"@firebase/database": "0.5.9",
"@firebase/firestore": "1.6.3",
"@firebase/functions": "0.4.22",
"@firebase/installations": "0.3.2",
"@firebase/messaging": "0.5.3",
"@firebase/performance": "0.2.22",
"@firebase/polyfill": "0.3.26",
"@firebase/remote-config": "0.1.3",
"@firebase/storage": "0.3.16",
"@firebase/util": "0.2.31"
}
},
"flatted": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
......@@ -4658,28 +5122,629 @@
"optional": true
},
"semver": {
"version": "5.7.0",
"bundled": true,
"dev": true,
"optional": true
"version": "5.7.0",
"bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.3.4",
"minizlib": "^1.1.1",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
}
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"fstream": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
"dev": true,
"optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"inherits": "~2.0.0",
"mkdirp": ">=0.5 0",
"rimraf": "2"
}
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"gaze": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
"integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
"dev": true,
"optional": true,
"requires": {
"globule": "^1.0.0"
}
},
"genfun": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz",
"integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==",
"dev": true
},
"get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
"dev": true
},
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true,
"optional": true
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
"dev": true
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
},
"dependencies": {
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
"is-extglob": "^2.1.0"
}
}
}
},
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
},
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
"dev": true,
"requires": {
"array-union": "^1.0.1",
"dir-glob": "^2.0.0",
"glob": "^7.1.2",
"ignore": "^3.3.5",
"pify": "^3.0.0",
"slash": "^1.0.0"
}
},
"globule": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
"integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
"dev": true,
"optional": true,
"requires": {
"glob": "~7.1.1",
"lodash": "~4.17.10",
"minimatch": "~3.0.2"
}
},
"graceful-fs": {
"version": "4.1.15",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
},
"grpc": {
"version": "1.24.1",
"resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.1.tgz",
"integrity": "sha512-NFIWbt3RXZU4VlDLpiAM/Ca8Yz30QShUdPGMqOPH652PmA+2fau2vuW+tOYWQUkYMfBW2yege/T5p65e5TetVQ==",
"requires": {
"@types/bytebuffer": "^5.0.40",
"lodash.camelcase": "^4.3.0",
"lodash.clone": "^4.5.0",
"nan": "^2.13.2",
"node-pre-gyp": "^0.13.0",
"protobufjs": "^5.0.3"
},
"dependencies": {
"abbrev": {
"version": "1.1.1",
"bundled": true
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true
},
"aproba": {
"version": "1.2.0",
"bundled": true
},
"are-we-there-yet": {
"version": "1.1.5",
"bundled": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.1.2",
"bundled": true
},
"code-point-at": {
"version": "1.1.0",
"bundled": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true
},
"debug": {
"version": "3.2.6",
"bundled": true,
"requires": {
"ms": "^2.1.1"
}
},
"deep-extend": {
"version": "0.6.0",
"bundled": true
},
"delegates": {
"version": "1.0.0",
"bundled": true
},
"detect-libc": {
"version": "1.0.3",
"bundled": true
},
"fs-minipass": {
"version": "1.2.6",
"bundled": true,
"requires": {
"minipass": "^2.2.1"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"glob": {
"version": "7.1.4",
"bundled": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"has-unicode": {
"version": "2.0.1",
"bundled": true
},
"iconv-lite": {
"version": "0.4.24",
"bundled": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-walk": {
"version": "3.0.1",
"bundled": true,
"requires": {
"minimatch": "^3.0.4"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"bundled": true
},
"ini": {
"version": "1.3.5",
"bundled": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
"bundled": true
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.0",
"bundled": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.2.1",
"bundled": true,
"requires": {
"minipass": "^2.2.1"
}
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"requires": {
"minimist": "0.0.8"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"bundled": true
}
}
},
"ms": {
"version": "2.1.2",
"bundled": true
},
"needle": {
"version": "2.4.0",
"bundled": true,
"requires": {
"debug": "^3.2.6",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
}
},
"node-pre-gyp": {
"version": "0.13.0",
"bundled": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
}
},
"nopt": {
"version": "4.0.1",
"bundled": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
},
"npm-bundled": {
"version": "1.0.6",
"bundled": true
},
"npm-packlist": {
"version": "1.4.4",
"bundled": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1"
}
},
"npmlog": {
"version": "4.1.2",
"bundled": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"requires": {
"wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true
},
"osenv": {
"version": "0.1.5",
"bundled": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true
},
"process-nextick-args": {
"version": "2.0.1",
"bundled": true
},
"protobufjs": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
"integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
"requires": {
"ascli": "~1",
"bytebuffer": "~5",
"glob": "^7.0.5",
"yargs": "^3.10.0"
}
},
"rc": {
"version": "1.2.8",
"bundled": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
}
},
"readable-stream": {
"version": "2.3.6",
"bundled": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"rimraf": {
"version": "2.7.1",
"bundled": true,
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true
},
"sax": {
"version": "1.2.4",
"bundled": true
},
"semver": {
"version": "5.7.1",
"bundled": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
"bundled": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
"bundled": true
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -4689,8 +5754,6 @@
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
......@@ -4698,218 +5761,67 @@
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
"bundled": true
},
"tar": {
"version": "4.4.8",
"version": "4.4.10",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.3.4",
"minizlib": "^1.1.1",
"minipass": "^2.3.5",
"minizlib": "^1.2.1",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
"yallist": "^3.0.3"
}
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
"bundled": true
},
"wide-align": {
"version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
"bundled": true
},
"y18n": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"fstream": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
"dev": true,
"optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"inherits": "~2.0.0",
"mkdirp": ">=0.5 0",
"rimraf": "2"
}
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"gaze": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
"integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
"dev": true,
"optional": true,
"requires": {
"globule": "^1.0.0"
}
},
"genfun": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz",
"integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==",
"dev": true
},
"get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
"dev": true
},
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true,
"optional": true
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
"dev": true
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
},
"dependencies": {
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"bundled": true
},
"yargs": {
"version": "3.32.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
"integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
"requires": {
"is-extglob": "^2.1.0"
"camelcase": "^2.0.1",
"cliui": "^3.0.3",
"decamelize": "^1.1.1",
"os-locale": "^1.4.0",
"string-width": "^1.0.1",
"window-size": "^0.1.4",
"y18n": "^3.2.0"
}
}
}
},
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
},
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
"dev": true,
"requires": {
"array-union": "^1.0.1",
"dir-glob": "^2.0.0",
"glob": "^7.1.2",
"ignore": "^3.3.5",
"pify": "^3.0.0",
"slash": "^1.0.0"
}
},
"globule": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
"integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
"dev": true,
"optional": true,
"requires": {
"glob": "~7.1.1",
"lodash": "~4.17.10",
"minimatch": "~3.0.2"
}
},
"graceful-fs": {
"version": "4.1.15",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
},
"handle-thing": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
......@@ -5133,8 +6045,7 @@
"http-parser-js": {
"version": "0.4.10",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
"integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
"dev": true
"integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q="
},
"http-proxy": {
"version": "1.17.0",
......@@ -5198,12 +6109,12 @@
"dev": true
},
"https-proxy-agent": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
"integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
"integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
"dev": true,
"requires": {
"agent-base": "^4.1.0",
"agent-base": "^4.3.0",
"debug": "^3.1.0"
},
"dependencies": {
......@@ -5237,11 +6148,15 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"idb": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz",
"integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw=="
},
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
......@@ -5524,8 +6439,7 @@
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
"dev": true
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
},
"ionic2-calendar": {
"version": "0.5.2",
......@@ -5681,7 +6595,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
......@@ -5770,8 +6683,7 @@
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"is-symbol": {
"version": "1.0.2",
......@@ -5837,6 +6749,15 @@
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
},
"isomorphic-fetch": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
"requires": {
"node-fetch": "^1.0.1",
"whatwg-fetch": ">=0.10.0"
}
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
......@@ -6362,7 +7283,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
"dev": true,
"requires": {
"invert-kv": "^1.0.0"
}
......@@ -6479,6 +7399,16 @@
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
"dev": true
},
"lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
"integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
},
"lodash.clone": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
"integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
},
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
......@@ -6533,6 +7463,11 @@
"integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==",
"dev": true
},
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
......@@ -7038,9 +7973,7 @@
"nan": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
"integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"dev": true,
"optional": true
"integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
},
"nanomatch": {
"version": "1.2.13",
......@@ -7078,6 +8011,15 @@
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
},
"node-fetch": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": {
"encoding": "^0.1.11",
"is-stream": "^1.0.1"
}
},
"node-fetch-npm": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz",
......@@ -7356,8 +8298,7 @@
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"dev": true
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"oauth-sign": {
"version": "0.9.0",
......@@ -7526,6 +8467,11 @@
}
}
},
"optjs": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
"integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
},
"original": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
......@@ -7550,8 +8496,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
"dev": true,
"optional": true,
"requires": {
"lcid": "^1.0.0"
}
......@@ -8075,6 +9019,11 @@
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
"promise-polyfill": {
"version": "8.1.3",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz",
"integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g=="
},
"promise-retry": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz",
......@@ -8093,6 +9042,33 @@
"string.prototype.codepointat": "^0.2.0"
}
},
"protobufjs": {
"version": "6.8.8",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
"integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.0",
"@types/node": "^10.1.0",
"long": "^4.0.0"
},
"dependencies": {
"@types/node": {
"version": "10.17.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.2.tgz",
"integrity": "sha512-sAh60KDol+MpwOr1RTK0+HgBEYejKsxdpmrOS1Wts5bI03dLzq8F7T0sRXDKeaEK8iWDlGfdzxrzg6vx/c5pNA=="
}
}
},
"protoduck": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz",
......@@ -8766,8 +9742,7 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safe-regex": {
"version": "1.1.0",
......@@ -8781,8 +9756,7 @@
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sass-graph": {
"version": "2.2.4",
......@@ -9768,7 +10742,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -9821,7 +10794,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -9954,9 +10926,9 @@
},
"dependencies": {
"glob": {
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
"integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"version": "7.1.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
"integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
......@@ -11189,7 +12161,6 @@
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
"integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
"dev": true,
"requires": {
"http-parser-js": ">=0.4.0 <0.4.11",
"safe-buffer": ">=5.1.0",
......@@ -11199,8 +12170,12 @@
"websocket-extensions": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
"integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
"dev": true
"integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
},
"whatwg-fetch": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
"integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
},
"when": {
"version": "3.6.4",
......@@ -11233,6 +12208,11 @@
"string-width": "^1.0.2 || 2"
}
},
"window-size": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
"integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
},
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
......@@ -11252,7 +12232,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
"dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
......@@ -11300,6 +12279,11 @@
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
},
"xmlhttprequest": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
"integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
},
"xmlhttprequest-ssl": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
......
......@@ -13,6 +13,7 @@
},
"private": true,
"dependencies": {
"@agm/core": "^1.0.0",
"@angular/animations": "^8.0.3",
"@angular/common": "^7.2.2",
"@angular/core": "^7.2.2",
......@@ -23,25 +24,37 @@
"@angular/router": "^7.2.2",
"@ionic-native/call-number": "^5.15.0",
"@ionic-native/core": "^5.0.0",
"@ionic-native/file-transfer": "^5.15.1",
"@ionic-native/geolocation": "^5.15.0",
"@ionic-native/image-picker": "^5.15.1",
"@ionic-native/native-geocoder": "^5.0.0",
"@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0",
"@ionic-native/toast": "^5.15.0",
"@ionic/angular": "^4.1.0",
"@ngx-translate/core": "^11.0.1",
"@ngx-translate/http-loader": "^4.0.0",
"@types/jquery": "^3.3.31",
"agm-direction": "^0.7.9",
"angular-calendar": "^0.27.14",
"angularfire2": "^5.2.1",
"call-number": "^1.0.1",
"cordova-android": "^8.1.0",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-file": "^6.0.2",
"cordova-plugin-file-transfer": "^1.7.1",
"cordova-plugin-geolocation": "^4.0.2",
"cordova-plugin-ionic-keyboard": "^2.1.3",
"cordova-plugin-ionic-webview": "^4.1.1",
"cordova-plugin-nativegeocoder": "^3.2.2",
"cordova-plugin-splashscreen": "^5.0.2",
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-telerik-imagepicker": "^2.3.3",
"cordova-plugin-whitelist": "^1.3.3",
"cordova-plugin-x-toast": "^2.7.2",
"core-js": "^2.5.4",
"date-fns": "^1.30.1",
"firebase": "^7.2.2",
"ionic2-calendar": "^0.5.2",
"jquery": "^3.4.1",
"rxjs": "~6.5.1",
......@@ -88,7 +101,10 @@
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-geolocation": {},
"cordova-plugin-x-toast": {},
"mx.ferreyra.callnumber": {}
"mx.ferreyra.callnumber": {},
"cordova-plugin-nativegeocoder": {},
"cordova-plugin-telerik-imagepicker": {},
"cordova-plugin-file-transfer": {}
},
"platforms": [
"android"
......
resources/icon.png

59.4 KB | W: | H:

resources/icon.png

48.4 KB | W: | H:

resources/icon.png
resources/icon.png
resources/icon.png
resources/icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/splash.png

76.8 KB | W: | H:

resources/splash.png

9.32 MB | W: | H:

resources/splash.png
resources/splash.png
resources/splash.png
resources/splash.png
  • 2-up
  • Swipe
  • Onion skin
export interface Productbooking {
user_id: any;
delivery_adressId: any;
prod_id: any;
car_id: any;
}
......@@ -19,4 +19,7 @@ export class AuthenticationService {
public uploadFormData(url, formData) {
return this.http.post<any>(`${devURL + url}`, formData).pipe(map((response: any) => response));
}
getGoogleLocationData(lat, lng) {
return this.http.get('https://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+lng+'&key=AIzaSyBniwyiEPSjS9IUvbhBmS0ampJkzE2cSS0').pipe(map((response: any) => response));
}
}
import { Injectable } from '@angular/core';
import { AngularFirestore } from '@angular/fire/firestore';
import { Router } from '@angular/router';
import { firestore } from 'firebase/app';
import { map, switchMap } from 'rxjs/operators';
import { Observable, combineLatest, of } from 'rxjs';
import { StorageService } from '../../Config/services/storage.service';
@Injectable({
providedIn: 'root'
})
export class ChatService {
userData: any;
constructor(
private afs: AngularFirestore,
private router: Router,
private storageService: StorageService
) {
this.userData = JSON.parse(this.storageService.getLocalStorageItem('userData'));
console.log(this.userData);
}
get(chatId) {
return this.afs
.collection<any>('chats')
.doc(chatId)
.snapshotChanges()
.pipe(
map(doc => {
return { id: doc.payload.id, ...doc.payload.data() };
})
);
}
async create() {
const { id } = this.userData.id;
const data = {
id:1,
time: 1,
sender_type: 1,
messages: [],
user_id: 1
};
const docRef = await this.afs.collection('chats').add(data);
console.log(docRef);
// return this.router.navigate(['chats', docRef.id]);
}
async sendMessage(chatId, content) {
const { uid } = this.userData.id;
const data = {
uid,
content,
createdAt: Date.now()
};
if (uid) {
const ref = this.afs.collection('chats').doc(chatId);
return ref.update({
messages: firestore.FieldValue.arrayUnion(data)
});
}
}
}
\ No newline at end of file
......@@ -9,6 +9,9 @@ export class StorageService {
setLocalStorageItem(id: string, data: string) {
localStorage.setItem(id, data);
}
setProfilePic(data: string) {
localStorage.setItem('profilePic' , data);
}
getLocalStorageItem(data: string): string {
return localStorage.getItem(data);
}
......
import { Injectable } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
@Injectable({
providedIn: 'root'
})
export class TranslateConfigService {
constructor(
private translate: TranslateService
) { }
getDefaultLanguage() {
const language = this.translate.getBrowserLang();
this.translate.setDefaultLang(language);
return language;
}
setLanguage(setLang) {
this.translate.use(setLang);
}
}
......@@ -22,9 +22,9 @@
<p>Phone Number</p>
<ion-row class="p0">
<ion-col size="4">
<!-- <ion-select >
<ion-select-option value="" formControlName="">+33</ion-select-option>
</ion-select> -->
<ion-select formControlName="phone_code">
<ion-select-option value = +33 >+33</ion-select-option>
</ion-select>
</ion-col>
<ion-col size="8">
<ion-input value="" type="number" formControlName="phone_no"></ion-input>
......
......@@ -21,7 +21,8 @@ export class AddaddressPage implements OnInit {
area: ['', Validators.required],
house_no: ['', Validators.required],
city: ['', Validators.required],
district: ['Ernakulam'],
district: [''],
phone_code: ['' , Validators.required],
user_id: ['', Validators.required]
});
constructor(
......@@ -49,7 +50,7 @@ export class AddaddressPage implements OnInit {
}
addnewAddress() {
this.deliveryaddressForm.patchValue({
user_id : this.userData.id
user_id : this.userData.profile_id
});
if ( this.deliveryaddressForm.valid) {
console.log(this.deliveryaddressForm.value);
......@@ -57,6 +58,7 @@ export class AddaddressPage implements OnInit {
console.log(data);
if ( data.status === 'success') {
this.validationservice.presentToast(data.message);
this.goToPage('home');
} else {
this.validationservice.presentToast(data.message);
}
......
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { FormsModule ,ReactiveFormsModule} from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
......@@ -18,6 +18,7 @@ const routes: Routes = [
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
IonicModule,
RouterModule.forChild(routes)
],
......
......@@ -6,43 +6,38 @@
</button>
<div class="nav_title floatLeft"><h4>ADD YOUR CAR</h4></div>
<button class="nav_btn nav_btn_text floatRight" (click)="goToPage('login')">
<!-- <button class="nav_btn nav_btn_text floatRight" (click)="goToPage('login')">
Skip
</button>
<div class="clear"></div>
<div class="clear"></div> -->
</div>
<div class="forgot_form">
<div class="showcar">
<form [formGroup]="addCar">
<!-- <div class="showcar">
<img src="../../assets/img/asset_show_car.png">
</div>
</div> -->
<div class="row">
<ion-input formControlName="car_VinNumber" placeholder="Car VIN Number" type="text"></ion-input>
</div>
<div class="row">
<ion-select placeholder="">
<ion-select-option value="" selected>Company Name</ion-select-option>
</ion-select>
<ion-input formControlName="car_brand" placeholder="Company" type="text"></ion-input>
</div>
<div class="row">
<ion-select placeholder="">
<ion-select-option value="" selected>Modal Name</ion-select-option>
</ion-select>
<ion-input formControlName="car_model" placeholder="Model" type="text"></ion-input>
</div>
<div class="row">
<ion-select placeholder="">
<ion-select-option value="" selected>Modal Year</ion-select-option>
</ion-select>
<ion-input formControlName="car_year" placeholder="Year" type="number"></ion-input>
</div>
<div class="row">
<p>Mileage</p>
<ion-select placeholder="">
<ion-select-option value="" selected>0 - 10km</ion-select-option>
</ion-select>
<ion-input formControlName="car_milege" placeholder="Milege" type="number"></ion-input>
</div>
<div class="row textCenter">
<button class="signup_btn" (click)="goToPage('login')">Add My car</button>
<button class="signup_btn" (click)="addUserCar()">Add My car</button>
</div>
</form>
</div>
</div>
</ion-content>
import { Component, OnInit } from '@angular/core';
import { Router,ActivatedRoute } from '@angular/router';
import { Router, ActivatedRoute } from '@angular/router';
import { Location } from '@angular/common';
import { FormBuilder, Validators } from '@angular/forms';
import {StorageService } from '../../Config/services/storage.service';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
@Component({
selector: 'app-addcar',
......@@ -8,25 +12,63 @@ import { Location } from '@angular/common';
styleUrls: ['./addcar.page.scss'],
})
export class AddcarPage implements OnInit {
userData: any;
addCar = this.fb.group({
user_id: ['', Validators.required],
car_VinNumber: ['', Validators.required],
car_brand: ['', Validators.required],
car_model: ['', Validators.required],
car_year: ['', Validators.required],
car_milege: ['', Validators.required]
});
constructor(
private router: Router,
private route: ActivatedRoute,
private location: Location
) {
private location: Location,
private fb: FormBuilder,
private storageService: StorageService,
private validationService: ValidationService,
private authenticationService: AuthenticationService,
) {
this.getStorageData();
}
ngOnInit() {
}
goToPage(path,data=null){
this.router.navigateByUrl(path,{queryParams:data});
goToPage(path, data= null) {
this.router.navigateByUrl(path, {queryParams: data});
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
goBack() {
this.location.back();
}
addUserCar() {
const formData = new FormData();
this.addCar.patchValue({
user_id : this.userData.profile_id
});
console.log(this.addCar.value);
if (this.addCar.valid) {
formData.append('user_id', this.userData.profile_id);
formData.append('car_VinNumber' , this.addCar.value.car_VinNumber);
formData.append('car_brand' , this.addCar.value.car_brand);
formData.append('car_model' , this.addCar.value.car_model);
formData.append('car_year' , this.addCar.value.car_year);
formData.append('car_milege' , this.addCar.value.car_milege);
this.authenticationService.post_data('add_UserCar' , formData).subscribe((data) => {
console.log(data);
if (data.status === 'success') {
this.goToPage('home');
}
});
}
}
getStorageData() {
this.userData = JSON.parse(this.storageService.getLocalStorageItem('userData'));
console.log(this.userData);
}
}
......@@ -59,7 +59,7 @@ const routes: Routes = [
path: 'review',
loadChildren: './review/review.module#ReviewPageModule'
},
{ path: 'waiting', loadChildren: './waiting/waiting.module#WaitingPageModule' },
{ path: 'waiting/:id', loadChildren: './waiting/waiting.module#WaitingPageModule' },
{ path: 'complete', loadChildren: './complete/complete.module#CompletePageModule' },
{ path: 'profile', loadChildren: './profile/profile.module#ProfilePageModule' },
{ path: 'myservices', loadChildren: './myservices/myservices.module#MyservicesPageModule' },
......@@ -79,11 +79,21 @@ const routes: Routes = [
{ path: 'purchaseparts', loadChildren: './purchaseparts/purchaseparts.module#PurchasepartsPageModule' },
{ path: 'productbooking/:id', loadChildren: './productbooking/productbooking.module#ProductbookingPageModule' },
{ path: 'addaddress', loadChildren: './addaddress/addaddress.module#AddaddressPageModule' },
{ path: 'deliveryaddress', loadChildren: './deliveryaddress/deliveryaddress.module#DeliveryaddressPageModule' },
{ path: 'deliveryaddress/:id', loadChildren: './deliveryaddress/deliveryaddress.module#DeliveryaddressPageModule' },
{ path: 'partproduct', loadChildren: './partproduct/partproduct.module#PartproductPageModule' },
{ path: 'orderdetails', loadChildren: './orderdetails/orderdetails.module#OrderdetailsPageModule' },
{ path: 'listingservice', loadChildren: './listingservice/listingservice.module#ListingservicePageModule' },
{ path: 'changepassword', loadChildren: './changepassword/changepassword.module#ChangepasswordPageModule' }
{ path: 'changepassword', loadChildren: './changepassword/changepassword.module#ChangepasswordPageModule' },
{ path: 'carlistsecond', loadChildren: './carlistsecond/carlistsecond.module#CarlistsecondPageModule' },
{ path: 'chat', loadChildren: './chat/chat.module#ChatPageModule' },
{ path: 'map', loadChildren: './map/map.module#MapPageModule' },
{ path: 'roadassistantrequest-list', loadChildren: './roadassistantrequest-list/roadassistantrequest-list.module#RoadassistantrequestListPageModule' },
// { path: 'roadassistancerequestlist', loadChildren: './roadassistancerequestlist/roadassistancerequestlist.module#RoadassistancerequestlistPageModule' },
{ path: 'roadassiastancecompletedlist', loadChildren: './roadassiastancecompletedlist/roadassiastancecompletedlist.module#RoadassiastancecompletedlistPageModule' },
{ path: 'roadassistancerating', loadChildren: './roadassistancerating/roadassistancerating.module#RoadassistanceratingPageModule' }
];
......
......@@ -38,6 +38,11 @@ export class AppComponent {
this.platform.ready().then(() => {
this.statusBar.styleDefault();
this.splashScreen.hide();
const This = this;
// tslint:disable-next-line: only-arrow-functions
setInterval(function() {
This.geolocationData();
}, 3000);
this.geolocationData();
});
}
......@@ -45,6 +50,7 @@ export class AppComponent {
this.geolocation.getCurrentPosition().then((resp) => {
console.log(resp);
const coords = {lat: resp.coords.latitude, lng: resp.coords.longitude};
this.storageservice.removeLocalStorageItem('location');
this.storageservice.setLocalStorageItem('location', JSON.stringify(coords));
}).catch((error) => {
console.log('Error getting location', error);
......
......@@ -15,9 +15,22 @@ import { CalendarModule, DateAdapter } from 'angular-calendar';
import { adapterFactory } from 'angular-calendar/date-adapters/date-fns';
import { CallNumber } from '@ionic-native/call-number/ngx';
import { HttpClientModule } from '@angular/common/http';
import { HttpClientModule, HttpClient } from '@angular/common/http';
import { Geolocation } from '@ionic-native/geolocation/ngx';
import { Toast } from '@ionic-native/toast/ngx';
import { NativeGeocoder } from '@ionic-native/native-geocoder/ngx';
import { ImagePicker } from '@ionic-native/image-picker/ngx';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import { AngularFireModule } from '@angular/fire';
import { AngularFirestoreModule } from '@angular/fire/firestore';
import { AngularFireStorageModule } from '@angular/fire/storage';
import { AngularFireAuthModule } from '@angular/fire/auth';
import {environment} from '../environments/firebase';
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
console.log(TranslateHttpLoader);
}
@NgModule({
declarations: [
......@@ -29,14 +42,27 @@ import { Toast } from '@ionic-native/toast/ngx';
],
imports: [
BrowserModule,
AngularFirestoreModule, // imports firebase/firestore, only needed for database features
AngularFireAuthModule, // imports firebase/auth, only needed for auth features,
AngularFireStorageModule, // imports firebase/storage only needed for storage features
AngularFireModule.initializeApp(environment.firebase),
HttpClientModule,
BrowserAnimationsModule,
IonicModule.forRoot(),
TranslateModule.forRoot(),
AppRoutingModule,
CalendarModule.forRoot({
provide: DateAdapter,
useFactory: adapterFactory
})
}),
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
}),
],
providers: [
......@@ -45,6 +71,8 @@ import { Toast } from '@ionic-native/toast/ngx';
Geolocation,
CallNumber,
Toast,
NativeGeocoder,
ImagePicker,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
......
......@@ -2,7 +2,7 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { IonicModule } from '@ionic/angular';
import { BookingPage } from './booking.page';
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [BookingPage]
......
......@@ -2,7 +2,7 @@
<div class="app_header" *ngIf="roadassistantDetails">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4 *ngIf="roadassistantDetails.name">{{roadassistantDetails.name |}}</h4></div>
<div class="nav_title floatLeft"><h4 *ngIf="roadassistantDetails.name">{{roadassistantDetails.name}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
......@@ -11,17 +11,17 @@
</ion-header>
<ion-content>
<div class="home_wrapper">
<div class="location_box">
<!-- <div class="location_box">
<div class="location_bar">
4KM
</div>
</div>
</div> -->
<div class="banner">
<img src="../../assets/img/asset_banner.png">
</div>
<div class="btn_bay">
<button class="btn call_btn">Call Allo Repar</button>
<button class="btn book_btn" (click)="goToPage('waiting')">Book Service</button>
<div class="btn_bay" *ngIf="roadassistantDetails">
<button class="btn call_btn" (click)="callRoadAssistant(roadassistantDetails.phone_no)">{{'Booking.Call to Allorepo' | translate:params}}</button>
<button class="btn book_btn" (click)="bookroadassistant()">{{'Booking.Book Service' | translate:params}}</button>
</div>
<div class="pay_description">
<h6>
......@@ -38,16 +38,16 @@
<img src="../../assets/img/asset_c4.png">
</span>
</h6>
<h6>
<!-- <h6 *ngIf="roadassistantDetails">
<span>
<img src="../../assets/img/asset_web.png">
<a>www.presto.com</a></span>
</h6>
<a>{{roadassistantDetails.email_id}}</a></span>
</h6> -->
</div>
<div class="bottom_tab_bay">
<ul>
<li [class.active]="tab == 'about'" (click)="tab_swap('about')">About</li>
<li [class.active]="tab == 'review'" (click)="tab_swap('review')">Reviews</li>
<li [class.active]="tab == 'about'" (click)="tab_swap('about')">{{'Booking.About' | translate:params}}</li>
<li [class.active]="tab == 'review'" (click)="tab_swap('review')">{{'Booking.Reviews' | translate:params}}</li>
</ul>
</div>
<div class="tab_content">
......@@ -86,12 +86,12 @@
<span *ngIf="ratingDetails">{{ratingDetails.rate}} | {{ratingDetails.reviewNumber}} Reviews</span>
</ion-col>
<ion-col col-4 class="p0 textRight">
<button class="add_review" (click)="istoggle()">+</button>
<button class="add_review" (click)="istoggle()" disabled>+</button>
</ion-col>
</ion-row>
</div>
<div class="review_list">
<ul>
<!-- <ul>
<li>
<div class="top_div">
<div class="pic_circle"></div>
......@@ -164,7 +164,7 @@
<div class="clear"></div>
</div>
</li>
</ul>
</ul> -->
</div>
</div>
</div>
......
......@@ -7,6 +7,7 @@ import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
import { CallNumber } from '@ionic-native/call-number/ngx';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-booking',
templateUrl: './booking.page.html',
......@@ -33,6 +34,9 @@ export class BookingPage {
isShow = false;
roadassistantDetails = [];
reviewDetails = [];
locationData: any;
userData: any;
lang: any;
constructor(
private router: Router,
private route: ActivatedRoute,
......@@ -40,16 +44,19 @@ export class BookingPage {
private validationService: ValidationService,
private authenticationService: AuthenticationService,
private storageservice: StorageService,
private callNumber: CallNumber
private callNumber: CallNumber,
private translateConfigService: TranslateConfigService
) {
const Data = decodeURIComponent((this.route.snapshot.paramMap.get('id')));
this.id = JSON.parse(Data);
this.tab = 'about';
this.getStorageData();
this.roadassistantDetails = null;
this.reviewDetails = null;
this.rating = 0;
this.reviewErrormessage = false;
this.roadassistantDetail(this.id);
}
......@@ -68,7 +75,14 @@ export class BookingPage {
}
getStorageData() {
this.userData = JSON.parse(this.storageservice.getLocalStorageItem('userData'));
this.locationData = JSON.parse(this.storageservice.getLocalStorageItem('location'));
this.lang = JSON.parse(this.storageservice.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTranslang(this.lang);
}
}
istoggle() {
this.isShow = !this.isShow;
......@@ -112,4 +126,29 @@ for (let i = 0 ; i < this.reviewcount - 1 ; i++ ) {
this.ratingDetails = { rate: this.rating, reviewNumber: this.reviewcount };
}
bookroadassistant() {
const today = new Date();
const passData = {
user_lat: this.locationData.lat,
user_lng: this.locationData.lng,
user_carId: '1',
date: today,
roadassistance_id: this.id,
user_id: this.userData.profile_id
};
this.authenticationService.post_data('book_roadassistance' , passData).subscribe((data) => {
console.log(data);
if (data.status === 'success') {
this.validationService.presentToast('Your booking done successfully');
// tslint:disable-next-line: no-shadowed-variable
const passData = {road_assistantName: this.roadassistantDetails};
this.goToPage('/waiting/' + encodeURIComponent(JSON.stringify(passData)));
} else {
this.validationService.presentToast('Booking failed');
}
});
}
langTranslang(lang) {
this.translateConfigService.setLanguage(lang);
}
}
......@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { CarlistPage } from './carlist.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [CarlistPage]
......
......@@ -2,7 +2,7 @@
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>MY CARS</h4></div>
<div class="nav_title floatLeft"><h4>{{'Carslist.My Cars' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
<div class="add_car" (click)="goToPage('addcar')">
+
......@@ -13,14 +13,14 @@
</ion-header>
<ion-content>
<div class="carlist">
<ul>
<li>
<ul *ngIf="carDetails">
<li *ngFor="let car of carDetails; let i = index" (click)="bookService(carDetails[i])">
<div class="auto_pic"></div>
<div class="auto_detail" (click)="bookService()">
<h4><strong>Rolls Royce</strong> Ghost</h4>
<div class="auto_detail">
<h4><strong>{{carDetails[i].make}}</strong></h4>
<div class="auto_detail_inner">
<p>Mileage: 08 - 12</p>
<p>Model: 2019</p>
<p>Mileage: {{carDetails[i].mileage}}</p>
<p>Model: {{carDetails[i].model}}</p>
</div>
</div>
<div class="clear"></div>
......
......@@ -5,6 +5,8 @@ import { Router, ActivatedRoute } from '@angular/router';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
import { Productbooking } from '../../Config/model/productbooking';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-carlist',
templateUrl: './carlist.page.html',
......@@ -14,6 +16,7 @@ export class CarlistPage implements OnInit {
getData: any;
userData: any;
addressList: any;
carDetails: any;
constructor(
private router: Router,
private route: ActivatedRoute,
......@@ -21,6 +24,7 @@ export class CarlistPage implements OnInit {
private validationService: ValidationService,
private authenticationService: AuthenticationService,
private storageservice: StorageService,
private translateConfigService: TranslateConfigService
) {
const Data = decodeURIComponent((this.route.snapshot.paramMap.get('id')));
this.getData = JSON.parse(Data);
......@@ -30,6 +34,7 @@ export class CarlistPage implements OnInit {
ngOnInit() {
this.getStorgaeData();
this.getSavedAddress();
this.getCarDetails();
this.addressList = null;
}
......@@ -42,19 +47,26 @@ export class CarlistPage implements OnInit {
goBack() {
this.location.back();
}
bookService() {
bookService(cardata) {
console.log(cardata);
if ( this.getData.type === 1) {
// tslint:disable-next-line: max-line-length
const passData = {date: this.getData.booking_date, message: this.getData.message, id: [this.getData.subservice_id], car_id: '1', sub_name: this.getData.sub_name, main_name: this.getData.main_name };
const passData = {date: this.getData.booking_date, message: this.getData.message, id: [this.getData.subservice_id], car_id: cardata, sub_name: this.getData.sub_name, main_name: this.getData.main_name };
console.log(JSON.stringify(passData));
this.goToPage('/summary/' + encodeURIComponent(JSON.stringify(passData)));
}
if (this.getData.type === 2) {
this.goToPage('deliveryaddress');
const passData: Productbooking = {
user_id: this.userData.profile_id,
prod_id : this.getData.product_id,
car_id: cardata.id,
delivery_adressId : ''
};
this.goToPage('/deliveryaddress/' + encodeURIComponent(JSON.stringify(passData)));
}
}
getSavedAddress() {
this.authenticationService.get_data('get_deliveryadress?user_id=' + this.userData.id).subscribe((data) => {
this.authenticationService.get_data('get_deliveryadress?user_id=' + this.userData.profile_id).subscribe((data) => {
console.log(data);
if (data.status === 'success') {
this.addressList = data.data;
......@@ -65,5 +77,17 @@ getSavedAddress() {
}
getStorgaeData() {
this.userData = JSON.parse(this.storageservice.getLocalStorageItem('userData'));
}
getCarDetails() {
this.authenticationService.get_data('get_carList?user_id=' + this.userData.profile_id).subscribe((data) => {
console.log(data);
if (data.status === 'success') {
this.carDetails = data.data;
}
});
}
langTrans() {
this.translateConfigService.setLanguage('fr');
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { CarlistsecondPage } from './carlistsecond.page';
const routes: Routes = [
{
path: '',
component: CarlistsecondPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [CarlistsecondPage]
})
export class CarlistsecondPageModule {}
<ion-header>
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>MY CARS</h4></div>
<button class="nav_btn nav_btn_text floatRight">
<div class="add_car" (click)="goToPage('addcar')">
+
</div>
</button>
<div class="clear"></div>
</div>
</ion-header>
<ion-content>
<div class="carlist">
<ul *ngIf="carDetails">
<li *ngFor="let car of carDetails; let i = index">
<div class="auto_pic"></div>
<div class="auto_detail">
<h4><strong>{{carDetails[i].make}}</strong></h4>
<div class="auto_detail_inner">
<p>Mileage: {{carDetails[i].mileage}}</p>
<p>Model: {{carDetails[i].model}}</p>
</div>
</div>
<div class="clear"></div>
</li>
</ul>
</div>
</ion-content>
.add_car{
background-color: #39267f;
color: #fff;
height: 40px;
width: 40px;
border-radius: 50%;
font-size: 30px;
padding: 4px;
}
.carlist{
padding:10px;
ul{
margin:0px;
padding:0px;
li{
list-style: none;
padding: 20px;
border-radius: 15px;
margin-bottom: 10px;
-webkit-box-shadow: 0px 0px 19px 0px rgba(135,105,244,0.49);
-moz-box-shadow: 0px 0px 19px 0px rgba(135,105,244,0.49);
box-shadow: 0px 0px 19px 0px rgba(135,105,244,0.49);
.auto_pic{
width:60px;
height:60px;
-webkit-box-shadow: 0px 0px 19px 0px rgba(135,105,244,0.49);
-moz-box-shadow: 0px 0px 19px 0px rgba(135,105,244,0.49);
box-shadow: 0px 0px 19px 0px rgba(135,105,244,0.49);
border-radius:15px;
float: left;
img{
width: 100%;
height:100%;
border-radius: 15px;
object-fit: cover;
object-position: center;
}
}
.auto_detail{
float: left;
width: calc(100% - 60px);
padding-left:15px;
h4{
margin:0px;
padding: 0px;
color: #282438;
font-weight: 400;
padding-bottom:5px;
font-size: 16px;
strong{
font-weight: 500;
}
}
.auto_detail_inner{
border-left:1px dashed #4e4961;
margin-left:10px;
padding-left: 15px;
p{
margin:0px;
padding: 0px;
color: #a29ebf;
font-size: 14px;
}
}
}
}
}
}
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { CarlistsecondPage } from './carlistsecond.page';
describe('CarlistsecondPage', () => {
let component: CarlistsecondPage;
let fixture: ComponentFixture<CarlistsecondPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ CarlistsecondPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CarlistsecondPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
import { trigger, transition, animate, style } from '@angular/animations';
import { Router, ActivatedRoute } from '@angular/router';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
@Component({
selector: 'app-carlistsecond',
templateUrl: './carlistsecond.page.html',
styleUrls: ['./carlistsecond.page.scss'],
})
export class CarlistsecondPage implements OnInit {
userData: any;
carDetails: any;
constructor(
private router: Router,
private route: ActivatedRoute,
private location: Location,
private validationService: ValidationService,
private authenticationService: AuthenticationService,
private storageservice: StorageService,
) {
this.getCarDetails();
}
ngOnInit() {
}
goToPage(path, data= null) {
this.router.navigateByUrl(path, {queryParams: data});
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
goBack() {
this.location.back();
}
getStorgaeData() {
this.userData = JSON.parse(this.storageservice.getLocalStorageItem('userData'));
}
getCarDetails() {
this.authenticationService.get_data('get_carList?user_id=' + this.userData.profile_id).subscribe((data) => {
console.log(data);
if (data.status === 'success') {
this.carDetails = data.data;
}
});
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { ChatPage } from './chat.page';
const routes: Routes = [
{
path: '',
component: ChatPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [ChatPage]
})
export class ChatPageModule {}
<ion-header>
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft">
<h4>ALLO CHAT</h4>
</div>
<button class="nav_btn nav_btn_text floatRight">
</button>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="chat_sign_bg home_background">
<div class="chat_chat_wrap">
<ul>
<li class="chat_received">
<div class="chat_message_content">
<p>Hi, Ann Alexander</p>
<span>Apr 13</span><span>10 : 00 am</span>
</div>
<div class="clear"></div>
</li>
<li class="chat_sented">
<div class="chat_message_content">
<p>Hi, I needed a Nutrition expert</p>
<span>Apr 13</span><span>10 : 00 am</span>
</div>
<div class="clear"></div>
</li>
</ul>
</div>
</ion-content>
<ion-footer padding>
<div class="chat_chat_type_wrapper">
<input class="chat_type_text" type="text" placeholder="Type here">
<button class="chat_send">
<ion-icon name="send"></ion-icon>
</button>
<div class="clear"></div>
</div>
</ion-footer>
\ No newline at end of file
.home_background {
background: #f6f5fa;
}
.chat_chat_wrap {
width: 100%;
padding-top: 10px;
padding-bottom: 10px;
}
.chat_chat_wrap ul {
margin: 0px;
padding: 0px;
}
.chat_chat_wrap ul li {
list-style: none;
padding-bottom: 20px;
}
.chat_message_photo {
width: 40px;
height: 40px;
border-radius: 50%;
}
.chat_message_photo img {
width: 100%;
height: 100%;
border-radius: 50%;
}
.chat_message_content {
position: relative;
}
.chat_message_content h6 {
margin: 0px;
padding-bottom: 10px;
font-weight: 400;
}
.chat_message_content p {
margin: 0px;
padding: 15px;
border-radius: 0px;
padding-left: 20px;
padding-right: 20px;
margin-bottom: 5px;
font-weight: 400;
font-size: 16px;
}
.chat_message_content span {
margin: 0px;
color: #a4a1a1;
font-size: 12px;
}
.chat_received {}
.chat_sented {}
.chat_received .chat_message_content {
float: left;
text-align: left;
}
.chat_received .chat_message_content p {
background: #FBD436;
color: #242035;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
}
.chat_received .chat_message_content span {
margin-right: 10px;
}
.chat_sented .chat_message_content {
float: right;
text-align: right;
}
.chat_sented .chat_message_content p {
background: #362180;
// color: #fff;
border-top-left-radius: 15px;
border-bottom-left-radius: 15px;
}
.chat_sented .chat_message_content span {
margin-left: 10px;
}
.chat_chat_type_wrapper {
width: 100%;
position: relative;
}
.chat_chat_type_wrapper input {
width: calc(100% - 60px);
background: #fff;
height: 50px;
font-size: 20px;
border: none;
padding-left: 15px;
// color: #fff;
font-weight: 300;
border: 1px solid #dcdae9;
border-radius: 30px;
float: left;
}
.chat_chat_type_wrapper input::placeholder {
color: #dcdae9;
}
.chat_send {
background: transparent;
width: 50px;
height: 50px;
background-color: #39267f;
float: right;
margin-left: 10px;
border-radius: 50%;
color: #fff;
font-size: 20px;
}
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ChatPage } from './chat.page';
describe('ChatPage', () => {
let component: ChatPage;
let fixture: ComponentFixture<ChatPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ChatPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ChatPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { ChatService } from '../../Config/services/chat.service';
import { Observable } from 'rxjs';
@Component({
selector: 'app-chat',
templateUrl: './chat.page.html',
styleUrls: ['./chat.page.scss'],
})
export class ChatPage implements OnInit {
chat$: Observable<any>;
newMsg: string;
constructor(
public cs: ChatService
) { }
ngOnInit() {
this.cs.create();
}
submit(chatId) {
this.cs.sendMessage(chatId, this.newMsg);
this.newMsg = '';
}
}
......@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { DatePage } from './date.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -20,6 +20,7 @@ const routes: Routes = [
FormsModule,
ReactiveFormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [DatePage]
......
......@@ -2,7 +2,7 @@
<div class="app_header relative">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>DATE & TIME</h4></div>
<div class="nav_title floatLeft"><h4>{{'Date.Date' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
<div class="clear"></div>
......@@ -13,10 +13,10 @@
<div class="select_services_wrapper">
<ion-item>
<ion-label>Pick Date</ion-label>
<ion-label>{{'Date.Pick Date' | translate:params}}</ion-label>
<ion-datetime displayFormat="DD MM YY" [(ngModel)]="myDate" placeholder="Select Date" ></ion-datetime>
</ion-item>
<h4>Instruction</h4>
<h4>{{'Date.Instruction' | translate:params}}</h4>
<textarea rows="6" placeholder="Type here..." [(ngModel)]="Message" ></textarea>
</div>
......@@ -28,7 +28,7 @@
<!-- <h6>{{myDate}}</h6> -->
</ion-col>
<ion-col size="3">
<button class="next_btn floatRight" (click)="movetoSelectCar()">NEXT</button>
<button class="next_btn floatRight" (click)="movetoSelectCar()">{{'Date.Next' | translate:params}}</button>
<div class="clear"></div>
</ion-col>
</ion-row>
......
......@@ -3,7 +3,8 @@ import { trigger, transition, animate, style } from '@angular/animations';
import { Location } from '@angular/common';
import { Router, ActivatedRoute } from '@angular/router';
import { FormBuilder, Validators } from '@angular/forms';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
import { StorageService } from '../../Config/services/storage.service';
@Component({
selector: 'app-date',
templateUrl: './date.page.html',
......@@ -14,13 +15,20 @@ export class DatePage implements OnInit {
Message: any;
getData: any;
today = new Date();
lang: any;
constructor(
private router: Router,
private route: ActivatedRoute,
private location: Location,
private fb: FormBuilder
private fb: FormBuilder,
private translateConfigService: TranslateConfigService,
private storageservice: StorageService
) {
console.log(this.myDate);
this.lang = JSON.parse(this.storageservice.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTrans(this.lang);
}
}
ngOnInit() {
......@@ -43,4 +51,7 @@ export class DatePage implements OnInit {
const passData = {subservice_id: this.getData.sub_id, booking_date: this.myDate , message: this.Message, sub_name: this.getData.sub_name,main_name:this.getData.main_name ,type:1}
this.goToPage('/carlist/' + encodeURIComponent(JSON.stringify(passData)));
}
langTrans(lang) {
this.translateConfigService.setLanguage(lang);
}
}
......@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { DeliveryaddressPage } from './deliveryaddress.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [DeliveryaddressPage]
......
......@@ -2,7 +2,7 @@
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>DELIVERY ADDRESS</h4></div>
<div class="nav_title floatLeft"><h4>{{'deliveryaddress.Delivery Address' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
<div class="add_car" (click)="goToPage('addaddress')">
+
......@@ -12,11 +12,10 @@
</div>
</ion-header>
<ion-content>
<div class="delivery_wrapper">
<div class="delivery_wrapper" *ngIf="saveAddress">
<ul>
<li>adadd</li>
<li>adadd</li>
<li>adadd</li>
<li *ngFor="let address of saveAddress; let i = index" (click)="requestProduct(address)">{{'deliveryaddress.Name' | translate:params}}:{{saveAddress[i].name}}<br>{{'deliveryaddress.Phone' | translate:params}}:{{saveAddress[i].phone_no}}<br>{{'deliveryaddress.House' | translate:params}}:{{saveAddress[i].house_no}}<br>{{'deliveryaddress.Area' | translate:params}}:{{saveAddress[i].area}}<br>{{'deliveryaddress.City' | translate:params}}:{{saveAddress[i].city}}<br>{{'deliveryaddress.Country' | translate:params}}:{{saveAddress[i].country}}</li>
</ul>
</div>
</ion-content>
......@@ -5,7 +5,8 @@ import { Router, ActivatedRoute } from '@angular/router';
import { StorageService } from '../../Config/services/storage.service';
import { ValidationService } from '../../Config/services/validation.service';
import { AuthenticationService } from '../../Config/services/auth.service';
import { Productbooking } from '../../Config/model/productbooking';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-deliveryaddress',
templateUrl: './deliveryaddress.page.html',
......@@ -14,19 +15,30 @@ import { AuthenticationService } from '../../Config/services/auth.service';
export class DeliveryaddressPage implements OnInit {
userData: any;
saveAddress: any;
getData: any;
lang: any;
constructor(
private router: Router,
private route: ActivatedRoute,
private location: Location,
private storageService: StorageService,
private authenticationservice: AuthenticationService,
private validationservice: ValidationService
private validationservice: ValidationService,
private translateConfigService: TranslateConfigService
) {
this.saveAddress = null;
this.getStorgaeData();
this.getuserSavedAddress();
this.lang = JSON.parse(this.storageService.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTrans(this.lang);
}
}
ngOnInit() {
const Data = decodeURIComponent((this.route.snapshot.paramMap.get('id')));
this.getData = JSON.parse(Data);
}
goToPage(path, data= null) {
......@@ -46,11 +58,39 @@ export class DeliveryaddressPage implements OnInit {
console.log(data);
if (data.status === 'success') {
this.saveAddress = data.data;
console.log(this.saveAddress);
} else {
this.saveAddress = '';
this.validationservice.presentToast(data.message);
}
});
}
requestProduct(addressData) {
if (addressData) {
this.validationservice.presentLoader();
console.log(this.getData);
this.getData.delivery_adressId = 2;
const passData: Productbooking = {
user_id : this.getData.user_id,
delivery_adressId : addressData.id,
prod_id : this.getData.prod_id,
car_id : this.getData.car_id
};
// this.authenticationservice.post_data('request_product', passData).subscribe((data) => {
// console.log(data)
// if (data.status === 'success') {
// this.goToPage('waiting1');
// }
// });
const This = this;
// tslint:disable-next-line: only-arrow-functions
setTimeout(function() {
This.validationservice.dismissLoader();
This.goToPage('waiting1');
}, 3000);
}
}
langTrans(lang) {
this.translateConfigService.setLanguage(lang);
}
}
......@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { HomePage } from './home.page';
@NgModule({
......@@ -11,6 +11,7 @@ import { HomePage } from './home.page';
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild([
{
path: '',
......
......@@ -15,8 +15,8 @@
<ion-content>
<div class="home_wrapper">
<div class="location_box">
<div class="location_bar">
Infopark,Kakkanad
<div class="location_bar" *ngIf="displayLocationData">
{{displayLocationData}}
</div>
</div>
......@@ -24,21 +24,21 @@
<ion-row>
<ion-col class="textCenter" (click)="goToPage('roadassistance')">
<img src="../../assets/img/asset_menu1.png">
<p>Road <br>Assistance</p>
<p>Road<br>{{'home.Assistance' | translate:params}}</p>
</ion-col>
<ion-col class="textCenter" (click)="goToPage('listingservice')">
<img src="../../assets/img/asset_menu2.png">
<p>Car<br>Services</p>
<p>{{'home.Car' | translate:params}}<br>{{'home.Services' | translate:params}}</p>
</ion-col>
<ion-col class="textCenter" (click)="goToPage('purchaseparts')">
<img src="../../assets/img/asset_menu3.png">
<p>Parts<br>Purchase</p>
<p>{{'home.Parts' | translate:params}}<br>{{'home.Purchase' | translate:params}}</p>
</ion-col>
</ion-row>
</div>
<div class="header_submenu">
<h4>People most purchased</h4>
<button class="more_btn" (click)="goToPage('purchaseparts')">More</button>
<h4>{{'home.People most purchased' | translate:params}}</h4>
<button class="more_btn" (click)="goToPage('purchaseparts')">{{'home.more' | translate:params}}</button>
<div class="clear"></div>
</div>
<div class="product_section" *ngIf="peopleMostpurchasedList" >
......@@ -55,70 +55,34 @@
</ion-col>
</ion-row>
</div>
<div class="appointment_slider">
<div class="appointment_slider">
<ion-slides pager="false">
<ion-slide>
<div class="appointment_card">
<ion-row>
<ion-col col-8 class="p0">
<h4>You have a service</h4>
<h6><strong>Today 12:00pm,</strong> June 26th</h6>
</ion-col>
<ion-col col-4 class="p0">
<p>2 Services</p>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<h3>Jaguar</h3>
<div class="clear"></div>
</ion-col>
</ion-row>
</div>
</ion-slide>
<ion-slide>
<div class="appointment_card">
<ion-row>
<ion-col col-8 class="p0">
<h4>You have a service</h4>
<h6><strong>Today 12:00pm,</strong> June 26th</h6>
</ion-col>
<ion-col col-4 class="p0">
<p>2 Services</p>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<h3>Jaguar</h3>
<div class="clear"></div>
</ion-col>
</ion-row>
</div>
</ion-slide>
<ion-slide>
<div class="appointment_card">
<ion-row>
<ion-slide *ngFor="let service of bookServiceDeatils; let i = index;" >
<div class="appointment_card" >
<ion-row >
<ion-col col-8 class="p0">
<h4>You have a service</h4>
<h6><strong>Today 12:00pm,</strong> June 26th</h6>
<h6>Offer End on 10/11/2019</h6>
</ion-col>
<ion-col col-4 class="p0">
<p>2 Services</p>
<p></p>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<h3>Jaguar</h3>
<h3>Tyres available at <strong>50%</strong> Offer</h3>
<div class="clear"></div>
</ion-col>
</ion-row>
</div>
</ion-slide>
</ion-slides>
</div>
</div>
<div class="header_submenu">
<h4>Products for you</h4>
<button class="more_btn" (click)="goToPage('purchaseparts')">More</button>
<h4>{{'home.Products for you' | translate:params}}</h4>
<button class="more_btn" (click)="goToPage('purchaseparts')">{{'home.more' | translate:params}}</button>
<div class="clear"></div>
</div>
<div class="product_section" *ngIf="productsForUserList">
......@@ -165,20 +129,35 @@
</ion-col>
</ion-row>
</div> -->
<!-- <div class="home_main_stack_menu" *ngIf="mainServicesList">
<ion-row >
<ion-col class="textCenter">
<p></p>
</ion-col>
</ion-row>
<br>
</div> -->
<div class="header_submenu">
<h4>Avilable Services</h4>
<h4>{{'home.Services' | translate:params}}</h4>
<div class="clear"></div>
</div>
<div class="home_main_stack_menu" *ngIf="mainServicesList">
<ion-row *ngFor="let service of mainServicesList; let i = index " (click)="bookService(service)">
<ion-col class="textCenter">
<ion-grid>
<div class="home_main_stack_menu" *ngFor="let service of mainServicesList; let i = index " (click)="bookService(service)">
<ion-row >
<ion-col class="textCenter" >
<img [src] ="getImage(service.image)">
<p>{{service.service_name}}</p>
</ion-col>
</ion-row>
<br>
</div>
</ion-grid>
<!-- <div class="header_submenu">
<h4>Parts for you</h4>
<button class="more_btn">More</button>
......@@ -227,24 +206,24 @@
<ion-row>
<ion-col (click)="goToPage('settings')">
<img src="../../assets/img/asset_setting.png">
<p>Settings</p>
<p>{{'home.Settings' | translate:params}}</p>
</ion-col>
<ion-col (click)="goToPage('profile')">
<img src="../../assets/img/asset_profile.png">
<p>Profile</p>
<p>{{'home.Profile' | translate:params}}</p>
</ion-col>
<ion-col (click)="logout()">
<img src="../../assets/img/asset_logout.png">
<p>Logout</p>
<p>{{'home.Logout' | translate:params}}</p>
</ion-col>
</ion-row>
</div>
<div class="menu_inner" *ngIf="!login">
<ion-row>
<ion-col>
<h6>Are you sure to logout ?</h6>
<button class="logout_btn floatLeft" (click)="toLogin()">Logout</button>
<button class="cancel_btn floatRight" (click)="menuToggle()">Cancel</button>
<h6>{{'home.Are you sure to logout ?' | translate:params}}</h6>
<button class="logout_btn floatLeft" (click)="toLogin()">{{'home.Logout' | translate:params}}</button>
<button class="cancel_btn floatRight" (click)="menuToggle()">{{'home.Cancel' | translate:params}}</button>
</ion-col>
</ion-row>
</div>
......
......@@ -5,6 +5,9 @@ import { trigger, transition, animate, style } from '@angular/animations';
import { AuthenticationService } from '../../Config/services/auth.service';
import {StorageService } from '../../Config/services/storage.service';
import { ValidationService } from '../../Config/services/validation.service';
import { NativeGeocoder, NativeGeocoderReverseResult, NativeGeocoderOptions } from '@ionic-native/native-geocoder/ngx';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
declare var google;
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
......@@ -22,39 +25,49 @@ import { ValidationService } from '../../Config/services/validation.service';
]
})
export class HomePage {
lang: any;
locationData: any;
menuShow = false;
login = true;
userData: any;
mainServicesList = [];
peopleMostpurchasedList = [];
productsForUserList = [];
bookServiceDeatils = [];
address: any;
displayLocationData = null;
constructor(
private router: Router,
private route: ActivatedRoute,
private location: Location,
private authenticationservice: AuthenticationService,
private storageservice: StorageService,
private validationservice: ValidationService
private validationservice: ValidationService,
private nativeGeocoder: NativeGeocoder,
private translateConfigService: TranslateConfigService
) {
this.userData = JSON.parse(this.storageservice.getLocalStorageItem('userData'));
console.log(this.userData);
this.getMainServiceList();
this.getpeopleMostpurchasedList();
this.getProductsforYouList();
if (this.storageservice.isLoggednIn()) {
this.userData = JSON.parse(this.storageservice.getLocalStorageItem('userData'));
this.locationData = JSON.parse(this.storageservice.getLocalStorageItem('location'));
this.lang = JSON.parse(this.storageservice.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTrans();
}
}
console.log(this.userData);
this.getMainServiceList();
this.getpeopleMostpurchasedList();
this.getProductsforYouList();
this.getServiceBookedList();
this.getLocationData(this.locationData.lat, this.locationData.lng);
}
goToPage(path, data = null) {
this.router.navigateByUrl(path, {queryParams: data});
document.body.scrollTop = document.documentElement.scrollTop = 0;
// this.logout();
}
goBack() {
this.location.back();
}
toLogin() {
this.menuShow = !this.menuShow;
this.storageservice.removeLocalStorageItem('userData');
......@@ -63,10 +76,8 @@ export class HomePage {
menuToggle() {
this.menuShow = !this.menuShow;
}
logout() {
this.login = !this.login;
}
getMainServiceList() {
this.authenticationservice.get_data('get_mainservicelist').subscribe((data) => {
......@@ -97,7 +108,7 @@ getProductsforYouList() {
});
}
getImage(imageurl) {
return imageurl;
return 'https://techlabz.in/allorepair' + imageurl;
}
bookService(service) {
console.log(service);
......@@ -108,4 +119,25 @@ purchaseProduct(id) {
console.log(id);
this.goToPage('/productbooking/' + encodeURIComponent(JSON.stringify(id)));
}
getServiceBookedList() {
this.authenticationservice.get_data('get_userbookedServiceDetails?user_id=' + this.userData.id)
.subscribe((data) => {
if (data.status === 'success') {
this.bookServiceDeatils = data.data;
}
});
}
getLocationData(lat, lng) {
this.authenticationservice.getGoogleLocationData(lat, lng).subscribe(data => {
console.log(data);
if ( data.status === 'OK') {
this.displayLocationData = data.results[2].formatted_address;
console.log('address' , this.displayLocationData);
}
});
}
langTrans() {
this.translateConfigService.setLanguage(this.lang);
}
}
......@@ -2,7 +2,7 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { IonicModule } from '@ionic/angular';
import { ListingservicePage } from './listingservice.page';
......@@ -18,6 +18,7 @@ const routes: Routes = [
imports: [
CommonModule,
FormsModule,
TranslateModule.forChild(),
IonicModule,
RouterModule.forChild(routes)
],
......
......@@ -3,17 +3,17 @@
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft">
<h4>Select Category</h4>
<h4>{{'ListingServices.Select Category' | translate:params}}</h4>
</div>
<button class="nav_btn nav_btn_text floatRight">
</button>
<div class="clear"></div>
<div class="seach_bar_outer">
<!-- <div class="seach_bar_outer">
<div class="search_bar">
<input class="" placeholder="Services or Problems...">
</div>
</div>
</div> -->
</div>
</ion-header>
<ion-content>
......@@ -36,7 +36,7 @@
<h6>{{serviceDetails}}</h6>
</ion-col>
<ion-col>
<button class="next_btn floatRight" (click)="getsubserviceList()">NEXT</button>
<button class="next_btn floatRight" (click)="getsubserviceList()">{{'ListingServices.Next' | translate:params}}</button>
<div class="clear"></div>
</ion-col>
</ion-row>
......
......@@ -4,7 +4,7 @@ import { Location } from '@angular/common';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-listingservice',
templateUrl: './listingservice.page.html',
......@@ -16,6 +16,7 @@ export class ListingservicePage implements OnInit {
displayFooter: boolean;
serviceDetails: any;
id: any;
lang: any;
constructor(
private validationService: ValidationService,
private authenticationService: AuthenticationService,
......@@ -23,11 +24,16 @@ export class ListingservicePage implements OnInit {
private router: Router,
private route: ActivatedRoute,
private location: Location,
private translateConfigService: TranslateConfigService
) {
this.errorMsg = '';
this.displayFooter = false;
this.serviceDetails = '';
this.id = '';
this.lang = JSON.parse(this.storageservice.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTrans(this.lang);
}
}
ngOnInit() {
......@@ -65,4 +71,7 @@ goToPage(path, data= null) {
goBack() {
this.location.back();
}
langTrans(lang) {
this.translateConfigService.setLanguage(lang);
}
}
......@@ -2,6 +2,7 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { IonicModule } from '@ionic/angular';
......@@ -20,6 +21,7 @@ const routes: Routes = [
FormsModule,
ReactiveFormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [LoginPage]
......
<ion-content>
<div class="login_wrapper">
<h1>Hi!</h1>
<h3>Login to Continue</h3>
<h1>{{'login.Hi' | translate:params}}</h1>
<h3>{{'login.Login To Continue' | translate:params}}</h3>
<div class="login_form">
<form [formGroup]="loginForm">
<div class="row">
......@@ -10,17 +10,37 @@
<div class="row">
<ion-input formControlName="user_password" placeholder="Password" type="password"></ion-input>
</div>
<!-- <div class="row">
<p>I am A ??</p>
<ion-select placeholder="" style="color: white;" >
<ion-select-option value="" style="color: white;">Country Name</ion-select-option>
</ion-select>
</div> -->
<!-- <div class="row">
<button class="login_btn" (click)="login()">Login as Customer</button>
</div> -->
<div class="row">
<div class="social_div">
<div class="social_btn" style="border-right:1px solid rgba(215, 213, 228, 1); color: white;" (click)="customer()">
{{'login.Customer' | translate:params}}
</div>
<div class="social_btn" (click)="Road_assistant()">
{{'login.Road Asssistant' | translate:params}}
</div>
</div>
</div>
<div class="row">
<button class="login_btn" (click)="login()">Sign In</button>
</div>
<div class="row">
<p (click)="goToPage('forgot')">Forgot Password ?</p>
<p (click)="goToPage('forgot')"> {{'login.Forgot Password' | translate:params}}</p>
</div>
</form>
</div>
<div class="sigup_footer" (click)="istoggle()">
<img src="../../assets/img/asset_signup_arrow.png"><br>
Sign Up
{{'login.Sign Up' | translate:params}}
</div>
</div>
</ion-content>
......@@ -28,22 +48,31 @@
<ion-content>
<div class="signup_wrapper">
<div class="sigin_header" (click)="istoggle()">
Sign In<br>
{{'login.Sign In' | translate:params}}<br>
<img src="../../assets/img/asset_signin_arrow.png">
</div>
<h1>Sign Up</h1>
<h1> {{'login.Sign Up' | translate:params}}</h1>
<div class="signup_form">
<form [formGroup]="signupForm">
<div class="row">
<p style="text-align: center;"><b><strong>{{'login.I am A!!' | translate:params}}</strong></b></p>
<ion-select formControlName="user_type">
<ion-select-option value=1> {{'login.Customer' | translate:params}}</ion-select-option>
<ion-select-option value=5> {{'login.Road Asssistant' | translate:params}}</ion-select-option>
</ion-select>
</div>
<div class="row">
<p>Your Full Name</p>
<p>{{'login.Full Name' | translate:params}}</p>
<ion-input formControlName="user_name" type="text"></ion-input>
</div>
<div class="row">
<p>Email Address</p>
<p>{{'login.Email' | translate:params}}</p>
<ion-input formControlName="user_email" type="text"></ion-input>
</div>
<div class="row">
<p>Phone Number</p>
<p>{{'login.Phone Number' | translate:params}}</p>
<ion-row class="p0">
<ion-col size="4">
<ion-select placeholder="" formControlName="user_phonecode">
......@@ -56,7 +85,7 @@
</ion-row>
</div>
<div class="row">
<p>Country</p>
<p>{{'login.Country' | translate:params}}</p>
<ion-input type="text" formControlName="user_country"></ion-input>
</div>
<!-- <div class="row">
......@@ -68,22 +97,22 @@
<ion-input type="text"></ion-input>
</div> -->
<div class="row">
<p>Area</p>
<p>{{'login.Area' | translate:params}}</p>
<ion-input type="text"formControlName="user_area" ></ion-input>
</div>
<div class="row">
<p>House name/Building</p>
<p>{{'login.House Name/Building' | translate:params}}</p>
<ion-input type="text"formControlName="user_address" ></ion-input>
</div>
<div class="row">
<h6>This address will be saved as your permanent address. You can change it at any time.</h6>
<h6>{{'login.This address will be saved as your permamanent address' | translate:params}}.{{'login.You can change it at any time' | translate:params}}.</h6>
</div>
<div class="row">
<button class="signup_btn" (click)="signIn()">Next</button>
<button class="signup_btn" (click)="signIn()">{{'login.Next' | translate:params}}</button>
</div>
<div class="row textCenter">
<p>By Creating Account, I agree to allo repar's<br>
<a>Terms & Conditions</a></p>
<p>{{'login.By Creating Account' | translate:params}}, {{'login.I agree to allorepars' | translate:params}}<br>
<a>{{'login.Terms & Conditions' | translate:params}}</a></p>
</div>
</form>
</div>
......
......@@ -31,6 +31,13 @@
color:#fff;
height: 40px;
}
ion-select-option{
text-align: center;
background-image: linear-gradient(to right, #5742a5 , #7a60da);
border-radius: 20px;
color:#fff;
height: 40px;
}
.login_btn{
height: 40px;
width: 100%;
......@@ -45,6 +52,20 @@
text-align: center;
padding-top: 20px;
}
.social_div {
border: 1px solid rgba(215, 213, 228, 1);
height: 45px;
border-radius: 20px;
.social_btn {
display: inline-block;
width: 50%;
text-align: center;
height: 100%;
font-size: 15px;
padding: 9px;
color: white;
}
}
}
}
.sigup_footer{
......
......@@ -5,6 +5,8 @@ import { FormBuilder, Validators } from '@angular/forms';
import { StorageService } from '../../Config/services/storage.service';
import { ValidationService } from '../../Config/services/validation.service';
import { AuthenticationService } from '../../Config/services/auth.service';
import { TranslateService } from '@ngx-translate/core';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
......@@ -36,7 +38,8 @@ export class LoginPage implements OnInit {
user_address: ['', Validators.required],
device_id: ['', Validators.required],
user_lat: ['', Validators.required],
user_lng: ['', Validators.required]
user_lng: ['', Validators.required],
user_type: ['', Validators.required]
});
loginForm = this.fb.group({
user_email: ['', Validators.compose([Validators.required])],
......@@ -52,9 +55,12 @@ export class LoginPage implements OnInit {
private fb: FormBuilder,
private storageService: StorageService,
private authenticationservice: AuthenticationService,
private validationservice: ValidationService
private validationservice: ValidationService,
private translateService: TranslateService,
private translateConfigService: TranslateConfigService
) {
this.getStorageData();
this.langTrans();
}
ngOnInit() {
......@@ -80,15 +86,19 @@ export class LoginPage implements OnInit {
user_phonecode: +33,
});
console.log(this.signupForm.value);
this.storageService.removeLocalStorageItem('userData');
if ( this.signupForm.valid) {
this.goToPage('/password/' + JSON.stringify(this.signupForm.value));
} else {
this.validationservice.presentToast('Please fill all fields');
}
}
getStorageData() {
this.locationData = JSON.parse(this.storageService.getLocalStorageItem('location'));
console.log(this.locationData);
}
login() {
customer() {
this.storageService.removeLocalStorageItem('userData');
console.log('test');
if (!this.storageService.isLoggednIn()) {
......@@ -115,5 +125,34 @@ export class LoginPage implements OnInit {
}
}
}
Road_assistant() {
this.storageService.removeLocalStorageItem('userData');
console.log('test');
if (!this.storageService.isLoggednIn()) {
this.loginForm.patchValue({
device_id: 123456,
user_lat: this.locationData.lat,
user_lng: this.locationData.lng,
user_type: 5
});
if ( this.loginForm.valid) {
this.validationservice.presentLoader();
this.authenticationservice.post_data('user_login', this.loginForm.value).subscribe((data) => {
console.log(data);
this.validationservice.dismissLoader();
if ( data.status === 'success') {
this.goToPage('home');
this.storageService.setLocalStorageItem('userData', JSON.stringify(data.data));
} else {
this.validationservice.presentToast(data.message);
}
});
} else {
this.validationservice.presentToast('Please fill all fields');
}
}
}
langTrans() {
this.translateConfigService.setLanguage('fr');
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { AgmCoreModule } from '@agm/core';
import { AgmDirectionModule } from 'agm-direction';
import { IonicModule } from '@ionic/angular';
import { MapPage } from './map.page';
const routes: Routes = [
{
path: '',
component: MapPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
AgmDirectionModule,
AgmCoreModule.forRoot({
apiKey: 'AIzaSyBn6hOlr6YHcZAmbptlsmbhvH5iQllWflE'
}),
RouterModule.forChild(routes)
],
declarations: [MapPage]
})
export class MapPageModule {}
<ion-header>
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft">
<h4>REACH</h4>
</div>
<button class="nav_btn nav_btn_text floatRight">
</button>
<div class="clear"></div>
</div>
</ion-header>
<ion-content>
<div class="trackmap_wrapper">
<agm-map [latitude]="lat" [longitude]="lng">
<agm-direction [origin]="origin" [destination]="destination" [renderOptions]="renderOptions" [markerOptions]="markerOptions">
</agm-direction>
</agm-map>
</div>
<!-- <div class="footer_bay">
<div class="rider_image "></div>
<div class="rider_detail ">
<h5>John Doe</h5>
<p>Rider</p>
</div>
<div class="rider_call ">Accept</div>
<div class="clear "></div>
</div> -->
</ion-content>
\ No newline at end of file
.trackmap_wrapper {
width: 100%;
height: calc(100vh - 50px);
agm-map {
width: 100%;
height: 100%;
}
}
.footer_bay {
position: fixed;
bottom: 0px;
left: 0px;
right: 0px;
bottom: 0px;
padding: 10px;
background: #fff;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
.rider_image {
width: 50px;
height: 50px;
border-radius: 50%;
float: left;
background-color: #a8a8a8;
img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
border-radius: 50%;
}
}
.rider_detail {
float: left;
padding: 5px;
padding-left: 10px;
width: calc(100% - 160px);
h5 {
margin: 0px;
padding: 0px;
color: rgba(59, 57, 77, 1);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
p {
margin: 0px;
padding: 0px;
color: rgba(176, 174, 199, 1);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.rider_time {
float: left;
width: 110px;
font-size: 35px;
font-weight: 900;
color: rgba(59, 57, 77, 1);
padding: 5px;
padding-left: 15px;
span {
color: rgba(176, 174, 199, 1);
font-size: 16px;
padding-left: 5px;
font-weight: 400;
}
}
.rider_call {
background-color: rgba(53, 203, 171, 1);
color: #fff;
float: right;
height: 50px;
padding: 14px;
font-size: 16px;
width: 100px;
border-radius: 5px;
font-weight: 700;
padding-left: 20px;
padding-right: 20px;
text-align: center;
}
}
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MapPage } from './map.page';
describe('MapPage', () => {
let component: MapPage;
let fixture: ComponentFixture<MapPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ MapPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MapPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { MouseEvent } from '@agm/core';
import {StorageService } from '../../Config/services/storage.service';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
@Component({
selector: 'app-map',
templateUrl: './map.page.html',
styleUrls: ['./map.page.scss'],
})
export class MapPage implements OnInit {
locationData: any;
map: any;
address: string;
public lat ;
public lng ;
public origin: any;
public destination: any;
public renderOptions: any;
public markerOptions: any;
constructor(
private storageService: StorageService,
private validationService: ValidationService,
private authenticationService: AuthenticationService,
) { }
ngOnInit() {
this.getStorageData();
}
getDirection() {
this.origin = { lat: this.locationData.lat, lng: this.locationData.lng };
this.destination = { lat: 9.9816, lng: 76.2999 };
this.renderOptions = { polylineOptions: { strokeColor: 'rgba(69, 67, 152,1)' }, suppressMarkers: true };
this.markerOptions = {
origin: {
},
destination: {
}
};
}
getStorageData() {
this.locationData = JSON.parse(this.storageService.getLocalStorageItem('location'));
this.lat = this.locationData.lat;
this.lng = this.locationData.lng;
if ( this.locationData) {
const This = this;
// tslint:disable-next-line: only-arrow-functions
setInterval(function() {
// This.getDirection();
}, 5000);
}
}
}
......@@ -11,76 +11,22 @@
</ion-header>
<ion-content>
<div class="services_wrapper">
<h4>Upcoming Services</h4>
<h4>Road Assistant Services</h4>
<ul>
<li class="up_comingborder" (click)="goToPage('servicedetails')">
<h5>2 Services</h5>
<p>Heating & Air Conditioning, Break System</p>
<div class="pic floatLeft">
<img src="../../assets/img/asset_shop1.png">
</div>
<div class="pic_detail floatLeft">
<h5>Presto towing service</h5>
<h6><strong>Rolls Royce</strong> Ghost</h6>
<p class="p0 arrow">July 26th 2019, 10:00 AM - 10:30 AM</p>
<li class="up_comingborder" *ngFor="let service of roadAssistanceBookedDetails ">
<div class="road_assitance">
Road Assistance
</div>
<div class="pic_detail floatLeft" >
<!-- <h5>Presto towing service</h5> -->
<!-- <h6><strong>Rolls Royce</strong> Ghost</h6> -->
<p class="p0 arrow" >
</p>
<h5><strong>Booking ID:</strong>{{service.roadservicerequestid}}</h5>
<h5><strong>Date:</strong> {{service.date}}</h5>
</div>
<div class="clear"></div>
</li>
<h4>February</h4>
<li (click)="goToPage('servicedetails')">
<div class="road_assitance">
Road Assistance
</div>
<div class="clear"></div>
<div class="pic floatLeft">
<img src="../../assets/img/asset_shop1.png">
</div>
<div class="pic_detail floatLeft">
<h5>Presto towing service</h5>
<p class="p0 arrow">July 26th 2019, 10:00 AM - 10:30 AM</p>
</div>
<div class="clear"></div>
</li>
<li (click)="goToPage('servicedetails')">
<h5>2 Services</h5>
<p>Heating & Air Conditioning, Break System</p>
<div class="pic floatLeft">
<img src="../../assets/img/asset_shop1.png">
</div>
<div class="pic_detail floatLeft">
<h5>Presto towing service</h5>
<h6><strong>Rolls Royce</strong> Ghost</h6>
<p class="p0 arrow">July 26th 2019, 10:00 AM - 10:30 AM</p>
</div>
<div class="clear"></div>
</li>
<li (click)="goToPage('servicedetails')">
<h5>2 Services</h5>
<p>Heating & Air Conditioning, Break System</p>
<div class="pic floatLeft">
<img src="../../assets/img/asset_shop1.png">
</div>
<div class="pic_detail floatLeft">
<h5>Presto towing service</h5>
<h6><strong>Rolls Royce</strong> Ghost</h6>
<p class="p0 arrow">July 26th 2019, 10:00 AM - 10:30 AM</p>
</div>
<div class="clear"></div>
</li>
<li (click)="goToPage('servicedetails')">
<h5>2 Services</h5>
<p>Heating & Air Conditioning, Break System</p>
<div class="pic floatLeft">
<img src="../../assets/img/asset_shop1.png">
</div>
<div class="pic_detail floatLeft">
<h5>Presto towing service</h5>
<h6><strong>Rolls Royce</strong> Ghost</h6>
<p class="p0 arrow">July 26th 2019, 10:00 AM - 10:30 AM</p>
</div>
<div class="clear"></div>
</li>
</ul>
</div>
</ion-content>
......@@ -13,6 +13,8 @@ import { AuthenticationService } from '../../Config/services/auth.service';
export class MyservicesPage implements OnInit {
userData: any;
serviceList: any;
roadAssistanceBookedDetails =[];
listofRoadassistanceList: any;
constructor(
private router: Router,
private route: ActivatedRoute,
......@@ -27,6 +29,7 @@ export class MyservicesPage implements OnInit {
ngOnInit() {
this.getStorageData();
this.getServiceList();
this.getRoadassistancebookedServiceDetails();
}
......@@ -52,5 +55,16 @@ getServiceList() {
}
});
}
getRoadassistancebookedServiceDetails() {
this.authenticationservice.get_data('road_assistancerequestlist?user_id=' + this.userData.profile_id).subscribe((data) => {
console.log(data);
if (data.status === 'success') {
this.roadAssistanceBookedDetails = data.data;
this.listofRoadassistanceList = this.roadAssistanceBookedDetails.length;
console.log( this.listofRoadassistanceList);
}
});
}
}
......@@ -2,10 +2,10 @@
<ion-content>
<div class="forgot_wrapper">
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
<!-- <button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>Password</h4></div>
</button> -->
<div><h4 style="text-align: center;">Set Password</h4></div>
<div class="clear"></div>
</div>
<div class="forgot_form">
......@@ -28,6 +28,7 @@
<div class="row textCenter">
<button class="signup_btn" (click)="userSignup()">Sign Up</button>
</div>
<p style="text-align: center;" (click)="goToPage('login')">Back</p>
</form>
</div>
</div>
......
......@@ -49,9 +49,13 @@ export class PasswordPage implements OnInit {
this.authenticationService.post_data('user_signup', this.userSignupForm).subscribe((data) => {
console.log(data);
if (data.status === 'success') {
this.storageservice.setLocalStorageItem('userData', JSON.stringify(data.data));
this.validationService.presentToast('Your account created successfully');
this.storageservice.setLocalStorageItem('userData', data.data);
this.goToPage('home');
if ( data.data.user_type === '5') {
this.goToPage('map');
} else {
this.goToPage('home');
}
} else {
this.validationService.presentToast(data.message);
this.passwordForm.reset();
......
......@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { ProductbookingPage } from './productbooking.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [ProductbookingPage]
......
......@@ -2,7 +2,7 @@
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>Product Booking</h4></div>
<div class="nav_title floatLeft"><h4>{{'ProductBooking.Product Booking' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
......@@ -37,11 +37,11 @@
<hr>
</div>
<div class="product_btn" (click)="purchaseProduct()">
Purchase
{{'ProductBooking.Purchase' | translate:params}}
</div>
<div class="clear"></div>
</div>
<h5>Details</h5>
<h5>{{'ProductBooking.Details' | translate:params}}</h5>
<p>We promise to help you find the best car tyres Dubai has to offer.
</p>
<p>There are many significant advantages to purchasing your tyres online, including receiving cost effective pricing and a varied selection. Presto Tyres provide a full selection of branded tyres in Dubai that promise to meet the needs of all customers from motorists.</p>
......
......@@ -7,7 +7,7 @@ import { Router, ActivatedRoute } from '@angular/router';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-productbooking',
templateUrl: './productbooking.page.html',
......@@ -15,6 +15,7 @@ import {StorageService } from '../../Config/services/storage.service';
})
export class ProductbookingPage implements OnInit {
id: any;
lang: any;
productDetail: any;
constructor(
private router: Router,
......@@ -22,10 +23,15 @@ productDetail: any;
private location: Location,
private validationService: ValidationService,
private authenticationservice: AuthenticationService,
private storageservice: StorageService
private storageservice: StorageService,
private translateConfigService: TranslateConfigService
) {
const Data = decodeURIComponent((this.route.snapshot.paramMap.get('id')));
this.id = JSON.parse(Data);
this.lang = JSON.parse(this.storageservice.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTrans(this.lang);
}
}
@ViewChild(IonSlides) slides: IonSlides;
currentIndex: any;
......@@ -63,7 +69,10 @@ productDetail: any;
});
}
purchaseProduct() {
const PassData = {type: 2};
const PassData = {type: 2 , product_id: this.id };
this.goToPage('/carlist/' + encodeURIComponent(JSON.stringify(PassData)));
}
langTrans(lang) {
this.translateConfigService.setLanguage(lang);
}
}
......@@ -7,7 +7,7 @@
<div class="nav_title floatLeft"><h4>JOHN DOE</h4></div>
<button class="nav_btn floatLeft">
<div class="account_pic">
<img src="../../assets/img/asset_triangle.png">
<img src="../../assets/img/asset_triangle.png" (click)="goToPage('profilephoto')">
</div>
</button>
<div class="clear"></div>
......@@ -15,7 +15,7 @@
</div>
<div class="profile_pic" (click)="goToPage('profilephoto')">
<div class="overlay"></div>
<img src="../../assets/img/asset_profile_pic.png">
<img [src]="profilePicImgUrl" *ngIf="profilePicImgUrl">
</div>
<div class="" style="height: 300px;">
<div class="profile_wrapper">
......@@ -40,7 +40,7 @@
</div>
<div class="clear"></div>
</li>
<li (click)="goToPage('carlist')">
<li (click)="goToPage('carlistsecond')">
<div class="li_image">
<img src="../../assets/img/asset_m3.png">
</div>
......
......@@ -10,7 +10,7 @@ import { ValidationService } from '../../Config/services/validation.service';
styleUrls: ['./profile.page.scss'],
})
export class ProfilePage implements OnInit {
profilePicImgUrl: any;
constructor(
private router: Router,
private route: ActivatedRoute,
......@@ -21,6 +21,7 @@ export class ProfilePage implements OnInit {
) { }
ngOnInit() {
this.getProfilePic()
}
goToPage(path, data= null) {
......@@ -34,7 +35,11 @@ export class ProfilePage implements OnInit {
}
logout() {
this.storageservice.removeLocalStorageItem('userData');
this.storageservice.removeLocalStorageItem('profilePic');
this.goToPage('login');
}
getProfilePic() {
const data = this.storageservice.getLocalStorageItem('profilePic');
this.profilePicImgUrl = JSON.parse(data);
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { FormsModule,ReactiveFormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
ReactiveFormsModule,
RouterModule.forChild(routes)
],
declarations: [ProfilephotoPage]
......
......@@ -6,20 +6,25 @@
</button>
<div class="nav_title floatLeft"><h4>PROFILE PHOTO</h4></div>
<button class="nav_btn floatLeft">
<div class="account_pic">
<!-- <div class="account_pic">
<img src="../../assets/img/asset_triangle.png">
</div>
</div> -->
</button>
<div class="clear"></div>
<div class="clear"></div>
</div>
<div class="profile_pic">
<div class="overlay"></div>
<img src="../../assets/img/asset_profile_pic.png">
<!-- <img src="../../assets/img/asset_profile_pic.png" *ngIf="!imgURL"> -->
<img [src]="imgURL" *ngIf="imgURL">
</div>
<div padding>
<button class="update_btn">Update</button>
<input #file id="file" type="file" accept='image/*' (change)="preview(file.files)" />
</div>
<div padding>
<button class="update_btn" (click)="upload()">UPLOAD PHOTO</button>
</div>
</div>
</ion-content>
......@@ -8,7 +8,7 @@
height:290px;
position: relative;
.overlay{
position: absolute;
// position: absolute;
top:0px;
left:0px;
right:0px;
......@@ -85,4 +85,19 @@ box-shadow: inset 0px -110px 84px -32px rgba(273,273,273,1);
font-weight: 500;
font-size: 16px;
}
input#file {
display: inline-block;
width: 100%;
padding: 100px 0 0 0;
height: 100px;
overflow: hidden;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: url('../../assets/img/asset_triangle.png') center center no-repeat;
border-radius: 60px;
background-size: 60px 60px;
}
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { Router,ActivatedRoute } from '@angular/router';
import { Router, ActivatedRoute } from '@angular/router';
import { Location } from '@angular/common';
import { FormBuilder, FormArray, Validators } from '@angular/forms';
import {StorageService } from '../../Config/services/storage.service';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
@Component({
selector: 'app-profilephoto',
......@@ -8,18 +12,31 @@ import { Location } from '@angular/common';
styleUrls: ['./profilephoto.page.scss'],
})
export class ProfilephotoPage implements OnInit {
userData: any;
public imagePath;
imgURL: any;
public message: string;
profileUplpadForm = this.fb.group({
user_profilepic: ['' ],
user_id : ['' , Validators.required]
});
constructor(
private router: Router,
private route: ActivatedRoute,
private location: Location
private location: Location,
public fb: FormBuilder,
private storageService: StorageService,
private validationService: ValidationService,
private authenticationService: AuthenticationService,
) { }
ngOnInit() {
this.getStorageData();
}
goToPage(path,data=null){
this.router.navigateByUrl(path,{queryParams:data});
goToPage(path, data= null) {
this.router.navigateByUrl(path, {queryParams: data});
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
......@@ -27,5 +44,63 @@ export class ProfilephotoPage implements OnInit {
goBack() {
this.location.back();
}
// onFileChanged(event) {
// const formData = new FormData();
// const reader = new FileReader(); // HTML5 FileReader API
// const file = event.target.files[0];
// if (event.target.files && event.target.files[0]) {
// reader.readAsDataURL(file);
// reader.onload = () => {
// console.log(reader.result);
// formData.append('user_id' , this.userData.id);
// formData.append('user_profilepic' , reader.result);
// };
// }
// }
getStorageData() {
this.userData = JSON.parse(this.storageService.getLocalStorageItem('userData'));
console.log(this.userData);
const data = this.storageService.getLocalStorageItem('profilePic');
this.imgURL = JSON.parse(data);
}
preview(files) {
this.imgURL = null;
if (files.length === 0) {
return;
}
const mimeType = files[0].type;
if (mimeType.match(/image\/*/) == null) {
this.message = 'Only images are supported.';
return;
}
const reader = new FileReader();
this.imagePath = files;
reader.readAsDataURL(files[0]);
reader.onload = (_event) => {
this.imgURL = reader.result;
this.profileUplpadForm.patchValue({
user_profilepic : this.imgURL,
user_id : this.userData.id
});
};
}
upload() {
if(this.profileUplpadForm.value.user_profilepic){
this.validationService.presentLoader();
const formData = new FormData();
formData.append('user_id', this.userData.profile_id);
formData.append('profile_photo' , this.profileUplpadForm.value.user_profilepic);
this.authenticationService.post_data('upload_profilePic' , formData).subscribe((data) => {
this.validationService.dismissLoader();
if (data.status === 'success') {
this.storageService.setProfilePic(JSON.stringify(this.profileUplpadForm.value.user_profilepic));
this.validationService.presentToast(data.message);
this.goToPage('home');
}
});
} else {
this.validationService.presentToast('Please choose an image to upload');
}
}
}
......@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { PurchasepartsPage } from './purchaseparts.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [PurchasepartsPage]
......
......@@ -2,7 +2,7 @@
<div class="app_header relative">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>Purchase Product</h4></div>
<div class="nav_title floatLeft"><h4>{{'Purchaseparts.Purchase product' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
<div class="clear"></div>
......@@ -16,7 +16,7 @@
<ion-content>
<div class="purchase_wrapper">
<div class="header_submenu">
<h4>People most purchased</h4>
<h4>{{'Purchaseparts.People Most Purchased' | translate:params}}</h4>
<div class="clear"></div>
</div>
<div class="product_section">
......@@ -36,7 +36,7 @@
</ion-slides>
</div>
<div class="header_submenu">
<h4>People most purchased</h4>
<h4>{{'Purchaseparts.Product list' | translate:params}}</h4>
<div class="clear"></div>
</div>
......
......@@ -5,6 +5,8 @@ import { Router, ActivatedRoute } from '@angular/router';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-purchaseparts',
......@@ -13,6 +15,7 @@ import {StorageService } from '../../Config/services/storage.service';
})
export class PurchasepartsPage implements OnInit {
peopleMostpurchasedList = [];
lang: any;
searchProduct: any;
productsList = [];
slideOpts = {
......@@ -27,11 +30,16 @@ export class PurchasepartsPage implements OnInit {
private location: Location,
private validationService: ValidationService,
private authenticationservice: AuthenticationService,
private storageservice: StorageService
private storageservice: StorageService,
private translateConfigService: TranslateConfigService
) {
this.getAllproductsList();
this.getpeopleMostpurchasedList();
this.searchProduct = '';
this.lang = JSON.parse(this.storageservice.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTrans(this.lang);
}
}
ngOnInit() {
}
......@@ -89,4 +97,7 @@ export class PurchasepartsPage implements OnInit {
this.getAllproductsList();
}
}
langTrans(lang) {
this.translateConfigService.setLanguage(lang);
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { RoadassiastancecompletedlistPage } from './roadassiastancecompletedlist.page';
const routes: Routes = [
{
path: '',
component: RoadassiastancecompletedlistPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [RoadassiastancecompletedlistPage]
})
export class RoadassiastancecompletedlistPageModule {}
<ion-header>
<ion-toolbar>
<ion-title>roadassiastancecompletedlist</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
</ion-content>
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RoadassiastancecompletedlistPage } from './roadassiastancecompletedlist.page';
describe('RoadassiastancecompletedlistPage', () => {
let component: RoadassiastancecompletedlistPage;
let fixture: ComponentFixture<RoadassiastancecompletedlistPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RoadassiastancecompletedlistPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RoadassiastancecompletedlistPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-roadassiastancecompletedlist',
templateUrl: './roadassiastancecompletedlist.page.html',
styleUrls: ['./roadassiastancecompletedlist.page.scss'],
})
export class RoadassiastancecompletedlistPage implements OnInit {
constructor() { }
ngOnInit() {
}
}
......@@ -2,7 +2,7 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { IonicModule } from '@ionic/angular';
import { RoadassistancePage } from './roadassistance.page';
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [RoadassistancePage]
......
......@@ -2,7 +2,7 @@
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>ROAD ASSISTANCE</h4></div>
<div class="nav_title floatLeft"><h4>{{'Road Assistance.Road Assistance' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
......@@ -12,9 +12,9 @@
<ion-content>
<div class="home_wrapper">
<div class="location_box">
<div class="location_bar">
<!-- <div class="location_bar">
Infopark,Kakkanad
</div>
</div> -->
</div>
<ul *ngIf="getRoadassistanceList">
<li *ngFor="let roadassistant of getRoadassistanceList; let i = index">
......@@ -22,7 +22,7 @@
<img src="../../assets/img/asset_shop1.png">
</div>
<div class="details">
<div class="list_btn remind" (click)="bookGarage(roadassistant.road_assist_id)">Book</div>
<div class="list_btn remind" (click)="bookGarage(roadassistant.road_assist_id)">{{'Road Assistance.Book' | translate:params}}</div>
<h5>{{roadassistant.name}}</h5>
<p>34 Reviews</p>
<h6 class="floatLeft"><span class="distance_banner">{{roadassistant.distance}}Km</span><span class="other_banner" >{{distance(roadassistant.distance)}}</span></h6>
......
......@@ -4,6 +4,7 @@ import { Location } from '@angular/common';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-roadassistance',
templateUrl: './roadassistance.page.html',
......@@ -11,6 +12,7 @@ import {StorageService } from '../../Config/services/storage.service';
})
export class RoadassistancePage {
userLocationData: any;
lang: any;
getRoadassistanceList = [];
constructor(
private router: Router,
......@@ -18,9 +20,15 @@ export class RoadassistancePage {
private location: Location,
private validationService: ValidationService,
private authenticationService: AuthenticationService,
private storageservice: StorageService
private storageservice: StorageService,
private translateConfigService: TranslateConfigService
) {
this.getfromstorage();
this.lang = JSON.parse(this.storageservice.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTrans();
}
}
goToPage(path, data= null) {
......@@ -64,4 +72,7 @@ if (value > 20) {
return 'Too Far Away';
}
}
langTrans() {
this.translateConfigService.setLanguage(this.lang);
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { RoadassistanceratingPage } from './roadassistancerating.page';
const routes: Routes = [
{
path: '',
component: RoadassistanceratingPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [RoadassistanceratingPage]
})
export class RoadassistanceratingPageModule {}
<ion-header>
<ion-toolbar>
<ion-title>roadassistancerating</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
</ion-content>
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RoadassistanceratingPage } from './roadassistancerating.page';
describe('RoadassistanceratingPage', () => {
let component: RoadassistanceratingPage;
let fixture: ComponentFixture<RoadassistanceratingPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RoadassistanceratingPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RoadassistanceratingPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-roadassistancerating',
templateUrl: './roadassistancerating.page.html',
styleUrls: ['./roadassistancerating.page.scss'],
})
export class RoadassistanceratingPage implements OnInit {
constructor() { }
ngOnInit() {
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { RoadassistantrequestListPage } from './roadassistantrequest-list.page';
const routes: Routes = [
{
path: '',
component: RoadassistantrequestListPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [RoadassistantrequestListPage]
})
export class RoadassistantrequestListPageModule {}
<ion-header>
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>ROAD ASSISTANCE</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
<div class="clear"></div>
</div>
</ion-header>
<ion-content>
<div class="home_wrapper">
<div class="location_box">
<div class="location_bar">
Infopark,Kakkanad
</div>
</div>
<ul>
<li (click)="goToPage('booking')">
<div class="circle">
<img src="../../assets/img/asset_shop1.png">
</div>
<div class="details">
<div class="list_btn remind">Remind</div>
<h5>Presto Towing Services</h5>
<fieldset class="rating">
<input type="radio" id="star5" name="rating" value="5" /><label class = "full" for="star5" title="Awesome - 5 stars"></label>
<input type="radio" id="star4half" name="rating" value="4 and a half" /><label class="half" for="star4half" title="Pretty good - 4.5 stars"></label>
<input type="radio" id="star4" name="rating" value="4" /><label class = "full" for="star4" title="Pretty good - 4 stars"></label>
<input type="radio" id="star3half" name="rating" value="3 and a half" /><label class="half" for="star3half" title="Meh - 3.5 stars"></label>
<input type="radio" id="star3" name="rating" value="3" /><label class = "full" for="star3" title="Meh - 3 stars"></label>
<input type="radio" id="star2half" name="rating" value="2 and a half" /><label class="half" for="star2half" title="Kinda bad - 2.5 stars"></label>
<input type="radio" id="star2" name="rating" value="2" /><label class = "full" for="star2" title="Kinda bad - 2 stars"></label>
<input type="radio" id="star1half" name="rating" value="1 and a half" /><label class="half" for="star1half" title="Meh - 1.5 stars"></label>
<input type="radio" id="star1" name="rating" value="1" /><label class = "full" for="star1" title="Sucks big time - 1 star"></label>
<input type="radio" id="starhalf" name="rating" value="half" /><label class="half" for="starhalf" title="Sucks big time - 0.5 stars"></label>
</fieldset>
<p>34 Reviews</p>
<h6 class="floatLeft"><span class="distance_banner">4 Km</span><span class="other_banner">Nearest</span></h6>
<span class="floatRight playit"><img src="../../assets/img/asset_playit.png"></span>
<div class="clear"></div>
</div>
<div class="clear"></div>
</li>
<li >
<div class="circle">
<img src="../../assets/img/asset_shop2.png">
</div>
<div class="details">
<div class="list_btn reject" (click)="reject()">Reject</div>
<div class="list_btn book" (click)="book()">Book</div>
<h5>Kevin Jose</h5>
<!-- <fieldset class="rating">
<input type="radio" id="star5" name="rating" value="5" /><label class = "full" for="star5" title="Awesome - 5 stars"></label>
<input type="radio" id="star4half" name="rating" value="4 and a half" /><label class="half" for="star4half" title="Pretty good - 4.5 stars"></label>
<input type="radio" id="star4" name="rating" value="4" /><label class = "full" for="star4" title="Pretty good - 4 stars"></label>
<input type="radio" id="star3half" name="rating" value="3 and a half" /><label class="half" for="star3half" title="Meh - 3.5 stars"></label>
<input type="radio" id="star3" name="rating" value="3" /><label class = "full" for="star3" title="Meh - 3 stars"></label>
<input type="radio" id="star2half" name="rating" value="2 and a half" /><label class="half" for="star2half" title="Kinda bad - 2.5 stars"></label>
<input type="radio" id="star2" name="rating" value="2" /><label class = "full" for="star2" title="Kinda bad - 2 stars"></label>
<input type="radio" id="star1half" name="rating" value="1 and a half" /><label class="half" for="star1half" title="Meh - 1.5 stars"></label>
<input type="radio" id="star1" name="rating" value="1" /><label class = "full" for="star1" title="Sucks big time - 1 star"></label>
<input type="radio" id="starhalf" name="rating" value="half" /><label class="half" for="starhalf" title="Sucks big time - 0.5 stars"></label>
</fieldset> -->
<p>Car type : <strong>Suzuki</strong></p>
<p>Car Model : <strong>2019</strong></p>
<p>Car Make : <strong>Ritz</strong></p>
<h6 class="floatLeft"><span class="distance_banner">4 Km</span><span class="other_banner">Nearest</span></h6>
<span class="floatRight playit"><img src="../../assets/img/asset_playit.png"></span>
<div class="clear"></div>
</div>
<div class="clear"></div>
</li>
</ul>
</div>
</ion-content>
.home_wrapper{
padding-top: 30px;
.location_box{
position: fixed;
left:0px;
top: 60px;
right:0px;
z-index: 999;
}
.location_bar{
max-width:200px;
background: #fbd339;
padding:5px;
border-radius: 20px;
margin:0 auto;
text-align: center;
-webkit-box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.2);
-moz-box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.2);
box-shadow: 0px -1px 5px 0px rgba(0,0,0,0.2);
background-image: url("../../assets/img/aaset_loc.png");
background-position: left 15px top 6px;
background-repeat: no-repeat;
padding-left:35px;
padding-right:30px;
background-size: 15px;
font-size: 14px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
ul{
padding:10px;
margin:0px;
li{
background: #f6f5fa;
border-radius:10px;
margin-bottom: 10px;
position: relative;
padding:20px;
.circle{
width:60px;
height:60px;
float: left;
img{
width: 100%;
height:100%;
}
}
.details{
float: right;
width:calc(100% - 60px);
padding-left: 20px;
h5{
margin:0px;
padding:0px;
padding-bottom: 5px;
}
.list_btn{
position: absolute;
right: 2px;
top: 17px;
font-size: 14px;
}
.remind{
color: #282438;
background: url("../../assets/img/asset_remind.png");
background-position: center;
background-repeat: no-repeat;
background-size: 100%;
padding: 10px;
padding-left: 15px;
padding-right: 15px;
}
.book{
color: #fff;
background: url("../../assets/img/asset_book.png");
background-position: center;
background-repeat: no-repeat;
background-size: 100%;
padding: 10px;
padding-left: 25px;
padding-right: 20px;
}
.reject{
color: #282438;
background: url("../../assets/img/asset_remind.png");
background-position: center;
background-repeat: no-repeat;
background-size: 100%;
padding: 95px;
padding-left: 25px;
padding-right: 15px;
}
p{
margin:0px;
padding:0px;
color: #282438;
font-size: 12px;
padding-top: 5px;
}
h6{
margin:0px;
padding: 0px;
padding-top:8px;
}
.distance_banner{
background-color: #fff;
padding: 3px;
padding-left: 6px;
padding-right: 6px;
background-image: url("../../assets/img/aaset_loc.png");
background-position: left 5px top 4px;
background-repeat: no-repeat;
padding-left: 20px;
background-size: 12px;
border-radius: 10px;
margin-right: 10px;
font-size: 12px;
}
.other_banner{
background: #fbd339;
color: #282438;
padding: 3px;
padding-left: 6px;
padding-right: 6px;
font-size: 12px;
}
.playit{
padding-top: 8px;
img{
width: 15px;
}
}
.rating {
border: none;
width:85px;
margin: 0px;
padding: 0px;
}
.rating > input { display: none; }
.rating > label:before {
margin:2px;
font-size:14px;
font-family: FontAwesome;
display: inline-block;
content: "\f005";
}
.rating > .half:before {
content: "\f089";
position: absolute;
}
.rating > label {
color: #dcdae9;
float: right;
}
/***** CSS Magic to Highlight Stars on Hover *****/
.rating > input:checked ~ label, /* show gold star when clicked */
.rating:not(:checked) > label:hover, /* hover current star */
.rating:not(:checked) > label:hover ~ label { color: #FFD700; } /* hover previous stars in list */
.rating > input:checked + label:hover, /* hover current star when changing rating */
.rating > input:checked ~ label:hover,
.rating > label:hover ~ input:checked ~ label, /* lighten current selection */
.rating > input:checked ~ label:hover ~ label { color: #FFED85; }
}
}
}
}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RoadassistantrequestListPage } from './roadassistantrequest-list.page';
describe('RoadassistantrequestListPage', () => {
let component: RoadassistantrequestListPage;
let fixture: ComponentFixture<RoadassistantrequestListPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RoadassistantrequestListPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RoadassistantrequestListPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-roadassistantrequest-list',
templateUrl: './roadassistantrequest-list.page.html',
styleUrls: ['./roadassistantrequest-list.page.scss'],
})
export class RoadassistantrequestListPage implements OnInit {
constructor() { }
ngOnInit() {
}
reject() {
console.log('Reject')
}
book() {
console.log('Book')
}
}
......@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { SelectservicesPage } from './selectservices.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [SelectservicesPage]
......
......@@ -2,16 +2,16 @@
<div class="app_header relative">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>Select your services</h4></div>
<div class="nav_title floatLeft"><h4>{{'ListingServices.Select Category' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
<div class="clear"></div>
<div class="seach_bar_outer" >
<!-- <div class="seach_bar_outer" >
<div class="search_bar" *ngIf="subserviceList">
<input class="" placeholder="Services or Problems..." >
</div>
</div>
</div> -->
</div>
</ion-header>
<ion-content>
......@@ -32,7 +32,7 @@
<h6>{{serviceDetails}}</h6>
</ion-col>
<ion-col>
<button class="next_btn floatRight" (click)="movetoDate()">NEXT</button>
<button class="next_btn floatRight" (click)="movetoDate()">{{'ListingServices.Next' | translate:params}}</button>
<div class="clear"></div>
</ion-col>
</ion-row>
......
......@@ -5,6 +5,7 @@ import { Router, ActivatedRoute } from '@angular/router';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-selectservices',
templateUrl: './selectservices.page.html',
......@@ -16,6 +17,7 @@ export class SelectservicesPage implements OnInit {
subserviceList = [];
serviceDetails: any;
displayFooter: boolean;
lang: any;
constructor(
private router: Router,
private route: ActivatedRoute,
......@@ -23,9 +25,14 @@ export class SelectservicesPage implements OnInit {
private validationService: ValidationService,
private authenticationService: AuthenticationService,
private storageservice: StorageService,
private translateConfigService: TranslateConfigService
) {
this.subserviceList = null;
this.selectedService = null;
this.lang = JSON.parse(this.storageservice.getLocalStorageItem('lang'));
if ( this.lang) {
this.langTrans(this.lang);
}
}
ngOnInit() {
......@@ -67,4 +74,7 @@ export class SelectservicesPage implements OnInit {
const passData = {sub_id: this.selectedService.id , sub_name: this.selectedService.sub_services, main_name: this.getData.service_name};
this.goToPage('/date/' + encodeURIComponent(JSON.stringify(passData)));
}
langTrans(lang) {
this.translateConfigService.setLanguage(lang);
}
}
......@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { SettingsPage } from './settings.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [SettingsPage]
......
......@@ -2,7 +2,7 @@
<div class="app_header">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>Settings</h4></div>
<div class="nav_title floatLeft"><h4>{{'Settings.Settings' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
......@@ -11,17 +11,19 @@
</ion-header>
<ion-content>
<div class="settings_wrapper">
<h4>Notifications</h4>
<h4>{{'Settings.GeneralSettings' | translate:params}}</h4>
<div class="row">
<p class="floatLeft">Service Reminder</p>
<ion-toggle class="floatRight"></ion-toggle>
<div class="clear"></div>
<p class="floatLeft">{{'Settings.ChangeLanguage' | translate:params}}</p>
<ion-select placeholder="Choose Language" [(ngModel)]="language" (ionChange)="crazyEvent($event)" >
<ion-select-option value='en'>English</ion-select-option>
<ion-select-option value='fr'>French</ion-select-option>
</ion-select>
</div>
<div class="row">
<p class="floatLeft">Order Updates</p>
<ion-toggle class="floatRight"></ion-toggle>
<div class="clear"></div>
</div>
</div>
<br>
<hr>
<br>
......@@ -30,7 +32,7 @@
<p class="floatLeft">Notification Sounds</p>
<ion-toggle class="floatRight"></ion-toggle>
<div class="clear"></div>
</div>
</div>
</div>
</ion-content>
import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
import { trigger, transition, animate, style } from '@angular/animations';
import { Router,ActivatedRoute } from '@angular/router';
import { Router, ActivatedRoute } from '@angular/router';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
import {StorageService} from '../../Config/services/storage.service';
@Component({
selector: 'app-settings',
......@@ -9,23 +11,46 @@ import { Router,ActivatedRoute } from '@angular/router';
styleUrls: ['./settings.page.scss'],
})
export class SettingsPage implements OnInit {
language: any;
lang = [
{
value : 'en',
lang : 'English'
},
{
value: 'fr',
lang: 'French'
}
];
constructor(
private router: Router,
private route: ActivatedRoute,
private location: Location
) { }
private location: Location,
private storageService: StorageService,
private translateConfigService: TranslateConfigService
) {
this.langTrans();
}
ngOnInit() {
}
goToPage(path,data=null){
this.router.navigateByUrl(path,{queryParams:data});
goToPage(path, data= null) {
this.router.navigateByUrl(path, {queryParams: data});
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
goBack() {
this.location.back();
}
langTrans() {
this.translateConfigService.setLanguage(this.language);
}
crazyEvent(event) {
console.log(this.language);
this.storageService.setLocalStorageItem('lang', JSON.stringify(this.language));
this.langTrans();
}
}
......@@ -11,12 +11,18 @@ import { AuthenticationService } from '../../Config/services/auth.service';
styleUrls: ['./start.page.scss'],
})
export class StartPage implements OnInit {
userData: any;
constructor(
private router: Router,
private route: ActivatedRoute,
private storageService: StorageService,
private authenticationservice: AuthenticationService,
private validationservice: ValidationService) { }
private validationservice: ValidationService) {
this.userData = JSON.parse(this.storageService.getLocalStorageItem('userData'));
if (this.userData) {
this.loginAuth();
}
}
@ViewChild(IonSlides) slides: IonSlides;
currentIndex: any;
......@@ -26,9 +32,7 @@ export class StartPage implements OnInit {
};
ngOnInit() {
if (this.storageService.isLoggednIn()) {
this.goToPage('home');
}
}
goToPage(path, data= null) {
......@@ -52,6 +56,17 @@ export class StartPage implements OnInit {
});
}
loginAuth() {
if (this.storageService.isLoggednIn()) {
if (this.userData.user_type === '5') {
this.goToPage('map');
} else {
this.goToPage('home');
}
} else {
this.goToPage('login');
}
}
}
......@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { SummaryPage } from './summary.page';
import { TranslateModule } from '@ngx-translate/core';
const routes: Routes = [
{
path: '',
......@@ -19,6 +19,7 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
TranslateModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [SummaryPage]
......
......@@ -2,7 +2,7 @@
<div class="app_header relative">
<button class="nav_btn back_btn floatLeft" (click)="goBack()">
</button>
<div class="nav_title floatLeft"><h4>SUMMARY</h4></div>
<div class="nav_title floatLeft"><h4>{{'Summary.Summary' | translate:params}}</h4></div>
<button class="nav_btn nav_btn_text floatRight">
</button>
<div class="clear"></div>
......@@ -11,7 +11,7 @@
<ion-content>
<div class="summary_wrapper">
<div class="content_detail">
<h4>Category</h4>
<h4>{{'Summary.Category' | translate:params}}</h4>
<div class="content_inner" *ngIf="getData">
<ul>
<li>
......@@ -21,7 +21,7 @@
</li>
</ul>
</div>
<h4>Service Details</h4>
<h4>{{'Summary.Service Details' | translate:params}}</h4>
<div class="content_inner" *ngIf="getData">
<ul>
<li>
......@@ -31,36 +31,36 @@
</li>
</ul>
</div>
<h4>Car Details</h4>
<div class="content_inner">
<h4>{{'Summary.Car Details' | translate:params}}</h4>
<div class="content_inner" *ngIf="getData.car_id">
<ul>
<li>
<ion-row>
<ion-col><p>Brand :</p></ion-col>
<ion-col>Rolls royce</ion-col>
<ion-col>{{getData.car_id.make}}</ion-col>
</ion-row>
</li>
<li>
<ion-row>
<ion-col><p>Name :</p></ion-col>
<ion-col>Ghost</ion-col>
<ion-col>{{getData.car_id.vehicle_name}}</ion-col>
</ion-row>
</li>
<li>
<ion-row>
<ion-col><p>Model :</p></ion-col>
<ion-col>2019</ion-col>
<ion-col>{{getData.car_id.model}}</ion-col>
</ion-row>
</li>
<li>
<ion-row>
<ion-col><p>Mileage :</p></ion-col>
<ion-col>20</ion-col>
<ion-col>{{getData.car_id.mileage}}</ion-col>
</ion-row>
</li>
</ul>
</div>
<h4>Date & Time</h4>
<h4>{{'Summary.Date & Time' | translate:params}}</h4>
<div class="content_inner" *ngIf="getData">
<ul>
<li>
......@@ -71,7 +71,7 @@
</li>
</ul>
</div>
<h4>Your Message</h4>
<h4>{{'Summary.Your Message' | translate:params}}</h4>
<div class="content_inner">
<ul>
<li>
......@@ -86,7 +86,7 @@
<div class="select_footer">
<ion-row>
<ion-col class="textCenter">
<button class="request_btn" (click)="ConfirmbookService()">Send Request<img src="../../assets/img/asset_send_request.png"></button>
<button class="request_btn" (click)="ConfirmbookService()">{{'Summary.Send Reuest' | translate:params}}<img src="../../assets/img/asset_send_request.png"></button>
<div class="clear"></div>
</ion-col>
</ion-row>
......
......@@ -5,6 +5,7 @@ import { Router, ActivatedRoute } from '@angular/router';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
import {TranslateConfigService} from '../../Config/services/translateconfig.service';
@Component({
selector: 'app-summary',
templateUrl: './summary.page.html',
......@@ -19,11 +20,12 @@ export class SummaryPage implements OnInit {
private location: Location,
private validationService: ValidationService,
private authenticationService: AuthenticationService,
private storageservice: StorageService
private storageservice: StorageService,
private translateConfigService: TranslateConfigService
) {
const Data = decodeURIComponent((this.route.snapshot.paramMap.get('id')));
this.getData = JSON.parse(Data);
console.log(this.getData);
console.log('Summary details', this.getData);
}
ngOnInit() {
......@@ -45,7 +47,7 @@ export class SummaryPage implements OnInit {
ConfirmbookService() {
this.validationService.presentLoader();
// tslint:disable-next-line: max-line-length
const passData = {user_id: this.userData.id , subservice_id: this.getData.id, booking_date: this.getData.date, car_id: this.getData.car_id, message: this.getData.message};
const passData = {user_id: this.userData.profile_id , subservice_id: this.getData.id, booking_date: this.getData.date, car_id: this.getData.car_id.id, message: this.getData.message};
this.authenticationService.post_data('user_requestService' , passData).subscribe((data) => {
console.log(data);
this.validationService.dismissLoader();
......@@ -56,5 +58,7 @@ export class SummaryPage implements OnInit {
}
});
}
langTrans() {
this.translateConfigService.setLanguage('fr');
}
}
<ion-content>
<div class="waiting_wrapper">
<div class="waiting_wrapper" *ngIf="getData">
<div class="logo">
<img src="../../assets/img/asset_shop1.png">
</div>
<h4>Presto Towing Services</h4>
<div class="distance">
4 km
</div>
<h4>{{getData.road_assistantName.name}}</h4>
<h3>Request has been Sent</h3>
<p>Our customer service representative <br>
<p>Road assistant representative <br>
will update you within 10 to 20 minutes.</p>
<button class="back_btn1">Back</button><br>
<button class="home">Home</button>
<!-- <button class="back_btn1">Back</button><br> -->
<button class="home" (click)="goToPage('home')">Home</button>
</div>
</ion-content>
import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
import { trigger, transition, animate, style } from '@angular/animations';
import { Router, ActivatedRoute } from '@angular/router';
import { AuthenticationService } from '../../Config/services/auth.service';
import { ValidationService} from '../../Config/services/validation.service';
import {StorageService } from '../../Config/services/storage.service';
@Component({
selector: 'app-waiting',
templateUrl: './waiting.page.html',
styleUrls: ['./waiting.page.scss'],
})
export class WaitingPage implements OnInit {
constructor() { }
getData: any;
constructor(
private router: Router,
private route: ActivatedRoute,
private location: Location,
private validationService: ValidationService,
private authenticationService: AuthenticationService,
private storageservice: StorageService
) {
const Data = decodeURIComponent((this.route.snapshot.paramMap.get('id')));
this.getData = JSON.parse(Data);
}
ngOnInit() {
console.log(this.getData);
}
goToPage(path, data= null) {
this.router.navigateByUrl(path, {queryParams: data});
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
}
{
"login":{
"Hi":"Hi",
"Login To Continue":"Login To Continue",
"Change Password": "Change Password",
"Forgot Password": "Forgot Password",
"Email":"Email",
"Password":"Password",
"Customer" : "Customer",
"Road Asssistant":"Road Asssistant",
"Sign Up":"Sign Up",
"Sign In":"Sign In",
"I am A!!":"I am A!!",
"Full Name":"Full Name",
"Phone Number": "Phone Number",
"Country":"Country",
"Area":"Area",
"House Name/Building":"House Name/Building",
"This address will be saved as your permamanent address":"This address will be saved as your permamanent address",
"You can change it at any time":"You can change it at any time",
"Next":"Next",
"By Creating Account":"By Creating Account",
"I agree to allorepar's" : "I agree to allorepar's",
"Terms & Conditions":"Terms & Conditions"
},
"home" : {
"Road ":"Road",
"Assistance":"Assistance",
"Car":"Car",
"Parts":"Parts",
"Purchase": "Purchase",
"People most purchased":"People most purchased",
"more":"more",
"Products for you":"Products for you",
"Services":"Services",
"Profile":"Profile",
"Settings":"Settings",
"Logout":"Logout",
"Are you sure to logout ?":"Êtes-vous sûr de vous déconnecter?",
"Cancel" : "Annuler"
},
"Profile" :{
"My Services":"My Services",
"My Orders":"My Orders",
"My Cars":"My Cars",
"General Details":"General Details",
"Change Password":"Change Password",
"Logout":"Logout"
},
"My services" : {
"Upcoming Services":"Upcoming Services"
},
"My Orders" :{
"My Orders":"My Orders"
},
"Change Password" :{
"Change Password":"Change Password",
"Password":"Password",
"Confirm Password":"Confirm Password",
"CHANGE PASSWORD":"CHANGE PASSWORD"
},
"Road Assistance" : {
"Road Assistance": "Road Assistance",
"Book":"Book"
},
"Booking":{
"Call to Allorepo":"Call to Allorepo",
"Book Service":"Book Service",
"About":"About",
"Reviews":"Reviews",
"Request has been sent":"Request has been sent"
},
"Waiting":{
"Road assistant representative will update you with in 10 to 20 minutes":"Road assistant representative will update you with in 10 to 20 minutes",
"Home":"Home"
},
"ListingServices":{
"Select Category":"Select Category",
"Next":"Next"
},
"Date":{
"Date":"Date",
"Pick Date":"Pick Date",
"Instruction":"Instruction",
"Type Here":"Type Here",
"Next":"NEXT"
},
"Carslist":{
"My Cars":"My Cars"
},
"Summary":{
"Category":"Category",
"Service Details":"Service Details",
"Car Details":"Car Details",
"Date & Time":"Date & Time",
"Your Message":"Your Message",
"Send Reuest":"Send Request",
"Summary":"Summary"
},
"waiting1":{
"Relax":"Relax",
"We got your request":"We got your request",
"We will update you with in 10 to 20 minutes":"We will update you with in 10 to 20 minutes",
"Home":"Home"
},
"Purchaseparts":{
"People Most Purchased": "People Most Purchased",
"People most purchased":"People most purchased",
"Search Products":"Search products",
"Purchase product":"Purchase product",
"Product list":"Product list"
},
"ProductBooking":{
"Product Booking":"Product Booking",
"Purchase":"Purchase",
"Details":"Details"
},
"deliveryaddress":{
"Delivery Address":"Delivery Address",
"Name":"Name",
"Phone":"Phone",
"House":"House",
"Area":"Area",
"City":"City",
"Country":"Country"
},
"Settings":{
"Settings":"Settings",
"GeneralSettings":"General Settings",
"ChangeLanguage":"Change Language"
}
}
\ No newline at end of file
{
"login":{
"Hi":"salut",
"Login To Continue":"Connectez-vous pour continuer",
"Change Password": "Changer le mot de passe",
"Forgot Password": "Mot de passe oublié",
"Email":"Email",
"Password":"Mot de passe",
"Customer" : "Cliente",
"Road Asssistant":"Assistant de route",
"Sign Up":"S'inscrire",
"Sign In":"Se connecter",
"I am A!!":"Je suis un!!",
"Full Name":"Nom complet",
"Phone Number": "Numéro de téléphone",
"Country":"Pays",
"Area":"Zone",
"House Name/Building":"Nom de la maison / bâtiment",
"This address will be saved as your permamanent address":"Cette adresse sera sauvegardée en tant qu'adresse permamanent",
"You can change it at any time":"Vous pouvez le changer à tout moment",
"Next":"Prochain",
"By Creating Account":"En créant un compte",
"I agree to allorepars" : "Je suis d'accord pour allorepars",
"Terms & Conditions":"termes et conditions"
},
"home" : {
"Road ":"Route",
"Assistance":"Assistance",
"Car":"Voiture",
"Parts":"les pièces",
"Purchase": "achat",
"Car Services":"Services de voiture",
"Parts Purchase":"Achat de pièces",
"People most purchased":"Les gens les plus achetés",
"more":"plus",
"Products for you":"Des produits pour vous",
"Services":"Prestations de service",
"Profile":"Profil",
"Settings":"Paramètres",
"Logout":"Se déconnecter"
},
"Profile" :{
"My Services":"Mes services",
"My Orders":"Mes commandes",
"My Cars":"Mes voitures",
"General Details":"Détails Généraux",
"Change Password":"Changer le mot de passe",
"Logout":"Se déconnecter"
},
"My services" : {
"Upcoming Services":"Services à venir"
},
"My Orders" :{
"My Orders":"Mes commandes"
},
"Change Password" :{
"Change Password":"Changer le mot de passe",
"Password":"Mot de passe",
"Confirm Password":"Confirmez le mot de passe",
"CHANGE PASSWORD":"CHANGER LE MOT DE PASSE"
},
"Road Assistance" : {
"Road Assistance": "Assistance routière",
"Book":"Livre"
},
"Booking":{
"Call to Allorepo":"Appel à Allorepo",
"Book Service":"Service de livre",
"About":"À propos",
"Reviews":"Commentaires",
"Request has been sent":"La demande a été envoyée"
},
"Waiting":{
"Road assistant representative will update you with in 10 to 20 minutes":"Un représentant des assistants routiers vous mettra à jour dans 10 à 20 minutes.",
"Home":"Accueil"
},
"ListingServices":{
"Select Category":"Choisir une catégorie",
"Next":"Prochain"
},
"Date":{
"Date":"Date",
"Pick Date":"Date de prélèvement",
"Instruction":"Instruction",
"Type Here":"Écrivez ici",
"Next":"Prochain"
},
"Carslist":{
"My Cars":"Mes voitures"
},
"Summary":{
"Summary" :"Sommaire",
"Category":"Catégorie",
"Service Details":"Détails du service",
"Car Details":"Détails de la voiture",
"Date & Time":"Date et heure",
"Your Message":"Votre message",
"Send Reuest":"Envoyer une demande"
},
"waiting1":{
"Relax":"Se détendre",
"We got your request":"Nous avons reçu votre demande",
"We will update you with in 10 to 20 minutes":"Nous vous tiendrons au courant dans 10 à 20 minutes",
"Home":"Accueil"
},
"Purchaseparts":{
"People Most Purchased": "Personnes les plus achetées",
"People most purchased":"Les gens les plus achetés",
"Search Products":"Recherche de produits",
"Purchase product":"Produit d'achat",
"Product list":"Liste de produits"
},
"ProductBooking":{
"Product Booking":"Réservation de produit",
"Purchase":"achat",
"Details":"Détails"
},
"deliveryaddress":{
"Delivery Address":"Adresse de livraison",
"Name":"Nom",
"Phone":"Téléphone",
"House":"Maison",
"Area":"Zone",
"City":"Ville",
"Country":"Pays"
},
"Settings":{
"Settings":"Paramètre",
"GeneralSettings":"réglages généraux",
"ChangeLanguage":"Changer de langue"
}
}
\ No newline at end of file
export const environment = {
firebase: {
apiKey: 'AIzaSyA8wne3o_CpD-aFseOybbO7W1mmOsoSvcc',
authDomain: 'afac-1d62c.firebaseapp.com',
databaseURL: 'https://afac-1d62c.firebaseio.com',
projectId: 'afac-1d62c',
storageBucket: 'afac-1d62c.appspot.com',
messagingSenderId: '888355825417',
appId: '1:888355825417:web:beec2a7f890d402ef055d8',
measurementId: 'G-VGEFN90KX3'
},
};
export const devURL = 'https://techlabz.in/allorepair/Webservice/';
export const devURL = 'http://techlabz.in/allorepair/Webservice/';
......@@ -10,7 +10,7 @@
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
<link rel="icon" type="image/png" href="assets/icon/favicon.png" />
<!-- add to homescreen for ios -->
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment