From 27fde80ff2fc8684f207d0ef5574fc628a6c22c2 Mon Sep 17 00:00:00 2001 From: Avinash Maurya Date: Mon, 30 Dec 2019 18:57:00 +0530 Subject: [PATCH] #Added location popups --- angular.json | 6 +- ngsw-config.json | 2 +- package-lock.json | 8 + package.json | 1 + src/app/app.component.html | 5 +- .../landing-page/landing-page.component.ts | 29 ++-- .../location-dialog.component.html | 13 ++ .../location-dialog.component.scss | 28 ++++ .../location-dialog.component.ts | 143 ++++++++++++++++++ .../location-popup.component.html | 10 ++ .../location-popup.component.scss | 9 ++ .../location-popup.component.ts | 44 ++++++ .../shared-components.module.ts | 5 +- src/assets/img/sad.svg | 2 + src/favicon.ico | Bin 948 -> 0 bytes src/favicon.png | Bin 0 -> 3586 bytes src/index.html | 2 +- 17 files changed, 283 insertions(+), 24 deletions(-) create mode 100644 src/app/shared/shared-components/location-dialog/location-dialog.component.html create mode 100644 src/app/shared/shared-components/location-dialog/location-dialog.component.scss create mode 100644 src/app/shared/shared-components/location-dialog/location-dialog.component.ts create mode 100644 src/app/shared/shared-components/location-popup/location-popup.component.html create mode 100644 src/app/shared/shared-components/location-popup/location-popup.component.scss create mode 100644 src/app/shared/shared-components/location-popup/location-popup.component.ts create mode 100644 src/assets/img/sad.svg delete mode 100644 src/favicon.ico create mode 100644 src/favicon.png diff --git a/angular.json b/angular.json index 14ea9a0..11e772b 100644 --- a/angular.json +++ b/angular.json @@ -24,7 +24,7 @@ "tsConfig": "tsconfig.app.json", "aot": false, "assets": [ - "src/favicon.ico", + "src/favicon.png", "src/assets", "src/manifest.webmanifest" ], @@ -92,7 +92,7 @@ "tsConfig": "tsconfig.spec.json", "karmaConfig": "karma.conf.js", "assets": [ - "src/favicon.ico", + "src/favicon.png", "src/assets", "src/manifest.webmanifest" ], @@ -130,4 +130,4 @@ } }}, "defaultProject": "zataakse" -} \ No newline at end of file +} diff --git a/ngsw-config.json b/ngsw-config.json index 4ddf1a7..a7ecb5e 100644 --- a/ngsw-config.json +++ b/ngsw-config.json @@ -7,7 +7,7 @@ "installMode": "prefetch", "resources": { "files": [ - "/favicon.ico", + "/favicon.png", "/index.html", "/manifest.webmanifest", "/*.css", diff --git a/package-lock.json b/package-lock.json index 0d8bfb5..fbc5605 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8037,6 +8037,14 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "ngx-device-detector": { + "version": "1.3.20", + "resolved": "https://registry.npmjs.org/ngx-device-detector/-/ngx-device-detector-1.3.20.tgz", + "integrity": "sha512-juYwd4Z5ikCDf6TnnkU44BmEsJVF50V9+85dQ9PW0VhFjxfKEHQ1nLME0ticYA7yKYj4FNQuHh4qazBSu4nkMQ==", + "requires": { + "tslib": "^1.9.0" + } + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", diff --git a/package.json b/package.json index 0028b10..6803e12 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@ngx-translate/core": "^11.0.1", "@ngx-translate/http-loader": "^4.0.0", "hammerjs": "^2.0.8", + "ngx-device-detector": "^1.3.20", "rxjs": "~6.4.0", "tslib": "^1.10.0", "zone.js": "~0.9.1" diff --git a/src/app/app.component.html b/src/app/app.component.html index f0de6ea..41003ed 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,6 +1,5 @@
- - - + +
diff --git a/src/app/shared/shared-components/landing-page/landing-page.component.ts b/src/app/shared/shared-components/landing-page/landing-page.component.ts index cfdf295..e07c558 100644 --- a/src/app/shared/shared-components/landing-page/landing-page.component.ts +++ b/src/app/shared/shared-components/landing-page/landing-page.component.ts @@ -4,6 +4,7 @@ import { Router } from '@angular/router'; // import { PrelaunchService } from '../prelaunch.service'; // import { CookieService } from 'src/app/shared/services/cookie.service'; import { MatSnackBar, MatBottomSheet, MatDialog } from '@angular/material'; +import { LocationPopupComponent } from '../location-popup/location-popup.component'; // import { LocationPopupComponent } from '../location-popup/location-popup.component'; @Component({ @@ -96,14 +97,14 @@ export class LandingPageComponent implements OnInit, OnDestroy { } onSubmitButtonClick() { - // const disRef = this.bottomsheet.open(LocationPopupComponent, { - // data: { - // isLocationNotAllowed: false, - // } - // }); - // disRef.afterDismissed().subscribe(() => { - // this.setCurrentLocation(); - // }); + const disRef = this.bottomsheet.open(LocationPopupComponent, { + data: { + isLocationNotAllowed: false, + } + }); + disRef.afterDismissed().subscribe(() => { + this.setCurrentLocation(); + }); } setCurrentLocation() { @@ -113,7 +114,6 @@ export class LandingPageComponent implements OnInit, OnDestroy { position => { const latitude = position.coords.latitude; const longitude = position.coords.longitude; - // this.cookieService.setLocationPermissionStatus(true); // this.prelaunchService.setLocationData(latitude, longitude); this.router.navigate(['login-signup']); }, @@ -121,12 +121,11 @@ export class LandingPageComponent implements OnInit, OnDestroy { // User blocked location // LocationPopupComponent if (error.code === 1) { - // this.bottomsheet.open(LocationPopupComponent, { - // data: { - // isLocationNotAllowed: true, - // } - // }); - // this.cookieService.setLocationPermissionStatus(false); + this.bottomsheet.open(LocationPopupComponent, { + data: { + isLocationNotAllowed: true, + } + }); } console.log(error); } diff --git a/src/app/shared/shared-components/location-dialog/location-dialog.component.html b/src/app/shared/shared-components/location-dialog/location-dialog.component.html new file mode 100644 index 0000000..0080e1b --- /dev/null +++ b/src/app/shared/shared-components/location-dialog/location-dialog.component.html @@ -0,0 +1,13 @@ +
+
+ +
+
+ +

