{"version":3,"sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./src/environments/environment.prod.ts","./src/app/core/constants/app-constants.ts","./src/app/core/material/material.module.ts","./src/app/core/core.module.ts","./src/app/core/services/language.service.ts","./src/app/core/services/storage.service.ts","./src/app/data/services/data.service.ts","./src/app/layout/pages/landing/landing.component.ts","./src/app/layout/pages/landing/landing.component.html","./src/app/core/guards/user-registered-guard.service.ts","./src/app/shared/components/faq/faq.component.html","./src/app/shared/components/faq/faq.component.ts","./src/app/shared/components/support-form/support-validation-messages.ts","./src/app/shared/components/support-form/support-form.component.html","./src/app/layout/layout-routing.module.ts","./src/app/shared/components/support-form/support-form.component.ts","./src/app/layout/layout.module.ts","./src/app/layout/modules/earn-redeem/upload-receipt/upload-receipt.component.html","./src/app/layout/modules/earn-redeem/upload-receipt/upload-receipt-routing.module.ts","./src/app/layout/modules/earn-redeem/upload-receipt/upload-receipt.component.ts","./src/app/layout/modules/earn-redeem/upload-receipt/upload-receipt.module.ts","./src/app/data/schema/register.model.ts","./src/app/layout/modules/user/registration/registration-validation-messages.ts","./src/app/layout/modules/user/registration/registration.component.html","./src/app/layout/modules/user/registration/registration.component.ts","./src/app/layout/modules/user/registration/registration-routing.module.ts","./src/app/layout/modules/user/registration/registration.module.ts","./src/app/shared/components/banner/banner.component.html","./src/app/shared/components/banner/banner.component.ts","./src/app/shared/components/google-places-api/places.service.ts","./src/app/shared/shared.module.ts","./src/environments/environment.stag.ts","./src/environments/routes.ts","./src/app/shared/components/page-loader/page-loader.component.html","./src/app/shared/components/page-loader/page-loader.component.ts","./src/app/layout/header/header.component.html","./src/app/layout/header/header.component.ts","./src/app/layout/footer/footer.component.html","./src/app/layout/footer/footer.component.ts","./src/app/layout/pages/coming-soon/coming-soon.component.html","./src/app/layout/pages/coming-soon/coming-soon.component.ts","./src/app/layout/pages/end-of-promotion/end-of-promotion.component.html","./src/app/layout/pages/end-of-promotion/end-of-promotion.component.ts","./src/app/layout/content-container/content-container.component.html","./src/app/app-routing.module.ts","./src/app/layout/content-container/content-container.component.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/core/interceptors/http-error.interceptor.ts","./src/app/core/interceptors/basic-auth.interceptor.ts","./src/app/app.module.ts","./src/main.ts"],"names":["webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","id","module","exports","location","AppConstants","basicAuthCredentials","window","btoa","environment","namePattern","successPopTitle","errorPopTitle","passwordPattern","emailPattern","requestTextOptions","headers","responseType","requestOptions","usa","addressComponents","formattedAddress","googlePlaceJSONNameField","mainLogoEn","mainLogoFr","clientLogo","bannerImageEn","mobile","desktop","link","bannerImageFr","disableBannerLink","enableBannerLink","imgLimit","fileType","imgSize","imgError","uploadReceiptPageEn","uploadReceiptPageFr","promotionLiveFr","promotionLiveEn","errorMessageEn","errorMessageFr","errorMessageNPNEn","errorMessageNPNFr","npnRegistrationSuccessEn","npnRegistrationSuccessFr","recaptchaSiteKey","gtagPanelScriptSrcForEN","gtagPanelScriptSrcForFR","gtagClientScriptSrc","gtagPanelDataLayerForEN","gtagPanelDataLayerForFR","localENV","stagingENV","productionENV","MaterialModule","CoreModule","duration","maxOpened","LanguageService","translate","storageService","router","http","toast","language","currentLanguage","this","asObservable","country","getItem","userCountry","value","next","setItem","use","StorageService","cookieService","userDetails","created","email","firstName","lastName","mailingAddress","optIn","suspended","phone","postalCode","dob","myLocalStorage","promotionLive","promotionLiveStatus","promotionPhase","promotionPhaseStatus","isLoggedIn","setIsLoggedIn","JSON","parse","getItemFromSessionStorage","isLocalStorageAvailable","get","test","localStorage","removeItem","key","put","sessionStorage","clear","removeAll","remove","DataService","httpClient","supportData","post","payload","pdfFile","userEmail","formData","FormData","append","image","LandingComponent","languageService","isBannerLinkActive","banners","pipe","take","subscribe","lang","navigate","scroll","enternow","UserRegisteredGuard","routeUserTried","route","state","url","path","warning","FaqComponent","panelOpenState","myPanels","openAll","closeAll","console","log","SupportValidationMessages","errorMessagesEn","name","type","message","recaptcha","errorMessagesFr","routes","component","loadChildren","m","RegistrationModule","data","page","SupportFormComponent","formBuilder","dataService","isFormTouched","supportForm","group","supportValidationMessages","form","invalid","submitSupportRequest","response","reset","resetForm","success","error","onSubmit","UploadReceiptModule","canActivate","LayoutRoutingModule","LayoutModule","UploadReceiptComponent","numberOfFiles","formSubmitted","files","filePdf","maxFileSize","isPdf","fragment","event","i","addedFiles","length","onRemovePdf","push","slice","rejectedFiles","reason","err","splice","indexOf","convertToPdf","uploadReceiptImage","uploadReceipt","pdf","uploadPdf","eor","setTimeout","document","imageCount","base64ImgArray","getBase64","all","values","forEach","index","addImage","addPage","uploadReceiptPdf","output","catch","file","reject","reader","FileReader","readAsDataURL","onload","result","onerror","onSelect","handleUpload","UploadReceiptRoutingModule","RegistrationAPIRequestPayloadModel","primaryInfo","PrimaryInfoModel","emails","confirmEmail","optionIn","isOptIn","agreeToTerms","isAgree","answer","question","EmailDataModel","originalEmail","RegistrationValidationMessages","dobInvalidAge","dateValidator","control","transform","invalidDate","invalidFormat","RegistrationComponent","ngZone","placeService","activatedRoute","showSpinner","askNPNQuestion","setAddress","registrationForm","validator","checkPasswords","currentDate","Date","birthDate","getFullYear","getMonth","getDate","invalidAge","getLanguage","checkForNPNPage","registrationValidationMessages","pageName","setControl","validators","asyncValidators","checkAnswerLength","updateOn","validateAge","controlName","matchingControlName","formGroup","matchingControl","controls","errors","notSame","setErrors","split","minwordLength","maxwordLength","validation","hasError","formDirective","setValue","userRegistrationFormData","registerUser","setItemToSessionStorage","stringify","npnPageHandler","errorHandling","RegistrationRoutingModule","provide","useValue","siteKey","currentLang","BannerComponent","enableLink","sliderConfig","slidesPerView","spaceBetween","preloadImages","lazy","loop","autoplay","delay","disableOnInteraction","pauseOnMouseEnter","PlacesService","place","componentTemplate","address_components","find","addressComponent","types","some","addressType","getAddressComponent","long_name","short_name","SharedModule","environment_name","production","domainProtocol","domains","en","fr","api","base","hostname","baseMicrosite","redirectUri","basicAuth","username","password","Routes","staging","microsite","promotionPeriod","endPoint","method","support","user","registration","PageLoaderComponent","showClass","src","AOS","init","once","HeaderComponent","pageScrollService","activeItem","isHamburgerOpen","hoverLinkRoute","menuLinks","events","title","logo","navMenu","nativeElement","classList","toggle","menuItem","links","scrollToAnchor","setActive","updateLanguage","navigateByUrl","scrollTo","changeDomainToEn","changeDomainToFr","frLink","enLink","join","replace","anchorId","scrollPage","refresh","scrollTarget","scrollOffset","innerWidth","FooterComponent","promotionStarted","checkPromotionPhase","ComingSoonComponent","EndOfPromotionComponent","changeUrlToEn","changeUrlToFr","Object","redirectTo","pathMatch","ContentContainerComponent","promotionEnded","AppRoutingModule","AppComponent","getPromotionPeriod","promotionStatus","computeLang","setPanelGtag","gtagPanelScript","createElement","async","getElementsByTagName","appendChild","gtagDataLayer","innerHTML","HttpErrorInterceptor","request","handle","catchError","errorMsg","throwError","ErrorEvent","status","BasicAuthInterceptor","clone","setHeaders","Authorization","HttpTranslateLoaderFactory","AppModule","useClass","multi","loader","useFactory","deps","defaultLanguage","bootstrapModule"],"mappings":"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","file":"main.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(() => {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = () => ([]);\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 8255;\nmodule.exports = webpackEmptyAsyncContext;","/**\n * Environment for PRODUCTION\n */\nimport {Routes} from \"./routes\";\n\nexport const environment = {\n environment_name: 'production',\n production: true,\n domainProtocol: 'https://',\n domains: {\n en: Routes.domains.production.en,\n fr: Routes.domains.production.fr\n },\n api: {\n base: `//${location.hostname}/`,\n baseMicrosite: 'BimboWW2023',\n redirectUri: `https://${location.hostname}/`,\n routes: Routes,\n },\n basicAuth: {\n username: 'BimboWW2023',\n password: '6MtuRVpAJ%@R0*%q6FljDMM%Ocdt!#-LOCAL'\n }\n};\n","import {HttpHeaders} from \"@angular/common/http\";\nimport {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment.prod\";\n\n@Injectable()\nexport class AppConstants {\n /**\n * Basic Auth Credentials\n */\n public static readonly basicAuthCredentials = window.btoa(environment.basicAuth.username + ':' + environment.basicAuth.password);\n\n /**\n * Form Data\n */\n public static readonly namePattern = '(^[a-zA-Z\\-]+$)';\n public static readonly successPopTitle = 'Great! Operation successfully completed.';\n public static readonly errorPopTitle = 'Snap! Please try again.';\n public static readonly passwordPattern = '(^(?=.*?[a-zA-Z])(?=(.*[\\\\d]){1,})(?=(.*[\\\\W]){1,})(?!.*\\\\s).{6,15}$)';\n public static readonly emailPattern = '(?:[a-zA-Z0-9!#$%&\\'*+/=?^_`{|}~-]+(?:\\\\.[a-zA-Z0-9!#$%&\\'*+/=?^_`{|}~-]+)*)@(?:(?:[a' +\n '-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\\\.)+(?:[a-zA-Z0-9-]*[a-zA-Z]){2,})';\n\n /**\n * API requests\n */\n public static readonly requestTextOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'plain/text'\n }),\n responseType: 'text' as 'json'\n };\n public static readonly requestOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n };\n\n /**\n * Google places API\n */\n public static readonly usa = 'US';\n public static readonly addressComponents = 'address_components';\n public static readonly formattedAddress = 'formatted_address';\n public static readonly googlePlaceJSONNameField = 'name';\n\n /**\n * Image based assets\n */\n public static readonly mainLogoEn = 'assets/images/logo/logo-en.png';\n public static readonly mainLogoFr = 'assets/images/logo/logo-fr.png';\n public static readonly clientLogo = 'assets/images/logo/3tl-logo.png';\n\n /**\n Site Banner\n */\n public static readonly bannerImageEn = [\n {\n mobile: 'https://p3-custom-client.s3.us-west-2.amazonaws.com/bimbo_ww/2024/MobileBanner_EN.png',\n desktop: 'https://p3-custom-client.s3.us-west-2.amazonaws.com/bimbo_ww/2024/DesktopBanner_EN.png',\n link:'/registration'\n }\n ]\n\n public static readonly bannerImageFr = [\n {\n mobile: 'https://p3-custom-client.s3.us-west-2.amazonaws.com/bimbo_ww/2024/MobileBanner_FR.png',\n desktop: 'https://p3-custom-client.s3.us-west-2.amazonaws.com/bimbo_ww/2024/DesktopBanner_FR.png',\n link:'/registration'\n }\n ]\n public static readonly disableBannerLink = false;\n public static readonly enableBannerLink = true;\n\n /**\n * Upload Receipt based\n */\n public static readonly imgLimit = 'One file can be uploaded.';\n public static readonly fileType = 'Please select a valid file format.';\n public static readonly imgSize = 'Image size is more than 5 mb, it cannot be uploaded.';\n public static readonly imgError = 'The image you chose is not compatible with our system.';\n public static readonly uploadReceiptPageEn = 'Please register to view the requested page.';\n public static readonly uploadReceiptPageFr = 'Veuillez vous inscrire pour afficher la page demandée';\n public static readonly promotionLiveFr = 'Désolé vous ne pouvez pas accéder à cette page!';\n public static readonly promotionLiveEn = 'Sorry you cannot access this page!';\n public static readonly errorMessageEn = 'Something went wrong, Please try again.';\n public static readonly errorMessageFr = 'Une erreur s\\'est produite. Veuillez réessayer.';\n public static readonly errorMessageNPNEn = 'Sorry! Maximum one no purchase entry per person.';\n public static readonly errorMessageNPNFr = 'Désolé! Maximum d’une participation sans achat par personne.';\n public static readonly npnRegistrationSuccessEn = 'Thank you! We\\'ve received your entry'\n public static readonly npnRegistrationSuccessFr = 'Merci! Nous avons reçu l\\'entrée'\n /**\n * Google Recaptcha key\n */\n public static readonly recaptchaSiteKey = '6Lfa6Q0TAAAAACcH--9Vp8VZ2159EbHJAtc8ld4q';\n\n /** * Google tag manager constants */\n public static readonly gtagPanelScriptSrcForEN = 'https://www.googletagmanager.com/gtag/js?id=UA-228695976-3';\n public static readonly gtagPanelScriptSrcForFR = 'https://www.googletagmanager.com/gtag/js?id=UA-228695976-4';\n public static readonly gtagClientScriptSrc = 'https://www.googletagmanager.com/gtag/js?id=DC-5862669';\n public static readonly gtagPanelDataLayerForEN = 'window.dataLayer = window.dataLayer || [];\\n' +\n '\\n' +\n ' function gtag() {\\n' +\n ' dataLayer.push(arguments);\\n' +\n ' }\\n' +\n '\\n' +\n ' gtag(\\'js\\', new Date());\\n' +\n '\\n' +\n ' gtag(\\'config\\', \\'UA-228695976-3\\');';\n public static readonly gtagPanelDataLayerForFR = 'window.dataLayer = window.dataLayer || [];\\n' +\n '\\n' +\n ' function gtag() {\\n' +\n ' dataLayer.push(arguments);\\n' +\n ' }\\n' +\n '\\n' +\n ' gtag(\\'js\\', new Date());\\n' +\n '\\n' +\n ' gtag(\\'config\\', \\'UA-228695976-4\\');';\n\n /** * ENV names */\n public static readonly localENV = 'local/development'; // environment.ts\n public static readonly stagingENV = 'staging'; // environment.stag.ts\n public static readonly productionENV = 'production'; // environment.prod.ts\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatFormFieldModule} from \"@angular/material/form-field\";\nimport {ReactiveFormsModule} from \"@angular/forms\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatSelectModule} from \"@angular/material/select\";\nimport {MatProgressSpinnerModule} from \"@angular/material/progress-spinner\";\nimport {MatInputModule} from \"@angular/material/input\";\nimport {MatProgressBarModule} from \"@angular/material/progress-bar\";\nimport {MatCheckboxModule} from \"@angular/material/checkbox\";\nimport {TextFieldModule} from \"@angular/cdk/text-field\";\nimport {MatTabsModule} from \"@angular/material/tabs\";\nimport {MatPaginatorModule} from \"@angular/material/paginator\";\nimport {MatTableModule} from \"@angular/material/table\";\nimport {MatDialogModule} from \"@angular/material/dialog\";\nimport {MatDatepickerModule} from \"@angular/material/datepicker\";\nimport {MatNativeDateModule} from \"@angular/material/core\";\nimport {MatExpansionModule} from \"@angular/material/expansion\";\nimport {MatButtonModule} from \"@angular/material/button\";\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatIconModule,\n MatSelectModule,\n MatInputModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n TextFieldModule,\n MatTabsModule,\n MatPaginatorModule,\n MatTableModule,\n MatDialogModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatExpansionModule,\n MatButtonModule\n ],\n exports: [\n MatFormFieldModule,\n ReactiveFormsModule,\n MatIconModule,\n MatSelectModule,\n MatInputModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n TextFieldModule,\n MatTabsModule,\n MatPaginatorModule,\n MatTableModule,\n MatDialogModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatExpansionModule,\n MatButtonModule\n ]\n})\nexport class MaterialModule {\n}\n","import {NgModule} from '@angular/core';\nimport {RecaptchaFormsModule, RecaptchaModule} from \"ng-recaptcha\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {CookieModule} from \"ngx-cookie\";\nimport {NgxDropzoneModule} from \"ngx-dropzone\";\nimport {NgxPageScrollCoreModule} from \"ngx-page-scroll-core\";\nimport {NgxPageScrollModule} from \"ngx-page-scroll\";\nimport {SwiperModule} from \"swiper/angular\";\nimport {ToastrModule} from \"ngx-toastr\";\nimport {MaterialModule} from \"@core/material/material.module\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\n\n\n@NgModule({\n declarations: [],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MaterialModule,\n RecaptchaModule,\n RecaptchaFormsModule,\n SwiperModule,\n NgxDropzoneModule,\n NgxPageScrollModule,\n NgxPageScrollCoreModule.forRoot({\n duration: 500,\n }),\n CookieModule.forRoot(),\n ToastrModule.forRoot({\n maxOpened: 1\n }),\n TranslateModule\n ],\n exports: [\n FormsModule,\n ReactiveFormsModule,\n MaterialModule,\n TranslateModule,\n RecaptchaModule,\n RecaptchaFormsModule,\n NgxDropzoneModule,\n SwiperModule\n ]\n})\nexport class CoreModule {\n}\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject} from \"rxjs\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {StorageService} from \"@core/services/storage.service\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {Router} from \"@angular/router\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LanguageService {\n\n private language = new BehaviorSubject<'en' | 'fr'>('en');\n currentLanguage = this.language.asObservable();\n\n private country = new BehaviorSubject(this.storageService.getItem('userCountry') ?? 'N/A');\n userCountry = this.country.asObservable();\n\n constructor(private translate: TranslateService,\n private storageService: StorageService,\n private router:Router,\n private http: HttpClient,\n private toast: ToastrService) {\n }\n\n //init() {\n // const languageId: ('en' | 'fr')[] = ['en', 'fr'];\n //const userCookieLanguage = this.storageService.getItem('userLang');\n //console.log('userCookieLanguage' + userCookieLanguage);\n //const userCookieCountry = this.storageService.getItem('userCountry');\n //const condition = languageId.indexOf(userCookieLanguage) === -1 || userCookieCountry === null || userCookieCountry === 'N/A' || userCookieCountry === '';\n\n // if (condition) {\n // // API call to Lambda to check the user country\n // this.geoLocate().subscribe(country => {\n // this.country.next(country.toUpperCase());\n // this.storageService.setItem('userCountry', country)\n // this.selectLanguage(languageId[country !== 'CA' ? 0 : 1]);\n // }, error => {\n // console.error(error);\n // this.country.next(userCookieCountry ?? 'N/A');\n // this.selectLanguage(languageId[0]);\n // });\n //\n // return\n // }\n\n //this.selectLanguage(userCookieLanguage);\n //}\n\n\n updateLanguage(value: 'en' | 'fr') {\n this.language.next(value);\n this.storageService.setItem('userLang', value);\n this.translate.use(value);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {CookieService} from \"ngx-cookie\";\nimport {RegistrationAPIResponseModel} from \"@data/schema/register.model\";\nimport {BehaviorSubject} from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StorageService {\n userDetails: RegistrationAPIResponseModel = {\n created: '',\n email: '',\n firstName: '',\n lastName: '',\n id: 0,\n mailingAddress: '',\n optIn: false,\n suspended: false,\n phone: '',\n postalCode: '',\n dob:''\n };\n\n myLocalStorage: any = {};\n promotionLive = new BehaviorSubject(false);\n promotionLiveStatus = this.promotionLive.asObservable();\n\n promotionPhase = new BehaviorSubject('');\n promotionPhaseStatus = this.promotionPhase.asObservable();\n\n\n public isLoggedIn: boolean = false;\n\n constructor(private cookieService: CookieService) {\n this.setIsLoggedIn();\n }\n\n setIsLoggedIn() {\n this.userDetails = JSON.parse(this.getItemFromSessionStorage('user'));\n this.isLoggedIn = this.isLocalStorageAvailable() ? !!this.userDetails && !!this.userDetails.mailingAddress : !!this.cookieService.get('user');\n }\n\n isLocalStorageAvailable() {\n const test = 'localCheck';\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n setItem(key: string, value: string) {\n if (this.isLocalStorageAvailable()) {\n localStorage.setItem(key, value);\n } else {\n if (key === 'user' || key === 'jwtToken-twitter') {\n this.cookieService.put(key, value);\n } else {\n this.myLocalStorage[key] = value;\n }\n }\n }\n\n setItemToSessionStorage(key: string, value: string) {\n if (this.isLocalStorageAvailable()) {\n sessionStorage.setItem(key, value);\n } else {\n this.myLocalStorage[key] = value;\n }\n }\n\n getItem(key: string) {\n if (this.isLocalStorageAvailable()) {\n return localStorage.getItem(key);\n } else {\n if (key === 'user' || key === 'jwtToken-twitter') {\n return this.cookieService.get(key);\n } else {\n return this.myLocalStorage[key];\n }\n }\n }\n\n getItemFromSessionStorage(key: string) {\n if (this.isLocalStorageAvailable()) {\n return sessionStorage.getItem(key);\n } else {\n return this.myLocalStorage[key];\n }\n }\n\n clear() {\n if (this.isLocalStorageAvailable()) {\n localStorage.clear();\n sessionStorage.clear();\n } else {\n this.cookieService.removeAll();\n this.myLocalStorage = {};\n }\n }\n\n removeItem(key: string) {\n if (this.isLocalStorageAvailable()) {\n localStorage.removeItem(key);\n } else {\n if (key === 'user') {\n this.cookieService.remove(key);\n } else {\n delete this.myLocalStorage[key];\n }\n }\n }\n\n removeItemFromSessionStorage(key: string) {\n if (this.isLocalStorageAvailable()) {\n sessionStorage.removeItem(key);\n } else {\n delete this.myLocalStorage[key];\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable, of} from \"rxjs\";\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {environment} from \"../../../environments/environment\";\nimport {PromotionPeriodResponseModel} from \"@data/schema/promotion-period.model\";\nimport {SupportModal} from \"@data/schema/support.modal\";\nimport {RegistrationAPIRequestPayloadModel, RegistrationAPIResponseModel} from \"@data/schema/register.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DataService {\n\n constructor(private httpClient: HttpClient) {\n }\n\n /**\n * To get the promotion status of the microsite\n */\n\n getPromotionPeriod(): Observable {\n return this.httpClient.get(environment.api.base + environment.api.baseMicrosite +\n environment.api.routes.microsite.promotionPeriod.endPoint, AppConstants.requestOptions)\n }\n\n /**\n *\n * @param supportData\n */\n submitSupportRequest(supportData: SupportModal): Observable {\n return this.httpClient.post(environment.api.base + environment.api.baseMicrosite +\n environment.api.routes.microsite.support.endPoint, supportData, AppConstants.requestOptions)\n }\n\n /**\n * Registration API which gets user registration form data\n * as payload.\n * @param payload\n */\n registerUser(payload: RegistrationAPIRequestPayloadModel): Observable {\n return this.httpClient.post(environment.api.base + environment.api.baseMicrosite +\n environment.api.routes.user.registration.endPoint, payload, AppConstants.requestOptions)\n }\n\n /**\n *\n * @param pdfFile\n * @param userEmail\n */\n uploadPdf(pdfFile: Blob, userEmail: string): Observable {\n const formData = new FormData();\n formData.append('receipt', pdfFile);\n formData.append('userEmail', userEmail);\n return this.httpClient.post(environment.api.base + environment.api.baseMicrosite +\n environment.api.routes.user.uploadReceipt.endPoint, formData)\n }\n\n /**\n *\n * @param image\n * @param userEmail\n */\n uploadReceipt(image: File, userEmail: string): Observable {\n const formData = new FormData();\n formData.append('receipt', image);\n formData.append('userEmail', userEmail);\n return this.httpClient.post(environment.api.base + environment.api.baseMicrosite +\n environment.api.routes.user.uploadReceipt.endPoint, formData)\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {LanguageService} from \"@core/services/language.service\";\nimport {take} from \"rxjs/operators\";\nimport {BannerModel} from \"@data/schema/banner.model\";\nimport {Router} from \"@angular/router\";\n\n@Component({\n selector: 'app-landing',\n templateUrl: './landing.component.html',\n styleUrls: ['./landing.component.scss']\n})\nexport class LandingComponent implements OnInit {\n\n isBannerLinkActive = AppConstants.enableBannerLink;\n banners: BannerModel [] = [];\n constructor( private languageService: LanguageService,\n private router: Router) {\n }\n\n ngOnInit(): void {\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'fr' ? this.banners = AppConstants.bannerImageFr : this.banners = AppConstants.bannerImageEn;\n\n })\n }\n\n descriptionRedirection() {\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'fr' ? this.router.navigate(['/registration']) : this.router.navigate(['/registration']);\n })\n }\n\n enternow() {\n window.scroll(0, 0);\n }\n \n}\n","
\n
\n \n
\n
\n
\n
\n

