{"version":3,"sources":["webpack:///src/app/shared/components/pages/components/page-header-bar/page-header-bar.component.ts","webpack:///src/app/shared/components/pages/components/page-header-bar/page-header-bar.component.html","webpack:///src/app/shared/components/dialog-wrapper/dialog-wrapper.component.ts","webpack:///src/app/shared/components/dialog-wrapper/dialog-wrapper.component.html","webpack:///src/app/shared/components/content/content.component.ts","webpack:///src/app/shared/components/content/content.component.html","webpack:///src/app/shared/components/menu/components/menu-item/menu-item.component.ts","webpack:///src/app/shared/components/menu/components/menu-item/menu-item.component.html","webpack:///src/app/shared/components/title-bar/title-bar.component.html","webpack:///src/app/shared/components/title-bar/title-bar.component.ts","webpack:///src/app/shared/components/users/user-api.ts","webpack:///src/app/shared/components/users/sign-in.component.html","webpack:///src/app/shared/components/users/sign-in.component.ts","webpack:///src/app/shared/components/choose-employee/choose-employee.component.html","webpack:///src/app/shared/components/choose-employee/choose-employee.component.ts","webpack:///src/app/shared/pipes/translate-list.pipe.ts","webpack:///src/app/shared/pipes/local-currency.pipe.ts","webpack:///src/app/shared/services/azure-api.service.ts","webpack:///src/environments/environment.beta.ts","webpack:///src/app/shared/services/framework-config.service.ts","webpack:///src/app/shared/components/buttons/bar-button.component.ts","webpack:///src/app/shared/components/buttons/bar-button.component.html","webpack:///src/app/shared/components/menu/components/submenu/submenu.component.html","webpack:///src/app/shared/components/menu/components/submenu/submenu.component.ts","webpack:///src/app/shared/components/message/message.component.ts","webpack:///src/app/shared/components/message/message.component.html","webpack:///src/app/shared/helpers/shared-validators.ts","webpack:///src/app/shared/interceptors/http-request-interceptor.ts","webpack:///src/app/shared/interceptors/http-date-interceptor.ts","webpack:///src/app/shared/helpers/dynamic-locale.ts","webpack:///src/app/shared/shared.module.ts","webpack:///src/app/shared/extensions/form-extensions.ts","webpack:///src/app/shared/components/dialog-wrapper/dialog-wrapper-config.ts","webpack:///src/app/shared/components/menu/components/submenu-item/submenu-item.component.ts","webpack:///src/app/shared/components/menu/components/submenu-item/submenu-item.component.html","webpack:///src/app/shared/components/corona/corona.component.ts","webpack:///src/app/shared/components/corona/corona.component.html","webpack:///src/app/shared/components/menu/services/index.ts","webpack:///src/app/shared/components/breadcrum/breadcrum.component.html","webpack:///src/app/shared/components/breadcrum/breadcrum.component.ts","webpack:///src/app/shared/decorators/AutoUnsubscribe.ts","webpack:///src/app/shared/components/menu/services/menu.service.ts","webpack:///src/app/shared/components/menu/components/menu/menu.component.html","webpack:///src/app/shared/components/menu/components/menu/menu.component.ts","webpack:///src/app/shared/services/screen.service.ts","webpack:///src/app/shared/services/auth-guard.service.ts","webpack:///src/app/shared/services/breadcrum.service.ts","webpack:///src/app/shared/services/clipboard.service.ts","webpack:///src/app/shared/services/form.service.ts","webpack:///src/app/shared/services/shared-masks.service.ts","webpack:///src/app/shared/services/signalr.service.ts","webpack:///src/app/shared/services/google-tag-manager.service.ts","webpack:///src/app/shared/directives/date-picker-defaults.directive.ts","webpack:///src/app/shared/components/pages/components/page-subheader-bar/page-subheader-bar.component.ts","webpack:///src/app/shared/components/pages/components/page-subheader-bar/page-subheader-bar.component.html","webpack:///src/app/shared/services/shared-data.service.ts","webpack:///src/app/shared/components/framework-body/framework-body.component.html","webpack:///src/app/shared/components/framework-body/framework-body.component.ts","webpack:///src/app/shared/services/user.service.ts","webpack:///src/app/shared/components/status-bar/status-bar.component.ts","webpack:///src/app/shared/components/status-bar/status-bar.component.html","webpack:///src/app/shared/models/MsError.ts","webpack:///src/app/shared/helpers/GlobalErrorHandler.ts","webpack:///src/app/shared/components/pages/page-config-api.ts","webpack:///src/app/shared/components/validation-message/validation-message.component.ts","webpack:///src/app/shared/components/validation-message/validation-message.component.html","webpack:///src/app/shared/services/shared.service.ts","webpack:///src/app/shared/components/choose-image/choose-image.component.ts","webpack:///src/app/shared/components/choose-image/choose-image.component.html","webpack:///src/app/shared/components/confirm/confirm.component.ts","webpack:///src/app/shared/components/confirm/confirm.component.html","webpack:///src/app/app.menu.ts","webpack:///src/app/app.component.ts","webpack:///src/app/app.component.html","webpack:///src/app/authenticated-user/authenticated-user.component.ts","webpack:///src/app/authenticated-user/authenticated-user.component.html","webpack:///src/app/home/home.component.ts","webpack:///src/app/home/home.component.html","webpack:///src/app/home/company-not-found.component.html","webpack:///src/app/home/company-not-found.component.ts","webpack:///src/app/home/company-not-active.component.html","webpack:///src/app/home/company-not-active.component.ts","webpack:///src/app/home/more-info.component.html","webpack:///src/app/home/more-info.component.ts","webpack:///src/app/home/home.service.ts","webpack:///src/app/home/password-lookup.component.html","webpack:///src/app/app.routing.ts","webpack:///src/app/home/password-lookup.component.ts","webpack:///src/app/app.module.ts","webpack:///src/main.ts","webpack:///$_lazy_route_resource lazy namespace object"],"names":["PageHeaderBarComponent","config","btnClick","EventEmitter","event","this","emit","DialogWrapperComponent","ss","onKeyPress","loaderId","generateLoaderId","key","toLowerCase","target","HTMLInputElement","preventDefault","stopPropagation","message","loaderText","showLoader","hideLoader","ContentComponent","MenuItemComponent","router","menuService","breadcrumService","el","renderer","item","isActiveMenuItem","mouseInItem","activeMenuItem","setCurrentLocation","text","isLastStep","checkActiveRoute","activeMenuItemSubscription","activeMenuItemChanged","subscribe","isLibersyMode","libersyText","unsubscribe","route","navigate","skipLocationChange","setActiveMenuItem","TitleBarComponent","showLanguageSelector","companyLogo","getCompanyLogo","languageItems","Languages","currentLanguage","getCurrentLanguage","id","updateLanguage","UserApi","SignInComponent","userApi","us","location","ts","datepipe","jwtHelper","platformName","getPlatformName","submitting","preloading","environment","production","pushState","onPopState","isAuthenticated","deepLinkBookingOrderId","loadingText","getTranslation","customerCompany","loginOTP","showLogin","customerCompanySubscription","customerCompanyChanged","companyName","getCompanyName","allowNewCustomers","getAllowOnlineNewCustomer","hasOnlineBooking","noLoginOnlineBooking","otpUsed","databaseName","databaseServer","databaseBOUserId","databaseUserId","OTP","toString","res","hasException","sessionStorage","setItem","mobileServiceAuthenticationToken","email","hasSubscription","transform","getTokenExpirationDate","decodeToken","DatabaseUserId","company","scope","setUser","username","setTag","useEmployees","defaultLocale","signInForm","valid","signIn","password","pipe","catchError","err","throwError","deepLinkAppintmentKindIndex","deepLinkEmployeeIndex","$event","ChooseEmployeeComponent","employeeChosen","wrapperConfig","title","buttonDefinition","description","isSmall","clickEventType","employees","forEach","x","selected","useEmployeeAsLocation","setLegacyCssVars","employee","chosenEmployeeId","closeWindow","result","dialog","instance","action","close","phbBtnClicked","TranslateListPipe","value","field","line","instant","LocalCurrencyPipe","currencyCode","digitInfo","getCurrentLocale","AzureApiService","http","BASE_URL","api","GetReportServiceUrl","url","get","encodeURIComponent","body","post","put","delete","patch","name","libersyThemeUrl","version","FrameworkConfigService","settings","showStatusBar","showStatusBarBreakpoint","socialIcons","showUserControls","Array","BarButtonComponent","userService","tp","_sanitizer","buttonClick","clickRoute","queryParams","clickRouteParams","signOut","externalUrl","window","open","type","SubmenuComponent","submenu","subitems","MessageComponent","control","dirty","customRequired","length","test","phoneNoInvalid","emailInvalid","HttpRequestInterceptor","req","next","token","getItem","method","removeTimezone","newReq","clone","headers","handle","Object","keys","Date","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","HttpRequestInterceptorModule","provide","useClass","multi","HttpDateInterceptor","iso8601","request","map","convertToDate","error","isIso8601","addTimeZone","date","setTime","getTime","getTimezoneOffset","HttpDateInterceptorModule","LocaleProvider","LOCALE_ID","String","service","super","currentLang","deps","ngxUiLoaderConfig","fgsColor","fgsPosition","fgsSize","pbColor","overlayColor","textColor","textPosition","fgsType","ballSpinClockwise","pbDirection","leftToRight","pbThickness","hasProgressBar","SharedModule","add","ngModule","providers","useExisting","FormsModule","ReactiveFormsModule","IntlModule","forRoot","NgAddToCalendarModule","TextMaskModule","FormGroup","prototype","patchValueNoEvent","patchValue","emitEvent","AbstractControl","numVal","patchDtoToForm","dtoObject","_self","reset","i","hasOwnProperty","patchFormToDto","assign","getRawValue","disableForm","controls","disable","DialogWrapperConfig","hideSubHeader","SubmenuItemComponent","subitem","class","CoronaComponent","verified","BreadcrumComponent","dds","faPlay","currentLocationSubscription","currentLocationChanged","setTimeout","currentNavigationLocation","currentLocation","constructor","original","ngOnDestroy","prop","property","apply","arguments","MenuService","MenuComponent","needCompanyPolicy","getCustomerCompany","onlineBookingTerms","ScreenService","document","largeBreakpoint","screenWidth","screenHeight","resizeSource","Subject","resize$","asObservable","innerWidth","innerHeight","resizeObservable$","fromEvent","resizeSubscription$","evt","onResize","e","style","setProperty","AuthGuard","canActivate","BreadcrumService","backButtonVisible","backButtonLocation","backButtonParams","showLanguageBox","ClipboardService","dom","Promise","resolve","reject","textarea","createElement","height","left","opacity","position","top","width","appendChild","select","execCommand","parentNode","removeChild","FormService","form","SharedMaskService","conformedValue","split","s","charAt","toUpperCase","substring","join","indexesOfPipedChars","push","currentCaretPosition","rawValue","previousConformedValue","placeholderChar","removeAllAtSymbolsButFirst","indexOfAtDot","indexOf","atDot","match","RegExp","emptyString","dotDot","atSymbol","dot","indexOfAtSymbol","slice","allDotsRegExp","emptyArray","substr","nameLetterRegEx","splittedWords","splittenHyphens","j","k","nameLetterSpaceOrHyphenRegEx","initialLetterRegEx","dotRegEx","splittedLetters","addressLetterRegEx","addressLetterSpaceOrHyphenRegEx","mailcodeRegEx","bsnRegEx","alphaNummericRegEx","alphaNummericWithSpaceHyphenRegEx","countryId","countries","some","locale","find","replace","allWhitespaceRegExp","indexOfFirstAtSymbol","indexOfLastDot","lastIndexOf","indexOfTopLevelDomainDot","localPartToDomainConnector","getConnector","domainNameToTopLevelDomainConnector","localPart","getLocalPart","domainName","getDomainName","topLevelDomain","getTopLevelDomain","convertToMask","concat","pedicureInspection1RegEx","pedicureInspection2RegEx","indexOfConnection","connectionSymbol","connector","caretTrap","g","asterisk","space","str","noDots","char","anyNonDotOrWhitespaceRegExp","anyNonWhitespaceRegExp","atSymbolCount","allAtSymbolsRegExp","phoneRegEx","SignalrService","bookingPaymentReceived","dateMask","bookingOrderId","connection","withUrl","withAutomaticReconnect","build","registerOnEvents","start","then","invoke","catch","console","state","Connected","stop","onreconnected","on","data","obj","n","newobj","isDate","parseInt","GoogleTagManagerService","browserGlobals","windowRef","documentRef","log","dataLayer","getDataLayer","gtmId","doc","gtmScript","innerText","head","insertBefore","firstChild","ifrm","setAttribute","display","visibility","noscript","gtmIdIsSet","pushOnDataLayer","DatePickerDefaultsDirective","component","subscriptions","input","inputElement","format","placeholder","formatPlaceholder","year","month","day","onFocus","setSelectionRange","PageSubheaderBarComponent","SharedDataService","zipcode","housenumber","FrameworkBodyComponent","UserService","rememberMe","doServerSignIn","clear","isTokenExpired","companyUsername","StatusBarComponent","MsError","GlobalErrorHandler","injector","errorCandidate","ngOriginalError","Error","ErrorEvent","status","extractedError","extractError","dialogService","ngZone","NgZone","sharedService","run","hideAllLoaders","msError","errorNumber","friendlyMessage","navigator","onLine","statusText","dialogRef","content","dialogContent","PageHeaderBarConfig","PageSubheaderBarConfig","ValidationMessageComponent","hasErrorMessage","errorMessage","FormArray","getInnerFormArrayValidationErrors","controlErrors","errors","keyError","customFields","translateKey","translateKeyError","formArray","group","FormControl","markAsDirty","onlySelf","updateValueAndValidity","validateInnerFormFields","validateInnerFormArray","markAsPristine","resetInnerFormValidation","resetInnerFormArrayValidation","formGroup","SharedService","currencyPipe","loaderService","sds","intlService","loaderIds","loaderConfig","getDefaultConfig","languageChanged","bookingDomain","confirm","create","observer","complete","chooseImage","image","maxWidth","aspectRation","fileType","aspectRatio","imageSource","chosenImage","path","params","colorToUse","color2ToUse","colorTextToUse","colorText2ToUse","subColorToUse","standardColor1","removeColorAlpha","standardColor2","standardTextColor1","standardTextColor2","legacyCssVarsSet","onlyLegacy","watch","variables","replaceUrl","relativeTo","icon","localStorage","getBrowserLang","includes","use","localeId","saveLocale","stringToSave","mollieApiKey","forMollie","toPromise","color3ToUse","setLoaderConfig","trackingId","trackingLabel","gaScript","gaScript2","documentElement","gaConversionScript","removeGoogleGlobalGtag","gagtagscript","getElementById","gagtagscript2","gaconversionscript","remove","hasCustomAppointmentForm","logo","allowOnlineNewCustomer","street","houseNo","houseNoAdd","city","color","waitTime","startLoader","splice","stopLoader","getMilliseconds","number","precision","factor","Math","pow","round","now","d","days","a","time","hours","floor","minutes","H","M","ChooseImageComponent","elementRef","croppedImage","cropperPos","x1","y1","x2","y2","base64","setCropper","nativeElement","querySelector","offsetWidth","offsetHeight","imageCropped","imageLoaded","ConfirmComponent","initialMenuItems","AppComponent","frameworkConfigService","gtms","deviceService","events","filter","pushTag","virtualUrl","hostname","configure","setLanguage","items","referrerUrl","referrer","getQueryParams","getUsernameFromUrl","checkCompany","companyDetails","setCustomerCompany","setTrackingId","adwordsId","sub","search","pairString","reduce","out","pair","paramMap","has","Guid","parse","host","AuthenticatedUserComponent","HomeComponent","CompanyNotFoundComponent","steps","languageChosen","CompanyNotActiveComponent","MoreInfoComponent","allowCancel","appointmentCancelByCustomer","canBookToday","onlinePlannerToday","phbConfig","HomeService","appRoutes","PasswordLookupComponent","fb","cd","ds","valueChanges","validationMessage","getFormValidationErrors","validateForm","send","resetPassword","hasError","resultMessage","loadChildren","m","NewCustomerModule","NewAppointmentPasserbyModule","children","canActivateChild","redirectTo","pathMatch","AppointmentsModule","NewAppointmentModule","EditPasswordModule","CompanyInfoModule","CustomerImagesModule","CustomerDetailsModule","CompanyPolicyModule","PaymentCallbackModule","translateHttpLoaderFactory","httpClient","jwtOptionsFactory","tokenGetter","whitelistedDomains","AppModule","ErrorHandler","BrowserModule","relativeLinkResolution","loader","useFactory","jwtOptionsProvider","dsn","integrations","Dedupe","TryCatch","XMLHttpRequest","release","enableProdMode","platformBrowser","bootstrapModule","ngZoneEventCoalescing","webpackEmptyAsyncContext","code","module","exports"],"mappings":"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","file":"x","sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { PageHeaderBarConfig } from '../../page-config-api';\r\n\r\n@Component({\r\n selector: 'fw-page-header-bar',\r\n templateUrl: './page-header-bar.component.html',\r\n styleUrls: ['./page-header-bar.component.scss']\r\n})\r\nexport class PageHeaderBarComponent implements OnInit {\r\n @Input()\r\n config = new PageHeaderBarConfig();\r\n\r\n @Output()\r\n btnClick = new EventEmitter();\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n btnClicked(event) {\r\n this.btnClick.emit(event);\r\n }\r\n}\r\n","{{config.title | translate}}\r\n
\r\n \r\n
\r\n","import {Component, EventEmitter, HostListener, Input, OnInit, Output} from '@angular/core';\r\nimport {DialogWrapperConfig} from './dialog-wrapper-config';\r\nimport {SharedService} from \"../../services/shared.service\";\r\n\r\n@Component({\r\n selector: 'ngx-dialog-wrapper',\r\n templateUrl: './dialog-wrapper.component.html',\r\n styleUrls: ['./dialog-wrapper.component.scss']\r\n})\r\nexport class DialogWrapperComponent implements OnInit {\r\n @Input() config = new DialogWrapperConfig();\r\n @Output() btnClick = new EventEmitter();\r\n @Output() onKeyPress = new EventEmitter();\r\n loaderText: string;\r\n loaderId: string = this.ss.generateLoaderId();\r\n\r\n constructor(private ss: SharedService) {}\r\n\r\n ngOnInit() {}\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n handleKeyboardEvent(event: KeyboardEvent) {\r\n this.onKeyPress.emit(event.key);\r\n if (event.key?.toLowerCase() === 'enter') {\r\n if (event.target ! instanceof HTMLInputElement) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n } else if (event.key?.toLowerCase() === 'escape') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n btnClicked(event) {\r\n this.btnClick.emit(event);\r\n }\r\n\r\n showLoader(message?: string) {\r\n if (!message)\r\n this.loaderText = 'Bezig met laden';\r\n else\r\n this.loaderText = message;\r\n this.ss.showLoader(this.loaderId, 0)\r\n }\r\n\r\n hideLoader() {\r\n this.ss.hideLoader(this.loaderId);\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n {{step.text | translate}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{config.subTitle | translate}}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'fw-content',\r\n templateUrl: './content.component.html',\r\n styleUrls: ['./content.component.scss']\r\n})\r\nexport class ContentComponent {}\r\n","\r\n","import { Component, ElementRef, HostListener, Input, OnInit, Renderer2 } from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {Subscription} from 'rxjs';\r\nimport {BreadcrumService, BreadcrumStep, FrameworkConfigService} from '../../../../services';\r\nimport {MenuItem, MenuService} from '../../services';\r\n\r\n@Component({\r\n selector: 'fw-menu-item',\r\n templateUrl: './menu-item.component.html',\r\n styleUrls: ['./menu-item.component.scss']\r\n})\r\nexport class MenuItemComponent implements OnInit {\r\n @Input() item = null;\r\n isActiveMenuItem = false;\r\n mouseInItem = false;\r\n private activeMenuItemSubscription: Subscription;\r\n\r\n constructor(\r\n private router: Router,\r\n private menuService: MenuService,\r\n private breadcrumService: BreadcrumService,\r\n private el: ElementRef,\r\n private renderer: Renderer2\r\n ) {\r\n }\r\n\r\n checkActiveRoute() {\r\n this.isActiveMenuItem = this.menuService.activeMenuItem == this.item;\r\n if (this.isActiveMenuItem) {\r\n var steps: Array = [\r\n {text: 'hoofdmenu', isLastStep: false},\r\n {text: this.item.text, isLastStep: true}\r\n ];\r\n this.breadcrumService.setCurrentLocation(steps, false, '');\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.checkActiveRoute();\r\n\r\n this.activeMenuItemSubscription = this.menuService.activeMenuItemChanged.subscribe(\r\n event => {\r\n this.checkActiveRoute();\r\n }\r\n );\r\n }\r\n\r\n getDescription(): string {\r\n if (FrameworkConfigService.isLibersyMode && this.item.libersyText)\r\n return this.item.libersyText;\r\n return this.item.text;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.activeMenuItemSubscription.unsubscribe();\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event): void {\r\n event.stopPropagation();\r\n\r\n if (this.item.route) {\r\n this.router.navigate(['/' + this.item.route], { skipLocationChange: true });\r\n this.menuService.setActiveMenuItem(null);\r\n } else {\r\n this.menuService.setActiveMenuItem(this.item);\r\n }\r\n }\r\n}\r\n","
\r\n \r\n {{getDescription() | translate}}\r\n
\r\n
\r\n\r\n
\r\n","
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {SharedService} from \"../../services/shared.service\";\r\nimport {FrameworkConfigService} from \"../../services/framework-config.service\";\r\n\r\n@Component({\r\n selector: 'fw-title-bar',\r\n templateUrl: './title-bar.component.html',\r\n styleUrls: ['./title-bar.component.scss']\r\n})\r\nexport class TitleBarComponent implements OnInit {\r\n showLanguageSelector = FrameworkConfigService.showLanguageSelector;\r\n companyLogo: string = this.ss.getCompanyLogo();\r\n languageItems: Array<{ id: string, description: string, icon: string }> = SharedService.Languages();\r\n currentLanguage: string = SharedService.getCurrentLanguage();\r\n\r\n constructor(private ss: SharedService) {\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n languageChosen(id: string) {\r\n this.ss.updateLanguage(id);\r\n }\r\n}\r\n","import {Observable} from \"rxjs\";\r\n\r\n\r\nexport abstract class UserApi {\r\n signIn: (\r\n username: string,\r\n password: string,\r\n rememberMe: boolean\r\n ) => Observable;\r\n signOut: () => Observable;\r\n}\r\n","
\r\n
\r\n
\r\n

{{loadingText}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n {{'LOGIN.HEADER' | translate}} {{companyName}}\r\n {{'LOGIN.SUBHEADER' | translate}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

{{'LOGIN.LOADER_LOGGING_IN_MSG' | translate}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n {{'STATUSBAR.POWEREDBY' | translate}}: {{platformName | translate}}\r\n
\r\n
\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {NgForm} from '@angular/forms';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport {Subscription, throwError} from 'rxjs';\r\nimport {UserApi} from './user-api';\r\nimport {SharedService} from \"../../services/shared.service\";\r\nimport {CustomerCompany} from \"../..//models/CustomerCompany\";\r\nimport {catchError} from \"rxjs/operators\";\r\nimport {FrameworkConfigService} from \"../../services/framework-config.service\";\r\nimport {UserService} from \"../../services/user.service\";\r\nimport {DatePipe, LocationStrategy} from \"@angular/common\";\r\nimport {environment} from \"../../../../environments/environment\";\r\nimport {TranslateService} from \"@ngx-translate/core\";\r\nimport {DtoLoginRequest, DtoLoginResult} from \"@app/shared\";\r\nimport * as Sentry from \"@sentry/angular\";\r\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\r\n\r\n@Component({\r\n selector: 'fw-sign-in',\r\n templateUrl: './sign-in.component.html',\r\n styleUrls: ['./sign-in.component.scss']\r\n})\r\nexport class SignInComponent implements OnInit {\r\n private customerCompanySubscription: Subscription;\r\n platformName: string = FrameworkConfigService.getPlatformName();\r\n submitting = false;\r\n companyLogo: string;\r\n companyName: string;\r\n allowNewCustomers: boolean;\r\n email: string;\r\n password: string;\r\n languageItems: Array<{ id: string, description: string, icon: string }> = SharedService.Languages();\r\n currentLanguage: string = SharedService.getCurrentLanguage();\r\n preloading: boolean = true;\r\n loadingText: string;\r\n otpUsed: boolean;\r\n\r\n constructor(private userApi: UserApi,\r\n private router: Router,\r\n private us: UserService,\r\n private location: LocationStrategy,\r\n private ts: TranslateService,\r\n private datepipe: DatePipe,\r\n public jwtHelper: JwtHelperService,\r\n private route: ActivatedRoute,\r\n private ss: SharedService) {\r\n // disable browser back button\r\n if (environment.production) {\r\n location.pushState(null, null, '', '');\r\n location.onPopState((event) => {\r\n location.pushState(null, null, '', '');\r\n });\r\n }\r\n\r\n if (this.us.isAuthenticated() && !this.ss.deepLinkBookingOrderId) {\r\n this.ss.navigate('auth', null);\r\n }\r\n }\r\n\r\n async ngOnInit() {\r\n if (FrameworkConfigService.isLibersyMode)\r\n this.loadingText = await this.ss.getTranslation('PRELOAD.LOADINGLIBERSY');\r\n else\r\n this.loadingText = await this.ss.getTranslation('PRELOAD.LOADINGMIJNSALON');\r\n\r\n if (this.ss.customerCompany) {\r\n if (this.ss.deepLinkBookingOrderId) {\r\n this.loginOTP();\r\n } else {\r\n this.showLogin();\r\n }\r\n }\r\n\r\n this.customerCompanySubscription = this.ss.customerCompanyChanged.subscribe((event: CustomerCompany) => {\r\n if (this.ss.deepLinkBookingOrderId) {\r\n this.loginOTP();\r\n } else {\r\n this.showLogin();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.customerCompanySubscription?.unsubscribe();\r\n }\r\n\r\n showLogin() {\r\n this.companyName = this.ss.getCompanyName();\r\n this.companyLogo = this.ss.getCompanyLogo();\r\n this.allowNewCustomers = this.ss.getAllowOnlineNewCustomer();\r\n if (!this.ss.customerCompany.hasOnlineBooking) {\r\n this.ss.navigate('companynotactive', null);\r\n } else if (this.ss.customerCompany.noLoginOnlineBooking) {\r\n this.ss.navigate('new-appointment-passerby', null);\r\n } else {\r\n this.preloading = false;\r\n }\r\n }\r\n\r\n loginOTP() {\r\n if (!this.otpUsed) {\r\n this.otpUsed = true;\r\n this.us.loginOTP({\r\n databaseName: this.ss.customerCompany.databaseName,\r\n databaseServer: this.ss.customerCompany.databaseServer,\r\n databaseBOUserId: this.ss.customerCompany.databaseBOUserId,\r\n databaseUserId: this.ss.customerCompany.databaseUserId,\r\n OTP: this.ss.deepLinkBookingOrderId.toString()\r\n } as DtoLoginRequest).subscribe((res: DtoLoginResult) => {\r\n if (!res.hasException) {\r\n sessionStorage.setItem('accessToken', res.mobileServiceAuthenticationToken);\r\n sessionStorage.setItem('username', res.email);\r\n sessionStorage.setItem('hasSubscription', res.hasSubscription ? '1' : '0');\r\n sessionStorage.setItem('expiresOn', this.datepipe.transform(this.jwtHelper.getTokenExpirationDate(res.mobileServiceAuthenticationToken), 'dd-MM-yyyy hh:mm:ss'));\r\n sessionStorage.setItem('tokenType', 'JWT');\r\n sessionStorage.setItem('userId', this.jwtHelper.decodeToken(res.mobileServiceAuthenticationToken).DatabaseUserId);\r\n const company = this.ss.customerCompany;\r\n Sentry.configureScope(function (scope) {\r\n scope.setUser({\r\n id: company.databaseUserId.toString(),\r\n username: res.email\r\n });\r\n scope.setTag(\"userId\", company.databaseUserId);\r\n scope.setTag(\"username\", res.email);\r\n scope.setTag(\"server\", company.databaseServer);\r\n scope.setTag(\"database\", company.databaseName);\r\n scope.setTag(\"useEmployees\", company.useEmployees);\r\n scope.setTag(\"defaultLocale\", company.defaultLocale);\r\n scope.setTag(\"companyName\", company.companyName);\r\n scope.setTag(\"customerEmail\", res.email);\r\n scope.setTag(\"customerLocale\", SharedService.getCurrentLanguage());\r\n });\r\n\r\n this.ss.navigate('auth/payment-callback', null);\r\n } else {\r\n this.showLogin();\r\n }\r\n });\r\n }\r\n }\r\n\r\n languageChosen(id: string) {\r\n this.ss.updateLanguage(id);\r\n }\r\n\r\n onSubmit(signInForm: NgForm) {\r\n if (signInForm.valid) {\r\n this.submitting = true;\r\n\r\n this.userApi.signIn(this.email, this.password, false)\r\n .pipe(\r\n catchError(err => {\r\n this.submitting = false;\r\n return throwError(err);\r\n })\r\n )\r\n .subscribe((res: boolean) => {\r\n if (res) {\r\n if (this.ss.deepLinkAppintmentKindIndex > 0 || this.ss.deepLinkEmployeeIndex > 0) {\r\n this.ss.navigate('auth/new-appointment', null);\r\n } else {\r\n this.ss.navigate('auth', null);\r\n }\r\n } else\r\n this.submitting = false;\r\n });\r\n }\r\n }\r\n\r\n btnMoreInfoClicked($event: any) {\r\n this.ss.navigate('moreinfo', null);\r\n }\r\n\r\n btnPasswordLookup($event: any) {\r\n this.ss.navigate('passwordlookup', null);\r\n }\r\n\r\n btnNewCustomer($event: any) {\r\n this.ss.navigate('new-customer', null);\r\n }\r\n}\r\n","\r\n
\r\n Laatste keer behandeld door: {{lastChosenEmployee.firstname}}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\r\nimport {DialogRef} from '@progress/kendo-angular-dialog';\r\nimport {DialogWrapperConfig} from \"../dialog-wrapper/dialog-wrapper-config\";\r\nimport {DtoEmployee} from \"../../models/DtoEmployee\";\r\nimport {SharedService} from \"../../services/shared.service\";\r\n\r\n@Component({\r\n selector: 'ngx-choose-employee',\r\n templateUrl: './choose-employee.component.html',\r\n styleUrls: ['./choose-employee.component.scss']\r\n})\r\nexport class ChooseEmployeeComponent implements OnInit{\r\n @Input() dialog: DialogRef;\r\n @Input() employees: DtoEmployee[];\r\n @Input() lastChosenEmployee: DtoEmployee;\r\n @Output() employeeChosen = new EventEmitter();\r\n chosenEmployeeId?: number;\r\n wrapperConfig: DialogWrapperConfig = {\r\n title: [\r\n {\r\n text: 'PSHB_TITLES.CHOOSEEMPLOYEE',\r\n isLastStep: true\r\n }\r\n ],\r\n buttonDefinition: [\r\n {\r\n description: 'BUTTON.CHOOSE',\r\n isSmall: false,\r\n clickEventType: 'choose'\r\n }\r\n ]\r\n };\r\n\r\n constructor(private ss: SharedService) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.employees.forEach(x => x.selected = false);\r\n if (this.ss.useEmployeeAsLocation()) {\r\n this.wrapperConfig.title = [\r\n {\r\n text: 'PSHB_TITLES.CHOOSELOCATION',\r\n isLastStep: true\r\n }\r\n ];\r\n }\r\n this.ss.setLegacyCssVars();\r\n }\r\n\r\n employeeClicked(employee: DtoEmployee) {\r\n employee.selected = !employee.selected;\r\n if (employee.selected) {\r\n this.employees.forEach(x => {\r\n if (x.id !== employee.id)\r\n x.selected = false;\r\n });\r\n this.chosenEmployeeId = employee.id;\r\n } else\r\n this.chosenEmployeeId = null;\r\n }\r\n\r\n phbBtnClicked(event) {\r\n if (event === 'choose') {\r\n if (this.chosenEmployeeId >= 0) {\r\n this.employeeChosen.emit(this.chosenEmployeeId);\r\n this.closeWindow(true);\r\n }\r\n }\r\n }\r\n\r\n closeWindow(result: boolean) {\r\n if (this.dialog) {\r\n this.dialog.dialog.instance.action.emit({text: result ? 'ok' : 'cancel'});\r\n this.dialog.close();\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {TranslateService} from \"@ngx-translate/core\";\r\n\r\n@Pipe({\r\n name: 'translateList',\r\n})\r\nexport class TranslateListPipe implements PipeTransform {\r\n\r\n constructor(private ts: TranslateService) { }\r\n\r\n transform(value: any[], field: string) {\r\n if (value == null) { return []; } // !value would also react to zeros.\r\n\r\n value.forEach(line => {\r\n if (line[field])\r\n line[field] = this.ts.instant(line[field]);\r\n });\r\n\r\n return value;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {formatCurrency, getLocaleCurrencySymbol} from '@angular/common';\r\nimport {SharedService} from \"../services/shared.service\";\r\n\r\n@Pipe({\r\n name: 'localCurrency',\r\n})\r\nexport class LocalCurrencyPipe implements PipeTransform {\r\n\r\n constructor(private ss: SharedService) {\r\n }\r\n\r\n transform(value: any, currencyCode?: string, digitInfo?: string) {\r\n if (value == null) {\r\n return '';\r\n } // !value would also react to zeros.\r\n\r\n return formatCurrency(value, this.ss.getCurrentLocale(), getLocaleCurrencySymbol('nl-NL'), currencyCode, digitInfo);\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {environment} from '@app/environments/environment';\r\nimport {Observable} from 'rxjs'\r\nimport {HttpClient} from \"@angular/common/http\";\r\n\r\n@Injectable()\r\nexport class AzureApiService {\r\n private BASE_URL = environment.api;\r\n\r\n constructor(\r\n private http: HttpClient) {\r\n }\r\n\r\n GetReportServiceUrl = (): string => {\r\n return this.BASE_URL + 'reports/';\r\n };\r\n\r\n get(url: string): Observable {\r\n return this.http.get(this.BASE_URL + encodeURIComponent(url));\r\n };\r\n\r\n post(url: string, body: any): Observable {\r\n return this.http.post(this.BASE_URL + encodeURIComponent(url), body);\r\n };\r\n\r\n put(url: string, body: any): Observable {\r\n return this.http.put(this.BASE_URL + encodeURIComponent(url), body);\r\n };\r\n\r\n delete(url: string): Observable {\r\n return this.http.delete(this.BASE_URL + encodeURIComponent(url));\r\n };\r\n\r\n patch(url: string, body: any): Observable {\r\n return this.http.patch(this.BASE_URL + encodeURIComponent(url), body);\r\n };\r\n}\r\n","export const environment = {\r\n name: 'Beta',\r\n production: true,\r\n api: 'https://mobileservicecustomertest.azurewebsites.net/api/',\r\n libersyThemeUrl: 'libersy.com',\r\n version: '2.1.2-B.1'\r\n};\r\n","import {Injectable} from '@angular/core';\r\n\r\nexport interface IconFiles {\r\n imageFile: string;\r\n alt: string;\r\n link: string;\r\n}\r\n\r\nexport interface FrameworkConfigSettings {\r\n showLanguageSelector?: boolean;\r\n showUserControls?: boolean;\r\n showStatusBar?: boolean;\r\n showStatusBarBreakpoint?: number;\r\n socialIcons?: Array;\r\n isLibersyMode: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class FrameworkConfigService {\r\n static showLanguageSelector: boolean = true;\r\n static showUserControls = true;\r\n static showStatusBar = true;\r\n static showStatusBarBreakpoint = 0;\r\n static isLibersyMode = false;\r\n static socialIcons = new Array();\r\n\r\n configure(settings: FrameworkConfigSettings): void {\r\n FrameworkConfigService.showLanguageSelector = settings.showLanguageSelector;\r\n FrameworkConfigService.showStatusBar = settings.showStatusBar;\r\n FrameworkConfigService.showStatusBarBreakpoint = settings.showStatusBarBreakpoint;\r\n FrameworkConfigService.socialIcons = settings.socialIcons;\r\n FrameworkConfigService.showUserControls = settings.showUserControls;\r\n FrameworkConfigService.isLibersyMode = settings.isLibersyMode;\r\n }\r\n\r\n static getPlatformName() {\r\n if (this.isLibersyMode)\r\n return 'Libersy';\r\n else\r\n return 'STATUSBAR.PLATFORM-MYSALON';\r\n }\r\n}\r\n","import {Component, EventEmitter, HostListener, Input, Output} from '@angular/core';\r\nimport {Params, Router} from '@angular/router';\r\nimport {UserService} from \"../../services/user.service\";\r\nimport {DomSanitizer} from \"@angular/platform-browser\";\r\nimport {TranslateParser, TranslateService} from \"@ngx-translate/core\";\r\nimport {SharedService} from \"../../services/shared.service\";\r\n\r\n@Component({\r\n selector: 'fw-bar-button',\r\n templateUrl: './bar-button.component.html',\r\n styleUrls: ['./bar-button.component.scss']\r\n})\r\nexport class BarButtonComponent {\r\n @Input() title: string;\r\n @Input() clickRoute: string;\r\n @Input() clickRouteParams: Params;\r\n @Input() clickEventType: string;\r\n @Input() isSmall: boolean;\r\n @Input() isLogoBtn: boolean;\r\n @Input() hidden: boolean;\r\n @Input() id: number;\r\n @Input() hasSpaceRightSide: boolean;\r\n @Input() isLoginButton: boolean;\r\n @Input() externalUrl: string;\r\n @Output() buttonClick = new EventEmitter();\r\n\r\n constructor(private router: Router,\r\n private userService: UserService,\r\n private tp: TranslateParser,\r\n private ss: SharedService,\r\n private ts: TranslateService,\r\n private _sanitizer: DomSanitizer) {\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event): void {\r\n event.stopPropagation();\r\n\r\n if (this.clickEventType == 'navigate') {\r\n if (this.clickRoute != null) {\r\n this.router.navigate([`/auth/${this.clickRoute}`],\r\n {\r\n queryParams: this.clickRouteParams,\r\n skipLocationChange: true\r\n });\r\n }\r\n } else if (this.clickEventType == 'logout') {\r\n this.userService.signOut();\r\n } else if (this.clickEventType == 'externalUrl' && this.externalUrl) {\r\n window.open(this.externalUrl, \"_blank\");\r\n } else {\r\n if (this.id && this.id > 0) {\r\n this.buttonClick.emit({type: this.clickEventType, id: this.id});\r\n } else {\r\n this.buttonClick.emit(this.clickEventType);\r\n }\r\n }\r\n }\r\n}\r\n","
\r\n {{title | translate}}\r\n
\r\n","\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\n\r\nimport {MenuService, SubMenuItem} from '../../services';\r\nimport {SharedService} from \"../../../../services/shared.service\";\r\n\r\n@Component({\r\n selector: 'fw-submenu',\r\n templateUrl: './submenu.component.html',\r\n styleUrls: ['./submenu.component.scss']\r\n})\r\nexport class SubmenuComponent implements OnInit {\r\n private activeMenuItemSubscription: Subscription;\r\n public subitems: Array;\r\n\r\n constructor(private menuService: MenuService,\r\n private ss: SharedService) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (\r\n this.menuService.activeMenuItem != null &&\r\n this.menuService.activeMenuItem.submenu != null\r\n ) {\r\n this.subitems = this.menuService.activeMenuItem.submenu;\r\n }\r\n\r\n this.activeMenuItemSubscription = this.menuService.activeMenuItemChanged.subscribe(\r\n event => {\r\n if (\r\n this.menuService.activeMenuItem != null &&\r\n this.menuService.activeMenuItem.submenu != null\r\n ) {\r\n this.subitems = this.menuService.activeMenuItem.submenu;\r\n } else {\r\n this.subitems = null;\r\n }\r\n }\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.activeMenuItemSubscription.unsubscribe();\r\n }\r\n\r\n menuItemIsVisible(item: SubMenuItem) {\r\n /*if (item.needMod && item.needMod === 'modSubscription') {\r\n return this.ss.useModSubscription();\r\n } else if (item.needEmployee) {\r\n return SharedService.useEmployees();\r\n }*/\r\n\r\n return true;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {DialogRef} from '@progress/kendo-angular-dialog';\r\nimport {DialogWrapperConfig} from \"../../components/dialog-wrapper\";\r\n\r\n@Component({\r\n selector: 'message',\r\n templateUrl: './message.component.html',\r\n styleUrls: ['./message.component.scss']\r\n})\r\nexport class MessageComponent {\r\n @Input() dialog: DialogRef;\r\n @Input() message: string;\r\n wrapperConfig: DialogWrapperConfig = {\r\n title: [\r\n {\r\n text: 'PSHB_TITLES.WARNING',\r\n isLastStep: true\r\n }\r\n ],\r\n buttonDefinition: [\r\n {\r\n description: 'BUTTON.CLOSE',\r\n isSmall: false,\r\n clickEventType: 'close'\r\n }\r\n ]\r\n };\r\n\r\n phbBtnClicked(event) {\r\n this.closeWindow(true);\r\n }\r\n\r\n closeWindow(result: boolean) {\r\n if (this.dialog) {\r\n this.dialog.dialog.instance.action.emit({text: result ? 'ok' : 'cancel'});\r\n this.dialog.close();\r\n }\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport * as EmailValidator from \"email-validator\";\r\nexport class SharedValidators {\r\n\r\n static customRequired(control: AbstractControl) {\r\n if (control.dirty && !control.value) {\r\n return {customRequired: true};\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static customRequiredWhenUseEmployees(useEmployees: boolean): ValidatorFn {\r\n return (control:AbstractControl) => {\r\n if (!useEmployees)\r\n return null;\r\n\r\n if (control.dirty && !control.value) {\r\n return {customRequired: true};\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n static customNumberRequired(control: AbstractControl) {\r\n if (control.dirty && control.value == null) {\r\n return {customRequired: true};\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static phoneNoValid(control: AbstractControl) {\r\n if (control.dirty && control.value !== null && control.value.length !== 0 && ((control.value.length < 10) || (control.value.length > 12) || !(/^\\d+$/.test(control.value)))) {\r\n return {phoneNoInvalid: true};\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static emailValid(control: AbstractControl) {\r\n if (control.dirty && control.value && !EmailValidator.validate(control.value)) {\r\n return { emailInvalid: true };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import {Injectable, NgModule} from \"@angular/core\";\r\nimport {Observable} from \"rxjs\";\r\nimport {HTTP_INTERCEPTORS, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpHeaders} from \"@angular/common/http\";\r\n\r\n@Injectable()\r\nexport class HttpRequestInterceptor implements HttpInterceptor {\r\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\r\n let token = sessionStorage.getItem('accessToken');\r\n\r\n if (req.method === 'POST' || req.method === 'PUT')\r\n this.removeTimezone(req.body);\r\n\r\n if (token) {\r\n const newReq = req.clone(\r\n {\r\n headers: new HttpHeaders({'Content-Type': 'application/json', 'x-zumo-auth': token, 'ZUMO-API-VERSION': '2.0.0'})\r\n });\r\n\r\n return next.handle(newReq);\r\n } else {\r\n const newReq = req.clone(\r\n {\r\n headers: new HttpHeaders({'Content-Type': 'application/json', 'ZUMO-API-VERSION': '2.0.0'})\r\n });\r\n return next.handle(newReq);\r\n }\r\n }\r\n\r\n removeTimezone(body) {\r\n if (body === null || body === undefined) {\r\n return body;\r\n }\r\n\r\n if (typeof body !== 'object') {\r\n return body;\r\n }\r\n\r\n for (const key of Object.keys(body)) {\r\n const value = body[key];\r\n if (value instanceof Date) {\r\n body[key] = new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate(), value.getHours(), value.getMinutes()\r\n , value.getSeconds()));\r\n } else if (typeof value === 'object') {\r\n this.removeTimezone(value);\r\n }\r\n }\r\n }\r\n}\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: HttpRequestInterceptor,\r\n multi: true\r\n }\r\n ]\r\n})\r\n\r\nexport class HttpRequestInterceptorModule {\r\n}\r\n","import {Injectable, NgModule} from '@angular/core';\r\nimport {Observable, throwError} from 'rxjs';\r\nimport {catchError, map} from \"rxjs/operators\";\r\nimport {HTTP_INTERCEPTORS, HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http';\r\n\r\n\r\n@Injectable()\r\nexport class HttpDateInterceptor implements HttpInterceptor {\r\n iso8601 = /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/;\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n return next.handle(request).pipe(\r\n map((event: HttpEvent) => {\r\n if (event instanceof HttpResponse) {\r\n const body = event.body;\r\n this.convertToDate(body);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n return throwError(error);\r\n }));\r\n }\r\n\r\n convertToDate(body) {\r\n if (body === null || body === undefined) {\r\n return body;\r\n }\r\n\r\n if (typeof body !== 'object') {\r\n return body;\r\n }\r\n\r\n for (const key of Object.keys(body)) {\r\n const value = body[key];\r\n if (this.isIso8601(value)) {\r\n body[key] = this.addTimeZone(new Date(value));\r\n } else if (typeof value === 'object') {\r\n this.convertToDate(value);\r\n }\r\n }\r\n }\r\n\r\n isIso8601(value) {\r\n if (value === null || value === undefined) {\r\n return false;\r\n }\r\n\r\n return this.iso8601.test(value);\r\n }\r\n\r\n addTimeZone(date: Date) {\r\n return new Date(\r\n date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000)\r\n );\r\n }\r\n}\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: HttpDateInterceptor,\r\n multi: true\r\n }\r\n ]\r\n})\r\n\r\nexport class HttpDateInterceptorModule {\r\n}\r\n","import {TranslateService} from \"@ngx-translate/core\";\r\nimport {LOCALE_ID, StaticClassProvider} from \"@angular/core\";\r\n\r\nexport class DynamicLocaleId extends String {\r\n constructor(protected service: TranslateService) {\r\n super();\r\n }\r\n\r\n toString() {\r\n return this.service.currentLang;\r\n }\r\n}\r\n\r\nexport const LocaleProvider: StaticClassProvider = {\r\n provide: LOCALE_ID,\r\n useClass: DynamicLocaleId,\r\n deps: [TranslateService]\r\n};\r\n","import {CommonModule, registerLocaleData} from '@angular/common';\r\nimport localeNl from '@angular/common/locales/nl';\r\nimport {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {RouterModule} from '@angular/router';\r\nimport {DateInputsModule, DatePickerModule, TimePickerModule} from '@progress/kendo-angular-dateinputs';\r\nimport {DialogModule} from '@progress/kendo-angular-dialog';\r\nimport {DropDownsModule} from '@progress/kendo-angular-dropdowns';\r\nimport {InputsModule, MaskedTextBoxModule, SwitchModule} from '@progress/kendo-angular-inputs';\r\nimport {IntlModule} from '@progress/kendo-angular-intl';\r\nimport '@progress/kendo-angular-intl/locales/nl/all';\r\nimport '@progress/kendo-angular-intl/locales/en/all';\r\nimport '@progress/kendo-angular-intl/locales/de/all';\r\nimport '@progress/kendo-angular-intl/locales/fr/all';\r\nimport {LabelModule} from '@progress/kendo-angular-label';\r\nimport {LayoutModule} from '@progress/kendo-angular-layout';\r\nimport {FontAwesomeModule} from '@fortawesome/angular-fontawesome';\r\nimport {library} from '@fortawesome/fontawesome-svg-core';\r\nimport {faPlay} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport {\r\n BarButtonComponent, BreadcrumComponent, ConfirmComponent, ContentComponent, FrameworkBodyComponent,\r\n MenuComponent, MenuItemComponent, MenuService, MessageComponent, PageHeaderBarComponent, CoronaComponent,\r\n PageSubheaderBarComponent, SignInComponent, StatusBarComponent, SubmenuComponent, SubmenuItemComponent, TitleBarComponent,\r\n TopBarComponent, UserApi, ValidationMessageComponent, DialogWrapperComponent, ChooseImageComponent, ChooseEmployeeComponent\r\n} from './components';\r\nimport {AutofocusDirective, DatePickerDefaultsDirective, RowDoubleClickDirective, ScreenBelowLarge, ScreenLarge} from './directives';\r\nimport {\r\n AuthGuard, AzureApiService, BreadcrumService, ClipboardService, FormService, FrameworkConfigService, ScreenService,\r\n SharedDataService, SharedMaskService, SharedService, SignalrService, UserService\r\n} from './services';\r\nimport {HttpRequestInterceptorModule} from './interceptors/http-request-interceptor';\r\nimport {HttpDateInterceptorModule} from \"./interceptors/http-date-interceptor\";\r\nimport {NgxUiLoaderModule, NgxUiLoaderConfig, SPINNER, PB_DIRECTION} from 'ngx-ui-loader';\r\nimport {NgxFileHelpersModule} from \"ngx-file-helpers\";\r\nimport {ImageCropperModule} from \"ngx-image-cropper\";\r\nimport {TextMaskModule} from \"angular2-text-mask\";\r\nimport {NoAutocompleteDirective} from \"@app/shared/directives/no-autocomplete.directive\";\r\nimport {GoogleTagManagerService} from \"@app/shared/services/google-tag-manager.service\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {ScrollingModule} from \"@angular/cdk/scrolling\";\r\nimport {NgAddToCalendarModule} from \"@trademe/ng-add-to-calendar\";\r\nimport {AngularResizedEventModule} from \"angular-resize-event\";\r\nimport {DeviceDetectorModule} from \"ngx-device-detector\";\r\nimport {TranslateModule, TranslatePipe} from \"@ngx-translate/core\";\r\nimport {LocaleProvider} from \"./helpers/dynamic-locale\";\r\nimport {LocalCurrencyPipe, TranslateListPipe} from \"@app/shared/pipes\";\r\nimport {EllipsisModule} from \"ngx-ellipsis\";\r\nimport {ChooseCustomerdogComponent} from \"@app/shared/components/choose-customerdog\";\r\n\r\nconst ngxUiLoaderConfig: NgxUiLoaderConfig = {\r\n fgsColor: '#ffffff',\r\n fgsPosition: \"center-center\",\r\n fgsSize: 40,\r\n pbColor: '#8600b5',\r\n overlayColor: '#8600b5',\r\n textColor: '#ffffff',\r\n textPosition: \"center-center\",\r\n fgsType: SPINNER.ballSpinClockwise,\r\n pbDirection: PB_DIRECTION.leftToRight,\r\n pbThickness: 5,\r\n hasProgressBar: false\r\n};\r\n\r\nregisterLocaleData(localeNl);\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n DialogModule,\r\n InputsModule,\r\n DialogModule,\r\n DropDownsModule,\r\n DatePickerModule,\r\n MaskedTextBoxModule,\r\n SwitchModule,\r\n TimePickerModule,\r\n InputsModule,\r\n DateInputsModule,\r\n IntlModule,\r\n LabelModule,\r\n LayoutModule,\r\n HttpRequestInterceptorModule,\r\n HttpDateInterceptorModule,\r\n FontAwesomeModule,\r\n NgxFileHelpersModule,\r\n NgxUiLoaderModule.forRoot(ngxUiLoaderConfig),\r\n ImageCropperModule,\r\n HttpClientModule,\r\n ScrollingModule,\r\n NgAddToCalendarModule,\r\n AngularResizedEventModule,\r\n DeviceDetectorModule.forRoot(),\r\n TranslateModule,\r\n EllipsisModule\r\n ],\r\n declarations: [\r\n FrameworkBodyComponent,\r\n ContentComponent,\r\n TitleBarComponent,\r\n TopBarComponent,\r\n StatusBarComponent,\r\n ScreenLarge,\r\n ScreenBelowLarge,\r\n SignInComponent,\r\n MenuComponent,\r\n SubmenuComponent,\r\n MenuItemComponent,\r\n SubmenuItemComponent,\r\n BreadcrumComponent,\r\n PageHeaderBarComponent,\r\n PageSubheaderBarComponent,\r\n BarButtonComponent,\r\n RowDoubleClickDirective,\r\n AutofocusDirective,\r\n NoAutocompleteDirective,\r\n ConfirmComponent,\r\n MessageComponent,\r\n ValidationMessageComponent,\r\n DialogWrapperComponent,\r\n ChooseImageComponent,\r\n ChooseEmployeeComponent,\r\n ChooseCustomerdogComponent,\r\n CoronaComponent,\r\n DatePickerDefaultsDirective,\r\n TranslateListPipe,\r\n LocalCurrencyPipe\r\n ],\r\n providers: [\r\n FormService,\r\n SharedDataService,\r\n SharedMaskService,\r\n UserService,\r\n {provide: UserApi, useExisting: UserService},\r\n AuthGuard,\r\n AzureApiService,\r\n SignalrService,\r\n TranslatePipe\r\n ],\r\n exports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n FrameworkBodyComponent,\r\n MenuComponent,\r\n SubmenuComponent,\r\n BreadcrumComponent,\r\n BarButtonComponent,\r\n PageHeaderBarComponent,\r\n PageSubheaderBarComponent,\r\n RowDoubleClickDirective,\r\n AutofocusDirective,\r\n ValidationMessageComponent,\r\n DialogModule,\r\n DropDownsModule,\r\n DatePickerModule,\r\n MaskedTextBoxModule,\r\n TimePickerModule,\r\n InputsModule,\r\n DateInputsModule,\r\n IntlModule,\r\n LabelModule,\r\n LayoutModule,\r\n FontAwesomeModule,\r\n DialogWrapperComponent,\r\n NgxUiLoaderModule,\r\n NgxFileHelpersModule,\r\n TextMaskModule,\r\n NoAutocompleteDirective,\r\n HttpClientModule,\r\n ScrollingModule,\r\n NgAddToCalendarModule,\r\n AngularResizedEventModule,\r\n DeviceDetectorModule,\r\n TranslateModule,\r\n StatusBarComponent,\r\n CoronaComponent,\r\n DatePickerDefaultsDirective,\r\n TranslateListPipe,\r\n EllipsisModule,\r\n LocalCurrencyPipe\r\n ]\r\n})\r\nexport class SharedModule {\r\n constructor() {\r\n library.add(faPlay);\r\n }\r\n\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: SharedModule,\r\n providers: [BreadcrumService, GoogleTagManagerService, SharedService, FrameworkConfigService, MenuService, ScreenService, ClipboardService, SignalrService, LocaleProvider]\r\n };\r\n }\r\n}\r\n","import {AbstractControl, FormControl, FormGroup} from \"@angular/forms\";\r\nimport {SharedService} from \"../services/shared.service\";\r\n\r\ndeclare module '@angular/forms' {\r\n interface AbstractControl {\r\n patchValueNoEvent(value: { [key: string]: any; }): void;\r\n\r\n numVal(): number;\r\n }\r\n\r\n interface FormGroup {\r\n patchDtoToForm(dtoObject: any): void;\r\n\r\n patchFormToDto(dtoObject: any): any;\r\n\r\n disableForm(): void;\r\n\r\n setFilterPeriod(periodKind: number, ss: SharedService, from?: string, untill?: string): void;\r\n\r\n patchValueNoEvent(value: { [key: string]: any; }): void;\r\n }\r\n}\r\n\r\nFormGroup.prototype.patchValueNoEvent = function (value: {\r\n [key: string]: any;\r\n}) {\r\n const _self = this as FormGroup;\r\n _self.patchValue(value, {\r\n emitEvent: false\r\n });\r\n};\r\n\r\nAbstractControl.prototype.numVal = function (): number {\r\n const _self = this as FormControl;\r\n return (_self.value === null || _self.value === undefined) ? 0 : _self.value;\r\n}\r\n\r\nAbstractControl.prototype.patchValueNoEvent = function (value: {\r\n [key: string]: any;\r\n}) {\r\n const _self = this as AbstractControl;\r\n _self.patchValue(value, {\r\n emitEvent: false\r\n });\r\n};\r\n\r\nFormGroup.prototype.patchDtoToForm = function (dtoObject: any) {\r\n const _self = this as FormGroup;\r\n if (dtoObject != null) {\r\n _self.reset();\r\n for (let i in dtoObject) {\r\n if (dtoObject.hasOwnProperty(i)) {\r\n _self.patchValueNoEvent({[i]: dtoObject[i]});\r\n }\r\n }\r\n }\r\n};\r\n\r\nFormGroup.prototype.patchFormToDto = function (dtoObject: any): any {\r\n const _self = this as FormGroup;\r\n return Object.assign({}, dtoObject, _self.getRawValue());\r\n};\r\n\r\nFormGroup.prototype.disableForm = function () {\r\n const _self = this as FormGroup;\r\n Object.keys(_self.controls).forEach(field => {\r\n const control = _self.get(field);\r\n control.disable();\r\n });\r\n};\r\n","import { ButtonDefinition } from '../buttons/button-definition';\r\nimport {BreadcrumStep} from '../../services/breadcrum.service';\r\n\r\nexport class DialogWrapperConfig {\r\n title: BreadcrumStep[];\r\n subTitle?: string;\r\n buttonDefinition: ButtonDefinition[];\r\n hideSubHeader?: boolean = false;\r\n\r\n constructor() {}\r\n}","import {Component, HostListener, Input, OnInit} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {SubMenuItem} from '../../services';\r\nimport {Subscription} from 'rxjs';\r\n\r\n@Component({\r\n selector: 'fw-submenu-item',\r\n templateUrl: './submenu-item.component.html',\r\n styleUrls: ['./submenu-item.component.scss']\r\n})\r\nexport class SubmenuItemComponent implements OnInit {\r\n @Input() subitem = null;\r\n private activeMenuItemSubscription: Subscription;\r\n\r\n constructor(private router: Router) {\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event): void {\r\n if (this.subitem.class === 'exampleMenuDialog') {\r\n /*const dialogRef = this.dialogService.open({\r\n content: SearchSalespriceComponent,\r\n });\r\n\r\n const dialogContent: SearchSalespriceComponent = dialogRef.content.instance;\r\n dialogContent.dialog = dialogRef;*/\r\n } else {\r\n event.stopPropagation();\r\n this.router.navigate(['/' + this.subitem.route], {skipLocationChange: true});\r\n }\r\n\r\n }\r\n}\r\n","
\r\n {{ subitem.text.toUpperCase() }}\r\n \r\n
\r\n
\r\n\r\n
\r\n","import {Component, Input} from '@angular/core';\r\nimport {DialogRef} from '@progress/kendo-angular-dialog';\r\nimport {DialogWrapperConfig} from \"../../components/dialog-wrapper\";\r\n\r\n@Component({\r\n selector: 'ngx-corona',\r\n templateUrl: './corona.component.html',\r\n styleUrls: ['./corona.component.scss']\r\n})\r\nexport class CoronaComponent {\r\n @Input() dialog: DialogRef;\r\n @Input() message: string;\r\n verified: boolean = false;\r\n wrapperConfig: DialogWrapperConfig = {\r\n title: [\r\n {\r\n text: 'PSHB_TITLES.WARNING',\r\n isLastStep: true\r\n }\r\n ],\r\n buttonDefinition: [\r\n {\r\n description: 'BUTTON.GETON',\r\n isSmall: false,\r\n clickEventType: 'close'\r\n }\r\n ]\r\n };\r\n\r\n phbBtnClicked(event) {\r\n if (this.verified)\r\n this.closeWindow(true);\r\n }\r\n\r\n closeWindow(result: boolean) {\r\n if (this.dialog) {\r\n this.dialog.dialog.instance.action.emit({text: result ? 'ok' : 'cancel'});\r\n this.dialog.close();\r\n }\r\n }\r\n\r\n verifiedClicked() {\r\n this.verified = !this.verified;\r\n }\r\n}\r\n","\r\n
\r\n In verband met de inmiddels bekende risico’s omtrent het Coronavirus, is het van belang dat u (of voor zover van toepassing één van uw huisgenoten) ten tijde van de\r\n afspraak niet één van deze klachten heeft: neusverkoudheid, loopneus, niezen, keelpijn, (lichte) hoest, benauwdheidsklachten, verhoging of koorts (vanaf 38 ℃)

\r\n Ook is het van belang dat u tot 10 dagen voor deze afspraak niet in een land met code oranje bent geweest. Is één of meer van bovenstaande zaken wel het geval,\r\n dan schrijft de huidige regelgeving voor dat uw afspraak helaas niet door kan gaan.

\r\n Wij rekenen op uw begrip.\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n","export * from './menu.service';\r\n","\r\n
\r\n {{step.text | translate}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\nimport {AutoUnsubscribe} from '../../decorators';\r\nimport {BreadcrumLocation, BreadcrumService, SharedService} from '../../services';\r\nimport {faPlay} from \"@fortawesome/free-solid-svg-icons\";\r\nimport {TranslateService} from \"@ngx-translate/core\";\r\nimport {DeviceDetectorService} from \"ngx-device-detector\";\r\n\r\n@Component({\r\n selector: 'fw-breadcrum',\r\n templateUrl: './breadcrum.component.html',\r\n styleUrls: ['./breadcrum.component.scss']\r\n})\r\n@AutoUnsubscribe()\r\nexport class BreadcrumComponent implements OnInit {\r\n private currentLocationSubscription: Subscription;\r\n public currentNavigationLocation: BreadcrumLocation;\r\n languageItems: Array<{ id: string, description: string, icon: string }> = SharedService.Languages();\r\n currentLanguage: string = SharedService.getCurrentLanguage();\r\n faPlay = faPlay;\r\n\r\n constructor(private breadcrumService: BreadcrumService,\r\n private ts: TranslateService,\r\n public dds: DeviceDetectorService,\r\n private ss: SharedService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.currentLocationSubscription = this.breadcrumService.currentLocationChanged\r\n .subscribe((event: BreadcrumLocation) => {\r\n setTimeout(() => {\r\n this.currentNavigationLocation = event;\r\n });\r\n }\r\n );\r\n }\r\n\r\n languageChosen(id: string) {\r\n this.ss.updateLanguage(id);\r\n }\r\n\r\n hideMainMenuTopBarLogoutButton(): boolean {\r\n if (this.currentNavigationLocation) {\r\n if (this.currentNavigationLocation.currentLocation && this.currentNavigationLocation.currentLocation.length === 1 &&\r\n this.currentNavigationLocation.currentLocation[0].text === 'BREADCRUM.MAINMENU') {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","export function AutoUnsubscribe() {\r\n return function(constructor: any) {\r\n const original = constructor.prototype.ngOnDestroy;\r\n\r\n constructor.prototype.ngOnDestroy = function() {\r\n for (let prop in this) {\r\n const property = this[prop];\r\n\r\n if (property && typeof property.unsubscribe === 'function') {\r\n property.unsubscribe();\r\n }\r\n }\r\n original &&\r\n typeof original === 'function' &&\r\n original.apply(this, arguments);\r\n };\r\n };\r\n}\r\n","import { EventEmitter, Injectable, Output } from '@angular/core';\r\n\r\nexport interface MenuItem {\r\n text: string;\r\n libersyText?: string;\r\n route: string;\r\n image: string;\r\n submenu: Array;\r\n needEmployee?: boolean;\r\n needCompanyPolicy?: boolean;\r\n}\r\n\r\nexport interface SubMenuItem {\r\n text: string;\r\n route: string;\r\n class?: string;\r\n needMod?: string;\r\n needEmployee?: boolean;\r\n noSmartUser?: boolean;\r\n noXlFreeUser?: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class MenuService {\r\n @Output()\r\n activeMenuItemChanged: EventEmitter = new EventEmitter();\r\n\r\n items: Array;\r\n activeMenuItem: MenuItem;\r\n\r\n setActiveMenuItem(item: MenuItem) {\r\n this.activeMenuItem = item;\r\n this.activeMenuItemChanged.emit(this.activeMenuItem);\r\n }\r\n}\r\n","\r\n","import {Component, OnInit} from '@angular/core';\r\n\r\nimport {MenuItem, MenuService} from '../../services';\r\nimport {SharedService} from \"../../../../services/shared.service\";\r\n\r\n@Component({\r\n selector: 'fw-menu',\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.scss']\r\n})\r\nexport class MenuComponent implements OnInit {\r\n constructor(public menuService: MenuService,\r\n private ss: SharedService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n menuItemIsVisible(item: MenuItem) {\r\n if (item.needCompanyPolicy) {\r\n return this.ss.getCustomerCompany() && this.ss.getCustomerCompany().onlineBookingTerms;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import {Inject, Injectable} from '@angular/core';\r\nimport {fromEvent, Subject, Subscription} from 'rxjs';\r\nimport {DOCUMENT} from \"@angular/common\";\r\nimport {Observable} from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class ScreenService {\r\n largeBreakpoint = 1024;\r\n screenWidth = 1024;\r\n screenHeight = 800;\r\n private resizeSource = new Subject();\r\n resizeObservable$: Observable\r\n resizeSubscription$: Subscription;\r\n resize$ = this.resizeSource.asObservable();\r\n\r\n constructor(@Inject(DOCUMENT) private document: any) {\r\n try {\r\n this.screenWidth = window.innerWidth;\r\n this.screenHeight = window.innerHeight;\r\n this.resizeObservable$ = fromEvent(window, 'resize')\r\n this.resizeSubscription$ = this.resizeObservable$.subscribe( evt => {\r\n this.onResize(event);\r\n })\r\n } catch (e) {\r\n\r\n }\r\n }\r\n\r\n isLarge(): boolean {\r\n return this.screenWidth > this.largeBreakpoint;\r\n }\r\n\r\n onResize($event): void {\r\n this.screenWidth = window.innerWidth;\r\n this.screenHeight = window.innerHeight;\r\n this.resizeSource.next();\r\n this.document.body.style.setProperty('--app-height', `${window.innerHeight}px`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate, CanActivateChild, Router } from '@angular/router';\r\nimport { UserService } from './user.service';\r\n@Injectable()\r\nexport class AuthGuard implements CanActivate, CanActivateChild {\r\n constructor(private userService: UserService, private router: Router) {}\r\n\r\n canActivate(): boolean {\r\n if (!this.userService.isAuthenticated()) {\r\n this.router.navigate(['/login'], { skipLocationChange: true });\r\n }\r\n return this.userService.isAuthenticated();\r\n }\r\n\r\n canActivateChild(): boolean {\r\n return this.canActivate();\r\n }\r\n}\r\n","import {EventEmitter, Injectable, Output} from '@angular/core';\r\nimport {Params} from \"@angular/router\";\r\n\r\nexport interface BreadcrumStep {\r\n text: string;\r\n isLastStep: boolean;\r\n}\r\n\r\nexport interface BreadcrumLocation {\r\n currentLocation: Array;\r\n backButtonVisible: boolean;\r\n backButtonLocation: string;\r\n backButtonParams: Params;\r\n showLanguageBox: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class BreadcrumService {\r\n @Output()\r\n currentLocationChanged: EventEmitter = new EventEmitter();\r\n\r\n currentLocation: Array;\r\n\r\n setCurrentLocation(currentLocation: Array, backButtonVisible: boolean, backButtonLocation: string, backButtonParams: Params = null, showLanguageBox: boolean = false) {\r\n this.currentLocation = currentLocation;\r\n\r\n this.currentLocationChanged.emit({\r\n backButtonLocation: backButtonLocation,\r\n backButtonVisible: backButtonVisible,\r\n currentLocation: currentLocation,\r\n backButtonParams: backButtonParams,\r\n showLanguageBox: showLanguageBox\r\n });\r\n }\r\n\r\n setLastStepDescription(description: string) {\r\n if (this.currentLocation) {\r\n this.currentLocation.forEach(item => {\r\n if (item.isLastStep) {\r\n item.text = description;\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\n// Import the core angular services.\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Injectable()\r\nexport class ClipboardService {\r\n private dom: Document;\r\n\r\n // I initialize the Clipboard service.\r\n // --\r\n // CAUTION: This service is tightly couped to the browser DOM (Document Object Model).\r\n // But, by injecting the \"document\" reference rather than trying to reference it\r\n // globally, we can at least pretend that we are trying to lower the tight coupling.\r\n constructor(@Inject(DOCUMENT) dom: Document) {\r\n this.dom = dom;\r\n }\r\n\r\n // ---\r\n // METHODS.\r\n // ---\r\n\r\n // I copy the given value to the user's system clipboard. Returns a promise that\r\n // resolves to the given value on success or rejects with the raised Error.\r\n copy(value: string): Promise {\r\n let promise = new Promise(\r\n (resolve, reject): void => {\r\n let textarea = null;\r\n\r\n try {\r\n // In order to execute the \"Copy\" command, we actually have to have\r\n // a \"selection\" in the currently rendered document. As such, we're\r\n // going to inject a Textarea element and .select() it in order to\r\n // force a selection.\r\n // --\r\n // NOTE: This Textarea is being rendered off-screen.\r\n textarea = this.dom.createElement('textarea');\r\n textarea.style.height = '0px';\r\n textarea.style.left = '-100px';\r\n textarea.style.opacity = '0';\r\n textarea.style.position = 'fixed';\r\n textarea.style.top = '-100px';\r\n textarea.style.width = '0px';\r\n this.dom.body.appendChild(textarea);\r\n\r\n // Set and select the value (creating an active Selection range).\r\n textarea.value = value;\r\n textarea.select();\r\n\r\n // Ask the browser to copy the current selection to the clipboard.\r\n this.dom.execCommand('copy');\r\n\r\n resolve(value);\r\n } finally {\r\n // Cleanup - remove the Textarea from the DOM if it was injected.\r\n if (textarea && textarea.parentNode) {\r\n textarea.parentNode.removeChild(textarea);\r\n }\r\n }\r\n }\r\n );\r\n\r\n return promise;\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\n@Injectable()\r\nexport class FormService {\r\n patchDtoToForm(dtoObject: any, form: FormGroup) {\r\n if (dtoObject != null) {\r\n form.reset;\r\n for (let i in dtoObject) {\r\n if (dtoObject.hasOwnProperty(i)) {\r\n form.patchValue({ [i]: dtoObject[i] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n patchFormToDto(dtoObject: any, form: FormGroup): any {\r\n return Object.assign({}, dtoObject, form.value);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {DtoCountry} from \"@app/shared\";\r\n\r\n@Injectable()\r\nexport class SharedMaskService {\r\n private static nameLetterRegEx = /[A-ZËÄÏÜÖÉÁÍÚÓÈÀÌÙÒÊÂÎÛÔa-zëäïüöéáíúóèàìùòêâîûô'.]/;\r\n private static nameLetterSpaceOrHyphenRegEx = /[A-ZËÄÏÜÖÉÁÍÚÓÈÀÌÙÒÊÂÎÛÔa-zëäïüöéáíúóèàìùòêâîûô'. \\-]/;\r\n private static addressLetterRegEx = /[A-ZËÄÏÜÖÉÁÍÚÓÈÀÌÙÒÊÂÎÛÔa-zëäïüöéáíúóèàìùòêâîûô'.]/;\r\n private static addressLetterSpaceOrHyphenRegEx = /[A-ZËÄÏÜÖÉÁÍÚÓÈÀÌÙÒÊÂÎÛÔa-zëäïüöéáíúóèàìùòêâîûô'. \\-]/;\r\n private static initialLetterRegEx = /[A-Za-z]/;\r\n private static alphaNummericRegEx = /[0-9A-ZËÄÏÜÖÉÁÍÚÓÈÀÌÙÒÊÂÎÛÔa-zëäïüöéáíúóèàìùòêâîûô\\-]/;\r\n private static alphaNummericWithSpaceHyphenRegEx = /[0-9A-ZËÄÏÜÖÉÁÍÚÓÈÀÌÙÒÊÂÎÛÔa-zëäïüöéáíúóèàìùòêâîûô'./ \\-]/;\r\n private static dotRegEx = /[.]/;\r\n private static mailcodeRegEx = [/[A-Za-z0-9]/,/[A-Za-z0-9]/,/[A-Za-z0-9]/,/[A-Za-z0-9]/,/[A-Za-z0-9]/,/[A-Za-z0-9]/,/[A-Za-z0-9]/,/[A-Za-z0-9]/];\r\n private static phoneRegEx = [/\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/];\r\n private static bsnRegEx = [/[0-9]/,/[0-9]/,/[0-9]/,/[0-9]/,/[0-9]/,/[0-9]/,/[0-9]/,/[0-9]/,/[0-9]/]\r\n private static asterisk = '*';\r\n private static dot = '.';\r\n private static emptyString = '';\r\n private static atSymbol = '@';\r\n private static atDot = '@.';\r\n private static dotDot = '..';\r\n private static caretTrap = '[]';\r\n private static space = ' ';\r\n private static g = 'g';\r\n private static anyNonWhitespaceRegExp = /[^\\s]/;\r\n private static anyNonDotOrWhitespaceRegExp = /[^.\\s]/;\r\n private static allWhitespaceRegExp = /\\s/g;\r\n private static emptyArray = [];\r\n private static allAtSymbolsRegExp = /@/g;\r\n private static allDotsRegExp = /\\./g;\r\n private static pedicureInspection1RegEx = [/[BEKLOPRUWZGHINSTX-beklopruwzghinstx+]/,/[BEKLOPRUWZGHINSTX-beklopruwzghinstx+]/,/[BEKLOPRUWZGHINSTX-beklopruwzghinstx+]/];\r\n private static pedicureInspection2RegEx = [/[+\\-]/];\r\n\r\n constructor() {}\r\n\r\n /* PIPES */\r\n firstCharToUpperCasePipe(conformedValue: string) {\r\n if (conformedValue) {\r\n let result = conformedValue.toLowerCase()\r\n .split(' ')\r\n .map((s) => s.charAt(0).toUpperCase() + s.substring(1))\r\n .join(' ');\r\n\r\n result = result.split('-')\r\n .map((s) => s.charAt(0).toUpperCase() + s.substring(1))\r\n .join('-');\r\n\r\n return result;\r\n }\r\n return conformedValue;\r\n }\r\n\r\n allCharstoUpperCasePipe(conformedValue: string) {\r\n if (conformedValue) {\r\n return conformedValue.toUpperCase();\r\n }\r\n return conformedValue;\r\n }\r\n\r\n autoCompleteInitialsPipe(conformedValue: string) {\r\n if (conformedValue) {\r\n let indexesOfPipedChars = [];\r\n\r\n let result = '';\r\n\r\n for (let i = 0; i < conformedValue.length; i++) {\r\n if (conformedValue.charAt(i) !== '.') {\r\n result += conformedValue.charAt(i).toUpperCase();\r\n indexesOfPipedChars.push(i);\r\n } else {\r\n result += conformedValue.charAt(i);\r\n indexesOfPipedChars.push(i);\r\n }\r\n }\r\n\r\n if (result.charAt(result.length - 1) !== '.')\r\n result += '.';\r\n\r\n return {\r\n value: result,\r\n indexesOfPipedChars\r\n };\r\n }\r\n return conformedValue;\r\n }\r\n\r\n emailPipe(conformedValue, config) {\r\n const {currentCaretPosition, rawValue, previousConformedValue, placeholderChar} = config;\r\n\r\n let value = conformedValue;\r\n\r\n value = SharedMaskService.removeAllAtSymbolsButFirst(value);\r\n\r\n const indexOfAtDot = value.indexOf(SharedMaskService.atDot);\r\n\r\n const emptyEmail = rawValue.match(new RegExp(`[^@\\\\s.${placeholderChar}]`)) === null;\r\n\r\n if (emptyEmail) {\r\n return SharedMaskService.emptyString;\r\n }\r\n\r\n if (\r\n value.indexOf(SharedMaskService.dotDot) !== -1 ||\r\n indexOfAtDot !== -1 && currentCaretPosition !== (indexOfAtDot + 1) ||\r\n rawValue.indexOf(SharedMaskService.atSymbol) === -1 && previousConformedValue !== SharedMaskService.emptyString && rawValue.indexOf(SharedMaskService.dot) !== -1\r\n ) {\r\n return false\r\n }\r\n\r\n const indexOfAtSymbol = value.indexOf(SharedMaskService.atSymbol);\r\n const domainPart = value.slice(indexOfAtSymbol + 1, value.length);\r\n\r\n if (\r\n (domainPart.match(SharedMaskService.allDotsRegExp) || SharedMaskService.emptyArray).length > 1 &&\r\n value.substr(-1) === SharedMaskService.dot &&\r\n currentCaretPosition !== rawValue.length\r\n ) {\r\n value = value.slice(0, value.length - 1)\r\n }\r\n\r\n return value.toLowerCase();\r\n }\r\n\r\n /* MASKS */\r\n nameMask(rawValue: string): RegExp[] {\r\n let result: RegExp[] = [];\r\n\r\n if (String(rawValue).length <= 1) {\r\n result.push(SharedMaskService.nameLetterRegEx);\r\n result.push(SharedMaskService.nameLetterRegEx);\r\n } else {\r\n let splittedWords = rawValue.split(' ');\r\n for (let i = 0; i < splittedWords.length; i++) {\r\n let splittenHyphens = splittedWords[i].split('-');\r\n for (let j = 0; j < splittenHyphens.length; j++) {\r\n if (String(splittenHyphens[j]).length <= 1) {\r\n result.push(SharedMaskService.nameLetterRegEx);\r\n result.push(SharedMaskService.nameLetterRegEx);\r\n } else {\r\n for (let k = 0; k < String(splittenHyphens[j]).length; k++) {\r\n result.push(SharedMaskService.nameLetterRegEx);\r\n }\r\n result.push(SharedMaskService.nameLetterSpaceOrHyphenRegEx);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n initialsMask(rawValue: string): RegExp[] {\r\n let result: RegExp[] = [];\r\n\r\n if (String(rawValue).length <= 1) {\r\n result.push(SharedMaskService.initialLetterRegEx);\r\n result.push(SharedMaskService.dotRegEx);\r\n } else {\r\n let splittedLetters = rawValue.split('.');\r\n for (let i = 0; i < splittedLetters.length; i++) {\r\n result.push(SharedMaskService.initialLetterRegEx);\r\n result.push(SharedMaskService.dotRegEx);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n addressMask(rawValue: string): RegExp[] {\r\n let result: RegExp[] = [];\r\n\r\n if (String(rawValue).length <= 1) {\r\n result.push(SharedMaskService.addressLetterRegEx);\r\n result.push(SharedMaskService.addressLetterRegEx);\r\n } else {\r\n let splittedWords = rawValue.split(' ');\r\n for (let i = 0; i < splittedWords.length; i++) {\r\n let splittenHyphens = splittedWords[i].split('-');\r\n for (let j = 0; j < splittenHyphens.length; j++) {\r\n if (String(splittenHyphens[j]).length <= 1) {\r\n result.push(SharedMaskService.addressLetterRegEx);\r\n result.push(SharedMaskService.addressLetterRegEx);\r\n } else {\r\n for (let k = 0; k < String(splittenHyphens[j]).length; k++) {\r\n result.push(SharedMaskService.addressLetterRegEx);\r\n }\r\n result.push(SharedMaskService.addressLetterSpaceOrHyphenRegEx);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n mailcodeMask(): RegExp[] {\r\n return SharedMaskService.mailcodeRegEx;\r\n }\r\n\r\n bsnMask(): RegExp[] {\r\n return SharedMaskService.bsnRegEx;\r\n }\r\n\r\n alphaNummericMask(rawValue: string): RegExp[] {\r\n let result: RegExp[] = [];\r\n\r\n for (let i = 0; i < rawValue.length; i++) {\r\n result.push(SharedMaskService.alphaNummericRegEx);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n alphaNummericWithSpaceHyphenMask(rawValue: string): RegExp[] {\r\n let result: RegExp[] = [];\r\n\r\n for (let i = 0; i < rawValue.length; i++) {\r\n result.push(SharedMaskService.alphaNummericWithSpaceHyphenRegEx);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n phoneMask(countryId: number = 1): RegExp[] {\r\n if (!countryId)\r\n return [/\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/];\r\n\r\n if (countryId === 1)\r\n return [/\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/];\r\n else\r\n return [/\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/, /\\d/];\r\n }\r\n\r\n zipcodeMask(id: number, countries: DtoCountry[]) {\r\n if (!countries || !countries.some(x => x.id === id))\r\n return [/[A-Za-z0-9]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/];\r\n\r\n const locale = countries.find(x => x.id === id).locale;\r\n if (locale === 'nl') {\r\n return [/[1-9]/,/[0-9]/,/[0-9]/,/[0-9]/, ' ', /[A-Z]/i,/[A-Z]/i];\r\n } else if (locale === 'be') {\r\n return [/[1-9]/,/[0-9]/,/[0-9]/,/[0-9]/];\r\n } else if (locale === 'de') {\r\n return [/[A-Za-z0-9]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/];\r\n } else if (locale === 'fr') {\r\n return [/[1-9]/,/[0-9]/,/[0-9]/,/[0-9]/];\r\n } else if (locale === 'vk') {\r\n return [/[A-Za-z0-9]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/];\r\n } else if (locale === 'es') {\r\n return [/[A-Za-z0-9]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/];\r\n } else if (locale === 'lu') {\r\n return [/[1-9]/,/[0-9]/,/[0-9]/,/[0-9]/];\r\n } else {\r\n return [/[A-Za-z0-9]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/, /[A-Za-z0-9 ]/];\r\n }\r\n }\r\n\r\n emailMask(rawValue, config?): any {\r\n rawValue = rawValue.replace(SharedMaskService.allWhitespaceRegExp, SharedMaskService.emptyString);\r\n\r\n let {placeholderChar, currentCaretPosition} = config;\r\n let indexOfFirstAtSymbol = rawValue.indexOf(SharedMaskService.atSymbol);\r\n let indexOfLastDot = rawValue.lastIndexOf(SharedMaskService.dot);\r\n let indexOfTopLevelDomainDot = (indexOfLastDot < indexOfFirstAtSymbol) ? -1 : indexOfLastDot;\r\n\r\n let localPartToDomainConnector = SharedMaskService.getConnector(rawValue, indexOfFirstAtSymbol + 1, SharedMaskService.atSymbol);\r\n let domainNameToTopLevelDomainConnector = SharedMaskService.getConnector(rawValue, indexOfTopLevelDomainDot - 1, SharedMaskService.dot);\r\n\r\n let localPart = SharedMaskService.getLocalPart(rawValue, indexOfFirstAtSymbol);\r\n let domainName = SharedMaskService.getDomainName(rawValue, indexOfFirstAtSymbol, indexOfTopLevelDomainDot, placeholderChar);\r\n let topLevelDomain = SharedMaskService.getTopLevelDomain(rawValue, indexOfTopLevelDomainDot, placeholderChar, currentCaretPosition);\r\n\r\n localPart = SharedMaskService.convertToMask(localPart, false);\r\n domainName = SharedMaskService.convertToMask(domainName, false);\r\n topLevelDomain = SharedMaskService.convertToMask(topLevelDomain, true);\r\n\r\n return localPart\r\n .concat(localPartToDomainConnector)\r\n .concat(domainName)\r\n .concat(domainNameToTopLevelDomainConnector)\r\n .concat(topLevelDomain);\r\n }\r\n\r\n pedicureInspection1Mask(): RegExp[] {\r\n return SharedMaskService.pedicureInspection1RegEx;\r\n }\r\n\r\n pedicureInspection2Mask(): RegExp[] {\r\n return SharedMaskService.pedicureInspection2RegEx;\r\n }\r\n\r\n /* HELPER METHODS */\r\n private static getConnector(rawValue, indexOfConnection, connectionSymbol) {\r\n const connector = [];\r\n\r\n if (rawValue[indexOfConnection] === connectionSymbol) {\r\n connector.push(connectionSymbol);\r\n } else {\r\n connector.push(SharedMaskService.caretTrap, connectionSymbol);\r\n }\r\n\r\n connector.push(SharedMaskService.caretTrap);\r\n\r\n return connector\r\n }\r\n\r\n private static getLocalPart(rawValue, indexOfFirstAtSymbol) {\r\n if (indexOfFirstAtSymbol === -1) {\r\n return rawValue;\r\n } else {\r\n return rawValue.slice(0, indexOfFirstAtSymbol);\r\n }\r\n }\r\n\r\n private static getDomainName(rawValue, indexOfFirstAtSymbol, indexOfTopLevelDomainDot, placeholderChar) {\r\n let domainName = SharedMaskService.emptyString;\r\n\r\n if (indexOfFirstAtSymbol !== -1) {\r\n if (indexOfTopLevelDomainDot === -1) {\r\n domainName = rawValue.slice(indexOfFirstAtSymbol + 1, rawValue.length);\r\n } else {\r\n domainName = rawValue.slice(indexOfFirstAtSymbol + 1, indexOfTopLevelDomainDot);\r\n }\r\n }\r\n\r\n domainName = domainName.replace(new RegExp(`[\\\\s${placeholderChar}]`, SharedMaskService.g), SharedMaskService.emptyString);\r\n\r\n if (domainName === SharedMaskService.atSymbol) {\r\n return SharedMaskService.asterisk;\r\n } else if (domainName.length < 1) {\r\n return SharedMaskService.space;\r\n } else if (domainName[domainName.length - 1] === SharedMaskService.dot) {\r\n return domainName.slice(0, domainName.length - 1);\r\n } else {\r\n return domainName;\r\n }\r\n }\r\n\r\n private static getTopLevelDomain(rawValue, indexOfTopLevelDomainDot, placeholderChar, currentCaretPosition) {\r\n let topLevelDomain = SharedMaskService.emptyString;\r\n\r\n if (indexOfTopLevelDomainDot !== -1) {\r\n topLevelDomain = rawValue.slice(indexOfTopLevelDomainDot + 1, rawValue.length);\r\n }\r\n\r\n topLevelDomain = topLevelDomain.replace(new RegExp(`[\\\\s${placeholderChar}.]`, SharedMaskService.g), SharedMaskService.emptyString);\r\n\r\n if (topLevelDomain.length === 0) {\r\n return (rawValue[indexOfTopLevelDomainDot - 1] === SharedMaskService.dot && currentCaretPosition !== rawValue.length) ?\r\n SharedMaskService.asterisk :\r\n SharedMaskService.emptyString;\r\n } else {\r\n return topLevelDomain;\r\n }\r\n }\r\n\r\n private static convertToMask(str, noDots) {\r\n return str\r\n .split(SharedMaskService.emptyString)\r\n .map((char) => char === SharedMaskService.space ? char : (noDots) ? SharedMaskService.anyNonDotOrWhitespaceRegExp : SharedMaskService.anyNonWhitespaceRegExp);\r\n }\r\n\r\n private static removeAllAtSymbolsButFirst(str) {\r\n let atSymbolCount = 0;\r\n\r\n return str.replace(SharedMaskService.allAtSymbolsRegExp, () => {\r\n atSymbolCount++;\r\n\r\n return (atSymbolCount === 1) ? SharedMaskService.atSymbol : SharedMaskService.emptyString;\r\n })\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Subject} from \"rxjs\";\r\nimport {HubConnection, HubConnectionBuilder, HubConnectionState} from \"@microsoft/signalr\";\r\nimport {Guid} from \"guid-typescript\";\r\nimport {DtoBookingPayment} from \"../models/DtoBookingPayment\";\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SignalrService {\r\n bookingPaymentReceived: Subject = new Subject();\r\n private readonly dateMask = /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(Z)?$/;\r\n private connection: HubConnection;\r\n private bookingOrderId: Guid;\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n getBookingOrderId() {\r\n return this.bookingOrderId;\r\n }\r\n\r\n openConnection(bookingOrderId: Guid) {\r\n this.bookingOrderId = bookingOrderId;\r\n\r\n this.connection = new HubConnectionBuilder()\r\n .withUrl('https://signalr.mijnsalon.nl/dataHub')\r\n .withAutomaticReconnect()\r\n .build();\r\n\r\n this.registerOnEvents();\r\n\r\n this.connection\r\n .start()\r\n .then(() => {\r\n this.connection\r\n .invoke('JoinGroupOnlineBooking', this.bookingOrderId.toString())\r\n .catch(err => console.error(err.toString()));\r\n })\r\n .catch(err => console.error(err.toString()));\r\n\r\n }\r\n\r\n closeConnection() {\r\n if (this.connection?.state === HubConnectionState.Connected) {\r\n this.connection\r\n .invoke('LeaveGroupOnlineBooking', this.bookingOrderId.toString())\r\n .then(() => {\r\n this.connection\r\n .stop()\r\n .catch(err => console.error(err.toString()));\r\n })\r\n .catch(err => console.error(err.toString()));\r\n }\r\n }\r\n\r\n private registerOnEvents() {\r\n this.connection.onreconnected(() => {\r\n this.connection\r\n .invoke('JoinGroupOnlineBooking', this.bookingOrderId.toString())\r\n .catch(err => console.error(err.toString()));\r\n });\r\n\r\n this.connection.on('ReceiveBookingPayment', (data: DtoBookingPayment) => {\r\n this.bookingPaymentReceived.next(data);\r\n });\r\n }\r\n\r\n convertKeysToCamelCase(obj) {\r\n let key, keys = Object.keys(obj);\r\n let n = keys.length;\r\n let newobj = {};\r\n while (n--) {\r\n key = keys[n];\r\n let value = obj[key];\r\n if (this.isDate(value)) {\r\n let str = value.toString();\r\n value = new Date(str.substring(0, 4), parseInt(str.substring(5, 7)) - 1, str.substring(8, 10), str.substring(11, 13), str.substring(14, 16), str.substring(17, 19));\r\n }\r\n newobj[key.charAt(0).toLowerCase() + key.substring(1)] = value;\r\n }\r\n\r\n return newobj;\r\n };\r\n\r\n isDate(value) {\r\n if (value === null || value === undefined) {\r\n return false;\r\n }\r\n\r\n return this.dateMask.test(value);\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\n\r\n@Injectable()\r\nexport class GoogleTagManagerService {\r\n private gtmIdIsSet: boolean;\r\n private gtmId: string;\r\n private browserGlobals = {\r\n windowRef(): any {\r\n return window;\r\n },\r\n documentRef(): any {\r\n return document;\r\n }\r\n };\r\n\r\n constructor() {\r\n }\r\n\r\n public getDataLayer() {\r\n try {\r\n const window = this.browserGlobals.windowRef();\r\n window['dataLayer'] = window['dataLayer'] || [];\r\n return window['dataLayer'];\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n private pushOnDataLayer(obj: object) {\r\n try {\r\n const dataLayer = this.getDataLayer();\r\n dataLayer.push(obj);\r\n console.log(dataLayer);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n setTrackingId(gtmId: string) {\r\n try {\r\n if (gtmId) {\r\n this.gtmId = gtmId;\r\n const doc = this.browserGlobals.documentRef();\r\n\r\n const gtmScript = doc.createElement('script');\r\n gtmScript.innerText = `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','${this.gtmId}');`;\r\n doc.head.insertBefore(gtmScript, doc.head.firstChild);\r\n\r\n const ifrm = doc.createElement('iframe');\r\n ifrm.setAttribute('src', 'https://www.googletagmanager.com/ns.html?id=' + this.gtmId);\r\n ifrm.style.width = '0';\r\n ifrm.style.height = '0';\r\n ifrm.style.display = 'none';\r\n ifrm.style.visibility = 'hidden';\r\n\r\n const noscript = doc.createElement('noscript');\r\n noscript.appendChild(ifrm);\r\n\r\n doc.body.insertBefore(noscript, doc.body.firstChild);\r\n\r\n this.gtmIdIsSet = true;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n public pushTag(item: object) {\r\n try {\r\n if (this.gtmIdIsSet) {\r\n this.pushOnDataLayer(item);\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n }\r\n}\r\n","import {Directive, OnDestroy, OnInit} from '@angular/core';\r\nimport {DatePickerComponent} from \"@progress/kendo-angular-dateinputs\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {DateInputFormatPlaceholder} from \"@progress/kendo-angular-dateinputs/dist/es2015/dateinput/models/format-placeholder.model\";\r\n\r\n@Directive({\r\n selector: '[date-picker-defaults]'\r\n})\r\nexport class DatePickerDefaultsDirective implements OnInit, OnDestroy {\r\n protected subscriptions: Subscription = new Subscription(() => {});\r\n\r\n constructor(private component: DatePickerComponent) {\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.component.input.inputElement.type = 'tel';\r\n this.component.format = 'dd-MM-yyyy';\r\n this.component.placeholder = '';\r\n this.component.formatPlaceholder = {year: ' ', month: ' ', day: ' '} as DateInputFormatPlaceholder;\r\n\r\n this.subscriptions.add(this.component.onFocus.subscribe(() => {\r\n this.component.input.inputElement.setSelectionRange(0, 9999);\r\n }));\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.subscriptions.unsubscribe();\r\n }\r\n}","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { PageSubheaderBarConfig } from '../../page-config-api';\r\n\r\n\r\n@Component({\r\n selector: 'fw-page-subheader-bar',\r\n templateUrl: './page-subheader-bar.component.html',\r\n styleUrls: ['./page-subheader-bar.component.scss']\r\n})\r\nexport class PageSubheaderBarComponent implements OnInit {\r\n @Input()\r\n config = new PageSubheaderBarConfig();\r\n\r\n @Output()\r\n btnClick = new EventEmitter();\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n btnClicked(event) {\r\n this.btnClick.emit(event);\r\n }\r\n}\r\n","{{config.title | translate}}\r\n
\r\n \r\n
\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {DtoCountry, DtoSaveString,} from '../models';\r\nimport {AzureApiService} from './azure-api.service';\r\nimport {DtoZipcodeCheckResult} from \"../models/DtoZipcodeCheckResult\";\r\n\r\n@Injectable()\r\nexport class SharedDataService {\r\n constructor(private http: AzureApiService) {\r\n }\r\n\r\n getCountries (username: string): Observable {\r\n return this.http.get(`login/company/${username}/countries`);\r\n };\r\n\r\n checkZipcode(zipcode: string, housenumber: number): Observable {\r\n return this.http.get(`baseitem/checkzipcode/${zipcode}/${housenumber}`);\r\n };\r\n\r\n saveLocale (locale: DtoSaveString): Observable {\r\n return this.http.post(`customer/locale`, locale);\r\n };\r\n}\r\n","
\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
","import {Component, OnInit} from '@angular/core';\r\nimport {DeviceDetectorService} from \"ngx-device-detector\";\r\n@Component({\r\n selector: 'fw-framework-body',\r\n templateUrl: './framework-body.component.html',\r\n styleUrls: ['./framework-body.component.scss']\r\n})\r\nexport class FrameworkBodyComponent implements OnInit {\r\n\r\n constructor(public dds: DeviceDetectorService) {}\r\n\r\n ngOnInit() {\r\n\r\n }\r\n}\r\n","import {DatePipe} from '@angular/common';\r\nimport {Injectable} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {map} from 'rxjs/operators';\r\nimport {EMPTY, Observable} from 'rxjs';\r\n\r\nimport {UserApi} from '../components';\r\nimport {DtoLoginRequest, DtoLoginResult} from '../models';\r\nimport {AzureApiService} from './azure-api.service';\r\nimport {SharedService} from './shared.service';\r\nimport {CustomerCompany} from \"../models/CustomerCompany\";\r\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\r\nimport * as Sentry from \"@sentry/angular\";\r\nimport {SharedDataService} from \"@app/shared\";\r\n\r\n@Injectable()\r\nexport class UserService implements UserApi {\r\n constructor(\r\n private router: Router,\r\n private http: AzureApiService,\r\n private datepipe: DatePipe,\r\n public jwtHelper: JwtHelperService,\r\n private ss: SharedService\r\n ) {\r\n }\r\n\r\n signIn(username: string, password: string, rememberMe: boolean): Observable {\r\n return this.doServerSignIn({\r\n email: username,\r\n password: password,\r\n databaseName: this.ss.customerCompany.databaseName,\r\n databaseServer: this.ss.customerCompany.databaseServer,\r\n databaseBOUserId: this.ss.customerCompany.databaseBOUserId,\r\n databaseUserId: this.ss.customerCompany.databaseUserId\r\n } as DtoLoginRequest).pipe(\r\n map((res:DtoLoginResult) => {\r\n if (!res.mobileServiceAuthenticationToken) {\r\n this.ss.message('De combinatie van het e-mail adres en het wachtwoord is niet gevonden');\r\n return false;\r\n } else if (res.hasException) {\r\n this.ss.message('Er is een onbekende fout opgetreden');\r\n return false;\r\n } else {\r\n sessionStorage.setItem('accessToken', res.mobileServiceAuthenticationToken);\r\n sessionStorage.setItem('username', res.email);\r\n sessionStorage.setItem('hasSubscription', res.hasSubscription ? '1' : '0');\r\n sessionStorage.setItem('expiresOn', this.datepipe.transform(this.jwtHelper.getTokenExpirationDate(res.mobileServiceAuthenticationToken), 'dd-MM-yyyy hh:mm:ss'));\r\n sessionStorage.setItem('tokenType', 'JWT');\r\n sessionStorage.setItem('userId', this.jwtHelper.decodeToken(res.mobileServiceAuthenticationToken).DatabaseUserId);\r\n const company = this.ss.customerCompany;\r\n Sentry.configureScope(function (scope) {\r\n scope.setUser({\r\n id: company.databaseUserId.toString(),\r\n username: username\r\n });\r\n scope.setTag(\"userId\", company.databaseUserId);\r\n scope.setTag(\"username\", username);\r\n scope.setTag(\"server\", company.databaseServer);\r\n scope.setTag(\"database\", company.databaseName);\r\n scope.setTag(\"useEmployees\", company.useEmployees);\r\n scope.setTag(\"defaultLocale\", company.defaultLocale);\r\n scope.setTag(\"companyName\", company.companyName);\r\n scope.setTag(\"customerEmail\", res.email);\r\n scope.setTag(\"customerLocale\", SharedService.getCurrentLanguage());\r\n });\r\n return true;\r\n }\r\n })\r\n );\r\n }\r\n\r\n signOut(): Observable {\r\n sessionStorage.clear();\r\n\r\n this.ss.navigate('/login', null);\r\n return EMPTY;\r\n }\r\n\r\n isAuthenticated() {\r\n if (!sessionStorage.getItem('accessToken'))\r\n return false;\r\n else {\r\n return !this.jwtHelper.isTokenExpired();\r\n }\r\n }\r\n\r\n loginOTP(request: DtoLoginRequest): Observable {\r\n return this.http.post(`login/portal/otp`, request);\r\n }\r\n\r\n private doServerSignIn(request: DtoLoginRequest): Observable {\r\n return this.http.post(`login/portal`, request);\r\n }\r\n\r\n public checkCompany(companyUsername: string): Observable {\r\n return this.http.get(`login/company/${companyUsername}`);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {SharedService} from \"../../services/shared.service\";\r\nimport {FrameworkConfigService} from \"../../services/framework-config.service\";\r\n\r\n@Component({\r\n selector: 'fw-status-bar',\r\n templateUrl: './status-bar.component.html',\r\n styleUrls: ['./status-bar.component.scss']\r\n})\r\nexport class StatusBarComponent implements OnInit {\r\n company: string = this.ss.getCompanyName();\r\n platformName: string = FrameworkConfigService.getPlatformName();\r\n\r\n constructor(private ss: SharedService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n}\r\n","{{company}}\r\n{{'STATUSBAR.POWEREDBY' | translate}}: {{platformName | translate}}\r\n","export class MsError {\r\n errorNumber: number;\r\n status: number;\r\n statusText: string;\r\n message: string;\r\n friendlyMessage: string;\r\n}","import {ErrorHandler, Injectable, Injector, NgZone, OnDestroy} from \"@angular/core\";\r\nimport {DialogService} from \"@progress/kendo-angular-dialog\";\r\nimport {MsError} from \"..//models/MsError\";\r\nimport {MessageComponent} from \"../components/message\";\r\nimport {SharedService} from \"../services/shared.service\";\r\nimport {HttpErrorResponse} from \"@angular/common/http\";\r\nimport * as Sentry from \"@sentry/angular\";\r\nimport {environment} from \"../../../environments/environment\";\r\n\r\n@Injectable()\r\nexport class GlobalErrorHandler implements ErrorHandler, OnDestroy {\r\n constructor(private injector: Injector) {\r\n }\r\n\r\n private static extractError(errorCandidate: unknown): unknown {\r\n let error = errorCandidate;\r\n\r\n // Try to unwrap zone.js error.\r\n // https://github.com/angular/angular/blob/master/packages/core/src/util/errors.ts\r\n if (error && (error as { ngOriginalError: Error }).ngOriginalError) {\r\n error = (error as { ngOriginalError: Error }).ngOriginalError;\r\n }\r\n\r\n // We can handle messages and Error objects directly.\r\n if (typeof error === 'string' || error instanceof Error) {\r\n return error;\r\n }\r\n\r\n // If it's http module error, extract as much information from it as we can.\r\n if (error instanceof HttpErrorResponse) {\r\n // The `error` property of http exception can be either an `Error` object, which we can use directly...\r\n if (error.error instanceof Error) {\r\n return error.error;\r\n }\r\n\r\n // ... or an`ErrorEvent`, which can provide us with the message but no stack...\r\n if (error.error instanceof ErrorEvent && error.error.message) {\r\n return error.error.message;\r\n }\r\n\r\n // ...or the request body itself, which we can use as a message instead.\r\n if (typeof error.error === 'string') {\r\n return `Server returned code ${error.status} with body \"${error.error}\"`;\r\n }\r\n\r\n // If we don't have any detailed information, fallback to the request message itself.\r\n return error.message;\r\n }\r\n\r\n // Nothing was extracted, fallback to default error message.\r\n return null;\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n handleError(error: unknown): void {\r\n let extractedError = GlobalErrorHandler.extractError(error);\r\n Sentry.captureException(extractedError);\r\n if (!environment.production)\r\n console.log(extractedError);\r\n\r\n const dialogService = this.injector.get(DialogService);\r\n const ngZone = this.injector.get(NgZone);\r\n const sharedService = this.injector.get(SharedService);\r\n ngZone.run(() => {\r\n sharedService.hideAllLoaders();\r\n\r\n let msError = new MsError();\r\n msError.errorNumber = 1000;\r\n msError.friendlyMessage = 'Er is een onbekende fout opgetreden';\r\n if (error instanceof HttpErrorResponse) {\r\n if (!navigator.onLine) {\r\n msError.errorNumber = 1001;\r\n msError.friendlyMessage = 'U heeft geen verbinding met het internet';\r\n msError.message = 'No internet connection';\r\n } else {\r\n msError.errorNumber = 1002;\r\n msError.message = error.message;\r\n msError.status = error.status;\r\n msError.statusText = error.statusText;\r\n }\r\n const dialogRef = dialogService.open({\r\n content: MessageComponent\r\n });\r\n\r\n const dialogContent: MessageComponent = dialogRef.content.instance;\r\n dialogContent.dialog = dialogRef;\r\n dialogContent.message = msError.friendlyMessage;\r\n }\r\n });\r\n }\r\n}\r\n","import { ButtonDefinition } from '../buttons/button-definition';\r\nexport class PageHeaderBarConfig {\r\n title: string;\r\n buttonDefinition: Array;\r\n\r\n constructor() {}\r\n}\r\n\r\nexport class PageSubheaderBarConfig {\r\n title: string;\r\n buttonDefinition: Array;\r\n\r\n constructor() {}\r\n}","import {Component, Input} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, ValidationErrors} from '@angular/forms';\r\nimport {ErrorMessage} from \"@app/shared/components/validation-message/models/ErrorMessage\";\r\nimport {DtoCustomAppointmentFormElement} from \"@app/new-appointment-passerby/models/DtoCustomAppointmentFormElement\";\r\nimport {TranslateService} from \"@ngx-translate/core\";\r\n\r\n@Component({\r\n selector: 'validation-message',\r\n templateUrl: './validation-message.component.html',\r\n styleUrls: ['./validation-message.component.scss']\r\n})\r\nexport class ValidationMessageComponent {\r\n @Input() form: FormGroup;\r\n @Input() customFields: DtoCustomAppointmentFormElement[];\r\n hasErrorMessage: boolean = false;\r\n errorMessage: ErrorMessage[];\r\n\r\n constructor(private ts: TranslateService) {}\r\n\r\n getFormValidationErrors() {\r\n this.errorMessage = [];\r\n if (this.form) {\r\n Object.keys(this.form.controls).forEach(key => {\r\n const control = this.form.get(key);\r\n if (control instanceof FormArray)\r\n this.getInnerFormArrayValidationErrors(control);\r\n else {\r\n const controlErrors: ValidationErrors = this.form.get(key).errors;\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach(keyError => {\r\n if (this.customFields && this.customFields.some(x => x.name === key && x.error !== null && x.error !== undefined && x.error !== '')) {\r\n this.errorMessage.push({\r\n key: this.ts.instant(this.customFields.find(x => x.name === key).error),\r\n error: ''\r\n });\r\n } else {\r\n this.errorMessage.push({\r\n key: this.translateKey(key),\r\n error: this.translateKeyError(keyError)\r\n });\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n this.hasErrorMessage = this.errorMessage.length > 0;\r\n }\r\n }\r\n\r\n getInnerFormArrayValidationErrors(formArray: FormArray) {\r\n Object.keys(formArray.controls).forEach(field => {\r\n const control = formArray.get(field);\r\n if (control as FormGroup) {\r\n let group = control as FormGroup;\r\n Object.keys(group.controls).forEach(key => {\r\n const control = group.get(key);\r\n if (control instanceof FormArray)\r\n this.getInnerFormArrayValidationErrors(control);\r\n else {\r\n const controlErrors: ValidationErrors = group.get(key).errors;\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach(keyError => {\r\n if (this.customFields && this.customFields.some(x => x.name === key && x.error !== null && x.error !== undefined && x.error !== '')) {\r\n this.errorMessage.push({\r\n key: this.ts.instant(this.customFields.find(x => x.name === key).error),\r\n error: ''\r\n });\r\n } else {\r\n this.errorMessage.push({\r\n key: this.translateKey(key),\r\n error: this.translateKeyError(keyError)\r\n });\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n validateForm() {\r\n Object.keys(this.form.controls).forEach(field => {\r\n const control = this.form.get(field);\r\n if (control instanceof FormControl) {\r\n if (!control.dirty && !control.value) {\r\n control.markAsDirty({onlySelf: true});\r\n control.updateValueAndValidity();\r\n }\r\n } else if (control instanceof FormGroup) {\r\n this.validateInnerFormFields(control);\r\n } else if (control instanceof FormArray) {\r\n this.validateInnerFormArray(control);\r\n }\r\n });\r\n }\r\n\r\n resetValidation() {\r\n Object.keys(this.form.controls).forEach(field => {\r\n const control = this.form.get(field);\r\n if (control instanceof FormControl) {\r\n control.markAsPristine({onlySelf: true});\r\n control.updateValueAndValidity();\r\n } else if (control instanceof FormGroup) {\r\n this.resetInnerFormValidation(control);\r\n } else if (control instanceof FormArray) {\r\n this.resetInnerFormArrayValidation(control);\r\n }\r\n });\r\n }\r\n\r\n resetInnerFormValidation(formGroup: FormGroup) {\r\n Object.keys(formGroup.controls).forEach(field => {\r\n const control = this.form.get(field);\r\n if (control instanceof FormControl) {\r\n control.markAsPristine({onlySelf: true});\r\n control.updateValueAndValidity();\r\n } else if (control instanceof FormGroup) {\r\n this.resetInnerFormValidation(control);\r\n } else if (control instanceof FormArray) {\r\n this.resetInnerFormArrayValidation(control);\r\n }\r\n });\r\n }\r\n\r\n resetInnerFormArrayValidation(formArray: FormArray) {\r\n Object.keys(formArray.controls).forEach(field => {\r\n const control = this.form.get(field);\r\n if (control instanceof FormControl) {\r\n control.markAsPristine({onlySelf: true});\r\n control.updateValueAndValidity();\r\n } else if (control instanceof FormGroup) {\r\n this.resetInnerFormValidation(control);\r\n } else if (control instanceof FormArray) {\r\n this.resetInnerFormArrayValidation(control);\r\n }\r\n });\r\n }\r\n\r\n validateInnerFormFields(formGroup: FormGroup) {\r\n Object.keys(formGroup.controls).forEach(field => {\r\n const control = formGroup.get(field);\r\n if (control instanceof FormControl) {\r\n if (!control.dirty && !control.value) {\r\n control.markAsDirty({onlySelf: true});\r\n control.updateValueAndValidity();\r\n }\r\n } else if (control instanceof FormGroup) {\r\n this.validateInnerFormFields(control);\r\n } else if (control instanceof FormArray) {\r\n this.validateInnerFormArray(control);\r\n }\r\n });\r\n }\r\n\r\n validateInnerFormArray(formArray: FormArray) {\r\n Object.keys(formArray.controls).forEach(field => {\r\n const control = formArray.get(field);\r\n if (control instanceof FormControl) {\r\n if (!control.dirty && !control.value) {\r\n control.markAsDirty({onlySelf: true});\r\n control.updateValueAndValidity();\r\n }\r\n } else if (control instanceof FormGroup) {\r\n this.validateInnerFormFields(control);\r\n } else if (control instanceof FormArray) {\r\n this.validateInnerFormArray(control);\r\n }\r\n });\r\n }\r\n\r\n translateKey(key: string): string {\r\n if (key == 'lastName') return 'VALIDATION.KEY.LASTNAME';\r\n else if (key == 'oldPassword') return 'VALIDATION.KEY.OLDPASSWORD';\r\n else if (key == 'newPassword') return 'VALIDATION.KEY.NEWPASSWORD';\r\n else if (key == 'newPasswordRepeat') return 'VALIDATION.KEY.NEWPASSWORDREPEAT';\r\n else if (key == 'remarks') return 'VALIDATION.KEY.RERMARKS';\r\n else if (key == 'employeeId') return 'VALIDATION.KEY.EMPLOYEEID';\r\n else if (key == 'gender') return 'VALIDATION.KEY.GENDER';\r\n else if (key == 'zipcode') return 'VALIDATION.KEY.ZIPCODE';\r\n else if (key == 'housenumber') return 'VALIDATION.KEY.HOUSENUMBER';\r\n else if (key == 'password') return 'VALIDATION.KEY.PASSWORD';\r\n else if (key == 'startTime') return 'VALIDATION.KEY.STARTTIME';\r\n else if (key == 'email') return 'VALIDATION.KEY.EMAIL';\r\n else if (key == 'city') return 'VALIDATION.KEY.CITY';\r\n else if (key == 'street') return 'VALIDATION.KEY.STREET';\r\n else if (key == 'houseNo') return 'VALIDATION.KEY.HOUSENO';\r\n else if (key == 'telMobile') return 'VALIDATION.KEY.TELMOBILE';\r\n else if (key == 'lastname') return 'VALIDATION.KEY.LASTNAME';\r\n else if (key == 'initials') return 'VALIDATION.KEY.INITIALS';\r\n else if (key == 'customerName') return 'VALIDATION.KEY.CUSTOMERNAME';\r\n else if (key == 'customerPhone') return 'VALIDATION.KEY.CUSTOMERPHONE';\r\n else if (key == 'customerEmail') return 'VALIDATION.KEY.CUSTOMEREMAIL';\r\n\r\n return '';\r\n }\r\n\r\n translateKeyError(keyError: string): string {\r\n if (keyError == 'required') return 'VALIDATION.ERROR.REQUIRED';\r\n else if (keyError == 'customRequired') return 'VALIDATION.ERROR.CUSTOMREQUIRED';\r\n else if (keyError == 'currentPasswordNoMatch') return 'VALIDATION.ERROR.CURRENTPASSWODNOMATCH';\r\n else if (keyError == 'newPasswordRepeatMismatch') return 'VALIDATION.ERROR.NEWPASSWORDREPEATMISMATCH';\r\n else if (keyError == 'phoneNoInvalid') return 'VALIDATION.ERROR.PHONENOINVALID';\r\n else if (keyError == 'emailInvalid') return 'VALIDATION.ERROR.EMAILINVALID';\r\n\r\n return '';\r\n }\r\n}\r\n","
\r\n
    \r\n
  • {{error.key | translate}} {{error.error | translate}}
  • \r\n
\r\n
","import {CurrencyPipe, DatePipe, DOCUMENT} from '@angular/common';\r\nimport {EventEmitter, Inject, Injectable, Output} from '@angular/core';\r\nimport {DialogAction, DialogCloseResult, DialogService} from '@progress/kendo-angular-dialog';\r\nimport {addDays, firstDayOfMonth, lastDayOfMonth} from '@progress/kendo-date-math';\r\nimport {Observable} from 'rxjs';\r\nimport {ConfirmComponent} from '../components/confirm';\r\nimport {MessageComponent} from '../components/message';\r\nimport {ActivatedRoute, ParamMap, Params, Router} from \"@angular/router\";\r\nimport {CustomerCompany} from \"../models/CustomerCompany\";\r\nimport {ChooseImageComponent} from \"../components/choose-image/choose-image.component\";\r\nimport {NgxUiLoaderConfig, NgxUiLoaderService} from \"ngx-ui-loader\";\r\nimport cssVars from 'css-vars-ponyfill';\r\nimport {FrameworkConfigService} from \"../services/framework-config.service\";\r\nimport {TranslateService} from \"@ngx-translate/core\";\r\nimport {take} from \"rxjs/operators\";\r\nimport {DeviceDetectorService} from \"ngx-device-detector\";\r\nimport {SharedDataService} from \"../services/shared-data.service\";\r\nimport {CoronaComponent} from \"../components/corona/corona.component\";\r\nimport {CldrIntlService, IntlService} from \"@progress/kendo-angular-intl\";\r\nimport {Guid} from \"guid-typescript\";\r\nimport {isEmptyString} from \"@progress/kendo-angular-dropdowns/dist/es2015/util\";\r\n\r\n@Injectable()\r\nexport class SharedService {\r\n private loaderIds: string[] = [];\r\n private loaderConfig: NgxUiLoaderConfig = this.loaderService.getDefaultConfig();\r\n private legacyCssVarsSet: boolean;\r\n\r\n @Output() customerCompanyChanged: EventEmitter = new EventEmitter();\r\n @Output() languageChanged: EventEmitter = new EventEmitter();\r\n public customerCompany: CustomerCompany;\r\n public companyUsername: string = '';\r\n public bookingDomain: string = '';\r\n public deepLinkAppintmentKindIndex: number;\r\n public deepLinkEmployeeIndex: number;\r\n public deepLinkBookingOrderId: Guid;\r\n public referrerUrl: string;\r\n\r\n constructor(\r\n private dialogService: DialogService,\r\n private datepipe: DatePipe,\r\n private dds: DeviceDetectorService,\r\n private currencyPipe: CurrencyPipe,\r\n private loaderService: NgxUiLoaderService,\r\n private sds: SharedDataService,\r\n public intlService: IntlService,\r\n private router: Router,\r\n private ts: TranslateService,\r\n @Inject(DOCUMENT) private document: any\r\n ) {\r\n }\r\n\r\n public navigate(path: string, params: Params = null) {\r\n this.router.navigate([`${path}`],\r\n {\r\n queryParams: params,\r\n skipLocationChange: true\r\n });\r\n }\r\n\r\n setLegacyCssVars() {\r\n let colorToUse = '#8600b5';\r\n let color2ToUse = '#8260b5';\r\n let colorTextToUse = '#ffffff';\r\n let colorText2ToUse = '#ffffff';\r\n let subColorToUse = '#4eafe4';\r\n if (this.customerCompany.standardColor1) {\r\n colorToUse = this.removeColorAlpha(this.customerCompany.standardColor1);\r\n color2ToUse = this.removeColorAlpha(this.customerCompany.standardColor2);\r\n colorTextToUse = this.removeColorAlpha(this.customerCompany.standardTextColor1);\r\n colorText2ToUse = this.removeColorAlpha(this.customerCompany.standardTextColor2);\r\n subColorToUse = '#959595';\r\n }\r\n\r\n if (!this.legacyCssVarsSet) {\r\n cssVars({\r\n onlyLegacy: true,\r\n watch: true,\r\n variables: {\r\n '--main-color': colorToUse,\r\n '--main-color2': color2ToUse,\r\n '--main-text-color': colorTextToUse,\r\n '--main-text-color2': colorText2ToUse,\r\n '--sub-color': subColorToUse\r\n },\r\n });\r\n this.legacyCssVarsSet = true;\r\n }\r\n }\r\n\r\n public removeParamFromUrl(route: ActivatedRoute) {\r\n this.router.navigate([],\r\n {\r\n queryParams: null,\r\n replaceUrl: true,\r\n relativeTo: route,\r\n skipLocationChange: true\r\n });\r\n }\r\n\r\n public static Languages(): Array<{ id: string, description: string, icon: string }> {\r\n return [\r\n /*{\r\n id: 'ar',\r\n icon: '../../assets/images/language_icons/ar.png',\r\n description: 'Marocain'\r\n },*/\r\n {\r\n id: 'de',\r\n icon: '../../assets/images/language_icons/de.png',\r\n description: 'Deutsch'\r\n },\r\n {\r\n id: 'en',\r\n icon: '../../assets/images/language_icons/en.png',\r\n description: 'English'\r\n },\r\n /*{\r\n id: 'es',\r\n icon: '../../assets/images/language_icons/es.png',\r\n description: 'Espanol'\r\n },*/\r\n {\r\n id: 'fr',\r\n icon: '../../assets/images/language_icons/fr.png',\r\n description: 'Franҫais'\r\n },/*\r\n {\r\n id: 'it',\r\n icon: '../../assets/images/language_icons/it.png',\r\n description: 'Italiano'\r\n },*/\r\n {\r\n id: 'nl',\r\n icon: '../../assets/images/language_icons/nl.png',\r\n description: 'Nederlands'\r\n }/*,\r\n {\r\n id: 'pl',\r\n icon: '../../assets/images/language_icons/pl.png',\r\n description: 'Polski'\r\n },\r\n {\r\n id: 'pt',\r\n icon: '../../assets/images/language_icons/pt.png',\r\n description: 'Português'\r\n },\r\n {\r\n id: 'ru',\r\n icon: '../../assets/images/language_icons/ru.png',\r\n description: 'русский'\r\n },\r\n {\r\n id: 'tr',\r\n icon: '../../assets/images/language_icons/tr.png',\r\n description: 'Türk'\r\n },\r\n {\r\n id: 'zh',\r\n icon: '../../assets/images/language_icons/zh.png',\r\n description: '中國'\r\n }*/\r\n ];\r\n }\r\n\r\n public setLanguage() {\r\n if (localStorage.getItem('language')) {\r\n this.updateLanguage(localStorage.getItem('language'));\r\n } else if (this.ts.getBrowserLang().includes('ar'))\r\n this.updateLanguage('ar');\r\n else if (this.ts.getBrowserLang().includes('de'))\r\n this.updateLanguage('de');\r\n else if (this.ts.getBrowserLang().includes('en'))\r\n this.updateLanguage('en');\r\n else if (this.ts.getBrowserLang().includes('es'))\r\n this.updateLanguage('es');\r\n else if (this.ts.getBrowserLang().includes('fr'))\r\n this.updateLanguage('fr');\r\n else if (this.ts.getBrowserLang().includes('it'))\r\n this.updateLanguage('it');\r\n else if (this.ts.getBrowserLang().includes('nl'))\r\n this.updateLanguage('nl');\r\n else if (this.ts.getBrowserLang().includes('pl'))\r\n this.updateLanguage('pl');\r\n else if (this.ts.getBrowserLang().includes('pt'))\r\n this.updateLanguage('pt');\r\n else if (this.ts.getBrowserLang().includes('ru'))\r\n this.updateLanguage('ru');\r\n else if (this.ts.getBrowserLang().includes('tr'))\r\n this.updateLanguage('tr');\r\n else if (this.ts.getBrowserLang().includes('zh'))\r\n this.updateLanguage('zh');\r\n else\r\n this.updateLanguage('nl');\r\n }\r\n\r\n public updateLanguage(id: string) {\r\n if (!localStorage.getItem('language') || localStorage.getItem('language') !== id) {\r\n localStorage.setItem('language', id);\r\n }\r\n\r\n this.ts.use(id);\r\n this.languageChanged.emit(id);\r\n\r\n switch (id) {\r\n case 'nl': {\r\n (this.intlService).localeId = 'nl-NL';\r\n break;\r\n }\r\n case 'de': {\r\n (this.intlService).localeId = 'de-DE';\r\n break;\r\n }\r\n case 'fr': {\r\n (this.intlService).localeId = 'fr-FR';\r\n break;\r\n }\r\n case 'en': {\r\n (this.intlService).localeId = 'en-US';\r\n break;\r\n }\r\n default: {\r\n (this.intlService).localeId = 'nl-NL';\r\n break;\r\n }\r\n }\r\n\r\n if (sessionStorage.getItem('userId'))\r\n this.sds.saveLocale({stringToSave: id}).subscribe();\r\n }\r\n\r\n public static getCurrentLanguage(): string {\r\n return localStorage.getItem('language');\r\n }\r\n\r\n public useOnlinePayment(): boolean {\r\n return !isEmptyString(this.customerCompany.mollieApiKey) && this.customerCompany.mollieApiKey !== null && sessionStorage.getItem('hasSubscription') === '0'\r\n }\r\n\r\n public getCurrentLocale(forMollie: boolean = false): string {\r\n switch (localStorage.getItem('language')) {\r\n case 'nl': {\r\n return 'nl-NL';\r\n }\r\n case 'de': {\r\n return 'de-DE';\r\n }\r\n case 'fr': {\r\n return 'fr-FR';\r\n }\r\n case 'en': {\r\n return forMollie ? 'en-US' : 'en-GB';\r\n }\r\n default: {\r\n return 'nl-NL';\r\n }\r\n }\r\n }\r\n\r\n public async getTranslation(key: string): Promise {\r\n return this.ts.get(key).pipe(take(1)).toPromise();\r\n }\r\n\r\n public setCustomerCompany(company: CustomerCompany) {\r\n\r\n this.customerCompany = company;\r\n let colorToUse = '#8600b5';\r\n let color2ToUse = '#8260b5';\r\n let color3ToUse = '#8600b515';\r\n let colorTextToUse = '#ffffff';\r\n let colorText2ToUse = '#ffffff';\r\n let subColorToUse = '#4eafe4';\r\n if (FrameworkConfigService.isLibersyMode) {\r\n colorToUse = '#cc0000';\r\n color2ToUse = '#cc0000';\r\n }\r\n if (company.standardColor1) {\r\n colorToUse = this.removeColorAlpha(company.standardColor1);\r\n color2ToUse = this.removeColorAlpha(company.standardColor2);\r\n color3ToUse = `${company.standardColor1}15`;\r\n colorTextToUse = this.removeColorAlpha(company.standardTextColor1);\r\n colorText2ToUse = this.removeColorAlpha(company.standardTextColor2);\r\n subColorToUse = '#959595';\r\n }\r\n this.document.body.style.setProperty('--main-color', colorToUse);\r\n this.document.body.style.setProperty('--main-color2', color2ToUse);\r\n this.document.body.style.setProperty('--main-color3', color3ToUse);\r\n this.document.body.style.setProperty('--main-text-color', colorTextToUse);\r\n this.document.body.style.setProperty('--main-text-color2', colorText2ToUse);\r\n this.document.body.style.setProperty('--sub-color', subColorToUse);\r\n\r\n /*if (!this.legacyCssVarsSet) {\r\n\r\n this.legacyCssVarsSet = true;\r\n }*/\r\n\r\n this.setLegacyCssVars();\r\n\r\n this.setLoaderConfig(colorToUse, colorTextToUse);\r\n\r\n this.customerCompanyChanged.emit(this.customerCompany);\r\n }\r\n\r\n public loadGoogleGlobalGtag(trackingId, trackingLabel: string) {\r\n if (trackingId && trackingLabel) {\r\n // global gtag\r\n let gaScript = document.createElement('script');\r\n gaScript.id = 'gagtagscript';\r\n gaScript.setAttribute('async', 'true');\r\n gaScript.setAttribute('src', `https://www.googletagmanager.com/gtag/js?id=${trackingId}`);\r\n\r\n let gaScript2 = document.createElement('script');\r\n gaScript2.id = 'gagtagscript2';\r\n gaScript2.innerText = `window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('config', '${trackingId}');`;\r\n\r\n document.documentElement.firstChild.appendChild(gaScript);\r\n document.documentElement.firstChild.appendChild(gaScript2);\r\n\r\n // conversion script\r\n let gaConversionScript = document.createElement('script');\r\n gaConversionScript.id = 'gaconversionscript';\r\n gaConversionScript.innerText = `function gtag_report_conversion() {gtag('event', 'conversion', {'send_to': '${trackingId}/${trackingLabel}','transaction_id': ''});return false;}`;\r\n document.documentElement.firstChild.appendChild(gaConversionScript);\r\n } else {\r\n this.removeGoogleGlobalGtag();\r\n }\r\n }\r\n\r\n public removeGoogleGlobalGtag() {\r\n let gagtagscript = document.getElementById('gagtagscript');\r\n let gagtagscript2 = document.getElementById('gagtagscript2');\r\n let gaconversionscript = document.getElementById('gaconversionscript');\r\n if (gagtagscript) gagtagscript.remove();\r\n if (gagtagscript2) gagtagscript2.remove();\r\n if (gaconversionscript) gaconversionscript.remove();\r\n }\r\n\r\n public getCustomerCompany(): CustomerCompany {\r\n return this.customerCompany;\r\n }\r\n\r\n public hasCustomAppointmentForm(): boolean {\r\n if (this.customerCompany) {\r\n return this.customerCompany.hasCustomAppointmentForm;\r\n } else\r\n return false;\r\n }\r\n\r\n public getCompanyColor() {\r\n if (this.customerCompany && this.customerCompany.standardColor1) {\r\n this.removeColorAlpha(this.customerCompany.standardColor1);\r\n } else\r\n return '#8600b5';\r\n }\r\n\r\n public getCompanyCountryId() {\r\n if (this.customerCompany) {\r\n return this.customerCompany.countryId;\r\n } else\r\n return null;\r\n }\r\n\r\n public getCompanyLogo() {\r\n if (this.customerCompany && this.customerCompany.logo) {\r\n return this.customerCompany.logo;\r\n } else\r\n return null;\r\n }\r\n\r\n public getCompanyName() {\r\n if (this.customerCompany) {\r\n return this.customerCompany.companyName;\r\n } else\r\n return null;\r\n }\r\n\r\n public getAllowOnlineNewCustomer() {\r\n if (this.customerCompany) {\r\n return this.customerCompany.allowOnlineNewCustomer;\r\n } else\r\n return null;\r\n }\r\n\r\n public useEmployeeAsLocation() {\r\n if (this.customerCompany) {\r\n return this.customerCompany.useEmployeeAsLocation;\r\n } else\r\n return false;\r\n }\r\n\r\n public getCustomerCompanyAddress(): string {\r\n let result = '';\r\n\r\n if (this.customerCompany.street)\r\n result += this.customerCompany.street;\r\n if (this.customerCompany.houseNo)\r\n result !== '' ? result += ' ' + this.customerCompany.houseNo : this.customerCompany.houseNo;\r\n if (this.customerCompany.houseNoAdd)\r\n result += this.customerCompany.houseNoAdd;\r\n if (this.customerCompany.city)\r\n result !== '' ? result += ' ' + this.customerCompany.city : this.customerCompany.city;\r\n\r\n return result;\r\n }\r\n\r\n confirm = (message: string): Observable => {\r\n return Observable.create(observer => {\r\n const dialogRef = this.dialogService.open({\r\n content: ConfirmComponent\r\n });\r\n\r\n const dialogContent: ConfirmComponent = dialogRef.content.instance;\r\n dialogContent.dialog = dialogRef;\r\n dialogContent.message = message;\r\n\r\n dialogRef.dialog.instance.action.subscribe((result: DialogAction) => {\r\n if (result.text === 'ok')\r\n observer.next(true);\r\n else if (result.text === 'cancel')\r\n observer.next(false);\r\n observer.complete();\r\n });\r\n });\r\n };\r\n\r\n chooseImage = (\r\n image: string,\r\n maxWidth: number,\r\n aspectRation: number,\r\n fileType: 'png' | 'jpeg'| 'bmp' | 'webp' | 'ico'\r\n ): Observable => {\r\n return Observable.create(observer => {\r\n const dialogRef = this.dialogService.open({\r\n content: ChooseImageComponent\r\n });\r\n\r\n const dialogContent: ChooseImageComponent = dialogRef.content.instance;\r\n dialogContent.dialog = dialogRef;\r\n dialogContent.aspectRatio = aspectRation;\r\n dialogContent.maxWidth = maxWidth;\r\n dialogContent.imageSource = image;\r\n dialogContent.fileType = fileType;\r\n\r\n dialogContent.chosenImage.subscribe((result: string) => {\r\n observer.next(result);\r\n observer.complete();\r\n });\r\n });\r\n };\r\n\r\n message(message: string) {\r\n const dialogRef = this.dialogService.open({\r\n content: MessageComponent\r\n });\r\n\r\n const dialogContent: MessageComponent = dialogRef.content.instance;\r\n dialogContent.dialog = dialogRef;\r\n dialogContent.message = message;\r\n\r\n dialogRef.result.subscribe();\r\n }\r\n\r\n showCoronaWarning() {\r\n const dialogRef = this.dialogService.open({\r\n content: CoronaComponent\r\n });\r\n\r\n const dialogContent: CoronaComponent = dialogRef.content.instance;\r\n dialogContent.dialog = dialogRef;\r\n dialogRef.result.subscribe();\r\n }\r\n\r\n messageWait(message: string): Observable {\r\n return Observable.create(observer => {\r\n const dialogRef = this.dialogService.open({\r\n content: MessageComponent\r\n });\r\n\r\n const dialogContent: MessageComponent = dialogRef.content.instance;\r\n dialogContent.dialog = dialogRef;\r\n dialogContent.message = message;\r\n\r\n dialogRef.dialog.instance.action.subscribe((result: DialogAction) => {\r\n if (result.text === 'ok')\r\n observer.next(true);\r\n else if (result.text === 'cancel')\r\n observer.next(false);\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n setLoaderConfig(color: string, textColor: string) {\r\n this.loaderConfig.pbColor = color;\r\n this.loaderConfig.overlayColor = color;\r\n this.loaderConfig.textColor = textColor;\r\n this.loaderConfig.fgsColor = textColor;\r\n }\r\n\r\n getLoaderConfig() {\r\n return this.loaderConfig;\r\n }\r\n\r\n hideAllLoaders() {\r\n this.loaderIds.forEach(id => {\r\n this.hideLoader(id);\r\n });\r\n }\r\n\r\n showLoader(id: string, waitTime: number = 300) {\r\n if (!this.loaderIds.some(x => x === id))\r\n this.loaderIds.push(id);\r\n\r\n setTimeout(() => {\r\n if (this.loaderIds.some(x => x === id))\r\n this.loaderService.startLoader(id);\r\n }, waitTime);\r\n }\r\n\r\n hideLoader(id: string) {\r\n if (this.loaderIds.some(x => x === id))\r\n this.loaderIds.splice(this.loaderIds.indexOf(id), 1);\r\n this.loaderService.stopLoader(id);\r\n }\r\n\r\n generateLoaderId() {\r\n return `loader-${new Date().getMilliseconds()}`;\r\n }\r\n\r\n round(number, precision) {\r\n let factor = Math.pow(10, precision);\r\n let tempNumber = number * factor;\r\n let roundedTempNumber = Math.round(tempNumber);\r\n return roundedTempNumber / factor;\r\n }\r\n\r\n formatDate(date: Date, format: string = 'dd-MM-yyyy') {\r\n if (date) {\r\n return this.datepipe.transform(date, format);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n getCurrentDate() {\r\n return new Date(Date.now());\r\n }\r\n\r\n getCurrentDateOnly() {\r\n return new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());\r\n }\r\n\r\n getFirstDayOfMonth(d: Date): Date {\r\n let date = firstDayOfMonth(d);\r\n date.setTime(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\r\n return new Date(date);\r\n }\r\n\r\n getLastDayOfMonth(d: Date): Date {\r\n let date = lastDayOfMonth(d);\r\n date.setTime(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\r\n return new Date(date);\r\n }\r\n\r\n addDaysToDate(d: Date, days: number): Date {\r\n return addDays(d, days);\r\n }\r\n\r\n numberToTimeString(time: number): string {\r\n if (time === 0)\r\n return '0:00';\r\n\r\n let hours = Math.floor(time);\r\n let minutes = (time - hours) * 60;\r\n let H = Math.floor(hours).toString();\r\n let M = this.round(minutes, 0).toString();\r\n if (M.length === 1)\r\n M = `0${M}`;\r\n\r\n return `${H}:${M}`;\r\n }\r\n\r\n removeColorAlpha(color: string) {\r\n if (color && color.length >= 9) {\r\n return '#' + color.substr(3, 6);\r\n } else return color;\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport {DialogRef} from '@progress/kendo-angular-dialog';\r\nimport {CropperPosition, ImageCroppedEvent} from 'ngx-image-cropper';\r\nimport {DialogWrapperConfig} from \"../../components/dialog-wrapper\";\r\n\r\n@Component({\r\n selector: 'choose-image',\r\n templateUrl: './choose-image.component.html',\r\n styleUrls: ['./choose-image.component.scss']\r\n})\r\nexport class ChooseImageComponent {\r\n @Input() dialog: DialogRef;\r\n @Input() imageSource: string;\r\n @Input() maxWidth: number;\r\n @Input() aspectRatio: number = 1;\r\n @Input() fileType: 'png' | 'jpeg' | 'bmp' | 'webp' | 'ico';\r\n @Output() chosenImage = new EventEmitter();\r\n croppedImage: string = '';\r\n cropperPos: CropperPosition = {\r\n x1: -100,\r\n y1: -100,\r\n x2: 1000,\r\n y2: 1000\r\n };\r\n\r\n wrapperConfig: DialogWrapperConfig = {\r\n title: [\r\n {\r\n text: 'PSHB_TITLES.CROPIMAGE',\r\n isLastStep: true\r\n }\r\n ],\r\n buttonDefinition: [\r\n {\r\n description: 'BUTTON.SAVE',\r\n isSmall: false,\r\n clickEventType: 'save'\r\n },\r\n {\r\n description: 'BUTTON.CANCEL',\r\n isSmall: false,\r\n clickEventType: 'cancel'\r\n }\r\n ]\r\n };\r\n\r\n constructor(private elementRef: ElementRef) {\r\n }\r\n\r\n phbBtnClicked(event) {\r\n if (event == 'save') {\r\n this.chosenImage.emit(\r\n this.croppedImage.replace(`data:image/${this.fileType};base64,`, '')\r\n );\r\n this.closeWindow(true);\r\n } else {\r\n this.chosenImage.emit(null);\r\n this.closeWindow(false);\r\n }\r\n }\r\n\r\n shouldMaintainAspectRation() {\r\n return this.aspectRatio != 1;\r\n }\r\n\r\n imageCropped(image: ImageCroppedEvent) {\r\n this.croppedImage = image.base64;\r\n }\r\n\r\n closeWindow(result: boolean) {\r\n if (this.dialog) {\r\n this.dialog.dialog.instance.action.emit({text: result ? 'ok' : 'cancel'});\r\n this.dialog.close();\r\n }\r\n }\r\n\r\n imageLoaded() {\r\n setTimeout(() => {\r\n this.setCropper();\r\n }, 150);\r\n }\r\n\r\n setCropper() {\r\n if (this.aspectRatio === 1) {\r\n const el = this.elementRef.nativeElement.querySelector('.source-image');\r\n let imageWidth = el.offsetWidth;\r\n let imageHeight = el.offsetHeight;\r\n this.cropperPos = {\r\n x1: 0,\r\n y1: 0,\r\n x2: imageWidth,\r\n y2: imageHeight\r\n };\r\n }\r\n }\r\n}\r\n","\r\n
\r\n \r\n \r\n
\r\n
\r\n","import {Component, Input} from '@angular/core';\r\nimport {DialogRef} from '@progress/kendo-angular-dialog';\r\nimport {DialogWrapperConfig} from \"../../components/dialog-wrapper\";\r\n\r\n@Component({\r\n selector: 'confirm',\r\n templateUrl: './confirm.component.html',\r\n styleUrls: ['./confirm.component.scss']\r\n})\r\nexport class ConfirmComponent {\r\n @Input() dialog: DialogRef;\r\n @Input() message: string;\r\n wrapperConfig: DialogWrapperConfig = {\r\n title: [\r\n {\r\n text: 'PSHB_TITLES.WARNING',\r\n isLastStep: true\r\n }\r\n ],\r\n buttonDefinition: [\r\n {\r\n description: 'BUTTON.YES',\r\n isSmall: false,\r\n clickEventType: 'yes'\r\n },\r\n {\r\n description: 'BUTTON.NO',\r\n isSmall: false,\r\n clickEventType: 'no'\r\n }\r\n ]\r\n };\r\n\r\n phbBtnClicked(event) {\r\n if (event == 'yes') this.closeWindow(true);\r\n else this.closeWindow(false);\r\n }\r\n\r\n closeWindow(result: boolean) {\r\n if (this.dialog) {\r\n this.dialog.dialog.instance.action.emit({text: result ? 'ok' : 'cancel'});\r\n this.dialog.close();\r\n }\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
","import { MenuItem } from '@app/shared/components/menu/services/menu.service';\r\n\r\nexport let initialMenuItems: Array = [\r\n {\r\n text: 'MENU.NEWAPPOINTMENT',\r\n image: '../../assets/images/iconAddAppointment.png',\r\n route: 'auth/new-appointment',\r\n submenu: []\r\n },\r\n {\r\n text: 'MENU.APPOINTMENTS',\r\n image: '../../assets/images/iconScheduler.png',\r\n route: 'auth/appointments',\r\n submenu: []\r\n },\r\n {\r\n text: 'MENU.PHOTOS',\r\n image: '../../assets/images/iconCamera.png',\r\n route: 'auth/customer-images',\r\n submenu: []\r\n },\r\n {\r\n text: 'MENU.COMPANYINFO',\r\n libersyText: 'MENU.COMPANYINFOGENERAL',\r\n image: '../../assets/images/iconMap.png',\r\n route: 'auth/company-info',\r\n submenu: []\r\n },\r\n {\r\n text: 'MENU.CUSTOMERINFO',\r\n image: '../../assets/images/iconCustomer.png',\r\n route: 'auth/customer-details',\r\n submenu: []\r\n },\r\n {\r\n text: 'MENU.EDITPASSWORD',\r\n image: '../../assets/images/iconSecurity.png',\r\n route: 'auth/edit-password',\r\n submenu: []\r\n },\r\n {\r\n text: 'MENU.GENERALCONDITIONS',\r\n image: '../../assets/images/iconPolicy.png',\r\n route: 'auth/company-policy',\r\n submenu: [],\r\n needCompanyPolicy: true\r\n }\r\n];","import {Component, Inject, OnDestroy, OnInit} from '@angular/core';\nimport {Location, DOCUMENT} from '@angular/common';\nimport { FrameworkConfigService, FrameworkConfigSettings } from '@app/shared/services/framework-config.service';\nimport { MenuService } from '@app/shared/components/menu/services/menu.service';\nimport { initialMenuItems } from './app.menu';\nimport {SharedService} from \"@app/shared/services/shared.service\";\nimport {UserService} from \"@app/shared/services/user.service\";\nimport {ActivatedRoute, Params, Router, NavigationEnd, ParamMap, convertToParamMap} from \"@angular/router\";\nimport {CustomerCompany} from \"@app/shared\";\nimport {DeviceDetectorService} from \"ngx-device-detector\";\nimport {environment} from \"@app/environments/environment\";\nimport {Subscription} from \"rxjs\";\nimport { filter } from 'rxjs/operators';\nimport {GoogleTagManagerService} from \"@app/shared/services/google-tag-manager.service\";\nimport {Guid} from \"guid-typescript\";\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit, OnDestroy {\n appointmentkind: number;\n employee: number;\n bookingOrderId: Guid;\n private sub: Subscription;\n\n constructor(private frameworkConfigService: FrameworkConfigService,\n private menuService: MenuService,\n private ss: SharedService,\n private us: UserService,\n private router: Router,\n private route: ActivatedRoute,\n private location: Location,\n private gtms: GoogleTagManagerService,\n private deviceService: DeviceDetectorService,\n @Inject(DOCUMENT) private document: any) {\n try {\n router.events.pipe(filter(e => e instanceof NavigationEnd)).subscribe((e: NavigationEnd) => {\n this.gtms.pushTag({\n event: 'virtualPageView',\n virtualUrl: e.url\n });\n });\n } catch (e) {\n console.log(e);\n }\n\n\n let config: FrameworkConfigSettings = {\n showLanguageSelector: true,\n showUserControls: true,\n showStatusBar: true,\n isLibersyMode: window.location.hostname.includes(environment.libersyThemeUrl),\n showStatusBarBreakpoint: 800\n };\n\n frameworkConfigService.configure(config);\n\n this.ss.setLanguage();\n\n menuService.items = initialMenuItems;\n\n if (window.location.hostname.includes(environment.libersyThemeUrl)) {\n this.document.body.style.setProperty('--main-color', '#cc0000');\n this.document.body.style.setProperty('--main-color2', '#cc0000');\n this.document.body.style.setProperty('--main-color3', '#cc000015');\n this.document.body.style.setProperty('--main-text-color', '#ffffff');\n this.document.body.style.setProperty('--main-text-color2', '#ffffff');\n this.ss.setLoaderConfig('#cc0000', '#ffffff');\n } else {\n this.document.body.style.setProperty('--main-color', '#8600b5');\n this.document.body.style.setProperty('--main-color2', '#8260b5');\n this.document.body.style.setProperty('--main-color3', '#8600b515');\n this.document.body.style.setProperty('--main-text-color', '#ffffff');\n this.document.body.style.setProperty('--main-text-color2', '#ffffff');\n this.ss.setLoaderConfig('#8600b5', '#ffffff');\n }\n\n this.document.body.style.setProperty('--app-height', `${window.innerHeight}px`);\n this.ss.referrerUrl = this.document.referrer;\n }\n\n ngOnInit() {\n console.log(`version: ${environment.version}`);\n\n this.getQueryParams();\n this.ss.companyUsername = this.getUsernameFromUrl();\n\n if (this.ss.companyUsername) {\n this.us.checkCompany(this.ss.companyUsername).subscribe((companyDetails: CustomerCompany) => {\n if (companyDetails.databaseUserId) {\n this.ss.setCustomerCompany(companyDetails);\n this.gtms.setTrackingId(companyDetails.adwordsId);\n } else {\n this.ss.navigate('/companynotfound', null);\n }\n });\n } else {\n this.ss.navigate('/companynotfound', null);\n }\n }\n\n ngOnDestroy() {\n this.sub.unsubscribe();\n }\n\n getQueryParams() {\n if (window.location.search.length > 0) {\n const params = window.location.search\n .substr(1)\n .split('&')\n .map(pairString => pairString.split('='))\n .reduce((out, pair) => {\n out[pair[0]] = pair[1];\n return out;\n }, {} as Params);\n\n const paramMap = convertToParamMap(params);\n if (paramMap.has('appointmentkind')) {\n this.ss.deepLinkAppintmentKindIndex = parseInt(paramMap.get('appointmentkind'));\n }\n if (paramMap.has('employee')) {\n this.ss.deepLinkEmployeeIndex = parseInt(paramMap.get('employee'));\n }\n if (paramMap.has('booking')) {\n this.ss.deepLinkBookingOrderId = Guid.parse(paramMap.get('booking'));\n }\n }\n }\n\n private getUsernameFromUrl(): string {\n let companyUsername = '';\n\n try {\n this.ss.bookingDomain = window.location.hostname;\n\n if (window.location.hostname === 'localhost') {\n this.ss.bookingDomain = 'localhost:3001';\n return 'bsmart';\n } else if (window.location.host.indexOf('.') >= 0)\n companyUsername = window.location.hostname.split('.')[0];\n else\n this.us.signOut();\n\n if (companyUsername === 'toinetest')\n companyUsername = 'toine';\n\n return companyUsername;\n }\n catch (e) {\n return companyUsername;\n }\n\n }\n}\n","\r\n\r\n\r\n\r\n
","import {Component} from '@angular/core';\n\n@Component({\n selector: 'app-authenticated-user',\n templateUrl: './authenticated-user.component.html',\n styleUrls: ['./authenticated-user.component.css']\n})\nexport class AuthenticatedUserComponent {\n\n constructor() {}\n}\n","\n\n","import {Component, OnInit} from '@angular/core';\nimport {BreadcrumService, BreadcrumStep, SharedService} from '@app/shared';\nimport {MenuService} from \"@app/shared/components\";\n\n@Component({\n selector: 'ngx-home',\n templateUrl: './home.component.html',\n styleUrls: ['./home.component.scss']\n})\nexport class HomeComponent implements OnInit {\n\n constructor(private menuService: MenuService,\n private breadcrumService: BreadcrumService,\n private ss: SharedService) {\n }\n\n ngOnInit() {\n let steps: Array = [\n {text: 'BREADCRUM.MAINMENU', isLastStep: true}];\n this.breadcrumService.setCurrentLocation(steps, false, null);\n this.menuService.setActiveMenuItem(null);\n }\n\n ngOnDestroy() {\n }\n}\n","\r\n\r\n\r\n\r\n\r\n","
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n
\r\n {{'MSG.COMPANYNOTFOUND' | translate}}\r\n
\r\n\r\n
\r\n {{'STATUSBAR.POWEREDBY' | translate}}: {{platformName | translate}}\r\n
\r\n
\r\n","import {AfterViewInit, Component, OnInit} from '@angular/core';\r\nimport {BreadcrumService, BreadcrumStep, FrameworkConfigService, SharedService} from \"@app/shared\";\r\n\r\n@Component({\r\n selector: 'ngx-company-not-found',\r\n templateUrl: './company-not-found.component.html',\r\n styleUrls: ['./company-not-found.component.scss']\r\n})\r\nexport class CompanyNotFoundComponent implements OnInit {\r\n platformName: string = FrameworkConfigService.getPlatformName();\r\n languageItems: Array<{ id: string, description: string, icon: string }> = SharedService.Languages();\r\n currentLanguage: string = SharedService.getCurrentLanguage();\r\n\r\n constructor(private breadcrumService: BreadcrumService,\r\n private ss: SharedService) {\r\n }\r\n\r\n languageChosen(id: string) {\r\n this.ss.updateLanguage(id);\r\n }\r\n\r\n ngOnInit() {\r\n let steps: Array = [\r\n {text: 'BREADCRUM.MAINMENU', isLastStep: false},\r\n {text: 'BREADCRUM.COMPANYNOTFOUND', isLastStep: true}];\r\n setTimeout(() => {\r\n this.breadcrumService.setCurrentLocation(steps, false, null);\r\n });\r\n\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n
\r\n {{'MSG.COMPANYNOTACTIVE' | translate}}\r\n
\r\n\r\n
\r\n {{'STATUSBAR.POWEREDBY' | translate}}: {{platformName | translate}}\r\n
\r\n
\r\n","import {AfterViewInit, Component, OnInit} from '@angular/core';\r\nimport {BreadcrumService, BreadcrumStep, FrameworkConfigService, SharedService} from \"@app/shared\";\r\n\r\n@Component({\r\n selector: 'ngx-company-not-active',\r\n templateUrl: './company-not-active.component.html',\r\n styleUrls: ['./company-not-active.component.scss']\r\n})\r\nexport class CompanyNotActiveComponent implements OnInit {\r\n platformName: string = FrameworkConfigService.getPlatformName();\r\n languageItems: Array<{ id: string, description: string, icon: string }> = SharedService.Languages();\r\n currentLanguage: string = SharedService.getCurrentLanguage();\r\n\r\n constructor(private breadcrumService: BreadcrumService,\r\n private ss: SharedService) {\r\n }\r\n\r\n languageChosen(id: string) {\r\n this.ss.updateLanguage(id);\r\n }\r\n\r\n ngOnInit() {\r\n let steps: Array = [\r\n {text: 'BREADCRUM.MAINMENU', isLastStep: false},\r\n {text: 'BREADCRUM.COMPANYNOTACTIVE', isLastStep: true}];\r\n setTimeout(() => {\r\n this.breadcrumService.setCurrentLocation(steps, false, null);\r\n });\r\n\r\n this.ss.setLegacyCssVars();\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n \r\n\r\n
\r\n {{'MORE_INFO.LINE1' | translate}}
\r\n {{'MORE_INFO.LINE2' | translate}}\r\n
    \r\n
  • {{'MORE_INFO.LINE3' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE4' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE5' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE6' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE7' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE8' | translate}}
  • \r\n
  • \r\n {{'MORE_INFO.LINE9' | translate}}\r\n
  • \r\n
  • \r\n {{'MORE_INFO.LINE9_2' | translate}}\r\n
  • \r\n
\r\n
\r\n {{'MORE_INFO.LINE10' | translate}}
\r\n {{'MORE_INFO.LINE11' | translate}}\r\n
    \r\n
  • {{'MORE_INFO.LINE12' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE13' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE14' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE15' | translate}}
  • \r\n
  • \r\n {{'MORE_INFO.LINE16' | translate}}\r\n
  • \r\n
  • \r\n {{'MORE_INFO.LINE16_2' | translate}}\r\n
  • \r\n
\r\n
    \r\n
  • {{'MORE_INFO.LINE17' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE18' | translate}}
  • \r\n
  • {{'MORE_INFO.LINE19' | translate}}
  • \r\n
\r\n
\r\n\r\n
\r\n {{'STATUSBAR.POWEREDBY' | translate}}: {{platformName | translate}}\r\n
\r\n
\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {BreadcrumService, BreadcrumStep, FrameworkConfigService, SharedService} from \"@app/shared\";\r\nimport {PageHeaderBarConfig} from \"@app/shared/components\";\r\n\r\n@Component({\r\n selector: 'ngx-more-info',\r\n templateUrl: './more-info.component.html',\r\n styleUrls: ['./more-info.component.scss']\r\n})\r\nexport class MoreInfoComponent implements OnInit {\r\n companyLogo: string = this.ss.getCompanyLogo();\r\n platformName: string = FrameworkConfigService.getPlatformName();\r\n allowNewCustomers: boolean = this.ss.getAllowOnlineNewCustomer();\r\n allowCancel: number = this.ss.customerCompany.appointmentCancelByCustomer;\r\n canBookToday: boolean = this.ss.customerCompany.onlinePlannerToday;\r\n phbConfig: PageHeaderBarConfig = {\r\n title: '',\r\n buttonDefinition: [\r\n {\r\n description: 'BUTTON.BACK',\r\n isSmall: false,\r\n clickEventType: 'back'\r\n }\r\n ]\r\n };\r\n languageItems: Array<{ id: string, description: string, icon: string }> = SharedService.Languages();\r\n currentLanguage: string = SharedService.getCurrentLanguage();\r\n\r\n constructor(private breadcrumService: BreadcrumService,\r\n private ss: SharedService) {\r\n }\r\n\r\n languageChosen(id: string) {\r\n this.ss.updateLanguage(id);\r\n }\r\n\r\n ngOnInit() {\r\n let steps: Array = [\r\n {text: 'BREADCRUM.MAINMENU', isLastStep: false},\r\n {text: 'BREADCRUM.MOREINFO', isLastStep: true}];\r\n setTimeout(() => {\r\n this.breadcrumService.setCurrentLocation(steps, false, null);\r\n });\r\n this.ss.setLegacyCssVars();\r\n }\r\n\r\n phbBtnClicked(event) {\r\n if (event === 'back') {\r\n this.ss.navigate('login', null);\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {AzureApiService, DtoSaveResult} from '@app/shared';\r\nimport {Observable} from 'rxjs';\r\nimport {DtoPasswordResetRequest} from \"@app/home/models/DtoPasswordResetRequest\";\r\n\r\n@Injectable()\r\nexport class HomeService {\r\n\r\n constructor(private http: AzureApiService) {\r\n }\r\n\r\n resetPassword(dtoObject: DtoPasswordResetRequest): Observable {\r\n return this.http.post(`login/portal/resetpassword`, dtoObject);\r\n }\r\n\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n \r\n
\r\n \r\n {{ dataItem?.description }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n \r\n\r\n
\r\n \r\n {{resultMessage}}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n {{'STATUSBAR.POWEREDBY' | translate}}: {{platformName | translate}}\r\n
\r\n
\r\n","import {Routes} from '@angular/router';\r\nimport {AuthenticatedUserComponent} from './authenticated-user/authenticated-user.component';\r\nimport {HomeComponent} from './home/home.component';\r\nimport {CompanyNotFoundComponent} from \"./home/company-not-found.component\";\r\nimport {CompanyNotActiveComponent} from \"./home/company-not-active.component\";\r\nimport {MoreInfoComponent} from \"./home/more-info.component\";\r\nimport {PasswordLookupComponent} from \"./home/password-lookup.component\";\r\nimport {SignInComponent} from \"@app/shared/components\";\r\nimport {AuthGuard} from \"@app/shared\";\r\n\r\nexport const appRoutes: Routes = [\r\n {path: 'login', component: SignInComponent},\r\n {path: 'companynotfound', component: CompanyNotFoundComponent},\r\n {path: 'companynotactive', component: CompanyNotActiveComponent},\r\n {path: 'moreinfo', component: MoreInfoComponent},\r\n {path: 'passwordlookup', component: PasswordLookupComponent},\r\n {path: 'new-customer', loadChildren: () => import('./new-customer/new-customer.module').then(m => m.NewCustomerModule)},\r\n {path: 'new-appointment-passerby', loadChildren: () => import('./new-appointment-passerby/new-appointment-passerby.module').then(m => m.NewAppointmentPasserbyModule)},\r\n {\r\n path: 'auth', component: AuthenticatedUserComponent, canActivate: [AuthGuard],\r\n children: [\r\n {\r\n path: '', canActivateChild: [AuthGuard],\r\n children: [\r\n {path: '', redirectTo: 'home', pathMatch: 'full'},\r\n {path: 'home', component: HomeComponent},\r\n {path: 'appointments', loadChildren: () => import('./appointments/appointments.module').then(m => m.AppointmentsModule)},\r\n {path: 'new-appointment', loadChildren: () => import('./new-appointment/new-appointment.module').then(m => m.NewAppointmentModule)},\r\n {path: 'edit-password', loadChildren: () => import('./edit-password/edit-password.module').then(m => m.EditPasswordModule)},\r\n {path: 'company-info', loadChildren: () => import('./company-info/company-info.module').then(m => m.CompanyInfoModule)},\r\n {path: 'customer-images', loadChildren: () => import('./customer-images/customer-images.module').then(m => m.CustomerImagesModule)},\r\n {path: 'customer-details', loadChildren: () => import('./customer-details/customer-details.module').then(m => m.CustomerDetailsModule)},\r\n {path: 'company-policy', loadChildren: () => import('./company-policy/company-policy.module').then(m => m.CompanyPolicyModule)},\r\n {path: 'payment-callback', loadChildren: () => import('./payment-callback/payment-callback.module').then(m => m.PaymentCallbackModule)}\r\n ]\r\n }\r\n ]\r\n },\r\n {path: '', component: SignInComponent},\r\n {path: '**', component: SignInComponent}\r\n];\r\n","import {AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild} from '@angular/core';\r\nimport {BreadcrumService, BreadcrumStep, DtoSaveResult, FrameworkConfigService, SharedService, SharedValidators} from \"@app/shared\";\r\nimport {PageHeaderBarConfig, ValidationMessageComponent} from \"@app/shared/components\";\r\nimport {FormBuilder} from \"@angular/forms\";\r\nimport {HomeService} from \"@app/home/home.service\";\r\nimport {TranslateService} from \"@ngx-translate/core\";\r\nimport {take} from \"rxjs/operators\";\r\n\r\n@Component({\r\n selector: 'ngx-password-lookup',\r\n templateUrl: './password-lookup.component.html',\r\n styleUrls: ['./password-lookup.component.scss']\r\n})\r\nexport class PasswordLookupComponent implements OnInit {\r\n @ViewChild('validationMessage') validationMessage: ValidationMessageComponent;\r\n companyLogo: string = this.ss.getCompanyLogo();\r\n platformName: string = FrameworkConfigService.getPlatformName();\r\n phbConfig: PageHeaderBarConfig = {\r\n title: '',\r\n buttonDefinition: [\r\n {\r\n description: 'BUTTON.BACK',\r\n isSmall: false,\r\n clickEventType: 'back'\r\n }\r\n ]\r\n };\r\n form = this.fb.group({\r\n email: ['', [SharedValidators.customRequired]]\r\n });\r\n send: boolean;\r\n resultMessage: string;\r\n languageItems: Array<{ id: string, description: string, icon: string }> = SharedService.Languages();\r\n currentLanguage: string = SharedService.getCurrentLanguage();\r\n\r\n constructor(private breadcrumService: BreadcrumService,\r\n private fb: FormBuilder,\r\n private ss: SharedService,\r\n private ts: TranslateService,\r\n private cd: ChangeDetectorRef,\r\n private ds: HomeService) {\r\n }\r\n\r\n languageChosen(id: string) {\r\n this.ss.updateLanguage(id);\r\n }\r\n\r\n ngOnInit() {\r\n let steps: Array = [\r\n {text: 'BREADCRUM.MAINMENU', isLastStep: false},\r\n {text: 'BREADCRUM.LOSTPASSWORD', isLastStep: true}];\r\n setTimeout(() => {\r\n this.breadcrumService.setCurrentLocation(steps, false, null);\r\n });\r\n\r\n this.ss.setLegacyCssVars();\r\n\r\n this.form.valueChanges.subscribe(() =>\r\n this.validationMessage.getFormValidationErrors()\r\n );\r\n }\r\n\r\n phbBtnClicked(event) {\r\n if (event === 'back') {\r\n this.ss.navigate('login', null);\r\n }\r\n }\r\n\r\n resetPassword() {\r\n this.validationMessage.validateForm();\r\n\r\n if (this.form.valid) {\r\n this.send = true;\r\n this.ds.resetPassword({\r\n email: this.form.get('email').value,\r\n databaseName: this.ss.customerCompany.databaseName,\r\n databaseServer: this.ss.customerCompany.databaseServer,\r\n databaseUserId: this.ss.customerCompany.databaseUserId\r\n }).subscribe((res: DtoSaveResult) => {\r\n if (res.hasError) {\r\n this.form.reset();\r\n this.send = false;\r\n this.ss.message(res.errorMessage);\r\n } else {\r\n this.resultMessage = this.ts.instant('MSG.NEWPASSWORDSEND');\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import {CurrencyPipe, DatePipe, registerLocaleData} from '@angular/common';\r\nimport {ErrorHandler, NgModule} from '@angular/core';\r\nimport {BrowserModule} from '@angular/platform-browser';\r\nimport {BrowserAnimationsModule} from '@angular/platform-browser/animations';\r\nimport {RouterModule} from '@angular/router';\r\nimport {AppComponent} from './app.component';\r\nimport {appRoutes} from './app.routing';\r\n\r\nimport {AuthenticatedUserComponent} from './authenticated-user/authenticated-user.component';\r\nimport {HomeComponent} from './home/home.component';\r\nimport {SharedModule} from './shared';\r\nimport {PasswordLookupComponent} from \"@app/home/password-lookup.component\";\r\nimport {MoreInfoComponent} from \"@app/home/more-info.component\";\r\nimport {CompanyNotFoundComponent} from \"@app/home/company-not-found.component\";\r\nimport {CompanyNotActiveComponent} from \"@app/home/company-not-active.component\";\r\nimport {HomeService} from \"@app/home/home.service\";\r\nimport {GlobalErrorHandler} from \"@app/shared/helpers/GlobalErrorHandler\";\r\nimport {TranslateLoader, TranslateModule} from \"@ngx-translate/core\";\r\nimport {HttpClient, HttpClientModule} from \"@angular/common/http\";\r\nimport {TranslateHttpLoader} from \"@ngx-translate/http-loader\";\r\nimport {FontAwesomeModule} from \"@fortawesome/angular-fontawesome\";\r\nimport {environment} from \"@app/environments/environment\";\r\nimport {JWT_OPTIONS, JwtModule} from \"@auth0/angular-jwt\";\r\n\r\nimport localeDe from '@angular/common/locales/de';\r\nimport localeEn from '@angular/common/locales/en';\r\nimport localeFr from '@angular/common/locales/fr';\r\nimport localeNl from '@angular/common/locales/nl';\r\n\r\nregisterLocaleData(localeDe, 'de');\r\nregisterLocaleData(localeEn, 'en');\r\nregisterLocaleData(localeFr, 'fr');\r\nregisterLocaleData(localeNl, 'nl');\r\n\r\n// AoT requires an exported function for factories\r\nexport function translateHttpLoaderFactory(httpClient: HttpClient): TranslateHttpLoader {\r\n if (environment.production)\r\n return new TranslateHttpLoader(httpClient, \"/assets/i18n/\", `.json?v=${environment.version}`);\r\n else\r\n return new TranslateHttpLoader(httpClient, \"/assets/i18n/\", `.json?v=${Math.round((new Date()).getTime() / 1000)}`);\r\n}\r\nexport function jwtOptionsFactory() {\r\n return {\r\n tokenGetter: () => sessionStorage.getItem('accessToken'),\r\n whitelistedDomains: [environment.api]\r\n };\r\n}\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n HomeComponent,\r\n PasswordLookupComponent,\r\n MoreInfoComponent,\r\n CompanyNotFoundComponent,\r\n CompanyNotActiveComponent,\r\n AuthenticatedUserComponent\r\n ],\r\n imports: [\r\n SharedModule.forRoot(),\r\n BrowserModule,\r\n BrowserAnimationsModule,\r\n RouterModule.forRoot(appRoutes, { relativeLinkResolution: 'legacy' }),\r\n FontAwesomeModule,\r\n HttpClientModule,\r\n TranslateModule.forRoot({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: (translateHttpLoaderFactory),\r\n deps: [HttpClient]\r\n }\r\n }),\r\n JwtModule.forRoot({\r\n jwtOptionsProvider: {\r\n provide: JWT_OPTIONS,\r\n useFactory: jwtOptionsFactory,\r\n deps: []\r\n }\r\n }),\r\n ],\r\n providers: [\r\n DatePipe,\r\n CurrencyPipe,\r\n HomeService,\r\n {\r\n provide: ErrorHandler,\r\n useClass: GlobalErrorHandler\r\n }],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from '@app/app.module';\r\nimport { environment } from './environments/environment';\r\nimport * as Sentry from \"@sentry/angular\";\r\nimport {Dedupe as DedupeIntegration} from \"@sentry/integrations/dist/dedupe\";\r\n\r\nSentry.init({\r\n dsn: 'https://acd12bf965e6414391f2091ed56f6cc7@o350009.ingest.sentry.io/5781869',\r\n integrations: [new DedupeIntegration(),\r\n new Sentry.Integrations.TryCatch({\r\n XMLHttpRequest: false\r\n })],\r\n release: `mijnsalon-customer-portal@${environment.version}`,\r\n environment: environment.name\r\n});\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic()\r\n .bootstrapModule(\r\n AppModule,\r\n {\r\n ngZoneEventCoalescing: true\r\n })\r\n .catch(err => console.error(err));\r\n","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(function() {\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 = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"]}