Step: {{ browser.step }}

+ +

{{ browser.text }}

+
+
diff --git a/src/app/shared/shared-components/location-dialog/location-dialog.component.scss b/src/app/shared/shared-components/location-dialog/location-dialog.component.scss new file mode 100644 index 0000000..1eb9441 --- /dev/null +++ b/src/app/shared/shared-components/location-dialog/location-dialog.component.scss @@ -0,0 +1,28 @@ +.locationdialog-conatiner { + position: relative; + padding: 15px 10px; + .cross { + position: absolute; + right: 5px; + top: -5px; + margin: 20px; + width: 20px; + height: 20px; + } + background-color: #f6f6f6; + overflow-y: auto; + overflow-x: hidden; + max-height: 75vh; + .browser-content { + margin: 15px 0px; + img { + width: 100%; + height: auto; + } + h3 { + font-weight: bolder; + text-decoration: underline; + text-align: center; + } + } +} diff --git a/src/app/shared/shared-components/location-dialog/location-dialog.component.ts b/src/app/shared/shared-components/location-dialog/location-dialog.component.ts new file mode 100644 index 0000000..ad49ffb --- /dev/null +++ b/src/app/shared/shared-components/location-dialog/location-dialog.component.ts @@ -0,0 +1,143 @@ +import { Component, OnInit } from '@angular/core'; +import { DeviceDetectorService } from 'ngx-device-detector'; +import { MatBottomSheetRef } from '@angular/material'; + +export const BROWSERS = { + CHROME: 'Chrome', + FIREFOX: 'Firefox', + SAFARI: 'Safari', + OPERA: 'Opera', + IE: 'IE', + MS_EDGE: 'MS-Edge', + MS_EDGE_CHROMIUM: 'MS-Edge-Chromium', + FB_MESSANGER: 'FB-Messanger', + SAMSUNG: 'Samsung', + UCBROWSER: 'UC-Browser', + UNKNOWN: 'Unknown' +}; +@Component({ + selector: 'app-location-dialog', + templateUrl: './location-dialog.component.html', + styleUrls: ['./location-dialog.component.scss'], +}) +export class LocationDialogComponent implements OnInit { + selectedBrowser = []; + stepsMap = { + [BROWSERS.CHROME]: [ + { + step: '1', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '2', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '3', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + ], + [BROWSERS.MS_EDGE]: [ + { + step: '1', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '2', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '3', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + ], + [BROWSERS.FIREFOX]: [ + { + step: '1', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '2', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '3', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + ], + [BROWSERS.SAFARI]: [ + { + step: '1', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '2', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '3', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + ], + [BROWSERS.UNKNOWN]: [ + { + step: '1', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '2', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '3', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + ], + }; + + chrome = [ + { + step: '1', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '2', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + { + step: '3', + image: 'https://password-managers.bestreviews.net/files/six-web-browsers.png', + text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.", + }, + ]; + deviceInfo: any; + + constructor(private deviceService: DeviceDetectorService, private bottomRef: MatBottomSheetRef) {} + + ngOnInit() { + console.log('hello `Home` component'); + this.deviceInfo = this.deviceService.getDeviceInfo(); + this.selectedBrowser = this.stepsMap[this.deviceInfo.browser]; + } + + closePage() { + this.bottomRef.dismiss(); + } +} diff --git a/src/app/shared/shared-components/location-popup/location-popup.component.html b/src/app/shared/shared-components/location-popup/location-popup.component.html new file mode 100644 index 0000000..45d4540 --- /dev/null +++ b/src/app/shared/shared-components/location-popup/location-popup.component.html @@ -0,0 +1,10 @@ +
+ gift +
{{ 'MAIN_PAGE.OFFER_NEAR_ME' | translate }}
+ +
+
+ gift +
{{ 'MAIN_PAGE.NEED_LOCATION_FOR_OFFER' | translate }}
+ +
diff --git a/src/app/shared/shared-components/location-popup/location-popup.component.scss b/src/app/shared/shared-components/location-popup/location-popup.component.scss new file mode 100644 index 0000000..4f74504 --- /dev/null +++ b/src/app/shared/shared-components/location-popup/location-popup.component.scss @@ -0,0 +1,9 @@ +.location-popup-content-area{ + display: flex; + flex-flow: column; + padding: 10px; + .content{ + padding: 13px; + text-align: center; + } +} diff --git a/src/app/shared/shared-components/location-popup/location-popup.component.ts b/src/app/shared/shared-components/location-popup/location-popup.component.ts new file mode 100644 index 0000000..8490fd1 --- /dev/null +++ b/src/app/shared/shared-components/location-popup/location-popup.component.ts @@ -0,0 +1,44 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { MatDialog, MatBottomSheetRef, MAT_DIALOG_DATA, MAT_BOTTOM_SHEET_DATA, MatBottomSheet } from '@angular/material'; +import { LocationDialogComponent } from '../location-dialog/location-dialog.component'; + +@Component({ + selector: 'app-location-popup', + templateUrl: './location-popup.component.html', + styleUrls: ['./location-popup.component.scss'] +}) +export class LocationPopupComponent implements OnInit { + isLocationNotAllowed = false; + constructor(private bottomSheet: MatBottomSheet, + private bottomSheetRef: MatBottomSheetRef, + @Inject(MAT_BOTTOM_SHEET_DATA) public data: any) { + this.isLocationNotAllowed = data.isLocationNotAllowed; + } + + ngOnInit() { + } + + gotoHelpForLocation() { + console.log('goto help'); + this.bottomSheetRef.dismiss(); + this.openDialog(); + } + + openDialog(): void { + const dialogRef = this.bottomSheet.open(LocationDialogComponent, { + data: null, + }); + + dialogRef.afterDismissed().subscribe((result) => { + // Navigate to page + console.log('The dialog was closed', result); + }); + } + + onAllow() { + this.bottomSheetRef.dismiss(); + } + + + +} diff --git a/src/app/shared/shared-components/shared-components.module.ts b/src/app/shared/shared-components/shared-components.module.ts index 5806bde..604e734 100644 --- a/src/app/shared/shared-components/shared-components.module.ts +++ b/src/app/shared/shared-components/shared-components.module.ts @@ -4,16 +4,19 @@ import { SplashScreenComponent } from './splash-screen/splash-screen.component'; import { LandingPageComponent } from './landing-page/landing-page.component'; import { MaterialModule } from '../material-module/material.module'; import { TranslateModule } from '@ngx-translate/core'; +import { LocationDialogComponent } from './location-dialog/location-dialog.component'; +import { LocationPopupComponent } from './location-popup/location-popup.component'; @NgModule({ - declarations: [SplashScreenComponent, LandingPageComponent], + declarations: [SplashScreenComponent, LandingPageComponent, LocationPopupComponent, LocationDialogComponent], imports: [ CommonModule, MaterialModule, TranslateModule.forChild() ], + entryComponents: [LocationPopupComponent, LocationDialogComponent], exports: [SplashScreenComponent, LandingPageComponent] }) export class SharedComponentsModule { } diff --git a/src/assets/img/sad.svg b/src/assets/img/sad.svg new file mode 100644 index 0000000..2d21c05 --- /dev/null +++ b/src/assets/img/sad.svg @@ -0,0 +1,2 @@ + + diff --git a/src/favicon.ico b/src/favicon.ico deleted file mode 100644 index 997406ad22c29aae95893fb3d666c30258a09537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 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 IM6N<$f|noX5C8xG literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index 260d341..7e25592 100644 --- a/src/index.html +++ b/src/index.html @@ -5,7 +5,7 @@ Zataakse - +