\n
\n
\n

\n

\n
\n
\n

\n

\n
\n
\n

\n

\n \n
\n
\n \n
\n
\n
\n
\n","import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {Observable} from 'rxjs';\nimport {StorageService} from \"@core/services/storage.service\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {AppConstants} from \"@core/constants/app-constants\";\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserRegisteredGuard implements CanActivate {\n routeUserTried = '';\n\n constructor(\n private router: Router,\n private toast: ToastrService,\n private storageService: StorageService,\n ) {\n }\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree {\n this.routeUserTried = route.url[0].path;\n if (this.storageService.getItemFromSessionStorage('user')) {\n return true;\n }else {\n if (this.routeUserTried === 'fr') {\n this.toast.warning(AppConstants.uploadReceiptPageFr)\n this.router.navigate(['/registration']);\n } else {\n this.toast.warning(AppConstants.uploadReceiptPageEn)\n this.router.navigate(['/registration']);\n }\n return false;\n }\n\n }\n}\n","
\n
\n

{{ \"PAGES.LANDING.FAQ.HEADING\" | translate }}

\n
\n
\n
\n \n \n \n \n \n \n
\n\n \n \n \n \n \n \n \n

\n

\n
\n
\n
\n
\n
\n","import {Component, OnInit, ViewChild} from '@angular/core';\nimport {MatAccordion} from \"@angular/material/expansion\";\nimport {Router} from \"@angular/router\";\n\n@Component({\n selector: 'app-faq',\n templateUrl: './faq.component.html',\n styleUrls: ['./faq.component.scss']\n})\nexport class FaqComponent implements OnInit {\n panelOpenState: Boolean = false;\n link = '';\n @ViewChild('myAccordion') myPanels!: MatAccordion;\n\n constructor(private router: Router) {\n }\n\n\n ngOnInit() {\n this.link = this.router.url;\n }\n\n openAll() {\n this.myPanels.openAll();\n this.panelOpenState = true;\n }\n\n closeAll() {\n this.myPanels.closeAll();\n this.panelOpenState = false;\n }\n\n redirect(link: string) {\n this.router.navigate([link])\n }\n npnenternow() {\n console.log('NPN Click')\n window.scroll(0, 0);\n }\n}\n\n","export class SupportValidationMessages {\n static errorMessagesEn = {\n name: [\n {type: 'required', message: 'Name is required'},\n {type: 'maxlength', message: 'Name must be less then 254 characters and greater then 1 character'},\n {type: 'pattern', message: 'Please enter valid name'},\n {type: 'minlength', message: 'Name must contain at least 2 letters'}\n ],\n email: [\n {type: 'required', message: 'Email is required'},\n {type: 'pattern', message: 'Email should be in correct pattern'},\n ],\n message: [\n {type: 'required', message: 'Message is required'},\n {type: 'maxlength', message: 'Message must be less then 254 characters'},\n {type: 'minlength', message: 'Please enter valid message'}\n ],\n recaptcha: [\n {type: 'required', message: 'Please check the captcha'},\n ]\n };\n\n static errorMessagesFr = {\n name: [\n {type: 'required', message: 'Entrez votre prénom s\\'il vous plait'},\n {type: 'pattern', message: 'Merci d\\'entrer un nom valide'},\n {type: 'maxlength', message: 'Un maximum de 254 caractères est autorisé'},\n {type: 'minlength', message: 'Le nom doit contenir au moins 2 lettres'}\n ],\n email: [\n {type: 'required', message: 'Veuillez entrer votre email'},\n {type: 'pattern', message: 'Veuillez entrer un email valide'},\n ],\n message: [\n {type: 'required', message: 'Un message est requis'},\n {type: 'maxlength', message: 'Le message doit contenir moins de 254 caractères'},\n ],\n recaptcha: [\n {type: 'required', message: 'Veuillez vérifier le captcha'},\n ]\n };\n}\n\nexport interface HeaderResponseModel {\n response: string;\n}\n","
\n

\n

\n {{'PAGES.LANDING.SUPPORT.SPECIAL_INSTRUCTIONS'|translate}}

\n
\n
\n
\n
\n \n \n \n \n \n {{validation.message}}\n \n \n \n \n \n \n \n \n {{validation.message}}\n \n \n \n
\n \n \n \n \n \n {{validation.message}}\n \n \n \n
\n \n
\n
\n
\n\n","import {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {LandingComponent} from \"@layout/pages/landing/landing.component\";\nimport {UserRegisteredGuard} from \"@core/guards/user-registered-guard.service\";\nimport {FaqComponent} from \"@shared/faq/faq.component\";\nimport {SupportFormComponent} from '@shared/components/support-form/support-form.component';\n\n\nconst routes: Routes = [\n {\n path: 'home',\n component: LandingComponent,\n },\n {\n path: 'registration',\n loadChildren: () => import('@modules/registration/registration.module').then(m => m.RegistrationModule),\n },\n {\n path: 'npnentry',\n loadChildren: () => import('@modules/registration/registration.module').then(m => m.RegistrationModule),\n data: { page: 'npnPage' },\n },\n {\n path: 'faq',\n component: FaqComponent,\n },\n {\n path: 'support',\n component: SupportFormComponent,\n },\n {\n path: 'upload-receipt',\n loadChildren: () => import('@modules/upload-receipt/upload-receipt.module').then(m => m.UploadReceiptModule),\n canActivate: [UserRegisteredGuard]\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class LayoutRoutingModule {\n}\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup, FormGroupDirective, Validators} from \"@angular/forms\";\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {SupportValidationMessages} from \"@shared/support-form/support-validation-messages\";\nimport {DataService} from \"@data/services/data.service\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {LanguageService} from \"@core/services/language.service\";\nimport {take} from \"rxjs/operators\";\n\n\n@Component({\n selector: 'app-support-form',\n templateUrl: './support-form.component.html',\n styleUrls: ['./support-form.component.scss']\n})\nexport class SupportFormComponent implements OnInit {\n\n supportForm: FormGroup;\n supportValidationMessages: any\n isFormTouched = false;\n private url!: string;\n\n constructor(private formBuilder: FormBuilder,\n private dataService: DataService,\n private toast: ToastrService,\n private languageService: LanguageService) {\n this.supportForm = this.formBuilder.group({\n name: ['', Validators.compose([\n Validators.required,\n Validators.maxLength(254),\n Validators.pattern(\"^\\\\S{1}.*[a-zA-z0-9 ]\")\n ])],\n email: ['', Validators.compose([\n Validators.required,\n Validators.pattern(AppConstants.emailPattern),\n Validators.maxLength(254)\n ])],\n message: ['', Validators.compose([\n Validators.required,\n Validators.minLength(3),\n Validators.maxLength(254)\n ])]\n });\n }\n\n ngOnInit(): void {\n this.languageService.currentLanguage.pipe(take(1)).subscribe( lang => {\n lang === 'en' ? this.supportValidationMessages = SupportValidationMessages.errorMessagesEn : this.supportValidationMessages = SupportValidationMessages.errorMessagesFr\n })\n }\n\n onSubmit(form : FormGroupDirective) {\n this.isFormTouched = true;\n if (this.supportForm.invalid) {\n return\n }\n let supportDetails = {\n name: this.supportForm.value.name,\n email: this.supportForm.value.email,\n message: this.supportForm.value.message\n }\n this.dataService.submitSupportRequest(supportDetails).subscribe(response => {\n this.supportForm.reset();\n form.resetForm();\n this.languageService.currentLanguage.pipe(take(1)).subscribe( lang => {\n lang === 'en' ? this.toast.success('Thank you! All messages are responded to within 3 business days in the order they are received.') : this.toast.success('Merci! Tous les messages reçoivent une réponse dans les 3 jours ouvrables suivant leur ordre de réception.')\n })\n }, (error => {\n console.error(error);\n this.supportForm.reset();\n form.resetForm();\n this.languageService.currentLanguage.pipe(take(1)).subscribe( lang => {\n lang === 'en' ? this.toast.error('Something went Wrong, Please try again later') : this.toast.error('Quelque chose c\\'est mal passé. Merci d\\'essayer plus tard')\n })\n }))\n }\n\n\n}\n","import {NgModule} from '@angular/core';\nimport {LayoutRoutingModule} from \"@layout/layout-routing.module\";\n// Layout Core\nimport {HeaderComponent} from \"@layout/header/header.component\";\nimport {FooterComponent} from \"@layout/footer/footer.component\";\nimport {ContentContainerComponent} from '@layout/content-container/content-container.component';\n// Pages\nimport {LandingComponent} from '@pages/landing/landing.component';\nimport {EndOfPromotionComponent} from '@layout/pages/end-of-promotion/end-of-promotion.component';\nimport {ComingSoonComponent} from '@layout/pages/coming-soon/coming-soon.component';\n// Modules\nimport {RegistrationModule} from \"@modules/user/registration/registration.module\";\nimport {UploadReceiptModule} from \"@modules/earn-redeem/upload-receipt/upload-receipt.module\";\nimport {SharedModule} from \"@shared/shared.module\";\nimport {CommonModule} from \"@angular/common\";\nimport {CoreModule} from \"@core/core.module\";\n\n\n@NgModule({\n declarations: [\n HeaderComponent,\n FooterComponent,\n EndOfPromotionComponent,\n ComingSoonComponent,\n LandingComponent,\n ContentContainerComponent\n ],\n exports: [\n FooterComponent\n ],\n imports: [\n LayoutRoutingModule,\n RegistrationModule,\n UploadReceiptModule,\n SharedModule,\n CommonModule,\n CoreModule\n ]\n})\nexport class LayoutModule {\n}\n","
\n
\n
\n

\n

\n

\n

\n\n

\n \n
\n \n \n \n \n \n \n \n \n {{ f.name }}\n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n
\n","import {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {UploadReceiptComponent} from './upload-receipt.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: UploadReceiptComponent\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class UploadReceiptRoutingModule {\n}\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from \"@angular/router\";\nimport {jsPDF} from \"jspdf\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {DataService} from \"@data/services/data.service\";\nimport {StorageService} from \"@core/services/storage.service\";\nimport {RegistrationAPIResponseModel} from \"@data/schema/register.model\";\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {take} from \"rxjs/operators\";\nimport {LanguageService} from \"@core/services/language.service\";\n\n@Component({\n selector: 'app-upload-receipt',\n templateUrl: './upload-receipt.component.html',\n styleUrls: ['./upload-receipt.component.scss']\n})\nexport class UploadReceiptComponent implements OnInit {\n numberOfFiles: number = 1;\n formSubmitted: boolean = false;\n language: string = 'en';\n files: File[] = [];\n filePdf: [File] | [] = [];\n maxFileSize: number = 5000000;\n isPdf: boolean = false;\n userDetails: RegistrationAPIResponseModel = {\n created: '',\n email: '',\n firstName: '',\n lastName: '',\n id: 0,\n mailingAddress: '',\n optIn: false,\n suspended: false,\n phone: '',\n postalCode: '',\n dob:''\n };\n userEmail: string = '';\n private url!: string;\n\n\n constructor(private toast: ToastrService,\n private dataService: DataService,\n private router: Router,\n private storageService: StorageService,\n private languageService: LanguageService) {\n }\n\n ngOnInit(): void {\n this.userDetails = JSON.parse(this.storageService.getItemFromSessionStorage('user'));\n if (this.userDetails !== null || undefined) {\n this.userEmail = this.userDetails.email;\n }\n }\n\n redirect(path: string, fragment?: string) {\n this.router.navigate([path], {fragment: fragment})\n }\n\n onSelect(event: any) {\n try {\n for (let i = 0; i < event.addedFiles.length; i++) {\n if (event.addedFiles[i].type === 'application/pdf') {\n event.addedFiles = [event.addedFiles[i]];\n break\n }\n }\n if (event.addedFiles[0].type === 'application/pdf') {\n this.files = [event.addedFiles[0]];\n this.isPdf = true;\n } else {\n if (this.isPdf) this.onRemovePdf()\n this.files.push(...event.addedFiles);\n }\n if (this.files.length > this.numberOfFiles) {\n this.files = this.files.slice(0, this.numberOfFiles);\n this.toast.error(this.language === 'en' ? AppConstants.imgLimit : '')\n }\n if (event.rejectedFiles.length > 0) {\n if (event.rejectedFiles[0].reason === 'size') {\n this.toast.error(this.language === 'en' ? AppConstants.imgSize : '')\n }\n }\n } catch (err) {\n this.toast.error(AppConstants.fileType);\n }\n\n }\n\n onRemove(event: any) {\n this.files.splice(this.files.indexOf(event), 1);\n }\n\n onRemovePdf() {\n this.files = [];\n this.isPdf = false;\n }\n\n handleUpload() {\n // No Image\n if (this.files.length === 0) {\n return;\n }\n this.formSubmitted = true;\n // Single Image\n if (this.files.length === 1) {\n this.uploadReceiptImage();\n return\n }\n this.convertToPdf();\n }\n\n uploadReceiptImage() {\n this.dataService.uploadReceipt(this.files[0], this.userEmail).subscribe((value) => {\n this.files = [];\n this.formSubmitted = false;\n // this.handleResponse(value);\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'en' ? this.toast.success('Your receipt has been submitted successfully. Thank you!') : this.toast.success('Votre reçu a été soumis avec succès. Merci')\n })\n }, error => {\n this.files = [];\n console.error(error);\n this.formSubmitted = false;\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'en' ? this.toast.error('Something went Wrong, Please try again later') : this.toast.error('Quelque chose c\\'est mal passé. Merci d\\'essayer plus tard')\n })\n })\n }\n\n uploadReceiptPdf(pdf: Blob) {\n this.dataService.uploadPdf(pdf, this.userEmail).subscribe((value) => {\n this.files = [];\n this.formSubmitted = false;\n // this.handleResponse(value);\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'en' ? this.toast.success('Your receipt has been submitted successfully. Thank you!') : this.toast.success('Votre reçu a été soumis avec succès. Merci')\n })\n }, error => {\n this.files = [];\n console.error(error);\n this.formSubmitted = false;\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'en' ? this.toast.error('Something went Wrong, Please try again later') : this.toast.error('Quelque chose c\\'est mal passé. Merci d\\'essayer plus tard')\n })\n })\n }\n\n handleResponse(response: any) {\n console.log('Response Error',response.error);\n \n if (response.eor('error')) {\n this.toast.error(response.error);\n setTimeout(() => {\n this.router.navigate(['/home']);\n }, 2000)\n } else {\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'en' ? this.toast.success('Your receipt has been submitted successfully. Thank you!') : this.toast.success('Votre reçu a été soumis avec succès. Merci!')\n })\n setTimeout(() => {\n this.router.navigate(['/home']);\n }, 2000)\n }\n }\n\n convertToPdf() {\n let document = new jsPDF('p', 'mm', 'a4', true);\n let imageCount = 0;\n const base64ImgArray = [];\n\n for (let i = 0; i < this.files.length; i++) {\n base64ImgArray.push(this.getBase64(this.files[i]).then((value) => value));\n }\n\n Promise.all(base64ImgArray).then(values => {\n values.forEach((value, index) => {\n document.addImage(value, 'JPEG', 15, 20, 180, 160);\n imageCount++;\n if (index < this.files.length - 1) {\n document.addPage();\n }\n });\n\n if (imageCount === this.files.length) {\n this.uploadReceiptPdf(document.output('blob'));\n }\n }).catch((err) => {\n console.error(err);\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'en' ? this.toast.error('The image you chose is not compatible with our system.') : this.toast.error(\"L'image que vous avez choisie n'est pas compatible avec notre système.\")\n })\n });\n }\n\n getBase64(file: File) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = err => reject(err)\n });\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {UploadReceiptRoutingModule} from './upload-receipt-routing.module';\nimport {UploadReceiptComponent} from './upload-receipt.component';\nimport {CoreModule} from \"@core/core.module\";\n\n\n@NgModule({\n declarations: [\n UploadReceiptComponent\n ],\n imports: [\n CommonModule,\n UploadReceiptRoutingModule,\n CoreModule\n ]\n})\nexport class UploadReceiptModule {\n}\n","/**\n * Registration API Payload\n */\nexport class RegistrationAPIRequestPayloadModel {\n primaryInfo: PrimaryInfoModel;\n optionIn: boolean;\n agreeToTerms: boolean;\n answer?: string;\n lang: string;\n postalCode: string;\n\n constructor(formData: RegisterFormDataModel, lang: string) {\n this.primaryInfo = new PrimaryInfoModel(formData.firstName, formData.lastName, formData.emails.email, formData.emails.confirmEmail, formData.phone, formData.dob);\n this.optionIn = formData.isOptIn ?? false;\n this.agreeToTerms = formData.isAgree ?? false;\n this.lang = lang;\n this.answer = formData.question;\n this.postalCode = formData.postalCode\n }\n}\n\nexport class PrimaryInfoModel {\n firstName: string;\n lastName: string;\n email: EmailDataModel;\n phone: string;\n dob: string\n\n constructor(firstName: string, lastName: string,\n email: string, confirmEmail: string, phone: string, dob: string) {\n this.firstName = firstName;\n this.lastName = lastName;\n this.email = new EmailDataModel(email, confirmEmail);\n this.phone = phone;\n this.dob = dob;\n }\n}\n\nexport class EmailDataModel {\n originalEmail: string;\n confirmEmail: string;\n\n constructor(originalEmail: string, confirmEmail: string) {\n this.originalEmail = originalEmail;\n this.confirmEmail = confirmEmail;\n }\n}\n\n\nexport interface RegisterFormDataModel {\n question: string;\n firstName: string;\n lastName: string;\n emails: {\n email: string;\n confirmEmail: string;\n }\n isOptIn: boolean;\n isAgree: boolean;\n lang: string;\n recaptcha: string;\n phone: string;\n postalCode: string;\n dob: string;\n}\n\n/**\n * Registration API response\n */\nexport interface RegistrationAPIResponseModel {\n created: string;\n email: string;\n firstName: string;\n lastName: string;\n id: number;\n mailingAddress: string;\n optIn: boolean;\n suspended: boolean;\n phone: string;\n postalCode: string;\n dob: string;\n}\n","export class RegistrationValidationMessages {\n static errorMessagesEn = {\n email: [\n {type: 'required', message: 'Please enter your email'},\n {type: 'pattern', message: 'Please enter a valid email'},\n {type: 'isExist', message: 'Email address already exist'},\n ],\n confirmEmail: [\n {type: 'required', message: 'Please confirm the email'},\n {type: 'pattern', message: 'Please enter a valid email'},\n {type: 'notSame', message: 'Email address does not match'}\n ],\n firstName: [\n {type: 'required', message: 'Please enter your first name'},\n {type: 'pattern', message: 'Please enter a valid name'},\n {type: 'maxlength', message: 'Maximum of 254 characters are allowed'},\n {type: 'minlength', message: 'Firstname must contain at least 2 letters'}\n ],\n lastName: [\n {type: 'required', message: 'Please enter your last name'},\n {type: 'pattern', message: 'Please enter a valid name'},\n {type: 'maxlength', message: 'Maximum of 254 characters are allowed'},\n {type: 'minlength', message: 'Lastname must contain at least 2 letters'}\n ],\n phone: [\n {type: 'required', message: 'Please enter your telephone number'},\n {type: 'pattern', message: 'Please enter 10 digit telephone number'},\n ],\n postalCode: [\n {type: 'required', message: 'Please enter postal code'},\n {type: 'pattern', message: 'Please enter valid postal code'},\n ],\n isAgree: [\n {type: 'required', message: 'Please agree with the above'},\n ],\n recaptcha: [\n {type: 'required', message: 'Please check the captcha'},\n ],\n question: [\n {type: 'required', message: 'Please enter your answer'},\n {type: 'minwordLength', message: 'Please answer with minimum of 25 words'},\n {type: 'maxwordLength', message: 'Maximum 250 words allowed'},\n ],\n dob: [\n {type: 'required', message: 'Please enter your date of birth'},\n ],\n dobInvalidAge: [\n {type: 'invalidAge', message: 'Age must be 18+'},\n {type: 'pattern', message: 'Invalid Format'},\n {type: 'invalidFormat', message: 'Invalid Format'}\n ]\n };\n static errorMessagesFr = {\n email: [\n {type: 'required', message: 'Veuillez entrer votre email'},\n {type: 'pattern', message: 'Veuillez entrer un email valide'},\n {type: 'isExist', message: 'adresse e-mail existe déjà'},\n ],\n confirmEmail: [\n {type: 'required', message: 'Veuillez entrer votre email'},\n {type: 'pattern', message: 'Veuillez entrer un email valide'},\n {type: 'notSame', message: 'L\\'adresse de messagerie ne correspond pas'},\n ],\n firstName: [\n {type: 'required', message: 'Entrez votre prénom s\\'il vous plait'},\n {type: 'pattern', message: 'Merci d\\'entrer un nom valide'},\n {type: 'maxlength', message: 'Un maximum de 254 caractères est autorisé'},\n {type: 'minlength', message: 'Le prénom doit contenir au moins 2 lettres'}\n ],\n lastName: [\n {type: 'required', message: 'Entrez votre prénom s\\'il vous plait'},\n {type: 'pattern', message: 'Merci d\\'entrer un nom valide'},\n {type: 'maxlength', message: 'Un maximum de 254 caractères est autorisé'},\n {type: 'minlength', message: 'Le nom doit contenir au moins 2 lettres'}\n ],\n phone: [\n {type: 'required', message: 'Veuillez entrer votre numéro de téléphone'},\n {type: 'pattern', message: 'Veuillez saisir un numéro de téléphone à 10 chiffres'},\n ],\n postalCode: [\n {type: 'required', message: 'Veuillez saisir le code postal'},\n {type: 'pattern', message: 'Veuillez entrer un code postal valide'},\n ],\n isAgree: [\n {type: 'required', message: 'S\\'il vous plaît d\\'accord avec ce qui précède'},\n ],\n question: [\n {type: 'required', message: 'Veuillez entrer votre réponse'},\n {type: 'minwordLength', message: 'Veuillez répondre en 25 mots minimum'},\n {type: 'maxwordLength', message: '250 mots maximum autorisés'},\n ],\n recaptcha: [\n {type: 'required', message: 'Veuillez vérifier le captcha'},\n ],\n dob: [\n {type: 'required', message: 'La date de naissance est requis'},\n ],\n dobInvalidAge: [\n {type: 'invalidAge', message: 'L’âge doit être égal ou supérieur à 18 ans'},\n {type: 'invalidFormat', message: 'Format invalide'}\n ]\n }\n}\n","
\n
\n

