Commit e9b87aad by Nabil Sadki

Merge branch 'v1.1.4.0' into v1.1.5.0

# Conflicts:
#	config.xml
#	package.json
#	src/app/app-routing.module.ts
#	src/app/app.component.ts
#	src/app/app.module.ts
#	src/app/app.scss
#	src/app/pages/menu/menu.page.html
#	src/app/pages/menu/menu.page.ts
#	src/app/pages/offres/offres-carte/offres-carte.page.ts
parents 0740749b 3c3e8f68
v1.1.4.0
- Add wishlist
v1.1.0.0 v1.1.0.0
- Add login form - Add login form
- Optimise launch time - Optimise launch time
......
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="11500" id="com.allotesteurs.app" version="1.1.5.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <widget android-versionCode="11500" id="com.allotesteurs.app" version="1.1.5.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Allo Testeurs</name> <name>Allo Testeurs</name>
<description>Découvrir les bon plans à Kénitra et ailleurs!</description> <description>Découvrir les bon plans à Kénitra et ailleurs!</description>
<author email="contact@allo-testeurs.com" href="https://www.allo-testeurs.com">Allo Testeurs Agency</author> <author email="contact@allo-testeurs.com" href="https://www.allo-testeurs.com">Allo Testeurs Agency</author>
<content src="index.html" /> <content src="index.html" />
<access origin="*" /> <access origin="*" />
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
<allow-navigation href="*" />
<allow-intent href="http://*/*" /> <allow-intent href="http://*/*" />
<allow-intent href="https://*/*" /> <allow-intent href="https://*/*" />
<allow-navigation href="http://*/*" /> <allow-navigation href="http://*/*" />
...@@ -14,24 +18,6 @@ ...@@ -14,24 +18,6 @@
<allow-intent href="geo:*" /> <allow-intent href="geo:*" />
<platform name="android"> <platform name="android">
<allow-intent href="market:*" /> <allow-intent href="market:*" />
<icon density="ldpi" src="src\assets\img\ionic3-ico.png" />
<icon density="mdpi" src="src\assets\img\ionic3-ico.png" />
<icon density="hdpi" src="src\assets\img\ionic3-ico.png" />
<icon density="xhdpi" src="src\assets\img\ionic3-ico.png" />
<icon density="xxhdpi" src="src\assets\img\ionic3-ico.png" />
<icon density="xxxhdpi" src="src\assets\img\ionic3-ico.png" />
<splash density="land-ldpi" src="resources\splash.png" />
<splash density="land-mdpi" src="resources\splash.png" />
<splash density="land-hdpi" src="resources\splash.png" />
<splash density="land-xhdpi" src="resources\splash.png" />
<splash density="land-xxhdpi" src="resources\splash.png" />
<splash density="land-xxxhdpi" src="resources\splash.png" />
<splash density="port-ldpi" src="resources\splash.png" />
<splash density="port-mdpi" src="resources\splash.png" />
<splash density="port-hdpi" src="resources\splash.png" />
<splash density="port-xhdpi" src="resources\splash.png" />
<splash density="port-xxhdpi" src="resources\splash.png" />
<splash density="port-xxxhdpi" src="resources\splash.png" />
<icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" /> <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
<icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" /> <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
<icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" /> <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
...@@ -86,6 +72,19 @@ ...@@ -86,6 +72,19 @@
<splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" /> <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
<icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" /> <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
<splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" /> <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
<icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
<icon height="40" src="resources/ios/icon/icon-20@2x.png" width="40" />
<icon height="60" src="resources/ios/icon/icon-20@3x.png" width="60" />
<icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
<icon height="58" src="resources/ios/icon/icon-29@2x.png" width="58" />
<icon height="87" src="resources/ios/icon/icon-29@3x.png" width="87" />
<icon height="48" src="resources/ios/icon/icon-24@2x.png" width="48" />
<icon height="55" src="resources/ios/icon/icon-27.5@2x.png" width="55" />
<icon height="88" src="resources/ios/icon/icon-44@2x.png" width="88" />
<icon height="172" src="resources/ios/icon/icon-86@2x.png" width="172" />
<icon height="196" src="resources/ios/icon/icon-98@2x.png" width="196" />
<splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
<splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
</platform> </platform>
<preference name="orientation" value="portrait" /> <preference name="orientation" value="portrait" />
<preference name="webviewbounce" value="false" /> <preference name="webviewbounce" value="false" />
......
...@@ -455,6 +455,11 @@ ...@@ -455,6 +455,11 @@
"tslib": "^1.9.0" "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": { "@angular/forms": {
"version": "7.2.15", "version": "7.2.15",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.15.tgz", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.15.tgz",
...@@ -644,6 +649,214 @@ ...@@ -644,6 +649,214 @@
} }
} }
}, },
"@firebase/app": {
"version": "0.4.16",
"resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.4.16.tgz",
"integrity": "sha512-4aa6ixQlV6xQxj4HbwFKrfYZnnKk8AtB/vEEuIaBCGQYBvV287OVNCozXd4CC4Q4I4Vtkzrc+kggahYFl8nDWQ==",
"requires": {
"@firebase/app-types": "0.4.3",
"@firebase/logger": "0.1.24",
"@firebase/util": "0.2.27",
"dom-storage": "2.1.0",
"tslib": "1.10.0",
"xmlhttprequest": "1.8.0"
}
},
"@firebase/app-types": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.4.3.tgz",
"integrity": "sha512-VU5c+ZjejvefLVH4cjiX3Hy1w9HYMv7TtZ1tF9ZmOqT4DSIU1a3VISWoo8///cGGffr5IirMO+Q/WZLI4p8VcA=="
},
"@firebase/auth": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.12.0.tgz",
"integrity": "sha512-DGYvAmz2aUmrWYS3ADw/UmsuicxJi6G+X38XITqNPUrd1YxmM5SBzX19oEb9WCrJZXcr4JaESg6hQkT2yEPaCA==",
"requires": {
"@firebase/auth-types": "0.8.0"
}
},
"@firebase/auth-types": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.8.0.tgz",
"integrity": "sha512-foQHhvyB0RR+mb/+wmHXd/VOU+D8fruFEW1k79Q9wzyTPpovMBa1Mcns5fwEWBhUfi8bmoEtaGB8RSAHnTFzTg=="
},
"@firebase/database": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.3.tgz",
"integrity": "sha512-TFjQ/M0T4jO24jAMU5cZAHNk3ndNfeNtGKe5PL4o/YrGYJHg3XaE2LKzU/vFrXUFLnLxqbETzXjFa4hTA6cDUg==",
"requires": {
"@firebase/database-types": "0.4.3",
"@firebase/logger": "0.1.24",
"@firebase/util": "0.2.27",
"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.3",
"resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.3.tgz",
"integrity": "sha512-21yCiJA2Tyt6dJYwWeB69MwoawBu5UWNtP6MAY0ugyRBHVdjAMHMYalPxCjZ46LAmhfim0+i8NXRadOFVS3hUA==",
"requires": {
"@firebase/app-types": "0.x"
}
},
"@firebase/firestore": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.5.2.tgz",
"integrity": "sha512-CPYLvkGZBKE47oQC9a0q13UMVRj3LvnSbB1nOerktE3CGRHKy44LxDumamN8Kj067hV/80mKK9FdbeUufwO/Rg==",
"requires": {
"@firebase/firestore-types": "1.5.0",
"@firebase/logger": "0.1.24",
"@firebase/util": "0.2.27",
"@firebase/webchannel-wrapper": "0.2.26",
"@grpc/proto-loader": "^0.5.0",
"grpc": "1.23.3",
"tslib": "1.10.0"
}
},
"@firebase/firestore-types": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.5.0.tgz",
"integrity": "sha512-VhRHNbEbak+R2iK8e1ir2Lec7eaHMZpGTRy6LMtzATYthlkwNHF9tO8JU8l6d1/kYkI4+DWzX++i3HhTziHEWA=="
},
"@firebase/functions": {
"version": "0.4.17",
"resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.17.tgz",
"integrity": "sha512-heWMXrR3hgvQNe1JEZMUeY7a0QFLMVwVS+lzLq/lzk06bj22X9bJy7Yct+/P9P1ftnsCGLrhk3jAEuL78seoqg==",
"requires": {
"@firebase/functions-types": "0.3.8",
"@firebase/messaging-types": "0.3.2",
"isomorphic-fetch": "2.2.1",
"tslib": "1.10.0"
}
},
"@firebase/functions-types": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.8.tgz",
"integrity": "sha512-9hajHxA4UWVCGFmoL8PBYHpamE3JTNjObieMmnvZw3cMRTP2EwipMpzZi+GPbMlA/9swF9yHCY/XFAEkwbvdgQ=="
},
"@firebase/installations": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.2.6.tgz",
"integrity": "sha512-hkuKmBtnsmqIfWxt9KyaN+cP574pfTcB81IG5tnmVcgP1xQ4hyQ9LRP0M7jDTGWMw272TInBzUuaM05xw9GMnA==",
"requires": {
"@firebase/installations-types": "0.1.2",
"@firebase/util": "0.2.27",
"idb": "3.0.2",
"tslib": "1.10.0"
}
},
"@firebase/installations-types": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.1.2.tgz",
"integrity": "sha512-fQaWIW8hyX1XUN7+FCSPjvM1agFjGidVuF4Sxi7aFwfyh5t+4fD2VpM4wCQbWmodnx4fZLvsuQd9mkxxU+lGYQ=="
},
"@firebase/logger": {
"version": "0.1.24",
"resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.24.tgz",
"integrity": "sha512-wPwhWCepEjWiTIqeC9U+7Hcw4XwezKPdXmyXbYSPiWNDcVekNgMPkntwSK+/2ufJO/1nMwAL2n6fL12oQG/PpQ=="
},
"@firebase/messaging": {
"version": "0.4.10",
"resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.4.10.tgz",
"integrity": "sha512-WqtSqlulV2ix4MZ3r1HwGAEj0DiEWtpNCSPh5wOXZsj8Kd01Q2QPTLUtUWmwXSV9WCQWnowfE2x8wjq5388ixw==",
"requires": {
"@firebase/messaging-types": "0.3.2",
"@firebase/util": "0.2.27",
"tslib": "1.10.0"
}
},
"@firebase/messaging-types": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.3.2.tgz",
"integrity": "sha512-2qa2qNKqpalmtwaUV3+wQqfCm5myP/dViIBv+pXF8HinemIfO1IPQtr9pCNfsSYyus78qEhtfldnPWXxUH5v0w=="
},
"@firebase/performance": {
"version": "0.2.18",
"resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.2.18.tgz",
"integrity": "sha512-PcN+nTPaMGqODfwAXgwbaCvcxXH+YzvK6UpZzm0Bl9wmW28/oJipnUxF3cYbVGCiaLAaByIPVSIF22XhTOjUtA==",
"requires": {
"@firebase/installations": "0.2.6",
"@firebase/logger": "0.1.24",
"@firebase/performance-types": "0.0.3",
"@firebase/util": "0.2.27",
"tslib": "1.10.0"
}
},
"@firebase/performance-types": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.3.tgz",
"integrity": "sha512-RuC63nYJPJU65AsrNMc3fTRcRgHiyNcQLh9ufeKUT1mEsFgpxr167gMb+tpzNU4jsbvM6+c6nQAFdHpqcGkRlQ=="
},
"@firebase/polyfill": {
"version": "0.3.21",
"resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.21.tgz",
"integrity": "sha512-2mqS3FQHMhCGyfMGRsaZEypHSBD8hVmp9ZBnZSkn8hq5sSOLiNTFSC0FsvNu5z99GNsPQJFTui8bxcZl5cHQbw==",
"requires": {
"core-js": "3.2.1",
"promise-polyfill": "8.1.3",
"whatwg-fetch": "2.0.4"
},
"dependencies": {
"core-js": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
"integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw=="
},
"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/storage": {
"version": "0.3.11",
"resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.11.tgz",
"integrity": "sha512-Q2ffXE+X62gFy5mZkg7qhzAC7+kqaNZWpgS+297h/hWr/cFBDyC8eBPmnI509eKi2okixmOMbWnNluZkNYNSfw==",
"requires": {
"@firebase/storage-types": "0.3.3",
"@firebase/util": "0.2.27",
"tslib": "1.10.0"
}
},
"@firebase/storage-types": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.3.tgz",
"integrity": "sha512-fUp4kpbxwDiWs/aIBJqBvXgFHZvgoND2JA0gJYSEsXtWtVwfgzY/710plErgZDeQKopX5eOR1sHskZkQUy0U6w=="
},
"@firebase/util": {
"version": "0.2.27",
"resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.27.tgz",
"integrity": "sha512-kFlbWNX1OuLfHrDXZ5QLmNNiLtMyxzbBgMo1DY1tXMjKK1AMYsHnyjInA8esvO0SCDp5XN3Pt9EDlhY4sRiLsw==",
"requires": {
"tslib": "1.10.0"
}
},
"@firebase/webchannel-wrapper": {
"version": "0.2.26",
"resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.26.tgz",
"integrity": "sha512-VlTurkvs4v7EVFWESBZGOPghFEokQhU5au5CP9WqA8B2/PcQRDsaaQlQCA6VATuEnW+vtSiSBvTiOc4004f8xg=="
},
"@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/app-version": { "@ionic-native/app-version": {
"version": "5.11.0", "version": "5.11.0",
"resolved": "https://registry.npmjs.org/@ionic-native/app-version/-/app-version-5.11.0.tgz", "resolved": "https://registry.npmjs.org/@ionic-native/app-version/-/app-version-5.11.0.tgz",
...@@ -1150,9 +1363,9 @@ ...@@ -1150,9 +1363,9 @@
} }
}, },
"@mauron85/cordova-plugin-background-geolocation": { "@mauron85/cordova-plugin-background-geolocation": {
"version": "3.0.3", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/@mauron85/cordova-plugin-background-geolocation/-/cordova-plugin-background-geolocation-3.0.3.tgz", "resolved": "https://registry.npmjs.org/@mauron85/cordova-plugin-background-geolocation/-/cordova-plugin-background-geolocation-3.1.0.tgz",
"integrity": "sha512-Y5P8Z4ldM9Xa02qOqGvaLWKaryx5vp3J4RYgQmmiTb+EM/naNL5ljQyJYRx7VJbSZdNIFua7I/vG+b7oeu/DRw==" "integrity": "sha512-ZZDwkO5m0Bbi8VDJsO3ssBgXrgCiu43/kOBvSneh5djIFyRrQZJbj6IMNt/hP7F/m7Pmw0x7F5ASXjPMwjEAjg=="
}, },
"@ngtools/webpack": { "@ngtools/webpack": {
"version": "7.3.9", "version": "7.3.9",
...@@ -1176,6 +1389,60 @@ ...@@ -1176,6 +1389,60 @@
} }
} }
}, },
"@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": { "@schematics/angular": {
"version": "7.3.9", "version": "7.3.9",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.9.tgz", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.9.tgz",
...@@ -1218,6 +1485,15 @@ ...@@ -1218,6 +1485,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": { "@types/cordova": {
"version": "0.0.34", "version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
...@@ -1238,6 +1514,11 @@ ...@@ -1238,6 +1514,11 @@
"@types/jasmine": "*" "@types/jasmine": "*"
} }
}, },
"@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": { "@types/node": {
"version": "12.0.10", "version": "12.0.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz",
...@@ -1644,6 +1925,11 @@ ...@@ -1644,6 +1925,11 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
"integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="
}, },
"array-ify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
"integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4="
},
"array-union": { "array-union": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
...@@ -1677,6 +1963,15 @@ ...@@ -1677,6 +1963,15 @@
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
}, },
"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": { "asn1": {
"version": "0.2.4", "version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
...@@ -2282,6 +2577,21 @@ ...@@ -2282,6 +2577,21 @@
"resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
"integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og="
}, },
"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": { "bytes": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
...@@ -2590,6 +2900,11 @@ ...@@ -2590,6 +2900,11 @@
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
}, },
"colour": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
"integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
},
"combined-stream": { "combined-stream": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
...@@ -2608,6 +2923,15 @@ ...@@ -2608,6 +2923,15 @@
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
}, },
"compare-func": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
"integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
"requires": {
"array-ify": "^1.0.0",
"dot-prop": "^3.0.0"
}
},
"compare-versions": { "compare-versions": {
"version": "3.5.0", "version": "3.5.0",
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.0.tgz", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.0.tgz",
...@@ -2765,16 +3089,16 @@ ...@@ -2765,16 +3089,16 @@
} }
}, },
"cordova-android": { "cordova-android": {
"version": "8.0.0", "version": "8.1.0",
"resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-8.0.0.tgz", "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-8.1.0.tgz",
"integrity": "sha512-Ipv8HbVJpxEyYFSFLTEOaLRp0yxBtJVNbgSuDEB4naa34FzQaRWSNiiMcPJnO+x3hRXNt7pcwa46hARNzhn7+w==", "integrity": "sha512-eAY6g9q3raJ4P03wNdSWC5MOW1EfxoomWNXsPhi7T6Q9yAqmxqn0sLEUjLL1Ib0LCH3nKQWBXdxapQ5LgbHu+g==",
"requires": { "requires": {
"android-versions": "^1.3.0", "android-versions": "^1.4.0",
"cordova-common": "^3.1.0", "compare-func": "^1.3.2",
"elementtree": "^0.1.7", "cordova-common": "^3.2.0",
"nopt": "^4.0.1", "nopt": "^4.0.1",
"properties-parser": "^0.3.1", "properties-parser": "^0.3.1",
"q": "^1.4.1", "q": "^1.5.1",
"shelljs": "^0.5.3" "shelljs": "^0.5.3"
}, },
"dependencies": { "dependencies": {
...@@ -2787,6 +3111,11 @@ ...@@ -2787,6 +3111,11 @@
"osenv": "^0.1.4" "osenv": "^0.1.4"
} }
}, },
"q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
"integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
},
"shelljs": { "shelljs": {
"version": "0.5.3", "version": "0.5.3",
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
...@@ -3371,11 +3700,24 @@ ...@@ -3371,11 +3700,24 @@
"void-elements": "^2.0.0" "void-elements": "^2.0.0"
} }
}, },
"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": { "domain-browser": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
"integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
}, },
"dot-prop": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
"integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
"requires": {
"is-obj": "^1.0.0"
}
},
"duplexify": { "duplexify": {
"version": "3.7.1", "version": "3.7.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
...@@ -3628,6 +3970,11 @@ ...@@ -3628,6 +3970,11 @@
"is-symbol": "^1.0.2" "is-symbol": "^1.0.2"
} }
}, },
"es6-object-assign": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
"integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw="
},
"es6-promise": { "es6-promise": {
"version": "4.2.8", "version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
...@@ -4039,6 +4386,25 @@ ...@@ -4039,6 +4386,25 @@
"locate-path": "^2.0.0" "locate-path": "^2.0.0"
} }
}, },
"firebase": {
"version": "6.6.1",
"resolved": "https://registry.npmjs.org/firebase/-/firebase-6.6.1.tgz",
"integrity": "sha512-iXbHPIBRt04xYSjWffnARqZbc3vUc0RTnOHsMtAqaT7pqDWicaghEwj2WbCJ0+JLAiKnLNK7fTjW73zfKQSSoQ==",
"requires": {
"@firebase/app": "0.4.16",
"@firebase/app-types": "0.4.3",
"@firebase/auth": "0.12.0",
"@firebase/database": "0.5.3",
"@firebase/firestore": "1.5.2",
"@firebase/functions": "0.4.17",
"@firebase/installations": "0.2.6",
"@firebase/messaging": "0.4.10",
"@firebase/performance": "0.2.18",
"@firebase/polyfill": "0.3.21",
"@firebase/storage": "0.3.11",
"@firebase/util": "0.2.27"
}
},
"flatted": { "flatted": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
...@@ -4427,7 +4793,599 @@ ...@@ -4427,7 +4793,599 @@
"node-pre-gyp": { "node-pre-gyp": {
"version": "0.12.0", "version": "0.12.0",
"bundled": true, "bundled": true,
"optional": true, "optional": 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,
"optional": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
},
"npm-bundled": {
"version": "1.0.6",
"bundled": true,
"optional": true
},
"npm-packlist": {
"version": "1.4.1",
"bundled": true,
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1"
}
},
"npmlog": {
"version": "4.1.2",
"bundled": true,
"optional": 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,
"optional": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true,
"optional": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"optional": true,
"requires": {
"wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
"bundled": true,
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
"bundled": true,
"optional": true
},
"rc": {
"version": "1.2.8",
"bundled": true,
"optional": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"bundled": true,
"optional": true
}
}
},
"readable-stream": {
"version": "2.3.6",
"bundled": true,
"optional": 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.6.3",
"bundled": true,
"optional": true,
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true,
"optional": true
},
"sax": {
"version": "1.2.4",
"bundled": true,
"optional": true
},
"semver": {
"version": "5.7.0",
"bundled": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
"bundled": 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,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"optional": true
},
"tar": {
"version": "4.4.8",
"bundled": 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,
"optional": true
},
"wide-align": {
"version": "1.1.3",
"bundled": true,
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"optional": true
}
}
},
"fstream": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
"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=",
"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==",
"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=="
},
"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=="
},
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
},
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"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=",
"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=",
"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=="
},
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
"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==",
"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.23.3",
"resolved": "https://registry.npmjs.org/grpc/-/grpc-1.23.3.tgz",
"integrity": "sha512-7vdzxPw9s5UYch4aUn4hyM5tMaouaxUUkwkgJlwbR4AXMxiYZJOv19N2ps2eKiuUbJovo5fnGF9hg/X91gWYjw==",
"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": { "requires": {
"detect-libc": "^1.0.2", "detect-libc": "^1.0.2",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
...@@ -4444,7 +5402,6 @@ ...@@ -4444,7 +5402,6 @@
"nopt": { "nopt": {
"version": "4.0.1", "version": "4.0.1",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"abbrev": "1", "abbrev": "1",
"osenv": "^0.1.4" "osenv": "^0.1.4"
...@@ -4452,13 +5409,11 @@ ...@@ -4452,13 +5409,11 @@
}, },
"npm-bundled": { "npm-bundled": {
"version": "1.0.6", "version": "1.0.6",
"bundled": true, "bundled": true
"optional": true
}, },
"npm-packlist": { "npm-packlist": {
"version": "1.4.1", "version": "1.4.4",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"ignore-walk": "^3.0.1", "ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1" "npm-bundled": "^1.0.1"
...@@ -4467,7 +5422,6 @@ ...@@ -4467,7 +5422,6 @@
"npmlog": { "npmlog": {
"version": "4.1.2", "version": "4.1.2",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"are-we-there-yet": "~1.1.2", "are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0", "console-control-strings": "~1.1.0",
...@@ -4477,36 +5431,30 @@ ...@@ -4477,36 +5431,30 @@
}, },
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
"bundled": true, "bundled": true
"optional": true
}, },
"once": { "once": {
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
}, },
"os-homedir": { "os-homedir": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true
"optional": true
}, },
"os-tmpdir": { "os-tmpdir": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true
"optional": true
}, },
"osenv": { "osenv": {
"version": "0.1.5", "version": "0.1.5",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"os-homedir": "^1.0.0", "os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0" "os-tmpdir": "^1.0.0"
...@@ -4514,36 +5462,36 @@ ...@@ -4514,36 +5462,36 @@
}, },
"path-is-absolute": { "path-is-absolute": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true
"optional": true
}, },
"process-nextick-args": { "process-nextick-args": {
"version": "2.0.0", "version": "2.0.1",
"bundled": true, "bundled": true
"optional": 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": { "rc": {
"version": "1.2.8", "version": "1.2.8",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"deep-extend": "^0.6.0", "deep-extend": "^0.6.0",
"ini": "~1.3.0", "ini": "~1.3.0",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"strip-json-comments": "~2.0.1" "strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"bundled": true,
"optional": true
}
} }
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.6", "version": "2.3.6",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"core-util-is": "~1.0.0", "core-util-is": "~1.0.0",
"inherits": "~2.0.3", "inherits": "~2.0.3",
...@@ -4555,47 +5503,39 @@ ...@@ -4555,47 +5503,39 @@
} }
}, },
"rimraf": { "rimraf": {
"version": "2.6.3", "version": "2.7.1",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"glob": "^7.1.3" "glob": "^7.1.3"
} }
}, },
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
"bundled": true, "bundled": true
"optional": true
}, },
"sax": { "sax": {
"version": "1.2.4", "version": "1.2.4",
"bundled": true, "bundled": true
"optional": true
}, },
"semver": { "semver": {
"version": "5.7.0", "version": "5.7.1",
"bundled": true, "bundled": true
"optional": true
}, },
"set-blocking": { "set-blocking": {
"version": "2.0.0", "version": "2.0.0",
"bundled": true, "bundled": true
"optional": true
}, },
"signal-exit": { "signal-exit": {
"version": "3.0.2", "version": "3.0.2",
"bundled": true, "bundled": true
"optional": true
}, },
"string-width": { "string-width": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
...@@ -4605,7 +5545,6 @@ ...@@ -4605,7 +5545,6 @@
"string_decoder": { "string_decoder": {
"version": "1.1.1", "version": "1.1.1",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "~5.1.0" "safe-buffer": "~5.1.0"
} }
...@@ -4613,192 +5552,67 @@ ...@@ -4613,192 +5552,67 @@
"strip-ansi": { "strip-ansi": {
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
}, },
"strip-json-comments": { "strip-json-comments": {
"version": "2.0.1", "version": "2.0.1",
"bundled": true, "bundled": true
"optional": true
}, },
"tar": { "tar": {
"version": "4.4.8", "version": "4.4.10",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"chownr": "^1.1.1", "chownr": "^1.1.1",
"fs-minipass": "^1.2.5", "fs-minipass": "^1.2.5",
"minipass": "^2.3.4", "minipass": "^2.3.5",
"minizlib": "^1.1.1", "minizlib": "^1.2.1",
"mkdirp": "^0.5.0", "mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.2" "yallist": "^3.0.3"
} }
}, },
"util-deprecate": { "util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true
"optional": true
}, },
"wide-align": { "wide-align": {
"version": "1.1.3", "version": "1.1.3",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"string-width": "^1.0.2 || 2" "string-width": "^1.0.2 || 2"
} }
}, },
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true
"optional": true },
"y18n": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true
"optional": true },
} "yargs": {
} "version": "3.32.0",
}, "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
"fstream": { "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
"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=",
"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==",
"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=="
},
"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=="
},
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
},
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"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=",
"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=",
"requires": { "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=="
},
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
"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==",
"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": { "handle-thing": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
...@@ -5094,6 +5908,11 @@ ...@@ -5094,6 +5908,11 @@
"safer-buffer": ">= 2.1.2 < 3" "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": { "ieee754": {
"version": "1.1.13", "version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
...@@ -5507,6 +6326,11 @@ ...@@ -5507,6 +6326,11 @@
} }
} }
}, },
"is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
},
"is-path-cwd": { "is-path-cwd": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
...@@ -5605,6 +6429,15 @@ ...@@ -5605,6 +6429,15 @@
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
}, },
"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": { "isstream": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
...@@ -6215,6 +7048,16 @@ ...@@ -6215,6 +7048,16 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
}, },
"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": { "lodash.clonedeep": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
...@@ -6312,6 +7155,11 @@ ...@@ -6312,6 +7155,11 @@
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz",
"integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==" "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA=="
}, },
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"loose-envify": { "loose-envify": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
...@@ -6800,6 +7648,15 @@ ...@@ -6800,6 +7648,15 @@
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" "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": { "node-fetch-npm": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz",
...@@ -7198,6 +8055,11 @@ ...@@ -7198,6 +8055,11 @@
} }
} }
}, },
"optjs": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
"integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
},
"original": { "original": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
...@@ -7710,6 +8572,11 @@ ...@@ -7710,6 +8572,11 @@
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
}, },
"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": { "promise-retry": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz",
...@@ -7727,6 +8594,33 @@ ...@@ -7727,6 +8594,33 @@
"string.prototype.codepointat": "^0.2.0" "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.14.18",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.18.tgz",
"integrity": "sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ=="
}
}
},
"protoduck": { "protoduck": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz",
...@@ -9365,6 +10259,22 @@ ...@@ -9365,6 +10259,22 @@
"has-flag": "^3.0.0" "has-flag": "^3.0.0"
} }
}, },
"sweetalert": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-2.1.2.tgz",
"integrity": "sha512-iWx7X4anRBNDa/a+AdTmvAzQtkN1+s4j/JJRWlHpYE8Qimkohs8/XnFcWeYHH2lMA8LRCa5tj2d244If3S/hzA==",
"requires": {
"es6-object-assign": "^1.1.0",
"promise-polyfill": "^6.0.2"
},
"dependencies": {
"promise-polyfill": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz",
"integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc="
}
}
},
"symbol-observable": { "symbol-observable": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
...@@ -10525,6 +11435,11 @@ ...@@ -10525,6 +11435,11 @@
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
"integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" "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": { "when": {
"version": "3.6.4", "version": "3.6.4",
"resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz",
...@@ -10551,6 +11466,11 @@ ...@@ -10551,6 +11466,11 @@
"string-width": "^1.0.2 || 2" "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": { "wordwrap": {
"version": "0.0.3", "version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
...@@ -10623,6 +11543,11 @@ ...@@ -10623,6 +11543,11 @@
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" "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": { "xmlhttprequest-ssl": {
"version": "1.5.5", "version": "1.5.5",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
......
{ {
"name": "atapp", "name": "atapp",
"version": "1.0.0", "version": "1.1.5.0",
"description": "", "author": "Allo Testeurs",
"main": "index.js", "homepage": "http://www.allo-testeurs.com/",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": { "dependencies": {
"cordova-android": "^8.0.0", "@angular/common": "^7.2.2",
"@angular/core": "^7.2.2",
"@angular/fire": "^5.2.1",
"@angular/forms": "^7.2.2",
"@angular/http": "^7.2.2",
"@angular/platform-browser": "^7.2.2",
"@angular/platform-browser-dynamic": "^7.2.2",
"@angular/router": "^7.2.2",
"@ionic-native/app-version": "^5.11.0",
"@ionic-native/background-geolocation": "^5.8.0",
"@ionic-native/background-mode": "^5.11.0",
"@ionic-native/core": "^5.0.0",
"@ionic-native/diagnostic": "^5.8.0",
"@ionic-native/google-plus": "^5.0.0",
"@ionic-native/http": "^5.8.0",
"@ionic-native/local-notifications": "^5.11.0",
"@ionic-native/location-accuracy": "^5.8.0",
"@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^4.1.0",
"@ionic/storage": "^2.2.0",
"cordova-android": "^8.1.0",
"cordova-plugin-advanced-http": "^2.1.1", "cordova-plugin-advanced-http": "^2.1.1",
"cordova-plugin-app-version": "^0.1.9", "cordova-plugin-app-version": "^0.1.9",
"cordova-plugin-background-mode": "^0.7.2", "cordova-plugin-background-mode": "git+https://github.com/sercatven/cordova-plugin-background-mode.git",
"cordova-plugin-camera": "^4.1.0",
"cordova-plugin-file": "^6.0.1",
"cordova-plugin-badge": "^0.8.8", "cordova-plugin-badge": "^0.8.8",
"cordova-plugin-filepath": "^1.5.6", "cordova-plugin-file": "^6.0.1",
"cordova-plugin-googleplus": "^8.0.0", "cordova-plugin-googleplus": "^8.0.0",
"cordova-plugin-local-notification": "^0.9.0-beta.2", "cordova-plugin-local-notification": "^0.9.0-beta.2",
"cordova-plugin-play-games-services": "^1.1.2", "cordova-plugin-play-games-services": "^1.1.2",
"cordova-plugin-qrscanner": "^3.0.1",
"cordova-plugin-request-location-accuracy": "^2.3.0", "cordova-plugin-request-location-accuracy": "^2.3.0",
"cordova-sqlite-storage": "^3.2.0", "cordova-sqlite-storage": "^3.2.0",
"cordova.plugins.diagnostic": "^5.0.0", "cordova.plugins.diagnostic": "^5.0.0",
"core-js": "^2.5.4",
"firebase": "^6.6.1",
"ionic-image-loader": "^6.3.3", "ionic-image-loader": "^6.3.3",
"leaflet.markercluster": "^1.4.1",
"leaflet": "^1.5.1", "leaflet": "^1.5.1",
"path": "^0.12.7" "leaflet.markercluster": "^1.4.1",
"path": "^0.12.7",
"rxjs": "~6.5.1",
"sweetalert": "^2.1.2",
"tslib": "^1.9.0",
"zone.js": "~0.8.29"
}, },
"devDependencies": {}, "devDependencies": {
"scripts": { "@angular-devkit/architect": "~0.13.8",
"test": "echo \"Error: no test specified\" && exit 1" "@angular-devkit/build-angular": "~0.13.8",
"@angular-devkit/core": "~7.3.8",
"@angular-devkit/schematics": "~7.3.8",
"@angular/cli": "~7.3.8",
"@angular/compiler": "~7.2.2",
"@angular/compiler-cli": "~7.2.2",
"@angular/language-service": "~7.2.2",
"@ionic/angular-toolkit": "~1.5.1",
"@ionic/lab": "2.0.4",
"@types/jasmine": "~2.8.8",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~12.0.0",
"codelyzer": "~4.5.0",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~1.1.2",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.4.0",
"ts-node": "~8.3.0",
"tslint": "~5.17.0",
"typescript": "~3.1.6",
"cordova-plugin-whitelist": "1.3.3",
"cordova-plugin-statusbar": "2.4.2",
"cordova-plugin-device": "2.0.2",
"cordova-plugin-splashscreen": "5.0.2",
"cordova-plugin-ionic-webview": "^4.0.0",
"cordova-plugin-ionic-keyboard": "^2.0.5"
}, },
"repository": { "browser": {
"type": "git", "crypto": false,
"url": "git@versions.feeling-group.com:nabil.sadki/allo-app.git" "fs": false,
"module": false
}, },
"author": "", "description": "An Ionic project",
"license": "ISC" "cordova": {
} "plugins": {
"cordova-sqlite-storage": {},
"cordova-plugin-advanced-http": {},
"cordova.plugins.diagnostic": {
"ANDROID_SUPPORT_VERSION": "28.+"
},
"cordova-plugin-request-location-accuracy": {},
"cordova-plugin-local-notification": {},
"cordova-plugin-whitelist": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-device": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-ionic-webview": {},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-background-mode": {},
"cordova-plugin-app-version": {},
"cordova-plugin-file": {},
"cordova-plugin-googleplus": {
"PLAY_SERVICES_VERSION": "11.8.0"
}
},
"platforms": [
"android"
]
}
}
\ No newline at end of file
resources/ios/icon/icon-1024.png

59.4 KB | W: | H:

resources/ios/icon/icon-1024.png

47.6 KB | W: | H:

resources/ios/icon/icon-1024.png
resources/ios/icon/icon-1024.png
resources/ios/icon/icon-1024.png
resources/ios/icon/icon-1024.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-40.png

1.22 KB | W: | H:

resources/ios/icon/icon-40.png

2.32 KB | W: | H:

resources/ios/icon/icon-40.png
resources/ios/icon/icon-40.png
resources/ios/icon/icon-40.png
resources/ios/icon/icon-40.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-40@2x.png

3.48 KB | W: | H:

resources/ios/icon/icon-40@2x.png

5.03 KB | W: | H:

resources/ios/icon/icon-40@2x.png
resources/ios/icon/icon-40@2x.png
resources/ios/icon/icon-40@2x.png
resources/ios/icon/icon-40@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-40@3x.png

10.5 KB | W: | H:

resources/ios/icon/icon-40@3x.png

7.8 KB | W: | H:

resources/ios/icon/icon-40@3x.png
resources/ios/icon/icon-40@3x.png
resources/ios/icon/icon-40@3x.png
resources/ios/icon/icon-40@3x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-50.png

1.86 KB | W: | H:

resources/ios/icon/icon-50.png

3.04 KB | W: | H:

resources/ios/icon/icon-50.png
resources/ios/icon/icon-50.png
resources/ios/icon/icon-50.png
resources/ios/icon/icon-50.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-50@2x.png

4.58 KB | W: | H:

resources/ios/icon/icon-50@2x.png

6.37 KB | W: | H:

resources/ios/icon/icon-50@2x.png
resources/ios/icon/icon-50@2x.png
resources/ios/icon/icon-50@2x.png
resources/ios/icon/icon-50@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-60.png

2.39 KB | W: | H:

resources/ios/icon/icon-60.png

3.75 KB | W: | H:

resources/ios/icon/icon-60.png
resources/ios/icon/icon-60.png
resources/ios/icon/icon-60.png
resources/ios/icon/icon-60.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-60@2x.png

5.9 KB | W: | H:

resources/ios/icon/icon-60@2x.png

7.8 KB | W: | H:

resources/ios/icon/icon-60@2x.png
resources/ios/icon/icon-60@2x.png
resources/ios/icon/icon-60@2x.png
resources/ios/icon/icon-60@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-60@3x.png

10.6 KB | W: | H:

resources/ios/icon/icon-60@3x.png

11.6 KB | W: | H:

resources/ios/icon/icon-60@3x.png
resources/ios/icon/icon-60@3x.png
resources/ios/icon/icon-60@3x.png
resources/ios/icon/icon-60@3x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-72.png

2.8 KB | W: | H:

resources/ios/icon/icon-72.png

4.58 KB | W: | H:

resources/ios/icon/icon-72.png
resources/ios/icon/icon-72.png
resources/ios/icon/icon-72.png
resources/ios/icon/icon-72.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-72@2x.png

7.61 KB | W: | H:

resources/ios/icon/icon-72@2x.png

9.3 KB | W: | H:

resources/ios/icon/icon-72@2x.png
resources/ios/icon/icon-72@2x.png
resources/ios/icon/icon-72@2x.png
resources/ios/icon/icon-72@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-76.png

3.24 KB | W: | H:

resources/ios/icon/icon-76.png

4.82 KB | W: | H:

resources/ios/icon/icon-76.png
resources/ios/icon/icon-76.png
resources/ios/icon/icon-76.png
resources/ios/icon/icon-76.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-76@2x.png

8.11 KB | W: | H:

resources/ios/icon/icon-76@2x.png

9.87 KB | W: | H:

resources/ios/icon/icon-76@2x.png
resources/ios/icon/icon-76@2x.png
resources/ios/icon/icon-76@2x.png
resources/ios/icon/icon-76@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-83.5@2x.png

16 KB | W: | H:

resources/ios/icon/icon-83.5@2x.png

10.7 KB | W: | H:

resources/ios/icon/icon-83.5@2x.png
resources/ios/icon/icon-83.5@2x.png
resources/ios/icon/icon-83.5@2x.png
resources/ios/icon/icon-83.5@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-small.png

818 Bytes | W: | H:

resources/ios/icon/icon-small.png

1.56 KB | W: | H:

resources/ios/icon/icon-small.png
resources/ios/icon/icon-small.png
resources/ios/icon/icon-small.png
resources/ios/icon/icon-small.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-small@2x.png

2.23 KB | W: | H:

resources/ios/icon/icon-small@2x.png

3.58 KB | W: | H:

resources/ios/icon/icon-small@2x.png
resources/ios/icon/icon-small@2x.png
resources/ios/icon/icon-small@2x.png
resources/ios/icon/icon-small@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon-small@3x.png

3.77 KB | W: | H:

resources/ios/icon/icon-small@3x.png

5.53 KB | W: | H:

resources/ios/icon/icon-small@3x.png
resources/ios/icon/icon-small@3x.png
resources/ios/icon/icon-small@3x.png
resources/ios/icon/icon-small@3x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon.png

2.06 KB | W: | H:

resources/ios/icon/icon.png

3.53 KB | W: | H:

resources/ios/icon/icon.png
resources/ios/icon/icon.png
resources/ios/icon/icon.png
resources/ios/icon/icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/icon/icon@2x.png

5.58 KB | W: | H:

resources/ios/icon/icon@2x.png

7.36 KB | W: | H:

resources/ios/icon/icon@2x.png
resources/ios/icon/icon@2x.png
resources/ios/icon/icon@2x.png
resources/ios/icon/icon@2x.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/splash/Default-667h.png

39.5 KB | W: | H:

resources/ios/splash/Default-667h.png

204 KB | W: | H:

resources/ios/splash/Default-667h.png
resources/ios/splash/Default-667h.png
resources/ios/splash/Default-667h.png
resources/ios/splash/Default-667h.png
  • 2-up
  • Swipe
  • Onion skin
resources/ios/splash/Default~iphone.png

7.04 KB | W: | H:

resources/ios/splash/Default~iphone.png

23.1 KB | W: | H:

resources/ios/splash/Default~iphone.png
resources/ios/splash/Default~iphone.png
resources/ios/splash/Default~iphone.png
resources/ios/splash/Default~iphone.png
  • 2-up
  • Swipe
  • Onion skin
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
import { AuthGuardService } from './services/auth-guard.service';
const routes: Routes = [ const routes: Routes = [
{ path: '', redirectTo: 'mainslider', pathMatch: 'full' }, { path: '', redirectTo: 'start', pathMatch: 'full' },
{ path: 'start', loadChildren: './pages/start/start.module#StartPageModule' }, { path: 'start', loadChildren: './pages/start/start.module#StartPageModule' },
{ path: 'login', loadChildren: './pages/compte/login/login.module#LoginPageModule' }, { path: 'login', loadChildren: './pages/compte/login/login.module#LoginPageModule' },
{ path: 'mainslider', loadChildren: './pages/mainslider/mainslider.module#MainsliderPageModule' }, { path: 'mainslider', loadChildren: './pages/mainslider/mainslider.module#MainsliderPageModule' },
{ path: 'app', loadChildren: './pages/menu/menu.module#MenuPageModule' }, {
{ path: 'offre-details', loadChildren: './pages/offres/offre-details/offre-details.module#OffreDetailsPageModule' }, path: 'app',
loadChildren: './pages/menu/menu.module#MenuPageModule',
canActivate: [AuthGuardService]
},
{
path: 'offre-details',
loadChildren: './pages/offres/offre-details/offre-details.module#OffreDetailsPageModule',
canActivate: [AuthGuardService]
},
{ path: 'login-help', loadChildren: './modals/login-help/login-help.module#LoginHelpPageModule' },
]; ];
......
...@@ -7,6 +7,10 @@ import { SplashScreen } from '@ionic-native/splash-screen/ngx'; ...@@ -7,6 +7,10 @@ import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx';
import { LocalNotifications } from '@ionic-native/local-notifications/ngx'; import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
import { TripService } from './services/trip-service';
import { AuthService } from './services/auth.service';
// import { LocationService } from './services/location-service';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
templateUrl: 'app.component.html' templateUrl: 'app.component.html'
...@@ -21,7 +25,8 @@ export class AppComponent { ...@@ -21,7 +25,8 @@ export class AppComponent {
private splashScreen: SplashScreen, private splashScreen: SplashScreen,
private statusBar: StatusBar, private statusBar: StatusBar,
private router: Router, private router: Router,
private _STOR: Storage private _STOR: Storage,
private _AUTH: AuthService
// private _LOCAT: LocationService // private _LOCAT: LocationService
) { ) {
this.initializeApp(); this.initializeApp();
...@@ -39,6 +44,27 @@ export class AppComponent { ...@@ -39,6 +44,27 @@ export class AppComponent {
// Set locator // Set locator
// this.setLocator(); // this.setLocator();
this._AUTH.authState.subscribe(state => {
if (state) {
this._STOR.get('APP_PARAMS').then(appParams => {
if (appParams.PARAM_mainslider) {
this.router.navigate(['app/dashboard']);
} else {
this.router.navigate(['mainslider']);
}
});
} else {
this.router.navigate(['login']);
}
});
// this._STOR.get('wpUser').then((wpUser) => {
// if (wpUser) {
// this.router.navigateByUrl('/app/dashboard', { replaceUrl: true });
// // this._AUTH.validateAuthToken(wpUser.token);
// } else {
// this.router.navigateByUrl('/login', { replaceUrl: true });
// }
// });
// this._STOR.get('PARAM_mainslider').then((prmMainslider) => { // this._STOR.get('PARAM_mainslider').then((prmMainslider) => {
// if (prmMainslider) { // if (prmMainslider) {
// this._STOR.get('isLoggedIn').then((isLoggedIn) => { // this._STOR.get('isLoggedIn').then((isLoggedIn) => {
...@@ -57,34 +83,22 @@ export class AppComponent { ...@@ -57,34 +83,22 @@ export class AppComponent {
} }
setDefaultParams() { setDefaultParams() {
this._STOR.get('PARAM_geolocate').then((val) => { this._STOR.get('APP_PARAMS').then((val) => {
if (val === null) {
this._STOR.set('PARAM_geolocate', true);
}
});
this._STOR.get('PARAM_geoarea').then((val) => {
if (val === null) {
this._STOR.set('PARAM_geoarea', 1000);
}
});
this._STOR.get('PARAM_notiftime').then((val) => {
if (val === null) {
this._STOR.set('PARAM_notiftime', 2880);
}
});
this._STOR.get('PARAM_trackdelay').then((val) => {
if (val === null) {
this._STOR.set('PARAM_trackdelay', 60000);
}
});
this._STOR.get('PARAM_notifnbr').then((val) => {
if (val === null) { if (val === null) {
this._STOR.set('PARAM_notifnbr', 'all'); this._STOR.set('APP_PARAMS', {
PARAM_mainslider: false,
PARAM_geolocate: true,
PARAM_geoarea: 1000,
PARAM_notiftime: 2880,
PARAM_trackdelay: 60000,
PARAM_notifnbr: 'all',
NOTIF_shownpartners: [],
});
} }
}); });
this._STOR.get('NOTIF_shownpartners').then((val) => { this._STOR.get('WISHLIST').then((val) => {
if (val === null) { if (val === null) {
this._STOR.set('NOTIF_shownpartners', []); this._STOR.set('WISHLIST', []);
} }
}); });
} }
......
...@@ -25,6 +25,15 @@ import { File } from '@ionic-native/File/ngx'; ...@@ -25,6 +25,15 @@ import { File } from '@ionic-native/File/ngx';
import { WebView } from '@ionic-native/ionic-webview/ngx'; import { WebView } from '@ionic-native/ionic-webview/ngx';
import { FilePath } from '@ionic-native/file-path/ngx'; import { FilePath } from '@ionic-native/file-path/ngx';
import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx'; import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx';
import { environment } from 'src/environments/environment';
import { AuthService } from './services/auth.service';
import { AuthGuardService } from './services/auth-guard.service';
import { LoginHelpPageModule } from './modals/login-help/login-help.module';
// import { AngularFireAuthModule } from '@angular/fire/auth';
// import * as firebase from 'firebase';
// firebase.initializeApp(environment.firebase);
@NgModule({ @NgModule({
declarations: [AppComponent], declarations: [AppComponent],
...@@ -37,7 +46,8 @@ import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx'; ...@@ -37,7 +46,8 @@ import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx';
name: '__allo_testeurs_app', name: '__allo_testeurs_app',
driverOrder: ['websql', 'sqlite', 'indexeddb'] driverOrder: ['websql', 'sqlite', 'indexeddb']
}), }),
HttpClientModule HttpClientModule,
LoginHelpPageModule
], ],
providers: [ providers: [
StatusBar, StatusBar,
...@@ -55,7 +65,9 @@ import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx'; ...@@ -55,7 +65,9 @@ import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx';
File, File,
WebView, WebView,
FilePath, FilePath,
QRScanner QRScanner,
AuthService,
AuthGuardService
], ],
bootstrap: [AppComponent] bootstrap: [AppComponent]
}) })
......
...@@ -59,4 +59,14 @@ ion-modal.modal-filters .modal-wrapper { ...@@ -59,4 +59,14 @@ ion-modal.modal-filters .modal-wrapper {
} }
ion-select.wide-select { ion-select.wide-select {
max-width: 65% !important; max-width: 65% !important;
}
.swiper-pagination {
.swiper-pagination-bullet {
opacity: 1 !important;
}
}
ion-modal .modal-wrapper {
width: 90vw !important;
max-height: 90vh !important;
border-radius: 10px !important;
} }
\ No newline at end of file
export const WORDPRESS_URL = 'http://www.allo-testeurs.com/';
export const WORDPRESS_REST_API_URL = WORDPRESS_URL + 'wp-json/wp/v2/';
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 { LoginHelpPage } from './login-help.page';
const routes: Routes = [
{
path: '',
component: LoginHelpPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [LoginHelpPage]
})
export class LoginHelpPageModule {}
<ion-header>
<ion-toolbar color="primary">
<ion-title>Informations</ion-title>
<ion-button fill="outline" size="small" color="light" slot="end" (click)="dismissHelpModal()">
X
</ion-button>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-list-header>
Avec le mode <strong>anonyme</strong>, vous pouvez :
</ion-list-header>
<ion-item>
<ion-icon name="arrow-dropright-circle" slot="start"></ion-icon>
<ion-label class="ion-text-wrap" padding-left>Parcourir les offres de nos partenaires</ion-label>
</ion-item>
<ion-item lines="none">
<ion-icon name="arrow-dropright-circle" slot="start"></ion-icon>
<ion-label class="ion-text-wrap">Voir la liste des partenaires et les localiser sur la carte</ion-label>
</ion-item>
<ion-list-header margin-top>
En plus, si vous êtes connecté(e), vous pouvez :
</ion-list-header>
<ion-item>
<ion-icon name="arrow-dropright-circle" slot="start"></ion-icon>
<ion-label class="ion-text-wrap" padding-left>Sauvegarder vos offres préférées</ion-label>
</ion-item>
<ion-item>
<ion-icon name="arrow-dropright-circle" slot="start"></ion-icon>
<ion-label class="ion-text-wrap" padding-left>Noter des offres</ion-label>
</ion-item>
<ion-item>
<ion-icon name="arrow-dropright-circle" slot="start"></ion-icon>
<ion-label class="ion-text-wrap" padding-left>Commenter des offres</ion-label>
</ion-item>
<ion-item>
<ion-icon name="arrow-dropright-circle" slot="start"></ion-icon>
<ion-label class="ion-text-wrap" padding-left>Réclamer des points mérites et gagner des supers lots! (prochainement)</ion-label>
</ion-item>
<ion-item>
<ion-icon name="arrow-dropright-circle" slot="start"></ion-icon>
<ion-label class="ion-text-wrap" padding-left>Réclamer des points dexpériences et monter dans le tableau des meilleur(e)s testeur(se)s! (prochainement)</ion-label>
</ion-item>
<ion-item lines="none">
<ion-icon name="arrow-dropright-circle" slot="start"></ion-icon>
<ion-label class="ion-text-wrap" padding-left>Et beaucoup d'autres surprises bientôt!!!</ion-label>
</ion-item>
</ion-list>
</ion-content>
\ No newline at end of file
ion-label {
font-size: 13px !important;
}
ion-icon {
width: 0.7em;
height: 0.7em;
}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LoginHelpPage } from './login-help.page';
describe('LoginHelpPage', () => {
let component: LoginHelpPage;
let fixture: ComponentFixture<LoginHelpPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LoginHelpPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(LoginHelpPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { ModalController } from '@ionic/angular';
@Component({
selector: 'app-login-help',
templateUrl: './login-help.page.html',
styleUrls: ['./login-help.page.scss'],
})
export class LoginHelpPage implements OnInit {
constructor(
public modalController: ModalController
) { }
ngOnInit() {
}
dismissHelpModal() {
// using the injected ModalController this page
// can "dismiss" itself and optionally pass back data
this.modalController.dismiss();
}
}
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 { FavorisPage } from './favoris.page';
const routes: Routes = [
{
path: '',
component: FavorisPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [FavorisPage]
})
export class FavorisPageModule {}
<ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button> </ion-menu-button>
</ion-buttons>
<ion-title>Favoris </ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-card [hidden]="_TRIP.wishedProducts.length" padding>
<h1 class="ion-text-center">
<ion-icon name="heart-half" color="danger"></ion-icon>
</h1>
<ion-text>
<h3 class="ion-text-center">Votre liste de favoris est vide.</h3>
</ion-text>
</ion-card>
<ion-list>
<ion-item-sliding *ngFor="let offer of _TRIP.wishedProducts">
<ion-item>
<ion-thumbnail slot="start">
<ion-img [src]="offer.thumb"></ion-img>
</ion-thumbnail>
<ion-label>
<h2>{{offer.name}}</h2>
<ion-text color="primary">
<h3>
<ion-icon name="pin"></ion-icon>
{{offer.location}}
</h3>
</ion-text>
<p>{{offer.description}}</p>
</ion-label>
</ion-item>
<ion-item-options side="end">
<ion-item-option color="success" (click)="_TRIP.viewDetail(offer.id)">
<ion-icon name="eye"></ion-icon>
Voir
</ion-item-option>
<ion-item-option (click)="_TRIP.wishList(offer, 'remove')">
<ion-icon name="trash"></ion-icon>
Supprimer
</ion-item-option>
<!-- <ion-item-option color="danger" (click)="share(item)">Share</ion-item-option> -->
</ion-item-options>
</ion-item-sliding>
</ion-list>
</ion-content>
\ No newline at end of file
h1 {
ion-icon {
font-size: 40vw !important;
}
}
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { FavorisPage } from './favoris.page';
describe('FavorisPage', () => {
let component: FavorisPage;
let fixture: ComponentFixture<FavorisPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ FavorisPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(FavorisPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { TripService } from '../../../services/trip-service';
@Component({
selector: 'app-favoris',
templateUrl: './favoris.page.html',
styleUrls: ['./favoris.page.scss'],
})
export class FavorisPage implements OnInit {
constructor(
public _TRIP: TripService
) { console.log(this._TRIP.wishedProducts) }
ngOnInit() {
}
}
...@@ -24,4 +24,4 @@ const routes: Routes = [ ...@@ -24,4 +24,4 @@ const routes: Routes = [
], ],
declarations: [LoginPage] declarations: [LoginPage]
}) })
export class LoginPageModule {} export class LoginPageModule { }
<ion-header> <ion-header>
<ion-toolbar color="primary"> <ion-toolbar color="primary" padding-right>
<ion-title>Connexion</ion-title> <ion-title>Connexion</ion-title>
<ion-button size="small" fill="solid" color="light" slot="end" (click)="presentHelpModal()">
<ion-icon name="information"></ion-icon>
</ion-button>
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>
<ion-content text-center color="primary" padding> <ion-content text-center color="primary" padding>
<!-- <img src="../../../assets/logo-full-white.png" /> --> <!-- <img src="../../../assets/logo-full-white.png" /> -->
<ion-icon name="unlock" class="key-logo"></ion-icon> <ion-icon name="unlock" class="key-logo"></ion-icon>
<!-- <ion-card>
<form #form="ngForm" (ngSubmit)="login(form)">
<ion-grid>
<ion-row justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12">
<div text-center>
<h3>Login</h3>
</div>
<div padding>
<ion-item>
<ion-input name="email" type="email" placeholder="your@email.com" ngModel required></ion-input>
</ion-item>
<ion-item>
<ion-input name="password" type="password" placeholder="Password" ngModel required></ion-input>
</ion-item>
</div>
<div padding>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">Login</ion-button>
</div>
</ion-col>
</ion-row>
</ion-grid>
</form>
</ion-card> -->
<form [formGroup]="validationsForm" (ngSubmit)="onSubmit(validationsForm.value)"> <form [formGroup]="validationsForm" (ngSubmit)="onSubmit(validationsForm.value)">
<ion-card color="light" no-padding no-margin> <ion-card color="light" no-padding no-margin>
<ion-card-content no-padding> <ion-card-content no-padding>
...@@ -59,28 +38,36 @@ ...@@ -59,28 +38,36 @@
</div> </div>
</ion-card-content> </ion-card-content>
</ion-card> </ion-card>
<a href="javascript:;"> <!-- <a href="javascript:;">
<ion-text color="light"> <ion-text color="light">
Mot de passe oublié? Mot de passe oublié?
</ion-text> </ion-text>
</a> </a> -->
<ion-item-divider color="primary"> </ion-item-divider> <ion-item-divider color="primary"> </ion-item-divider>
<ion-button color="dark" expand="block" type="submit" [disabled]="validationsForm.invalid" no-margin>Connexion</ion-button> <ion-button color="dark" expand="block" type="submit" [disabled]="validationsForm.invalid" no-margin>
<ion-icon name="log-in"></ion-icon>
Connexion
</ion-button>
</form> </form>
<ion-item-divider color="primary" lines="none"> </ion-item-divider> <!-- <ion-item-divider color="primary" lines="none"> </ion-item-divider> -->
<ion-item-divider color="primary" justify-content-center> <!-- <ion-item-divider color="primary" justify-content-center>
Se connecter avec Facebook ou Google Se connecter avec Facebook ou Google
</ion-item-divider> </ion-item-divider> -->
<ion-grid> <div class="separator">
<span>Autres options :</span>
</div>
<ion-grid no-padding margin-top>
<ion-row> <ion-row>
<!-- <ion-col> <ion-col class="ion-no-padding ion-text-start">
<ion-button expand="block" class="btn-fb" no-margin> <ion-button color="dark" class="btn-g" (click)="doAnonymousLogIn()" no-margin>
<ion-icon name="logo-facebook"></ion-icon> <ion-icon name="walk"></ion-icon>
Anonyme
</ion-button> </ion-button>
</ion-col> --> </ion-col>
<ion-col> <ion-col class="ion-no-padding">
<ion-button color="light" expand="block" class="btn-g" (click)="doGoogleLogin()" no-margin> <ion-button color="light" class="btn-g ion-no-margin">
<ion-icon name="logo-google"></ion-icon> <ion-icon name="person-add"></ion-icon>
Créer un compte
</ion-button> </ion-button>
</ion-col> </ion-col>
</ion-row> </ion-row>
......
...@@ -19,4 +19,16 @@ ion-icon.key-logo { ...@@ -19,4 +19,16 @@ ion-icon.key-logo {
.error-message { .error-message {
color: var(--ion-color-danger); color: var(--ion-color-danger);
font-size: 12px; font-size: 12px;
}
div.separator {
border-bottom: 1px solid;
position: relative;
margin-top: 30px;
span {
position: absolute;
top: -12px;
background: var(--ion-color-primary, #cc3333);
left: 10px;
padding: 0 5px;
}
} }
\ No newline at end of file
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Validators, FormBuilder, FormGroup, FormControl } from '@angular/forms'; import { Validators, FormBuilder, FormGroup, FormControl } from '@angular/forms';
import { AlloService } from '../../../services/allo-service'; import { ModalController } from '@ionic/angular';
import { Storage } from '@ionic/storage'; import { Storage } from '@ionic/storage';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { GooglePlus } from '@ionic-native/google-plus/ngx'; import { GooglePlus } from '@ionic-native/google-plus/ngx';
import { AlloService } from '../../../services/allo-service';
import { AuthService } from '../../../services/auth.service';
import { LoginHelpPage } from '../../../modals/login-help/login-help.page';
// import swal from 'sweetalert';
@Component({ @Component({
selector: 'app-login', selector: 'app-login',
...@@ -31,11 +35,19 @@ export class LoginPage implements OnInit { ...@@ -31,11 +35,19 @@ export class LoginPage implements OnInit {
public formBuilder: FormBuilder, public formBuilder: FormBuilder,
public storage: Storage, public storage: Storage,
public router: Router, public router: Router,
public modalController: ModalController,
private googlePlus: GooglePlus, private googlePlus: GooglePlus,
public _ALLO: AlloService public _ALLO: AlloService,
public _AUTH: AuthService
) { } ) { }
ngOnInit() { ngOnInit() {
this._AUTH.getAuthState().subscribe(state => {
if (state) {
let name = this._AUTH.infoNicename === 'anonymous' ? 'Anonyme' : this._AUTH.infoFullname;
this._ALLO.presentToast('Connexion', 'Bienvenue ' + name, 'top');
}
});
this.validationsForm = this.formBuilder.group({ this.validationsForm = this.formBuilder.group({
email: new FormControl('', Validators.compose([ email: new FormControl('', Validators.compose([
Validators.required, Validators.required,
...@@ -45,8 +57,66 @@ export class LoginPage implements OnInit { ...@@ -45,8 +57,66 @@ export class LoginPage implements OnInit {
}); });
} }
async presentHelpModal() {
const modal = await this.modalController.create({
component: LoginHelpPage
});
return await modal.present();
}
doAnonymousLogIn() {
const wpUser = {
token: null,
user_nicename: 'anonymous',
user_display_name: 'Mode anonyme',
user_email: 'nomail',
};
this.storage.set('wpUser', wpUser).then(() => {
this._AUTH.setUser(wpUser);
// this.storage.get('APP_PARAMS').then(appParams => {
// if (appParams.PARAM_mainslider) {
// this.router.navigate(['app/dashboard']);
// } else {
// this.router.navigate(['mainslider']);
// }
// });
});
}
onSubmit(values) { onSubmit(values) {
console.log(values); this._ALLO.presentLoading();
this._AUTH.doLogin(values)
.then(
res => {
this._ALLO.dismissLoading();
console.log('User exist', res);
this.storage.get('APP_PARAMS').then(appParams => {
if (appParams.PARAM_mainslider) {
this.router.navigate(['app/dashboard']);
} else {
this.router.navigate(['mainslider']);
}
});
},
err => {
this._ALLO.dismissLoading();
// swal('Connexion', 'Email ou Mot de passe incorrects. Veuillez réessayer.', 'error');
// this._ALLO.presentAlert('Connexion', 'Email ou Mot de passe incorrects.<br>Veuillez réessayer.');
this._ALLO.presentToast('', 'Email ou Mot de passe incorrects.<br>Veuillez réessayer.', 'top');
console.log('Auth error', err);
});
// this._ALLO.presentLoading();
// this._AUTH.firebaseRegister(values)
// .then(res => {
// this._ALLO.dismissLoading();
// console.log('User exist', res);
// // this.errorMessage = "";
// // this.navCtrl.navigateForward('/dashboard');
// }, err => {
// this._ALLO.dismissLoading();
// // this.errorMessage = err.message;
// console.log('Auth error', err);
// });
} }
async doGoogleLogin() { async doGoogleLogin() {
......
<ion-content color="primary"> <ion-content color="primary">
<ion-slides #mainSlider [options]="slideOpts" pager="true" [hidden]="hideSlider"> <ion-slides #mainSlider [options]="slideOpts" pager="true" [hidden]="hideSlider">
<ion-slide padding> <ion-slide padding>
<ion-item lines="none" color="primary" class="skip"> <ion-item lines="none" color="primary" class="skip">
<ion-button fill="outline" color="light" (click)="skipPresentation($event)"> <ion-button fill="outline" color="light" (click)="skipPresentation($event)">
...@@ -197,12 +197,8 @@ ...@@ -197,12 +197,8 @@
<ion-text color="light"> <ion-text color="light">
<p class="text-1x"> <p class="text-1x">
Pour une expérience très riche, il est très souhaitable d'activer le GPS de votre Pour une expérience très riche, il est très souhaitable d'activer le GPS de votre
mobile, mobile, afin de vous envoyer des notifications sur les promos de nos partenaires à
afin de vous proximité !
envoyer des notifications sur les promos de nos partenaires, une fois vous vous
approchez de
leurs
locaux !
</p> </p>
</ion-text> </ion-text>
</ion-col> </ion-col>
...@@ -212,14 +208,13 @@ ...@@ -212,14 +208,13 @@
<ion-grid no-margin no-padding> <ion-grid no-margin no-padding>
<ion-row> <ion-row>
<ion-col> <ion-col>
<ion-button class="round" color="light" margin-top full tappable <ion-button class="round" size="small" color="light" margin-top full tappable
routerLink="/app/dashboard" (click)="goToDashboard()" routerDirection="forward" routerLinkActive="active">
routerDirection="root" routerLinkActive="active">
Continuer sans &nbsp;<ion-icon name="arrow-dropright-circle"></ion-icon> Continuer sans &nbsp;<ion-icon name="arrow-dropright-circle"></ion-icon>
</ion-button> </ion-button>
</ion-col> </ion-col>
<ion-col> <ion-col>
<ion-button ion-button class="round" color="warning" margin-top full tappable <ion-button class="round" size="small" color="warning" margin-top full tappable
(click)="getGps()"> (click)="getGps()">
Activer le GPS &nbsp;<ion-icon name="locate"></ion-icon> Activer le GPS &nbsp;<ion-icon name="locate"></ion-icon>
</ion-button> </ion-button>
......
...@@ -20,5 +20,5 @@ ion-slides { ...@@ -20,5 +20,5 @@ ion-slides {
} }
--bullet-background: #ffffff !important; --bullet-background: #ffffff !important;
--bullet-background-active: var(--ion-color-secondary, #ffffff) !important; --bullet-background-active: var(--ion-color-dark, #000000) !important;
} }
\ No newline at end of file
...@@ -81,11 +81,13 @@ export class MainsliderPage implements OnInit { ...@@ -81,11 +81,13 @@ export class MainsliderPage implements OnInit {
getGps() { getGps() {
if (this.platform.is('cordova')) { if (this.platform.is('cordova')) {
console.log('cord');
this._PERM.checkGps(); this._PERM.checkGps();
this._LOCATE.initLocator(); this._LOCATE.initLocator();
} }
this._STOR.set('PARAM_geolocate', true); this._STOR.get('APP_PARAMS').then(appParams => {
appParams.PARAM_mainslider = true;
this._STOR.set('APP_PARAMS', appParams);
});
this.goToDashboard(); this.goToDashboard();
} }
...@@ -95,7 +97,11 @@ export class MainsliderPage implements OnInit { ...@@ -95,7 +97,11 @@ export class MainsliderPage implements OnInit {
} }
goToDashboard() { goToDashboard() {
this.router.navigateByUrl('/app/dashboard'); this._STOR.get('APP_PARAMS').then(appParams => {
appParams.PARAM_mainslider = true;
this._STOR.set('APP_PARAMS', appParams);
});
this.router.navigate(['app/dashboard']);
} }
ionViewDidEnter() { ionViewDidEnter() {
......
...@@ -81,6 +81,10 @@ const routes: Routes = [ ...@@ -81,6 +81,10 @@ const routes: Routes = [
path: 'lots-a-gagner', path: 'lots-a-gagner',
loadChildren: '../lots/lots-a-gagner/lots-a-gagner.module#LotsAGagnerPageModule' loadChildren: '../lots/lots-a-gagner/lots-a-gagner.module#LotsAGagnerPageModule'
}, },
{
path: 'favoris',
loadChildren: '../compte/favoris/favoris.module#FavorisPageModule'
},
] ]
} }
]; ];
......
<ion-menu contentId="content"> <ion-menu contentId="content">
<ion-header> <ion-header>
<ion-toolbar color="primary"> <ion-toolbar color="primary">
<div class="anonymous ion-text-center" *ngIf="_AUTH.infoNicename === 'anonymous'" padding>
<p no-margin>
<img src="../../../../assets/img/ionic3-ico.png" />
</p>
<ion-chip color="" outline="true">
Mode anonyme
</ion-chip>
<p no-margin>
<ion-button size="small" color="dark" (click)="logout()">
<ion-icon name="log-out"></ion-icon>
Déconnexion
</ion-button>
</p>
</div>
<div class="connected" *ngIf="_AUTH.infoNicename !== 'anonymous'">
<ion-grid> <ion-grid>
<ion-row> <ion-row>
<ion-col size="4"> <ion-col size="4">
...@@ -10,7 +25,7 @@ ...@@ -10,7 +25,7 @@
</ion-col> </ion-col>
<ion-col size="8"> <ion-col size="8">
<ion-text> <ion-text>
<h4>Nabil Sadki</h4> <h4>{{ _AUTH.infoFullname }}</h4>
</ion-text> </ion-text>
<ion-chip color="light" outline="true"> <ion-chip color="light" outline="true">
<ion-icon name="star"></ion-icon> <ion-icon name="star"></ion-icon>
...@@ -52,8 +67,8 @@ ...@@ -52,8 +67,8 @@
</ion-button> </ion-button>
</ion-menu-toggle> </ion-menu-toggle>
</ion-col> </ion-col>
<ion-col no-padding class="ion-text-end"> <ion-col no-padding class="column">
<ion-button size="small" color="dark" href="/login"> <ion-button size="small" color="dark" (click)="logout()">
<ion-icon name="log-out"></ion-icon> <ion-icon name="log-out"></ion-icon>
Déconnexion Déconnexion
</ion-button> </ion-button>
...@@ -62,6 +77,7 @@ ...@@ -62,6 +77,7 @@
</ion-grid> </ion-grid>
</ion-card> </ion-card>
</div>
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>
<ion-content> <ion-content>
......
...@@ -5,4 +5,9 @@ ion-avatar { ...@@ -5,4 +5,9 @@ ion-avatar {
ion-progress-bar { ion-progress-bar {
height: 10px; height: 10px;
border-radius: 5px; border-radius: 5px;
}
.anonymous {
img {
width: 50vw;
}
} }
\ No newline at end of file
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { AuthService } from '../../services/auth.service';
@Component({ @Component({
selector: 'app-menu', selector: 'app-menu',
...@@ -19,6 +21,11 @@ export class MenuPage implements OnInit { ...@@ -19,6 +21,11 @@ export class MenuPage implements OnInit {
icon: 'contacts' icon: 'contacts'
}, },
{ {
title: 'Favoris',
url: '/app/favoris',
icon: 'bookmark'
},
{
title: 'Mes mérites', title: 'Mes mérites',
url: '/app/mes-merites', url: '/app/mes-merites',
icon: 'ribbon' icon: 'ribbon'
...@@ -45,7 +52,15 @@ export class MenuPage implements OnInit { ...@@ -45,7 +52,15 @@ export class MenuPage implements OnInit {
} }
]; ];
constructor() { } constructor(
public router: Router,
public _AUTH: AuthService
) { }
logout() {
this._AUTH.logOut();
this.router.navigateByUrl('/login', { replaceUrl: true });
}
ngOnInit() { ngOnInit() {
// this._ALLO.presentLoading(); // this._ALLO.presentLoading();
......
...@@ -51,47 +51,56 @@ ...@@ -51,47 +51,56 @@
</ion-card-content> </ion-card-content>
</ion-card> </ion-card>
</div> </div>
<ion-card *ngFor="let trip of _TRIP.offersCardList" (click)="viewDetail(trip.id)" tappable no-margin margin-bottom> <div class="card-wrapper" *ngFor="let trip of _TRIP.offersCardList">
<div class="img-spinner-wrap ion-text-center"> <ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'add')"
<ion-spinner name="dots" *ngIf="trip.hidden"></ion-spinner> *ngIf="!trip.bookmarked" no-padding>
</div> <ion-icon name="heart-empty"></ion-icon>
<ion-img [src]="trip.thumb" [class.no-visibility]="trip.hidden" (ionImgDidLoad)="setImgVisible(trip)"></ion-img> </ion-button>
<ion-card-header> <ion-button color="light" fill="solid" class="bookmark" (click)="_TRIP.wishList(trip, 'remove')"
<ion-card-subtitle color="primary"> *ngIf="trip.bookmarked" no-padding>
<ion-icon name="pin"></ion-icon> <ion-icon name="heart" color="danger"></ion-icon>
<ion-label>{{ trip.location }}</ion-label> </ion-button>
<ion-badge fill="outline" *ngIf="trip.price_adult" color="warning"> <ion-card (click)="viewDetail(trip.id)" tappable no-margin margin-bottom>
-{{ ((trip.price_adult_before - trip.price_adult) * 100) / trip.price_adult_before | number:'1.0-0' }}% <div class="img-spinner-wrap ion-text-center">
</ion-badge> <ion-spinner name="dots" *ngIf="trip.hidden"></ion-spinner>
</ion-card-subtitle> </div>
<ion-card-title> <ion-img [src]="trip.thumb" [class.no-visibility]="trip.hidden" (ionImgDidLoad)="setImgVisible(trip)"></ion-img>
{{ trip.name | slice:0:100 }} <ion-card-header>
</ion-card-title> <ion-card-subtitle color="primary">
</ion-card-header> <ion-icon name="pin"></ion-icon>
<ion-label>{{ trip.location }}</ion-label>
<ion-badge fill="outline" *ngIf="trip.price_adult" color="warning">
-{{ ((trip.price_adult_before - trip.price_adult) * 100) / trip.price_adult_before | number:'1.0-0' }}%
</ion-badge>
</ion-card-subtitle>
<ion-card-title>
{{ trip.name | slice:0:100 }}
</ion-card-title>
</ion-card-header>
<!-- <ion-item> <!-- <ion-item>
<ion-icon name="pin" slot="start"></ion-icon> <ion-icon name="pin" slot="start"></ion-icon>
<ion-label>{{ trip.location }}</ion-label> <ion-label>{{ trip.location }}</ion-label>
<ion-button fill="outline" slot="end">View</ion-button> <ion-button fill="outline" slot="end">View</ion-button>
</ion-item> --> </ion-item> -->
<ion-card-content no-padding padding-horizontal padding-bottom> <ion-card-content no-padding padding-horizontal padding-bottom>
{{ trip.description | slice:0:130 }}... {{ trip.description | slice:0:130 }}...
</ion-card-content> </ion-card-content>
<ion-item *ngIf="trip.price_adult" color="primary" lines="none"> <ion-item *ngIf="trip.price_adult" color="primary" lines="none">
<ion-icon name="cash" slot="start"></ion-icon> <ion-icon name="cash" slot="start"></ion-icon>
<ion-button slot="end" class="before"> <ion-button slot="end" class="before">
<ion-text color="light"> <ion-text color="light">
({{ trip.price_adult_before }} Dh) ({{ trip.price_adult_before }} Dh)
</ion-text> </ion-text>
</ion-button> </ion-button>
<ion-button slot="end" color="light"> <ion-button slot="end" color="light">
<ion-text color="primary"> <ion-text color="primary">
{{ trip.price_adult }} Dh {{ trip.price_adult }} Dh
</ion-text> </ion-text>
</ion-button> </ion-button>
</ion-item> </ion-item>
</ion-card> </ion-card>
</div>
<ion-infinite-scroll threshold="100px" (ionInfinite)="loadData($event)"> <ion-infinite-scroll threshold="100px" (ionInfinite)="loadData($event)">
<ion-infinite-scroll-content loadingSpinner="bubbles" loadingText="Chargement..."> <ion-infinite-scroll-content loadingSpinner="bubbles" loadingText="Chargement...">
</ion-infinite-scroll-content> </ion-infinite-scroll-content>
......
...@@ -115,3 +115,25 @@ ul { ...@@ -115,3 +115,25 @@ ul {
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
} }
.card-wrapper {
position: relative;
.bookmark {
// background: var(--ion-color-light, #fff);
// border: 1px dotted var(--ion-color-dark, #000);
position: absolute;
right: 10px;
top: 10px;
--border-radius: 30px;
z-index: 9;
// width: 46px;
// height: 44px;
// padding: 10px;
ion-icon {
font-size: 24px;
margin: 6px;
&.ios{
margin: 6px 11px !important;
}
}
}
}
...@@ -69,4 +69,10 @@ export class OffresCartePage implements OnInit { ...@@ -69,4 +69,10 @@ export class OffresCartePage implements OnInit {
this.router.navigateByUrl('/app/details-offre/' + id); this.router.navigateByUrl('/app/details-offre/' + id);
} }
wishList(offer, action) {
this._TRIP.wishList(offer, action).then(result => {
offer = result;
});
}
} }
<ion-content> <ion-content padding>
<ion-list-header>Meilleures deals</ion-list-header> <!-- <ion-card color="light" margin-bottom> -->
<ion-text>
<p class="ion-text-center">
<img class="soon" src="../../../../assets/img/soon.png">
</p>
</ion-text>
<!-- </ion-card> -->
<ion-text class="ion-text-justify">
<p>
Que vous soyez détenteur(se) ou non de la Carte Testeur, cette section est ouverte à tout le monde, et permettra
dans un future proche de bénéficier des offres de nos partenaires.
</p>
<p>
Les plus fidéles seront <strong color="primary">trop bien</strong> récompensés!!
</p>
<p>
Restez à l'écoute!
</p>
</ion-text>
<!-- <ion-list-header>Meilleures deals</ion-list-header>
<div class="app"> <div class="app">
<ul class="hs"> <ul class="hs">
<li class="item">test</li> <li class="item">test</li>
...@@ -14,5 +33,5 @@ ...@@ -14,5 +33,5 @@
<ion-item> <ion-item>
Offre Offre
</ion-item> </ion-item>
</ion-list> </ion-list> -->
</ion-content> </ion-content>
\ No newline at end of file
...@@ -57,3 +57,9 @@ ul { ...@@ -57,3 +57,9 @@ ul {
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
} }
img.soon {
height: 30vh !important;
width: auto !important;
margin: 0 auto;
}
\ No newline at end of file
...@@ -13,64 +13,40 @@ ...@@ -13,64 +13,40 @@
<form class="list-form"> <form class="list-form">
<!-- <ion-item> <!-- <ion-item>
<ion-label color="dark" class="text-1x">Cacher l'écran d'accueil</ion-label> <ion-label color="dark" class="text-1x">Cacher l'écran d'accueil</ion-label>
<ion-toggle checked color="primary" [(ngModel)]="prm_mainslider" [ngModelOptions]="{standalone: true}" <ion-toggle checked color="primary" [(ngModel)]="prmMainslider" [ngModelOptions]="{standalone: true}"
(ionChange)="setParam('mainslider')"></ion-toggle> (ionChange)="setParam('mainslider')"></ion-toggle>
</ion-item> --> </ion-item> -->
<ion-item> <ion-item>
<ion-label color="dark" class="text-1x">Géo-notifications</ion-label> <ion-label color="dark" class="text-1x">Géo-notifications</ion-label>
<ion-toggle checked color="primary" [(ngModel)]="prm_geolocate" [ngModelOptions]="{standalone: true}" <ion-toggle color="primary" [(ngModel)]="prmGeolocate" [ngModelOptions]="{standalone: true}"
(ionChange)="setParam('geolocate')"></ion-toggle> (ionChange)="setParam('geolocate')"></ion-toggle>
</ion-item> </ion-item>
<ion-item> <ion-item>
<ion-label color="dark" class="text-1x">Rayon de détection</ion-label> <ion-label color="dark" class="text-1x">Rayon de détection</ion-label>
<ion-select class="text-primary" [(ngModel)]="prm_geoarea" [ngModelOptions]="{standalone: true}" <ion-select class="text-primary" [(ngModel)]="prmGeoarea" [ngModelOptions]="{standalone: true}"
(ionChange)="setParam('geoarea')"> (ionChange)="setParam('geoarea')">
<ion-select-option value="400">400m</ion-select-option> <ion-select-option *ngFor="let gOpt of geoAreaOptions | keyvalue" [value]="gOpt.key">{{ gOpt.value }}</ion-select-option>
<ion-select-option value="800">800m</ion-select-option>
<ion-select-option value="1200">1,2Km</ion-select-option>
<ion-select-option value="1600">1,6Km</ion-select-option>
<ion-select-option value="2000">2Km</ion-select-option>
</ion-select> </ion-select>
</ion-item> </ion-item>
<ion-item> <ion-item>
<ion-label color="dark" class="text-1x">Raffraichir la position GPS chaque</ion-label> <ion-label color="dark" class="text-1x">Raffraichir la position GPS chaque</ion-label>
<ion-select class="text-primary" [(ngModel)]="prm_trackdelay" [ngModelOptions]="{standalone: true}" <ion-select class="text-primary" [(ngModel)]="prmTrackdelay" [ngModelOptions]="{standalone: true}"
(ionChange)="setParam('trackdelay')"> (ionChange)="setParam('trackdelay')">
<ion-select-option value="60000">minute</ion-select-option> <ion-select-option *ngFor="let tdOpt of trackDelayOptions | keyvalue" [value]="tdOpt.key">{{ tdOpt.value }}</ion-select-option>
<ion-select-option value="120000">2 minutes</ion-select-option>
<ion-select-option value="180000">3 minutes</ion-select-option>
<ion-select-option value="240000">4 minutes</ion-select-option>
<ion-select-option value="300000">5 minutes</ion-select-option>
<ion-select-option value="360000">6 minutes</ion-select-option>
<ion-select-option value="420000">7 minutes</ion-select-option>
<ion-select-option value="480000">8 minutes</ion-select-option>
<ion-select-option value="540000">9 minutes</ion-select-option>
<ion-select-option value="600000">10 minutes</ion-select-option>
</ion-select> </ion-select>
</ion-item> </ion-item>
<ion-item> <ion-item>
<ion-label color="dark" class="text-1x">Réaffichage des notifications</ion-label> <ion-label color="dark" class="text-1x">Réaffichage des notifications</ion-label>
<ion-select class="text-primary" [(ngModel)]="prm_notiftime" [ngModelOptions]="{standalone: true}" <ion-select class="text-primary" [(ngModel)]="prmNotiftime" [ngModelOptions]="{standalone: true}"
(ionChange)="setParam('notiftime')"> (ionChange)="setParam('notiftime')">
<ion-select-option value="5">5 min</ion-select-option> <ion-select-option *ngFor="let ntOpt of notifTimeOptions | keyvalue" [value]="ntOpt.key">{{ ntOpt.value }}</ion-select-option>
<ion-select-option value="15">15 min</ion-select-option>
<ion-select-option value="30">30 min</ion-select-option>
<ion-select-option value="45">45 min</ion-select-option>
<ion-select-option value="60">1 h</ion-select-option>
<ion-select-option value="120">2 h</ion-select-option>
<ion-select-option value="480">4 h</ion-select-option>
<ion-select-option value="960">8 h</ion-select-option>
<ion-select-option value="2880">1 j</ion-select-option>
</ion-select> </ion-select>
</ion-item> </ion-item>
<ion-item> <ion-item>
<ion-label color="dark" class="text-1x">Notifications par rafraîchissement</ion-label> <ion-label color="dark" class="text-1x">Notifications par rafraîchissement</ion-label>
<ion-select class="text-primary" [(ngModel)]="prm_notifnbr" [ngModelOptions]="{standalone: true}" <ion-select class="text-primary" [(ngModel)]="prmNotifnbr" [ngModelOptions]="{standalone: true}"
(ionChange)="setParam('notifnbr')"> (ionChange)="setParam('notifnbr')">
<ion-select-option value="2">Pas plus de 2 à la fois</ion-select-option> <ion-select-option *ngFor="let nnOpt of notifNbrOptions | keyvalue" [value]="nnOpt.key">{{ nnOpt.value }}</ion-select-option>
<ion-select-option value="4">Pas plus de 4 à la fois</ion-select-option>
<ion-select-option value="6">Pas plus de 6 à la fois</ion-select-option>
<ion-select-option value="all">Afficher toutes les notifications</ion-select-option>
</ion-select> </ion-select>
</ion-item> </ion-item>
</form> </form>
......
...@@ -11,12 +11,49 @@ import { AlloService } from '../../services/allo-service'; ...@@ -11,12 +11,49 @@ import { AlloService } from '../../services/allo-service';
}) })
export class ParamsPage implements OnInit { export class ParamsPage implements OnInit {
public prm_mainslider = true; public prmMainslider = true;
public prm_geolocate = false; public prmGeolocate = false;
public prm_geoarea: any = 400; public prmGeoarea: any = 400;
public prm_notiftime = 15; public prmNotiftime = 15;
public prm_trackdelay = 60000; public prmTrackdelay = 60000;
public prm_notifnbr: any = 'all'; public prmNotifnbr: any = 'all';
public geoAreaOptions = {
400: '400m',
800: '800m',
1200: '1,2Km',
1600: '1,6m',
2000: '2Km',
};
public trackDelayOptions = {
60000: '1 minute',
120000: '2 minutes',
180000: '3 minutes',
240000: '4 minutes',
300000: '5 minutes',
360000: '6 minutes',
420000: '7 minutes',
480000: '8 minutes',
540000: '9 minutes',
600000: '10 minutes',
};
public notifTimeOptions = {
5: '5 minutes',
15: '15 minutes',
30: '30 minutes',
45: '45 minutes',
60: '1 heure',
120: '2 heure',
480: '4 heure',
960: '8 heure',
2880: '1 jour',
};
public notifNbrOptions = {
2: 'Pas plus de 2 à la fois',
4: 'Pas plus de 4 à la fois',
6: 'Pas plus de 6 à la fois',
all: 'Afficher toutes les notifications',
};
constructor( constructor(
private _STOR: Storage, private _STOR: Storage,
...@@ -24,66 +61,50 @@ export class ParamsPage implements OnInit { ...@@ -24,66 +61,50 @@ export class ParamsPage implements OnInit {
private _LOCAT: LocationService, private _LOCAT: LocationService,
private _ALLO: AlloService private _ALLO: AlloService
) { ) {
this._STOR.get('PARAM_mainslider').then((val) => { this._STOR.get('APP_PARAMS').then((appParams) => {
if (val !== null) { if (appParams !== null) {
this.prm_mainslider = val; this.prmGeolocate = appParams.PARAM_geolocate;
} this.prmGeoarea = appParams.PARAM_geoarea;
}); this.prmNotiftime = appParams.PARAM_notiftime;
this._STOR.get('PARAM_geolocate').then((val) => { this.prmTrackdelay = appParams.PARAM_trackdelay;
if (val !== null) { this.prmNotifnbr = appParams.PARAM_notifnbr;
this.prm_geolocate = val;
}
});
this._STOR.get('PARAM_geoarea').then((val) => {
if (val !== null) {
this.prm_geoarea = val;
}
});
this._STOR.get('PARAM_notiftime').then((val) => {
if (val !== null) {
this.prm_notiftime = val;
}
});
this._STOR.get('PARAM_trackdelay').then((val) => {
if (val !== null) {
this.prm_trackdelay = val;
}
});
this._STOR.get('PARAM_notifnbr').then((val) => {
if (val !== null) {
this.prm_notifnbr = val;
} }
}); });
} }
setParam(name) { setParam(name) {
switch (name) { this._STOR.get('APP_PARAMS').then((appParams) => {
case 'mainslider': if (appParams !== null) {
this._ALLO.setParam('mainslider', this.prm_mainslider); switch (name) {
break; // case 'mainslider':
case 'geolocate': // this._ALLO.setParam('mainslider', this.prm_mainslider);
this._ALLO.setParam('geolocate', this.prm_geolocate); // break;
if (this.prm_geolocate) { case 'geolocate':
this._PERM.checkGps(); appParams.PARAM_geolocate = this.prmGeolocate;
this._LOCAT.initLocator(); if (this.prmGeolocate) {
} else { this._PERM.checkGps();
this._LOCAT.stopLocator(); this._LOCAT.initLocator();
} else {
this._LOCAT.stopLocator();
}
break;
case 'geoarea':
appParams.PARAM_geoarea = +this.prmGeoarea;
break;
case 'notiftime':
appParams.PARAM_notiftime = +this.prmNotiftime;
break;
case 'notifnbr':
appParams.PARAM_notifnbr = +this.prmNotifnbr;
break;
case 'trackdelay':
appParams.PARAM_trackdelay = +this.prmTrackdelay;
this._LOCAT.restartTracking();
break;
} }
break; this._STOR.set('APP_PARAMS', appParams);
case 'geoarea': }
this._ALLO.setParam('geoarea', +this.prm_geoarea); });
break;
case 'notiftime':
this._ALLO.setParam('notiftime', +this.prm_notiftime);
break;
case 'notifnbr':
this._ALLO.setParam('notifnbr', +this.prm_notifnbr);
break;
case 'trackdelay':
this._ALLO.setParam('trackdelay', +this.prm_trackdelay);
this._LOCAT.restartTracking();
break;
}
} }
ngOnInit() { ngOnInit() {
......
import { LoadingController, AlertController } from "@ionic/angular"; import { LoadingController, AlertController, ToastController } from '@ionic/angular';
import { Injectable } from "@angular/core"; import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage'; import { Storage } from '@ionic/storage';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
...@@ -12,44 +12,25 @@ export class AlloService { ...@@ -12,44 +12,25 @@ export class AlloService {
public prmNotiftime = 15; public prmNotiftime = 15;
public prmTrackdelay = 60000; public prmTrackdelay = 60000;
public prmNotifnbr: any = 'all'; public prmNotifnbr: any = 'all';
public loading;
constructor( constructor(
private alertCtrl: AlertController, private alertCtrl: AlertController,
private loadingCtrl: LoadingController, private loadingCtrl: LoadingController,
private toastCtrl: ToastController,
private _STOR: Storage private _STOR: Storage
) { ) {
this.setDefaultParams(); this.setDefaultParams();
} }
setDefaultParams() { setDefaultParams() {
this._STOR.get('PARAM_mainslider').then((val) => { this._STOR.get('APP_PARAMS').then((appParams) => {
if (val !== null) { if (appParams !== null) {
this.prmMainslider = val; this.prmGeolocate = appParams.PARAM_geolocate;
} this.prmGeoarea = appParams.PARAM_geoarea;
}); this.prmNotiftime = appParams.PARAM_notiftime;
this._STOR.get('PARAM_geolocate').then((val) => { this.prmTrackdelay = appParams.PARAM_trackdelay;
if (val !== null) { this.prmNotifnbr = appParams.PARAM_notifnbr;
this.prmGeolocate = val;
}
});
this._STOR.get('PARAM_geoarea').then((val) => {
if (val !== null) {
this.prmGeoarea = val;
}
});
this._STOR.get('PARAM_notiftime').then((val) => {
if (val !== null) {
this.prmNotiftime = val;
}
});
this._STOR.get('PARAM_trackdelay').then((val) => {
if (val !== null) {
this.prmTrackdelay = val;
}
});
this._STOR.get('PARAM_notifnbr').then((val) => {
if (val !== null) {
this.prmNotifnbr = val;
} }
}); });
} }
...@@ -111,19 +92,38 @@ export class AlloService { ...@@ -111,19 +92,38 @@ export class AlloService {
async presentLoading() { async presentLoading() {
this.showPage = false; this.showPage = false;
const loading = await this.loadingCtrl.create({ this.loading = await this.loadingCtrl.create({
// spinner: null, // spinner: null,
duration: 2000, duration: 0,
message: 'Chargement...', message: 'Chargement...',
translucent: true, translucent: true,
cssClass: 'custom-class custom-loading' cssClass: 'custom-class custom-loading'
}); });
return await loading.present().then(() => { return await this.loading.present().then(() => {
this.showPage = true; this.showPage = true;
}); });
} }
dismissLoading() { dismissLoading() {
this.loadingCtrl.dismiss(); this.loading.dismiss();
}
async presentToast(header, message, position) {
const toast = await this.toastCtrl.create({
message: message,
duration: 3000,
header: header,
position: position,
buttons: [
{
text: 'OK',
role: 'cancel',
handler: () => {
console.log('Cancel clicked');
}
}
]
});
toast.present();
} }
} }
import { TestBed } from '@angular/core/testing';
import { AuthGuardService } from './auth-guard.service';
describe('AuthGuardService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: AuthGuardService = TestBed.get(AuthGuardService);
expect(service).toBeTruthy();
});
});
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import { AuthService } from './auth.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuardService implements CanActivate {
constructor(
public authService: AuthService
) { }
canActivate(): boolean {
return this.authService.isAuthenticated();
}
}
import { TestBed } from '@angular/core/testing';
import { AuthService } from './auth.service';
describe('AuthService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: AuthService = TestBed.get(AuthService);
expect(service).toBeTruthy();
});
});
import { Injectable } from '@angular/core';
import { Platform } from '@ionic/angular';
import { Storage } from '@ionic/storage';
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { HTTP } from '@ionic-native/http/ngx';
import { Router } from '@angular/router';
import { BehaviorSubject } from 'rxjs';
import { AlloService } from './allo-service';
// import * as firebase from 'firebase/app';
// import 'firebase/auth';
import * as Config from '../constants';
@Injectable({
providedIn: 'root'
})
export class AuthService {
public infoNicename;
public infoFullname;
public infoEmail;
authState = new BehaviorSubject(false);
authProfile = new BehaviorSubject(false);
constructor(
private platform: Platform,
public storage: Storage,
private http: HttpClient,
private httpAdv: HTTP,
private router: Router,
private _ALLO: AlloService
) {
this.platform.ready().then(() => {
this.storage.get('wpUser').then(wpUser => {
if (wpUser) {
this.infoNicename = wpUser.user_nicename;
this.infoFullname = wpUser.user_display_name;
this.infoEmail = wpUser.user_email;
}
});
this.isLoggedIn();
this.isAnonymous();
});
}
isAuthenticated() {
return this.authState.value;
}
getAuthState() {
return this.authState;
}
isLoggedIn() {
this.storage.get('wpUser').then((wpUser) => {
if (wpUser) {
console.log('wpuser found')
this.authState.next(true);
}
});
}
isAnonymous() {
this.storage.get('wpUser').then((wpUser) => {
if (wpUser && wpUser.hasOwnProperty('user_nicename') && wpUser.user_nicename === 'anonymous') {
this.authProfile.next(true);
}
});
}
// Wordpress
getUser() {
return this.storage.get('wpUser');
}
setUser(user) {
this.infoNicename = user.user_nicename;
this.infoFullname = user.user_display_name;
this.infoEmail = user.user_email;
this.authState.next(true);
return this.storage.set('wpUser', user);
}
logOut() {
this.authState.next(false);
return this.storage.remove('wpUser');
}
doLogin(values) {
let authData = {
username: values.email,
password: values.password
};
return new Promise<any>((resolve, reject) => {
if (this.platform.is('cordova')) {
this.httpAdv.post(Config.WORDPRESS_URL + 'wp-json/jwt-auth/v1/token', authData, {}).then(
res => {
const data = JSON.parse(res.data);
this.setUser(data);
this.setUserInfo(data.token);
this.authState.next(true);
resolve(res);
},
err => reject(err)
);
} else {
this.http.post(Config.WORDPRESS_URL + 'wp-json/jwt-auth/v1/token', authData).subscribe(
res => {
const data: any = res;
this.setUser(data);
this.setUserInfo(data.token);
this.authState.next(true);
resolve(data);
},
err => reject(err)
);
}
});
}
setUserInfo(token) {
return new Promise<any>((resolve, reject) => {
if (this.platform.is('cordova')) {
let header: Headers = new Headers();
header.append('Authorization', 'Bearer ' + token);
this.httpAdv.get(
Config.WORDPRESS_URL + 'wp-json/wp/v2/users/me',
{},
{ headers: header }
).then(
res => {
console.log(res);
resolve(res);
},
err => reject(err)
);
} else {
this.http.get(
// Config.WORDPRESS_URL + 'wp-json/wp/v2/users/me',
Config.WORDPRESS_URL + 'wp-json/atapi/loggedinuser',
{ headers: { Authorization: 'Bearer ' + token } }
).subscribe(
res => {
console.log(res);
resolve(res);
},
err => reject(err)
);
}
});
}
doRegister(user_data, token) {
return this.http.post(Config.WORDPRESS_REST_API_URL + 'users?token=' + token, user_data);
}
validateAuthToken(token) {
this._ALLO.presentLoading();
if (this.platform.is('cordova')) {
let header: Headers = new Headers();
header.append('Authorization', 'Bearer ' + token);
return this.httpAdv.post(
Config.WORDPRESS_URL + 'wp-json/jwt-auth/v1/token/validate',
{},
{ headers: header }
).then(result => {
this.processeAuthToken(result);
}).catch(error => {
this._ALLO.dismissLoading();
console.log(error);
});
} else {
let header: HttpHeaders = new HttpHeaders();
header.append('Authorization', 'Bearer ' + token);
return this.http.post(
Config.WORDPRESS_URL + 'wp-json/jwt-auth/v1/token/validate',
{},
{ headers: header }
).subscribe((result: any) => {
this.processeAuthToken(result);
}, error => {
this._ALLO.dismissLoading();
console.log(error);
});
}
}
processeAuthToken(result: any) {
this._ALLO.dismissLoading();
if (result.data.status !== 200) {
if (this.router.url === '/login') {
alert('Votre session est expirée. Veuillez vous reconnecter');
}
} else {
this.router.navigateByUrl('/mainslider', { replaceUrl: true });
}
}
// Firebase
firebaseRegister(value) {
// return new Promise<any>((resolve, reject) => {
// firebase.auth().createUserWithEmailAndPassword(value.email, value.password)
// .then(
// res => resolve(res),
// err => reject(err));
// })
}
firebaseLogin(value) {
// return new Promise<any>((resolve, reject) => {
// firebase.auth().signInWithEmailAndPassword(value.email, value.password)
// .then(
// res => resolve(res),
// err => reject(err));
// });
}
firebaseLogout() {
// return new Promise((resolve, reject) => {
// if (firebase.auth().currentUser) {
// firebase.auth().signOut()
// .then(() => {
// console.log("LOG Out");
// resolve();
// }).catch((error) => {
// reject();
// });
// }
// })
}
firebaseUserDetails() {
// return firebase.auth().currentUser;
}
}
...@@ -3,6 +3,7 @@ import { HTTP } from '@ionic-native/http/ngx'; ...@@ -3,6 +3,7 @@ import { HTTP } from '@ionic-native/http/ngx';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Platform } from '@ionic/angular'; import { Platform } from '@ionic/angular';
import { Storage } from '@ionic/storage'; import { Storage } from '@ionic/storage';
import { Router } from '@angular/router';
import { AlloService } from './allo-service'; import { AlloService } from './allo-service';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
...@@ -11,6 +12,7 @@ export class TripService { ...@@ -11,6 +12,7 @@ export class TripService {
public filtredProducts: Array<any> = []; public filtredProducts: Array<any> = [];
public offersCardList: Array<any>; public offersCardList: Array<any>;
public offersCardListPointer = 1; public offersCardListPointer = 1;
public wishedProducts: Array<any> = [];
public brands: Array<any> = []; public brands: Array<any> = [];
public cats: Array<any> = []; public cats: Array<any> = [];
public request: any; public request: any;
...@@ -20,6 +22,7 @@ export class TripService { ...@@ -20,6 +22,7 @@ export class TripService {
private http: HttpClient, private http: HttpClient,
private httpAdv: HTTP, private httpAdv: HTTP,
private storage: Storage, private storage: Storage,
private router: Router,
private _ALLO: AlloService private _ALLO: AlloService
) { ) {
this.fetchData(); this.fetchData();
...@@ -52,7 +55,16 @@ export class TripService { ...@@ -52,7 +55,16 @@ export class TripService {
var products = this._ALLO.jsonToArray(data.products); var products = this._ALLO.jsonToArray(data.products);
this.products = this._ALLO.shuffleArray(products); this.products = this._ALLO.shuffleArray(products);
this.products.forEach((element) => { element.hidden = true; }); this.storage.get('WISHLIST').then(wishList => {
this.products.forEach((element) => {
element.hidden = true;
element.bookmarked = false;
if (wishList.indexOf(element.id) > -1) {
element.bookmarked = true;
this.wishedProducts.push(element);
}
});
});
setTimeout(() => { setTimeout(() => {
this.filtredProducts = this.products; this.filtredProducts = this.products;
this.offersCardList = this.filtredProducts.slice(0, 2); this.offersCardList = this.filtredProducts.slice(0, 2);
...@@ -111,4 +123,44 @@ export class TripService { ...@@ -111,4 +123,44 @@ export class TripService {
this.offersCardList = this.filtredProducts.slice(0, 2); this.offersCardList = this.filtredProducts.slice(0, 2);
this.offersCardListPointer = 1; this.offersCardListPointer = 1;
} }
viewDetail(id) {
this.router.navigateByUrl('/app/details-offre/' + id);
}
wishList(offer, action) {
return new Promise<any>((resolve, reject) => {
this.storage.get('WISHLIST').then(
wishList => {
if (wishList) {
switch (action) {
case 'add':
wishList.push(offer.id);
this.wishedProducts.push(offer);
wishList = Array.from(new Set(wishList));
offer.bookmarked = true;
break;
case 'remove':
if (wishList.indexOf(offer.id) > -1) {
wishList.splice(wishList.indexOf(offer.id), 1);
this.wishedProducts = this.wishedProducts.filter(item => {
return item.id !== offer.id;
});
}
offer.bookmarked = false;
break;
}
this.storage.set('WISHLIST', wishList).then(res => {
resolve(offer);
},
err => reject(err)
);
} else {
resolve(wishList);
}
},
err => reject(err)
);
});
}
} }
export const environment = { export const environment = {
production: true production: true,
firebase: {
apiKey: 'AIzaSyDCp8ZFLfMtRtCIuFCYbmmcBU5jcu64MIg',
authDomain: 'allo-testeurs-1546348822085.firebaseapp.com',
databaseURL: 'https://allo-testeurs-1546348822085.firebaseio.com',
projectId: 'allo-testeurs-1546348822085',
storageBucket: '',
messagingSenderId: '536597038498',
appId: '1:536597038498:web:7896f1f4b2960e72479efb'
}
}; };
...@@ -3,7 +3,16 @@ ...@@ -3,7 +3,16 @@
// The list of file replacements can be found in `angular.json`. // The list of file replacements can be found in `angular.json`.
export const environment = { export const environment = {
production: false production: false,
firebase: {
apiKey: 'AIzaSyDCp8ZFLfMtRtCIuFCYbmmcBU5jcu64MIg',
authDomain: 'allo-testeurs-1546348822085.firebaseapp.com',
databaseURL: 'https://allo-testeurs-1546348822085.firebaseio.com',
projectId: 'allo-testeurs-1546348822085',
storageBucket: '',
messagingSenderId: '536597038498',
appId: '1:536597038498:web:7896f1f4b2960e72479efb'
}
}; };
/* /*
......
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