{"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/menu/components/menu-item/menu-item.component.ts","webpack:///src/app/shared/components/content/content.component.html","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/form.service.ts","webpack:///src/app/shared/services/clipboard.service.ts","webpack:///src/app/shared/services/breadcrum.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/helpers/GlobalErrorHandler.ts","webpack:///src/app/shared/models/MsError.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.component.ts","webpack:///src/app/authenticated-user/authenticated-user.component.ts","webpack:///src/app/home/home.component.ts","webpack:///src/app/app.menu.ts","webpack:///src/app/app.component.html","webpack:///src/app/authenticated-user/authenticated-user.component.html","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/home.service.ts","webpack:///src/app/home/more-info.component.ts","webpack:///src/app/home/password-lookup.component.html","webpack:///src/app/home/password-lookup.component.ts","webpack:///src/app/app.routing.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","getTranslation","loadingText","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","LocalCurrencyPipe","value","field","line","instant","currencyCode","digitInfo","getCurrentLocale","AzureApiService","http","BASE_URL","api","GetReportServiceUrl","url","get","encodeURIComponent","body","post","put","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","HttpRequestInterceptorModule","HttpRequestInterceptor","HttpDateInterceptorModule","HttpDateInterceptor","req","next","token","getItem","method","removeTimezone","newReq","clone","headers","handle","Object","keys","Date","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","provide","useClass","multi","iso8601","request","map","convertToDate","error","isIso8601","addTimeZone","date","setTime","getTime","getTimezoneOffset","LocaleProvider","LOCALE_ID","service","super","currentLang","String","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","i","reset","hasOwnProperty","_self","patchFormToDto","assign","getRawValue","disableForm","controls","disable","DialogWrapperConfig","hideSubHeader","SubmenuItemComponent","subitem","CoronaComponent","verified","BreadcrumComponent","dds","faPlay","currentLocationSubscription","currentLocationChanged","setTimeout","currentNavigationLocation","currentLocation","constructor","original","ngOnDestroy","prop","property","apply","arguments","MenuService","MenuComponent","needCompanyPolicy","getCustomerCompany","onlineBookingTerms","ScreenService","AuthGuard","FormService","ClipboardService","BreadcrumService","SharedMaskService","SignalrService","document","largeBreakpoint","screenWidth","screenHeight","resizeSource","Subject","resize$","asObservable","innerWidth","innerHeight","resizeObservable$","fromEvent","resizeSubscription$","evt","onResize","e","style","setProperty","canActivate","backButtonVisible","backButtonLocation","backButtonParams","showLanguageBox","dom","Promise","resolve","reject","textarea","createElement","height","left","opacity","position","top","width","appendChild","select","execCommand","parentNode","removeChild","form","conformedValue","split","s","charAt","toUpperCase","substring","join","indexesOfPipedChars","push","currentCaretPosition","rawValue","previousConformedValue","placeholderChar","indexOfAtDot","removeAllAtSymbolsButFirst","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","bookingPaymentReceived","dateMask","bookingOrderId","connection","withUrl","withAutomaticReconnect","build","registerOnEvents","start","then","invoke","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","GlobalErrorHandler","MsError","injector","extractedError","extractError","dialogService","ngZone","NgZone","sharedService","run","hideAllLoaders","msError","errorNumber","friendlyMessage","navigator","onLine","status","statusText","dialogRef","content","dialogContent","errorCandidate","ngOriginalError","Error","ErrorEvent","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","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","icon","ChooseImageComponent","elementRef","croppedImage","cropperPos","x1","y1","x2","y2","base64","setCropper","nativeElement","querySelector","offsetWidth","offsetHeight","imageCropped","imageLoaded","ConfirmComponent","AppComponent","AuthenticatedUserComponent","HomeComponent","initialMenuItems","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","CompanyNotFoundComponent","steps","languageChosen","CompanyNotActiveComponent","HomeService","MoreInfoComponent","allowCancel","appointmentCancelByCustomer","canBookToday","onlinePlannerToday","phbConfig","PasswordLookupComponent","appRoutes","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","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 \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 {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 { 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 {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 { 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","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","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 { 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 {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","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","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","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];","\r\n\r\n\r\n\r\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 {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","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","
\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 {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 {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 {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\";"]}