\n
\n
\n
\n
\n \n \n \n \n \n \n {{validation.message}}\n \n \n \n \n \n \n \n \n \n {{validation.message}}\n \n \n \n
\n
\n \n \n \n \n \n \n {{validation.message}}\n \n \n \n \n \n \n \n \n \n {{validation.message}}\n \n \n \n
\n \n \n \n
\n \n \n \n \n \n \n {{validation.message}}\n \n \n \n \n \n \n \n \n \n {{validation.message}}\n \n \n \n
\n \n
\n \n \n \n \n \n {{validation.message}}\n \n \n \n \n \n {{validation.message}}\n \n \n \n \n
\n
\n \n \n \n \n \n {{validation.message}}\n \n \n \n
\n
\n \n
\n \n \n

\n
\n \n \n

{{validation.message | translate}}

\n \n
\n
\n \n \n \n \n

{{validation.message | translate}}

\n
\n
\n \n
\n \n
\n
\n
\n
\n","import {Component, EventEmitter, NgZone, OnInit, Output, ViewChild} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup, FormGroupDirective, ValidationErrors, Validators} from \"@angular/forms\";\nimport {RegistrationAPIRequestPayloadModel, RegistrationAPIResponseModel} from \"@data/schema/register.model\";\nimport {RegistrationValidationMessages} from \"@modules/registration/registration-validation-messages\";\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {DataService} from \"@data/services/data.service\";\nimport {StorageService} from \"@core/services/storage.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {PlacesService} from \"@shared/google-places-api/places.service\";\nimport {LanguageService} from \"@core/services/language.service\";\nimport {take} from \"rxjs/operators\";\nimport {Observable} from \"rxjs\";\nimport * as moment from \"moment\";\nimport { DatePipe } from '@angular/common';\n\n function dateValidator(control: AbstractControl): { [s: string]: boolean } | null {\n // const datePattern = /^(0[1-9]|1[0-2])\\/(0[1-9]|[12][0-9]|3[01])\\/\\d{4}$/;\n // const datePattern = /^20[0-2][0-9]-((0[1-9])|(1[0-2]))-(0[1-9]|[1-2][0-9]|3[0-1])/;\n const datePattern = /^\\d{4}-\\d{2}-\\d{2}$/;\n \n if (!datePattern.test(control.value)) {\n return { invalidFormat: true };\n }\n \n // const parsedDate = new DatePipe('en-US').transform(control.value, 'MM/dd/yyyy');\n const parsedDate = new DatePipe('en-US').transform(control.value, 'yyyy-MM-dd');\n if (parsedDate !== control.value) {\n return { invalidDate: true };\n }\n return null;\n }\n \n@Component({\n selector: 'app-registration',\n templateUrl: './registration.component.html',\n styleUrls: ['./registration.component.scss']\n})\nexport class RegistrationComponent implements OnInit {\n isFormTouched: boolean = false;\n showSpinner: boolean = false;\n registrationValidationMessages: any;\n askNPNQuestion: boolean = false;\n userRegistrationFormData!: RegistrationAPIRequestPayloadModel;\n @Output() setAddress: EventEmitter = new EventEmitter();\n @ViewChild('addressField', {static: true}) addressField: any;\n registrationForm: FormGroup = this.formBuilder.group({\n firstName: ['', Validators.compose([\n Validators.maxLength(254),\n Validators.required,\n Validators.pattern('(^[a-zA-Z\\-]+$)')\n ])],\n lastName: ['', Validators.compose([\n Validators.maxLength(254),\n Validators.required,\n Validators.pattern('(^[a-zA-Z\\-]+$)')\n ])],\n emails: this.formBuilder.group({\n email: ['', Validators.compose([\n Validators.maxLength(254),\n Validators.pattern(AppConstants.emailPattern),\n Validators.required,\n ])],\n confirmEmail: ['', Validators.compose([\n Validators.maxLength(254),\n Validators.pattern(AppConstants.emailPattern),\n Validators.required,\n ])],\n }, {\n validator: this.checkPasswords('email', 'confirmEmail')\n }),\n phone: [''],\n postalCode: [''],\n // isOptIn: [null],\n isAgree: [null, Validators.compose([\n Validators.requiredTrue\n ])],\n recaptcha: [null, Validators.compose([\n Validators.required\n ])],\n question: [''],\n dob: ['']\n });\n // Custom validator function to check if age is 18+\n validateAge(control: AbstractControl) {\n const currentDate = new Date();\n const birthDate = new Date(control.value);\n if (\n currentDate.getFullYear() - birthDate.getFullYear() < 18 ||\n (currentDate.getFullYear() - birthDate.getFullYear() === 18 &&\n (currentDate.getMonth() < birthDate.getMonth() ||\n (currentDate.getMonth() === birthDate.getMonth() &&\n currentDate.getDate() < birthDate.getDate())))\n ) {\n return { invalidAge: true };\n }\n return null;\n }\n\n private url!: string;\n\n constructor(private ngZone: NgZone,\n private toast: ToastrService,\n private formBuilder: FormBuilder,\n private placeService: PlacesService,\n private dataService: DataService,\n private storageService: StorageService,\n private languageService: LanguageService,\n private router: Router,\n private activatedRoute: ActivatedRoute) {\n }\n\n ngOnInit(): void {\n this.storageService.removeItem('user');\n this.getLanguage();\n this.checkForNPNPage();\n }\n\n getLanguage() {\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n this.url = lang;\n this.url === 'en' ? this.registrationValidationMessages = RegistrationValidationMessages.errorMessagesEn : this.registrationValidationMessages = RegistrationValidationMessages.errorMessagesFr\n })\n };\n\n checkForNPNPage() {\n this.activatedRoute.data.subscribe(pageName => {\n if (pageName.page === \"npnPage\") {\n this.askNPNQuestion = (pageName.page);\n this.registrationForm.setControl('question', this.formBuilder.control('', {\n validators: [Validators.required],\n asyncValidators: [this.checkAnswerLength],\n updateOn: 'blur'\n }));\n this.registrationForm.setControl('dob', this.formBuilder.control('',{\n validators:Validators.compose([\n Validators.required,\n this.validateAge,\n dateValidator\n ])\n }));\n this.registrationForm.setControl('postalCode', this.formBuilder.control('',{\n validators:Validators.compose([\n Validators.required,\n Validators.pattern('^[A-Za-z]\\\\d[A-Za-z][ -]?\\\\d[A-Za-z]\\\\d$')\n ])\n }));\n this.registrationForm.setControl('phone', this.formBuilder.control('',{\n validators:Validators.compose([\n Validators.required,\n Validators.pattern('^[0-9]{10}$')\n ])\n }));\n }\n }\n )\n };\n\n checkPasswords(controlName: string, matchingControlName: string) {\n return (formGroup: FormGroup) => {\n const control = formGroup.controls[controlName];\n const matchingControl = formGroup.controls[matchingControlName];\n if (matchingControl.errors && !matchingControl.errors.notSame) {\n return;\n }\n if (control.value !== matchingControl.value) {\n matchingControl.setErrors({notSame: true});\n } else {\n matchingControl.setErrors(null);\n }\n };\n }\n\n checkAnswerLength(control: AbstractControl): Observable | Promise {\n return new Promise((resolve) => {\n if (control.value.split(\" \").length < 25) {\n resolve({minwordLength: true})\n }\n if (control.value.split(\" \").length > 250) {\n resolve({maxwordLength: true})\n }\n }\n )\n };\n\n displayError(control: any, validation: any) {\n return !(validation.type === 'pattern' && this.registrationForm.controls[control].hasError('maxlength'));\n }\n\n onSubmit(formDirective: FormGroupDirective) {\n this.isFormTouched = true;\n if (this.registrationForm.invalid) {\n return;\n }\n if (!this.askNPNQuestion) {\n this.registrationForm.controls['dob'].setValue(null);\n }\n this.userRegistrationFormData = new RegistrationAPIRequestPayloadModel(this.registrationForm.value, this.url);\n this.showSpinner = true;\n console.log('userRegistrationFormData',this.userRegistrationFormData);\n \n this.dataService.registerUser(this.userRegistrationFormData).subscribe((response: RegistrationAPIResponseModel) => {\n this.storageService.setItemToSessionStorage('user', JSON.stringify(response));\n this.storageService.isLoggedIn = true;\n if (this.askNPNQuestion) {\n this.npnPageHandler();\n return;\n }\n this.url === 'fr' ? this.router.navigate(['/upload-receipt']) : this.router.navigate(['/upload-receipt']);\n }, (error) => {\n formDirective.resetForm();\n this.registrationForm.reset();\n this.errorHandling(error);\n });\n }\n\n npnPageHandler() {\n if (this.url === 'fr') {\n this.toast.success(AppConstants.npnRegistrationSuccessFr);\n this.router.navigate(['/home'])\n return;\n }\n console.log(this.url)\n this.router.navigate(['/home']);\n this.toast.success(AppConstants.npnRegistrationSuccessEn);\n\n };\n\n errorHandling(error: string) {\n console.error(error);\n if (error === 'UserAlreadyRegistered') {\n if (this.url === 'fr') {\n this.toast.error(AppConstants.errorMessageNPNFr);\n this.router.navigate(['/home'])\n } else {\n this.toast.error(AppConstants.errorMessageNPNEn);\n this.router.navigate(['/home'])\n return;\n }\n } else {\n if (this.url === 'fr') {\n this.toast.error(AppConstants.errorMessageFr);\n this.router.navigate(['/home'])\n return;\n } else {\n this.toast.error(AppConstants.errorMessageEn);\n this.router.navigate(['/home'])\n }\n }\n }\n}\n\n","import {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {RegistrationComponent} from './registration.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: RegistrationComponent\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class RegistrationRoutingModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {RegistrationRoutingModule} from '@modules/user/registration/registration-routing.module';\nimport {RegistrationComponent} from './registration.component';\nimport {CoreModule} from \"@core/core.module\";\nimport {RECAPTCHA_LANGUAGE, RECAPTCHA_SETTINGS, RecaptchaSettings} from \"ng-recaptcha\";\nimport {SharedModule} from \"@shared/shared.module\";\nimport {AppConstants} from \"@core/constants/app-constants\";\n\n\n@NgModule({\n declarations: [\n RegistrationComponent\n ],\n imports: [\n CommonModule,\n RegistrationRoutingModule,\n CoreModule,\n SharedModule\n ],\n providers: [\n {\n provide: RECAPTCHA_SETTINGS,\n useValue: {\n siteKey: AppConstants.recaptchaSiteKey,\n } as RecaptchaSettings,\n },\n {\n provide: RECAPTCHA_LANGUAGE,\n useValue: localStorage.currentLang === 'fr'? 'fr-CA': 'en'\n }\n ]\n})\nexport class RegistrationModule {\n}\n","\n \n \n
\n
\n \"\"\n\n
\n
\n
\n \n
\n
\n
\n
\n\n","import {Component, Input} from '@angular/core';\nimport SwiperCore, {Autoplay, EffectFade, Navigation} from \"swiper/core\";\nimport {BannerModel} from \"@data/schema/banner.model\";\nimport {SwiperOptions} from \"swiper\";\nimport {Router} from \"@angular/router\";\n\nSwiperCore.use([Navigation, Autoplay, EffectFade]);\n\n@Component({\n selector: 'app-banner',\n templateUrl: './banner.component.html',\n styleUrls: ['./banner.component.scss']\n})\nexport class BannerComponent {\n @Input() enableLink: boolean = false;\n @Input() banners: BannerModel[] = [{\n desktop: '',\n mobile: '',\n link: ''\n }];\n sliderConfig: SwiperOptions = {\n slidesPerView: 1,\n spaceBetween: 0,\n preloadImages: false,\n lazy: true,\n loop: this.banners.length > 1,\n autoplay: {\n delay: 4000,\n disableOnInteraction: false,\n pauseOnMouseEnter: true\n },\n };\n\n constructor(private router: Router) {\n }\n\n redirect(data: string) {\n this.router.navigate([data]);\n }\n\n}\n","import {Injectable} from '@angular/core';\nimport {AddressComponent, PlaceData} from \"@data/schema/google-places-api.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlacesService {\n\n constructor() {\n }\n\n getAddressComponent(place: PlaceData, componentTemplate: string): AddressComponent {\n return place.address_components.find(addressComponent => {\n return addressComponent.types.some(addressType => addressType == componentTemplate);\n });\n }\n\n getCity(place: PlaceData) {\n if (this.getAddressComponent(place, 'locality')) {\n return this.getAddressComponent(place, 'locality').long_name;\n } else if (this.getAddressComponent(place, 'sublocality_level_1')) {\n return this.getAddressComponent(place, 'sublocality_level_1').long_name;\n } else {\n return '';\n }\n }\n\n getStreetNumber(place: PlaceData) {\n return this.getAddressComponent(place, 'street_number').long_name;\n }\n\n getRouteLongName(place: PlaceData) {\n return this.getAddressComponent(place, 'route').long_name;\n }\n\n getRouteShortName(place: PlaceData) {\n return this.getAddressComponent(place, 'route').short_name;\n }\n\n getNeighborhood(place: PlaceData) {\n if (this.getAddressComponent(place, 'neighborhood')) {\n return this.getAddressComponent(place, 'neighborhood').long_name;\n } else {\n return null;\n }\n }\n\n getLocality(place: PlaceData) {\n return this.getAddressComponent(place, 'locality').long_name;\n }\n\n getLocalityTwo(place: PlaceData) {\n return this.getAddressComponent(place, 'administrative_area_level_1').long_name;\n }\n\n getState(place: PlaceData) {\n return this.getAddressComponent(place, 'administrative_area_level_1').long_name;\n }\n\n getStateShortName(place: PlaceData) {\n return this.getAddressComponent(place, 'administrative_area_level_1').short_name;\n }\n\n getPostCode(place: PlaceData) {\n return this.getAddressComponent(place, 'postal_code') ? this.getAddressComponent(place, 'postal_code').long_name : '';\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from \"@angular/common\";\nimport {CoreModule} from \"@core/core.module\";\nimport {GooglePlacesApiComponent} from '@shared/google-places-api/google-places-api.component';\nimport {PlacesService} from \"@shared/google-places-api/places.service\";\nimport {SupportFormComponent} from '@shared/support-form/support-form.component';\nimport {FaqComponent} from '@shared/faq/faq.component';\nimport {BannerComponent} from '@shared/banner/banner.component';\nimport {PageLoaderComponent} from '@shared/page-loader/page-loader.component';\n\n\n@NgModule({\n declarations: [\n GooglePlacesApiComponent,\n SupportFormComponent,\n FaqComponent,\n BannerComponent,\n PageLoaderComponent,\n\n ],\n imports: [\n CommonModule,\n CoreModule\n ],\n exports: [\n GooglePlacesApiComponent,\n SupportFormComponent,\n FaqComponent,\n BannerComponent,\n PageLoaderComponent,\n ],\n providers: [\n PlacesService\n ]\n})\n\nexport class SharedModule {\n}\n","/**\n * Environment for STAGING\n */\nimport {Routes} from \"./routes\";\n\nexport const environment = {\n environment_name: 'staging',\n production: false,\n domainProtocol: 'https://',\n domains: {\n en: Routes.domains.staging.en,\n fr: Routes.domains.staging.fr\n },\n api: {\n base: `//${location.hostname}/`,\n baseMicrosite: 'BimboWW2023',\n redirectUri: `https://${location.hostname}/`,\n routes: Routes,\n },\n basicAuth: {\n username: 'BimboWW2023',\n password: '6MtuRVpAJ%@R0*%q6FljDMM%Ocdt!#-LOCAL'\n }\n};\n\n","export const Routes = {\n domains: {\n staging: {\n en: 'wellnessww.3tlstaging.com',\n fr: 'bienetreww.3tlstaging.com'\n },\n production: {\n en: 'wellnessww.ca',\n fr: 'bienetreww.ca'\n }\n },\n microsite: {\n promotionPeriod: {\n endPoint: '/promotion/period', method: 'GET'\n },\n support : {\n endPoint: '/customersupport' , method: 'POST'\n }\n },\n user: {\n registration: {\n endPoint : '/register/user' , method: 'POST'\n },\n uploadReceipt: {\n endPoint : '/receipt/upload' , method: 'POST'\n }\n }\n}\n","\n
\n \"Banner\n \n
\n
\n","import {Component, OnInit} from '@angular/core';\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {LanguageService} from \"@core/services/language.service\";\n\ndeclare const AOS: any;\n\n@Component({\n selector: 'app-page-loader',\n templateUrl: './page-loader.component.html',\n styleUrls: ['./page-loader.component.scss']\n})\nexport class PageLoaderComponent implements OnInit {\n showClass = true;\n src! :string;\n\n constructor(private languageService: LanguageService) {\n }\n ngOnInit(): void {\n this.languageService.currentLanguage.subscribe(lang =>{\n lang === 'fr'? this.src = AppConstants.mainLogoFr : this.src = AppConstants.mainLogoEn;\n })\n setTimeout(() => {\n this.showClass = false;\n AOS.init({\n once: true\n });\n }, 1500);\n }\n\n}\n","
\n
\n \n
\n
\n \n
\n \n
\n \n\n \n
    \n
  • \n {{childLinks.title!}}\n
  • \n
