{ "version": 3, "sources": ["src/app/root-store/catalog-store/actions.ts", "src/app/core/settings.ts", "src/app/core/catalog.resolver.ts"], "sourcesContent": ["import { createAction, props } from '@ngrx/store';\r\nimport { CatalogState } from './state';\r\n\r\nexport const LoadCatalogSuccess = createAction(\r\n '[Catalog] Load Catalog Success',\r\n props<{ catalog: CatalogState }>()\r\n)\r\n\r\nexport const LoadCatalogError = createAction(\r\n '[Catalog] Load Catalog Error',\r\n props<{ error: any }>()\r\n)\r\n", "import { CatalogSettings } from '../root-store/catalog-store/state';\r\n\r\nexport enum CatalogSettingKey {\r\n}\r\nexport class SettingsReader {\r\n private settingsRaw: { [key: string]: string }\r\n\r\n constructor(settingsRaw: { [key: string]: string }) {\r\n this.settingsRaw = settingsRaw\r\n }\r\n\r\n public getSettings(): CatalogSettings {\r\n return {\r\n PersistItemsTreeSelection: this.asBoolean('persistItemsTreeSelection', false),\r\n PreselectedItemIds: this.asNumberArray('preselectedItemIds'),\r\n ShowConditions: this.asBoolean('showConditions', true),\r\n DefaultReservationDuration: this.asNumber('defaultReservationDuration', 3),\r\n Feature_ReservationUsedTimeSlots: this.asBoolean('feature_ReservationUsedTimeSlots', false),\r\n Feature_HideVAT: this.asBoolean('feature_HideVAT', false),\r\n Feature_OutlookExport: this.asBoolean('feature_OutlookExport', false),\r\n Feature_CustomerRoles: this.asBoolean('feature_CustomerRoles', false),\r\n Feature_NotificationOnOverlappingWithBlockInfo: this.asBoolean('feature_NotificationOnOverlappingWithBlockInfo', false),\r\n Feature_MailAttachments: this.asBoolean('feature_MailAttachments', false),\r\n Feature_GlutzDoors: this.asBoolean('feature_GlutzDoors', false),\r\n Feature_TimeExtension: this.asBoolean('feature_TimeExtension', false),\r\n Feature_PricesPeriodOfValidity: this.asBoolean('feature_PricesPeriodOfValidity', false),\r\n HeaderLogoWithoutPaddings: this.asBoolean('headerLogoWithoutPaddings'),\r\n EnableFreeAccessories: this.asBoolean('enableFreeAccessories', false),\r\n EnableItemRecommendations: this.asBoolean('enableItemRecommendations', false),\r\n GiftCards: {\r\n FeatureEnabled: this.asBoolean('feature_GiftCards', false),\r\n StandardPrices: this.asNumberArray('giftCardStandardPrices')\r\n },\r\n Payment: {\r\n InvoiceEnabled: this.asBoolean('invoiceEnabled', true),\r\n OnlinePaymentEnabled: this.asBoolean('onlinePaymentEnabled', false),\r\n OnlinePaymentMethods: this.asArray('onlinePaymentMethods'),\r\n PayCashEnabled: this.asBoolean('payCashEnabled', false),\r\n TransactionAbortedMessage: this.asString('paymentTransactionAbortedMessage'),\r\n },\r\n Checkout: {\r\n GreetingCompany: this.asBoolean('checkoutGreetingCompany', false),\r\n RequireGreeting: this.asBoolean('checkoutRequireGreeting', true),\r\n RequireCompany: this.asBoolean('checkoutRequireCompany', false),\r\n RequireFirstName: this.asBoolean('checkoutRequireFirstName', true),\r\n RequireLastName: this.asBoolean('checkoutRequireLastName', true),\r\n RequireStreet: this.asBoolean('checkoutRequireStreet', true),\r\n RequireZip: this.asBoolean('checkoutRequireZip', true),\r\n RequireCity: this.asBoolean('checkoutRequireCity', true),\r\n RequireEmail: this.asBoolean('checkoutRequireEmail', true),\r\n RequirePhone: this.asBoolean('checkoutRequirePhone', true),\r\n RequirePurpose: this.asBoolean('checkoutRequirePurpose', true),\r\n ShowPurpose: this.asBoolean('checkoutShowPurpose', true),\r\n PurposeMinLength: this.asNumber('checkoutPurposeMinLength', 10),\r\n EmailPromptForJanitor: this.asBoolean('emailPromptForJanitor', false)\r\n },\r\n Calendar: {\r\n DefaultView: this.asString('defaultCalendarView'),\r\n YearViewEnabled: this.asBoolean('yearViewEnabled', false),\r\n SlotDivisions: this.asNumber('calendarSlotDivisions', 1),\r\n SlotDuration: this.asNumber('calendarSlotDuration', 60),\r\n WorkDayStart: this.asString('calendarWorkDayStart', '08:00'),\r\n WorkDayEnd: this.asString('calendarWorkDayEnd', '18:00'),\r\n ShowWorkHours: this.asBoolean('calendarShowWorkHours', false),\r\n ShowAvailabilityOnSlots: this.asBoolean('calendarShowAvailabilityOnSlots', false),\r\n },\r\n IcalFeed: {\r\n FeatureEnabled: this.asBoolean('feature_IcalFeeds', false)\r\n },\r\n MobileInfoscreens: {\r\n Visible: this.asBoolean('mobileInfoscreensVisible', false),\r\n FeatureEnabled: this.asBoolean('feature_MobileInfoscreens', false)\r\n }\r\n } as CatalogSettings\r\n }\r\n\r\n private asString(settingName: string | CatalogSettingKey, defaultValue?: string): string | undefined {\r\n return this.settingsRaw[settingName] ?? defaultValue\r\n }\r\n\r\n private asBoolean(settingName: string, defaultValue?: boolean): boolean | undefined {\r\n const setting = this.settingsRaw[settingName]\r\n if (!setting)\r\n return defaultValue\r\n\r\n switch (setting.toLowerCase()) {\r\n case 'true':\r\n return true\r\n case 'false':\r\n return false\r\n default:\r\n return defaultValue\r\n }\r\n }\r\n\r\n private asNumber(settingName: string, defaultValue?: number) {\r\n const setting = this.settingsRaw[settingName]\r\n if (!setting)\r\n return defaultValue\r\n\r\n return +setting\r\n }\r\n\r\n private asArray(settingName: string, defaultValue?: any): string[] {\r\n const setting = this.settingsRaw[settingName]\r\n if (!setting)\r\n return defaultValue\r\n\r\n return setting.split(',')\r\n }\r\n\r\n private asNumberArray(settingName: string, defaultValue?: any) {\r\n return this.asArray(settingName, defaultValue)?.map(Number)\r\n }\r\n}\r\n", "import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Resolve } from '@angular/router';\r\nimport { Store } from '@ngrx/store';\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map, tap } from 'rxjs/operators';\r\nimport { BackendService } from '../core/backend.service';\r\nimport { LoadCatalogError, LoadCatalogSuccess } from '../root-store/catalog-store/actions';\r\nimport { selectCatalog } from '../root-store/catalog-store/selectors';\r\nimport { CatalogState } from '../root-store/catalog-store/state';\r\nimport { RootState } from '../root-store/root-state.model';\r\nimport { CatalogResponse } from './catalog.model';\r\nimport { SettingsReader } from './settings';\r\nimport { isGuid } from './utilities';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CatalogResolver implements Resolve {\r\n constructor(\r\n private store: Store,\r\n private backend: BackendService\r\n ) { }\r\n\r\n resolve(route: ActivatedRouteSnapshot) {\r\n // if a catalog is already loaded, don't load it again\r\n let existingCatalog = this.store.selectSignal(selectCatalog)()\r\n\r\n if (existingCatalog?.id)\r\n return of(existingCatalog)\r\n\r\n let catalog$: Observable\r\n if (route.params['catalog'])\r\n catalog$ = this.backend.getCatalog(route.params['catalog'])\r\n else if (route.params['OrderIdStatus'])\r\n catalog$ = this.backend.getCatalogByOrderId(route.params['OrderIdStatus'])\r\n else {\r\n const url0Path = route.url.length > 0 ? route.url[0].path : route.pathFromRoot[1].url[0].path\r\n catalog$ = isGuid(url0Path) ? this.backend.getCatalogByOrderId(url0Path) : this.backend.getCatalog(url0Path)\r\n }\r\n\r\n return catalog$.pipe(\r\n map(CatalogResolver.prepareCatalogModel),\r\n tap(catalog => {\r\n this.store.dispatch(LoadCatalogSuccess({ catalog }))\r\n }),\r\n catchError(error => {\r\n if (error instanceof HttpErrorResponse && error.status === 404) {\r\n if (!route.params['catalog'] && route.url[0].path)\r\n this.store.dispatch(LoadCatalogError({ error: 'OrderNotFound' }))\r\n else\r\n // redirect when the catalog is not found\r\n window.location.href = 'https://www.2reserve.ch'\r\n }\r\n else\r\n console.error('error loading catalog', error)\r\n\r\n return of(null)\r\n })\r\n )\r\n }\r\n\r\n static prepareCatalogModel(catalog: CatalogResponse): CatalogState {\r\n return {\r\n ...catalog,\r\n settings: new SettingsReader(catalog.settings).getSettings()\r\n }\r\n }\r\n}\r\n"], "mappings": "8UAGO,IAAMA,EAAqBC,EAChC,iCACAC,EAAK,CAA6B,EAGvBC,EAAmBF,EAC9B,+BACAC,EAAK,CAAkB,ECRzB,IAAYE,EAAAA,IAAAA,EAAiB,CAAA,GAEvB,IAAOC,EAAP,KAAqB,CAGzBC,YAAYC,EAAsC,CAChD,KAAKA,YAAcA,CACrB,CAEOC,aAAW,CAChB,MAAO,CACLC,0BAA2B,KAAKC,UAAU,4BAA6B,EAAK,EAC5EC,mBAAoB,KAAKC,cAAc,oBAAoB,EAC3DC,eAAgB,KAAKH,UAAU,iBAAkB,EAAI,EACrDI,2BAA4B,KAAKC,SAAS,6BAA8B,CAAC,EACzEC,iCAAkC,KAAKN,UAAU,mCAAoC,EAAK,EAC1FO,gBAAiB,KAAKP,UAAU,kBAAmB,EAAK,EACxDQ,sBAAuB,KAAKR,UAAU,wBAAyB,EAAK,EACpES,sBAAuB,KAAKT,UAAU,wBAAyB,EAAK,EACpEU,+CAAgD,KAAKV,UAAU,iDAAkD,EAAK,EACtHW,wBAAyB,KAAKX,UAAU,0BAA2B,EAAK,EACxEY,mBAAoB,KAAKZ,UAAU,qBAAsB,EAAK,EAC9Da,sBAAuB,KAAKb,UAAU,wBAAyB,EAAK,EACpEc,+BAAgC,KAAKd,UAAU,iCAAkC,EAAK,EACtFe,0BAA2B,KAAKf,UAAU,2BAA2B,EACrEgB,sBAAuB,KAAKhB,UAAU,wBAAyB,EAAK,EACpEiB,0BAA2B,KAAKjB,UAAU,4BAA6B,EAAK,EAC5EkB,UAAW,CACTC,eAAgB,KAAKnB,UAAU,oBAAqB,EAAK,EACzDoB,eAAgB,KAAKlB,cAAc,wBAAwB,GAE7DmB,QAAS,CACPC,eAAgB,KAAKtB,UAAU,iBAAkB,EAAI,EACrDuB,qBAAsB,KAAKvB,UAAU,uBAAwB,EAAK,EAClEwB,qBAAsB,KAAKC,QAAQ,sBAAsB,EACzDC,eAAgB,KAAK1B,UAAU,iBAAkB,EAAK,EACtD2B,0BAA2B,KAAKC,SAAS,kCAAkC,GAE7EC,SAAU,CACRC,gBAAiB,KAAK9B,UAAU,0BAA2B,EAAK,EAChE+B,gBAAiB,KAAK/B,UAAU,0BAA2B,EAAI,EAC/DgC,eAAgB,KAAKhC,UAAU,yBAA0B,EAAK,EAC9DiC,iBAAkB,KAAKjC,UAAU,2BAA4B,EAAI,EACjEkC,gBAAiB,KAAKlC,UAAU,0BAA2B,EAAI,EAC/DmC,cAAe,KAAKnC,UAAU,wBAAyB,EAAI,EAC3DoC,WAAY,KAAKpC,UAAU,qBAAsB,EAAI,EACrDqC,YAAa,KAAKrC,UAAU,sBAAuB,EAAI,EACvDsC,aAAc,KAAKtC,UAAU,uBAAwB,EAAI,EACzDuC,aAAc,KAAKvC,UAAU,uBAAwB,EAAI,EACzDwC,eAAgB,KAAKxC,UAAU,yBAA0B,EAAI,EAC7DyC,YAAa,KAAKzC,UAAU,sBAAuB,EAAI,EACvD0C,iBAAkB,KAAKrC,SAAS,2BAA4B,EAAE,EAC9DsC,sBAAuB,KAAK3C,UAAU,wBAAyB,EAAK,GAEtE4C,SAAU,CACRC,YAAa,KAAKjB,SAAS,qBAAqB,EAChDkB,gBAAiB,KAAK9C,UAAU,kBAAmB,EAAK,EACxD+C,cAAe,KAAK1C,SAAS,wBAAyB,CAAC,EACvD2C,aAAc,KAAK3C,SAAS,uBAAwB,EAAE,EACtD4C,aAAc,KAAKrB,SAAS,uBAAwB,OAAO,EAC3DsB,WAAY,KAAKtB,SAAS,qBAAsB,OAAO,EACvDuB,cAAe,KAAKnD,UAAU,wBAAyB,EAAK,EAC5DoD,wBAAyB,KAAKpD,UAAU,kCAAmC,EAAK,GAElFqD,SAAU,CACRlC,eAAgB,KAAKnB,UAAU,oBAAqB,EAAK,GAE3DsD,kBAAmB,CACjBC,QAAS,KAAKvD,UAAU,2BAA4B,EAAK,EACzDmB,eAAgB,KAAKnB,UAAU,4BAA6B,EAAK,GAGvE,CAEQ4B,SAAS4B,EAAyCC,EAAqB,CAC7E,OAAO,KAAK5D,YAAY2D,CAAW,GAAKC,CAC1C,CAEQzD,UAAUwD,EAAqBC,EAAsB,CAC3D,IAAMC,EAAU,KAAK7D,YAAY2D,CAAW,EAC5C,GAAI,CAACE,EACH,OAAOD,EAET,OAAQC,EAAQC,YAAW,EAAE,CAC3B,IAAK,OACH,MAAO,GACT,IAAK,QACH,MAAO,GACT,QACE,OAAOF,CACX,CACF,CAEQpD,SAASmD,EAAqBC,EAAqB,CACzD,IAAMC,EAAU,KAAK7D,YAAY2D,CAAW,EAC5C,OAAKE,EAGE,CAACA,EAFCD,CAGX,CAEQhC,QAAQ+B,EAAqBC,EAAkB,CACrD,IAAMC,EAAU,KAAK7D,YAAY2D,CAAW,EAC5C,OAAKE,EAGEA,EAAQE,MAAM,GAAG,EAFfH,CAGX,CAEQvD,cAAcsD,EAAqBC,EAAkB,CAC3D,OAAO,KAAKhC,QAAQ+B,EAAaC,CAAY,GAAGI,IAAIC,MAAM,CAC5D,GCjGF,IAAaC,GAAe,IAAA,CAAtB,IAAOA,EAAP,MAAOA,CAAe,CAC1BC,YACUC,EACAC,EAAuB,CADvB,KAAAD,MAAAA,EACA,KAAAC,QAAAA,CACN,CAEJC,QAAQC,EAA6B,CAEnC,IAAIC,EAAkB,KAAKJ,MAAMK,aAAaC,CAAa,EAAC,EAE5D,GAAIF,GAAiBG,GACnB,OAAOC,EAAGJ,CAAe,EAE3B,IAAIK,EACJ,GAAIN,EAAMO,OAAO,QACfD,EAAW,KAAKR,QAAQU,WAAWR,EAAMO,OAAO,OAAU,UACnDP,EAAMO,OAAO,cACpBD,EAAW,KAAKR,QAAQW,oBAAoBT,EAAMO,OAAO,aAAgB,MACtE,CACH,IAAMG,EAAWV,EAAMW,IAAIC,OAAS,EAAIZ,EAAMW,IAAI,CAAC,EAAEE,KAAOb,EAAMc,aAAa,CAAC,EAAEH,IAAI,CAAC,EAAEE,KACzFP,EAAWS,EAAOL,CAAQ,EAAI,KAAKZ,QAAQW,oBAAoBC,CAAQ,EAAI,KAAKZ,QAAQU,WAAWE,CAAQ,CAC7G,CAEA,OAAOJ,EAASU,KACdC,EAAItB,EAAgBuB,mBAAmB,EACvCC,EAAIC,GAAU,CACZ,KAAKvB,MAAMwB,SAASC,EAAmB,CAAEF,QAAAA,CAAO,CAAE,CAAC,CACrD,CAAC,EACDG,EAAWC,IACLA,aAAiBC,GAAqBD,EAAME,SAAW,IACrD,CAAC1B,EAAMO,OAAO,SAAcP,EAAMW,IAAI,CAAC,EAAEE,KAC3C,KAAKhB,MAAMwB,SAASM,EAAiB,CAAEH,MAAO,eAAe,CAAE,CAAC,EAGhEI,OAAOC,SAASC,KAAO,0BAGzBC,QAAQP,MAAM,wBAAyBA,CAAK,EAEvCnB,EAAG,IAAI,EACf,CAAC,CAEN,CAEA,OAAOa,oBAAoBE,EAAwB,CACjD,OAAOY,EAAAC,EAAA,GACFb,GADE,CAELc,SAAU,IAAIC,EAAef,EAAQc,QAAQ,EAAEE,YAAW,GAE9D,yCAjDWzC,GAAe0C,EAAAC,CAAA,EAAAD,EAAAE,CAAA,CAAA,CAAA,wBAAf5C,EAAe6C,QAAf7C,EAAe8C,UAAAC,WADF,MAAM,CAAA,EAC1B,IAAO/C,EAAPgD,SAAOhD,CAAe,GAAA", "names": ["LoadCatalogSuccess", "createAction", "props", "LoadCatalogError", "CatalogSettingKey", "SettingsReader", "constructor", "settingsRaw", "getSettings", "PersistItemsTreeSelection", "asBoolean", "PreselectedItemIds", "asNumberArray", "ShowConditions", "DefaultReservationDuration", "asNumber", "Feature_ReservationUsedTimeSlots", "Feature_HideVAT", "Feature_OutlookExport", "Feature_CustomerRoles", "Feature_NotificationOnOverlappingWithBlockInfo", "Feature_MailAttachments", "Feature_GlutzDoors", "Feature_TimeExtension", "Feature_PricesPeriodOfValidity", "HeaderLogoWithoutPaddings", "EnableFreeAccessories", "EnableItemRecommendations", "GiftCards", "FeatureEnabled", "StandardPrices", "Payment", "InvoiceEnabled", "OnlinePaymentEnabled", "OnlinePaymentMethods", "asArray", "PayCashEnabled", "TransactionAbortedMessage", "asString", "Checkout", "GreetingCompany", "RequireGreeting", "RequireCompany", "RequireFirstName", "RequireLastName", "RequireStreet", "RequireZip", "RequireCity", "RequireEmail", "RequirePhone", "RequirePurpose", "ShowPurpose", "PurposeMinLength", "EmailPromptForJanitor", "Calendar", "DefaultView", "YearViewEnabled", "SlotDivisions", "SlotDuration", "WorkDayStart", "WorkDayEnd", "ShowWorkHours", "ShowAvailabilityOnSlots", "IcalFeed", "MobileInfoscreens", "Visible", "settingName", "defaultValue", "setting", "toLowerCase", "split", "map", "Number", "CatalogResolver", "constructor", "store", "backend", "resolve", "route", "existingCatalog", "selectSignal", "selectCatalog", "id", "of", "catalog$", "params", "getCatalog", "getCatalogByOrderId", "url0Path", "url", "length", "path", "pathFromRoot", "isGuid", "pipe", "map", "prepareCatalogModel", "tap", "catalog", "dispatch", "LoadCatalogSuccess", "catchError", "error", "HttpErrorResponse", "status", "LoadCatalogError", "window", "location", "href", "console", "__spreadProps", "__spreadValues", "settings", "SettingsReader", "getSettings", "\u0275\u0275inject", "Store", "BackendService", "factory", "\u0275fac", "providedIn", "_CatalogResolver"] }