\n
\n
\n
\n
\n
\n\n
\n
\n \n \n
\n","import {Component, ElementRef, Inject, OnInit, ViewChild} from '@angular/core';\nimport {DOCUMENT, Location} from \"@angular/common\";\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {Menu} from \"@data/schema/menu.model\";\nimport {ActivatedRoute, NavigationEnd, Router} from \"@angular/router\";\nimport {PageScrollService} from \"ngx-page-scroll-core\";\nimport {LanguageService} from \"@core/services/language.service\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {StorageService} from \"@core/services/storage.service\";\nimport {Environment} from \"@angular/compiler-cli/src/ngtsc/typecheck/src/environment\";\nimport {environment} from \"../../../environments/environment\";\n\ndeclare const AOS: any;\n\n@Component({\n selector: 'app-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss']\n})\nexport class HeaderComponent implements OnInit {\n logo!: string;\n public activeItem: string = 'home';\n isHamburgerOpen: boolean = false;\n hoverLinkRoute: string = this.location.path();\n language: string = '';\n @ViewChild('navMenu') navMenu: ElementRef | undefined;\n\n menuLinks: Menu[] = [];\n\n constructor(private router: Router,\n private languageService: LanguageService,\n private location: Location,\n private storageService: StorageService,\n private pageScrollService: PageScrollService,\n private translate: TranslateService,\n private activatedRoute: ActivatedRoute,\n @Inject(DOCUMENT) private document: any) {\n }\n\n ngOnInit(): void {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n this.hoverLinkRoute = this.location.path() !== '/home' ? this.location.path() : this.hoverLinkRoute;\n }\n })\n this.languageService.currentLanguage.subscribe(lang => {\n if (lang === 'fr') {\n this.menuLinks = [\n {\n title: 'COMMON.HEADER.MENU_LOGGED.HOME', type: 'link', path: '/home'\n },\n {\n title: 'COMMON.HEADER.MENU_LOGGED.HOW_IT_WORKS', type: 'scroll', path: '#how-to-participate'\n },\n {\n title: 'COMMON.HEADER.MENU_LOGGED.REGISTER', type: 'link', path: '/registration'\n },\n {\n title: 'COMMON.HEADER.MENU_LOGGED.FAQ', type: 'link', path: '/faq'\n },\n {\n title: 'COMMON.HEADER.MENU_LOGGED.LANGUAGE', type: 'lang', path: '#'\n }\n ]\n\n } else {\n this.menuLinks = [\n {\n title: 'COMMON.HEADER.MENU_LOGGED.HOME', type: 'link', path: '/home'\n },\n {\n title: 'COMMON.HEADER.MENU_LOGGED.HOW_IT_WORKS', type: 'scroll', path: '#how-to-participate'\n },\n {\n title: 'COMMON.HEADER.MENU_LOGGED.REGISTER', type: 'link', path: '/registration'\n },\n {\n title: 'COMMON.HEADER.MENU_LOGGED.FAQ', type: 'link', path: '/faq'\n },\n {\n title: 'COMMON.HEADER.MENU_LOGGED.LANGUAGE', type: 'lang', path: '/fr'\n }\n ]\n }\n })\n this.languageService.currentLanguage.subscribe(lang => {\n lang === 'fr' ? this.logo = AppConstants.mainLogoFr : this.logo = AppConstants.mainLogoEn;\n })\n }\n\n toggle() {\n this.isHamburgerOpen = !this.isHamburgerOpen;\n this.navMenu && this.navMenu.nativeElement.classList.toggle('navmenu-opacity');\n }\n\n setActive(menuItem: string = 'home') {\n this.activeItem === menuItem ? this.activeItem = '' : this.activeItem = menuItem;\n }\n\n isMenuActive(menuItem: string = '') {\n return this.activeItem === menuItem;\n }\n\n clickHandle(links: Menu) {\n this.hoverLinkRoute = links.path;\n this.navMenu && this.navMenu.nativeElement.classList.remove('navmenu-opacity');\n\n switch (links.type) {\n case 'scroll':\n this.scrollToAnchor(links.path)\n break;\n case 'sub-menu':\n this.setActive(links.title ?? 'home')\n break;\n case 'lang':\n this.updateLanguage();\n break;\n default:\n this.isHamburgerOpen = false;\n this.router.navigateByUrl(links.path);\n scrollTo(0, 0);\n break;\n }\n }\n\n updateLanguage() {\n if (this.storageService.getItem('userLang') === 'fr') {\n //NO need to change the language on same Domain in this case\n // this.languageService.updateLanguage('en');\n //This function is modified to change the domain instead of just adding fr\n this.changeDomainToEn();\n } else {\n // this.languageService.updateLanguage('fr');\n this.changeDomainToFr();\n }\n }\n\n\n // @nazia\n changeUrlToFr() {\n this.router.navigate(['/fr' + this.router.url])\n }\n\n changeUrlToEn() {\n let frLink = this.router.url.split('/');\n frLink.splice(1, 1);\n let enLink = frLink.join('/');\n this.router.navigate([enLink])\n }\n\n changeDomainToEn(){\n window.location.replace(environment.domainProtocol + environment.domains.en + this.router.url);\n }\n\n changeDomainToFr(){\n window.location.replace(environment.domainProtocol + environment.domains.fr + this.router.url);\n }\n\n scrollToAnchor(anchorId: string) {\n this.isHamburgerOpen = false;\n const scrollPage = () => {\n AOS.refresh();\n this.pageScrollService.scroll({\n document: this.document,\n scrollTarget: anchorId,\n scrollOffset: window.innerWidth < 1024 ? 80 : 148,\n });\n }\n\n if (anchorId === '#support') {\n this.router.navigateByUrl('/faq');\n setTimeout(() => scrollPage(), 500);\n }\n\n if (anchorId === '#how-to-participate') {\n this.router.navigateByUrl('/home');\n setTimeout(() => scrollPage(), 500);\n }\n\n\n }\n}\n","
\n \n
\n \n \n \n \n
\n
\n
\n

\n

\n
\n
\n

\n

\n \n
\n
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {StorageService} from \"@core/services/storage.service\";\nimport {Router} from \"@angular/router\";\nimport {DOCUMENT} from \"@angular/common\";\nimport {PageScrollService} from \"ngx-page-scroll-core\";\n\ndeclare const AOS: any;\n\n@Component({\n selector: 'app-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss']\n})\nexport class FooterComponent implements OnInit {\n promotionStarted: boolean = false;\n\n constructor(private storageService: StorageService,\n private router: Router,\n private pageScrollService: PageScrollService,\n @Inject(DOCUMENT) private document: any) {\n }\n\n ngOnInit(): void {\n this.checkPromotionPhase();\n }\n\n checkPromotionPhase() {\n this.storageService.promotionPhaseStatus.subscribe((response: string) => {\n switch (response) {\n case 'PromotionLive':\n this.promotionStarted = true;\n break;\n case 'PromotionEnded':\n this.promotionStarted = false;\n break;\n case 'ComingSoon':\n this.promotionStarted = false\n break;\n default:\n this.promotionStarted = false;\n }\n\n })\n }\n\n scrollToAnchor(anchorId: string) {\n const scrollPage = () => {\n AOS.refresh();\n this.pageScrollService.scroll({\n document: this.document,\n scrollTarget: anchorId,\n scrollOffset: window.innerWidth < 1024 ? 80 : 148,\n });\n }\n if (anchorId === '#support') {\n this.router.navigateByUrl('/faq');\n setTimeout(() => scrollPage(), 500);\n }\n }\n}\n","
\n
\n
\n
\n \n \"grubhub\n \n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n\n
\n
\n
\n\n
\n \n
\n
\n

\n

\n
\n
\n","import {Component, ElementRef, Inject, OnInit, ViewChild} from '@angular/core';\nimport {DOCUMENT, Location} from \"@angular/common\";\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {Menu} from \"@data/schema/menu.model\";\nimport {NavigationEnd, Router} from \"@angular/router\";\nimport {LanguageService} from \"@core/services/language.service\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {StorageService} from \"@core/services/storage.service\";\n\nimport {BannerModel} from \"@data/schema/banner.model\";\nimport {environment} from \"../../../../environments/environment\";\n\ndeclare const AOS: any;\n\n@Component({\n selector: 'app-coming-soon',\n templateUrl: './coming-soon.component.html',\n styleUrls: ['./coming-soon.component.scss']\n})\nexport class ComingSoonComponent implements OnInit {\n logo!: string;\n public activeItem: string = 'home';\n hoverLinkRoute: string = this.location.path();\n language: string = '';\n\n @ViewChild('navMenu') navMenu: ElementRef | undefined;\n\n isBannerLinkActive = AppConstants.disableBannerLink;\n banners: BannerModel [] = [];\n\n menuLinks: Menu[] = [];\n\n constructor(private translate: TranslateService,\n private languageService: LanguageService,\n private storageService: StorageService,\n private router: Router,\n private location: Location,\n @Inject(DOCUMENT) private document: any) {\n }\n\n ngOnInit(): void {\n this.languageService.currentLanguage.subscribe(lang => {\n lang === 'fr' ? this.logo = AppConstants.mainLogoFr : this.logo = AppConstants.mainLogoEn;\n lang === 'fr' ? this.banners = AppConstants.bannerImageFr : this.banners = AppConstants.bannerImageEn;\n if (lang === 'fr') {\n this.menuLinks = [\n {\n title: 'COMMON.HEADER.MENU_LOGGED.LANGUAGE', type: 'lang', path: 'en'\n }\n ];\n\n } else {\n this.menuLinks = [\n {\n title: 'COMMON.HEADER.MENU_LOGGED.LANGUAGE', type: 'lang', path: 'fr'\n }\n ]\n }\n });\n }\n\n clickHandle(links: Menu) {\n if(links.path === 'fr'){\n window.location.replace(environment.domainProtocol + environment.domains.fr);\n }else {\n window.location.replace(environment.domainProtocol + environment.domains.en);\n }\n\n }\n\n\n}\n","
\n
\n
\n
\n \n \"grubhub\n \n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n\n
\n
\n
\n
\n \n
\n
\n

\n

\n
\n
\n\n","import {Component, ElementRef, Inject, OnInit, ViewChild} from '@angular/core';\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {LanguageService} from \"@core/services/language.service\";\nimport {StorageService} from \"@core/services/storage.service\";\nimport {NavigationEnd, Router} from \"@angular/router\";\nimport {BannerModel} from \"@data/schema/banner.model\";\nimport {Menu} from \"@data/schema/menu.model\";\nimport {DOCUMENT, Location} from \"@angular/common\";\nimport {environment} from \"../../../../environments/environment\";\nimport {langTypes} from \"@data/schema/language.model\";\n\n@Component({\n selector: 'app-end-of-promotion',\n templateUrl: './end-of-promotion.component.html',\n styleUrls: ['./end-of-promotion.component.scss']\n})\nexport class EndOfPromotionComponent implements OnInit {\n logo!: string;\n public activeItem: string = 'home';\n hoverLinkRoute: string = this.location.path();\n language: string = '';\n\n @ViewChild('navMenu') navMenu: ElementRef | undefined;\n\n isBannerLinkActive = AppConstants.disableBannerLink;\n banners: BannerModel [] = [];\n\n menuLinks: Menu[] = [];\n\n constructor(private translate: TranslateService,\n private languageService: LanguageService,\n private storageService: StorageService,\n private router: Router,\n private location: Location,\n @Inject(DOCUMENT) private document: any) {\n }\n\n ngOnInit(): void {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n this.hoverLinkRoute = this.location.path() !== '/home' ? this.location.path() : this.hoverLinkRoute;\n }\n })\n this.languageService.currentLanguage.subscribe(lang => {\n lang === 'fr' ? this.logo = AppConstants.mainLogoFr : this.logo = AppConstants.mainLogoEn;\n lang === 'fr' ? this.banners = AppConstants.bannerImageFr : this.banners = AppConstants.bannerImageEn;\n if (lang === 'fr') {\n this.menuLinks = [\n {\n title: 'COMMON.HEADER.MENU_LOGGED.LANGUAGE', type: 'lang', path: '#'\n }\n ];\n\n } else {\n this.menuLinks = [\n {\n title: 'COMMON.HEADER.MENU_LOGGED.LANGUAGE', type: 'lang', path: '/fr'\n }\n ]\n }\n });\n }\n\n setActive(menuItem: string = 'home') {\n this.activeItem === menuItem ? this.activeItem = '' : this.activeItem = menuItem;\n }\n\n isMenuActive(menuItem: string = '') {\n return this.activeItem === menuItem;\n }\n\n clickHandle(links: Menu) {\n this.hoverLinkRoute = links.path;\n this.navMenu && this.navMenu.nativeElement.classList.remove('navmenu-opacity');\n\n switch (links.type) {\n case 'lang':\n this.updateLanguage();\n break;\n default:\n this.router.navigateByUrl(links.path);\n scrollTo(0, 0);\n break;\n }\n }\n\n updateLanguage() {\n if (this.storageService.getItem('userLang') === 'fr') {\n this.languageService.updateLanguage('en');\n this.changeUrlToEn();\n } else {\n this.languageService.updateLanguage('fr');\n this.changeUrlToFr();\n }\n }\n\n changeUrlToFr() {\n this.router.navigate(['/fr' + this.router.url])\n }\n\n changeUrlToEn() {\n let frLink = this.router.url.split('/');\n frLink.splice(1, 1);\n let enLink = frLink.join('/');\n this.router.navigate([enLink])\n }\n UpdateDomain() {\n Object.values(environment.domains).forEach((value, index) => {\n console.log('window.location.hostname',window.location.hostname)\n console.log('value',value)\n if (value === window.location.hostname) {\n let language = Object.keys(environment.domains)[index];\n let selected: langTypes = (language === 'en' || language === 'fr') ? language : 'en';\n console.log('selected lang', selected)\n // this.setPanelGtag(selected);\n // this.store.dispatch(new SetAppLanguage(selected));\n } else {\n }\n });\n }\n}\n","\n
\n \n \n
\n \n
\n \n
\n \n \n \n \n \n \n \n \n
\n","import {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ContentContainerComponent} from \"@layout/content-container/content-container.component\";\n\nconst routes: Routes = [\n {\n path: '',\n redirectTo: '/home',\n pathMatch: 'full'\n },\n {\n path: 'fr',\n redirectTo: '/home',\n pathMatch: 'full'\n },\n {\n path: '',\n component: ContentContainerComponent,\n loadChildren: () => import('@layout/layout.module').then(m => m.LayoutModule)\n },\n {\n path: '**',\n redirectTo: '/home',\n pathMatch: 'full'\n }\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule {\n}\n","import {Component, OnInit} from '@angular/core';\nimport {DataService} from \"@data/services/data.service\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {StorageService} from \"@core/services/storage.service\";\nimport {LanguageService} from \"@core/services/language.service\";\nimport {take} from \"rxjs/operators\";\n\n@Component({\n selector: 'app-content-container',\n templateUrl: './content-container.component.html',\n styleUrls: ['./content-container.component.scss']\n})\nexport class ContentContainerComponent implements OnInit {\n promotionEnded: boolean = false;\n promotionStarted: boolean = false;\n\n\n constructor(private dataService: DataService,\n private toast: ToastrService,\n private storageService: StorageService,\n private languageService: LanguageService\n ) {\n }\n\n ngOnInit(): void {\n this.checkPromotionPhase();\n }\n\n checkPromotionPhase() {\n this.storageService.promotionPhaseStatus.subscribe((response: string) => {\n switch (response) {\n case 'PromotionLive':\n this.promotionStarted = true;\n this.promotionEnded = false;\n break;\n case 'PromotionEnded':\n this.promotionStarted = false;\n this.promotionEnded = true;\n break;\n case 'ComingSoon':\n this.promotionEnded = false;\n this.promotionStarted = false\n break;\n default:\n this.promotionEnded = false;\n this.promotionStarted = false;\n }\n }, (error) => {\n console.error(error);\n this.languageService.currentLanguage.pipe(take(1)).subscribe(lang => {\n lang === 'en' ? this.toast.error('Something went Wrong, Please try again later') : this.toast.error('Quelque chose c\\'est mal passé. Merci d\\'essayer plus tard')\n })\n })\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport {environment} from \"../environments/environment\";\nimport {AppConstants} from \"@core/constants/app-constants\";\nimport {DataService} from \"@data/services/data.service\";\nimport {StorageService} from \"@core/services/storage.service\";\nimport {PromotionPeriodResponseModel} from \"@data/schema/promotion-period.model\";\nimport {LanguageService} from \"@core/services/language.service\";\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit {\n\n language: any;\n\n constructor(private dataService: DataService,\n private storageService: StorageService,\n private languageService: LanguageService) {\n }\n\n ngOnInit() {\n this.dataService.getPromotionPeriod().subscribe((response: PromotionPeriodResponseModel) => {\n this.storageService.promotionPhase.next(response.promotionStatus);\n this.storageService.promotionLive.next(response.promotionStatus !== 'PromotionLive');\n }, (error) => {\n this.storageService.promotionPhase.error(error);\n })\n this.computeLang();\n }\n\n computeLang() {\n Object.values(environment.domains).forEach((value, index) => {\n if (value === window.location.hostname) {\n this.language = Object.keys(environment.domains)[index];\n localStorage.setItem('currentLang', this.language);\n this.language === 'en' ? this.languageService.updateLanguage('en') : this.languageService.updateLanguage('fr')\n }\n this.setPanelGtag(this.language);\n });\n }\n\n setPanelGtag(lang: string) {\n if (environment.environment_name === AppConstants.productionENV) {\n const gtagPanelScript = document.createElement('script');\n gtagPanelScript.async = true;\n gtagPanelScript.src = lang === 'en' ? AppConstants.gtagPanelScriptSrcForEN : AppConstants.gtagPanelScriptSrcForFR;\n document.getElementsByTagName('head')[0].appendChild(gtagPanelScript);\n const gtagDataLayer = document.createElement('script');\n gtagDataLayer.innerHTML = lang === 'en' ? AppConstants.gtagPanelDataLayerForEN : AppConstants.gtagPanelDataLayerForFR;\n document.getElementsByTagName('head')[0].appendChild(gtagDataLayer);\n }\n }\n\n}\n","\n","import {Injectable} from '@angular/core';\nimport {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {Observable, throwError} from 'rxjs';\nimport {catchError} from \"rxjs/operators\";\n\n@Injectable()\nexport class HttpErrorInterceptor implements HttpInterceptor {\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse) => {\n let errorMsg = '';\n if(error.error === 'UserAlreadyRegistered') {\n errorMsg = error.error;\n return throwError(errorMsg);\n }\n if (error.error instanceof ErrorEvent) {\n errorMsg = `Error Client side: ${error.error.message}`;\n } else {\n errorMsg = `Error Server side: ${error.status}, Message: ${error.message}`;\n }\n return throwError(errorMsg);\n })\n )\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {AppConstants} from \"@core/constants/app-constants\";\n\n@Injectable()\nexport class BasicAuthInterceptor implements HttpInterceptor {\n\n constructor() {\n }\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n const userCred = AppConstants.basicAuthCredentials;\n request = request.clone({\n setHeaders: {\n Authorization: `Basic ${userCred}`\n }\n })\n return next.handle(request);\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {CommonModule} from \"@angular/common\";\nimport {BrowserAnimationsModule} from \"@angular/platform-browser/animations\";\nimport {BrowserModule} from \"@angular/platform-browser\";\nimport {AppRoutingModule} from '@app/app-routing.module';\nimport {AppComponent} from '@app/app.component';\nimport {HTTP_INTERCEPTORS, HttpClient, HttpClientModule} from \"@angular/common/http\";\n// Directory Modules\nimport {CoreModule} from \"@core/core.module\";\nimport {SharedModule} from \"@shared/shared.module\";\nimport {LayoutModule} from \"@layout/layout.module\";\nimport {HttpErrorInterceptor} from \"@core/interceptors/http-error.interceptor\";\nimport {BasicAuthInterceptor} from \"@core/interceptors/basic-auth.interceptor\";\nimport {TranslateLoader, TranslateModule} from \"@ngx-translate/core\";\nimport {TranslateHttpLoader} from \"@ngx-translate/http-loader\";\n\nexport function HttpTranslateLoaderFactory(http: HttpClient) {\n return new TranslateHttpLoader(http, './assets/i18n/', '.json');\n}\n\n@NgModule({\n declarations: [\n AppComponent\n ],\n imports: [\n CommonModule,\n BrowserAnimationsModule,\n BrowserModule,\n HttpClientModule,\n // App Routing\n AppRoutingModule,\n // Directory Modules\n CoreModule,\n LayoutModule,\n SharedModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: (HttpTranslateLoaderFactory),\n deps: [HttpClient]\n },\n defaultLanguage: 'en'\n })\n ],\n providers: [\n {provide: HTTP_INTERCEPTORS, useClass: BasicAuthInterceptor, multi: true},\n {provide: HTTP_INTERCEPTORS, useClass: HttpErrorInterceptor, multi: true},\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n}\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"],"sourceRoot":"webpack:///"}