{ "version": 3, "sources": ["src/app/root-store/scheduler-store/selectors.ts", "src/app/object-choice/object-choice.service.ts"], "sourcesContent": ["import { createFeatureSelector, createSelector } from '@ngrx/store';\r\nimport { SchedulerState } from './state';\r\n\r\nexport const selectScheduler = createFeatureSelector('scheduler')\r\n\r\nexport const selectSchedulerErrors = createSelector(\r\n selectScheduler,\r\n (scheduler: SchedulerState) => scheduler && scheduler.errors\r\n)\r\n\r\nexport const selectIsPrintView = createSelector(\r\n selectScheduler,\r\n (scheduler: SchedulerState) => scheduler && scheduler.printView\r\n)\r\n\r\nexport const selectShowConsolidatedAppointments = createSelector(\r\n selectScheduler,\r\n (scheduler: SchedulerState) => scheduler && scheduler.showConsolidatedAppointments\r\n)\r\n", "import { Injectable, signal } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { Store } from '@ngrx/store';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BehaviorSubject, combineLatest, Observable, of, Subscription } from 'rxjs';\r\nimport { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';\r\nimport { DialogService, panelClassMobileFullscreen } from 'src/app/core/dialog.service';\r\nimport { ItemService } from 'src/app/core/item.service';\r\nimport { DialogOrderFieldsComponentData } from 'src/app/generic-fields/dialog-order-fields/dialog-order-fields.component';\r\nimport { selectCatalog, selectCatalogSettings, selectCatName } from 'src/app/root-store/catalog-store/selectors';\r\nimport { SaveReservationResult } from '../cart/cart.model';\r\nimport { BackendService } from '../core/backend.service';\r\nimport { LocaleService } from '../core/locale/locale.service';\r\nimport { ReloadAppointments } from '../root-store/actions';\r\nimport { SetTreeItems, SetTreeItemsLoading } from '../root-store/object-tree-store/actions';\r\nimport { selectObjectTree, selectObjectTreeErrors, selectSelectedItems } from '../root-store/object-tree-store/selects';\r\nimport { RootState } from '../root-store/root-state.model';\r\nimport { NavigateTo } from '../root-store/router/actions';\r\nimport { selectOrderId } from '../root-store/router/selectors';\r\nimport { selectScheduler, selectSchedulerErrors } from '../root-store/scheduler-store/selectors';\r\nimport { SetRecurrenceFreq } from '../root-store/time-picker-store/actions';\r\nimport { selectTimePicker, selectTimePickerErrors } from '../root-store/time-picker-store/selectors';\r\nimport { selectUser } from '../root-store/user-store/selectors';\r\nimport { SnackBarService } from '../snackbar.service';\r\nimport { AdvancedOptionsForm } from './advanced-options/advanced-options.component';\r\n\r\nexport interface ItemFieldValues {\r\n [key: number]: { [key: string]: string }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ObjectChoiceService {\r\n isSubmitting$ = new BehaviorSubject(false)\r\n allowAddToCart$: Observable\r\n hasErrors$: Observable\r\n hasItemsSelected$ = this.store.select(selectSelectedItems).pipe(map(i => i.length > 0))\r\n smallScreenStepIndex = signal(1)\r\n private persistItemsTreeSelection = false\r\n private persistItemsTreeStorageKey: string | undefined\r\n public advancedOptions: FormGroup | undefined\r\n public isBlock$ = new BehaviorSubject(false)\r\n public showRootIds: number[] | undefined\r\n navigateEndSubs?: Subscription\r\n\r\n constructor(\r\n private store: Store,\r\n private translate: TranslateService,\r\n private localeService: LocaleService,\r\n private dialog: MatDialog,\r\n private backend: BackendService,\r\n private snackBar: MatSnackBar,\r\n private snackBarSvc: SnackBarService,\r\n private router: Router,\r\n private dialogSvc: DialogService,\r\n ) {\r\n this.hasErrors$ = combineLatest([\r\n this.store.select(selectSelectedItems),\r\n this.store.select(selectObjectTreeErrors),\r\n this.store.select(selectSchedulerErrors),\r\n this.store.select(selectTimePickerErrors)\r\n ]).pipe(\r\n map(([items, treeErrors, schedulerErrors, timeErrors]) =>\r\n items.length === 0 || (Object.keys({ ...treeErrors, ...schedulerErrors, ...timeErrors }).length > 0)\r\n )\r\n )\r\n\r\n this.allowAddToCart$ = combineLatest([\r\n this.store.select(selectUser),\r\n this.store.select(selectSelectedItems),\r\n this.store.select(selectObjectTreeErrors),\r\n this.store.select(selectSchedulerErrors),\r\n this.store.select(selectTimePickerErrors),\r\n this.isBlock$\r\n ]).pipe(\r\n map(([user, items, treeErrors, schedulerErrors, timeErrors, isBlock]) => {\r\n if (user.isAtLeastAdmin)\r\n return true\r\n\r\n if (items.length === 0 || treeErrors || timeErrors)\r\n return false\r\n\r\n if (schedulerErrors && !isBlock) {\r\n // if all scheduler-errors have couldBypass=true, allow 'add to cart'\r\n let couldBypassSchedulerErrors = true\r\n Object.entries(schedulerErrors).forEach(([, errorDetails]) => {\r\n if (errorDetails['couldBypass'] !== true)\r\n couldBypassSchedulerErrors = false\r\n })\r\n\r\n return couldBypassSchedulerErrors\r\n }\r\n\r\n return true\r\n })\r\n )\r\n\r\n // must use observable because ObjectChoiceService is created before the catalog is loaded\r\n this.store.select(selectCatalogSettings).pipe(filter(s => !!s), take(1)).subscribe(\r\n settings => this.persistItemsTreeSelection = settings.PersistItemsTreeSelection)\r\n\r\n this.store.select(selectCatName).subscribe(name => this.persistItemsTreeStorageKey = name + '.ItemsTree.SelectedItemIds')\r\n }\r\n\r\n async saveReservation(itemFieldValues?: Observable) {\r\n const isBlock = this.isBlock$.value\r\n\r\n const timePicker = this.store.selectSignal(selectTimePicker)()\r\n const scheduler = this.store.selectSignal(selectScheduler)()\r\n const objectTree = this.store.selectSignal(selectObjectTree)()\r\n\r\n // check if booking is allowed.\r\n // SaveReservation() should be never called if not allowed, because button is disabled if there are errors and user has no permissions\r\n if ((timePicker.errors || scheduler.errors || objectTree.errors) &&\r\n !confirm(this.translate.instant('OBJECT_CHOICE.WARN_DIALOG')))\r\n return\r\n\r\n // optionally get additional Object-OrderFields from the DialogOrderFieldsComponent\r\n let orderFields$ = itemFieldValues || of({})\r\n if (!itemFieldValues && !isBlock) {\r\n const itemsWithOrderFields = objectTree.selectedItems.filter(i => i.item.fields)\r\n if (itemsWithOrderFields.length) {\r\n const dialogOrderFieldsComponent = (await import('../generic-fields/dialog-order-fields/dialog-order-fields.component')).DialogOrderFieldsComponent\r\n\r\n orderFields$ = this.dialog.open(dialogOrderFieldsComponent, {\r\n data: { mode: 'new', items: itemsWithOrderFields } as DialogOrderFieldsComponentData,\r\n panelClass: panelClassMobileFullscreen\r\n })\r\n .afterClosed().pipe(filter(res => !!res))\r\n }\r\n }\r\n\r\n // submit values to backend\r\n orderFields$.pipe(\r\n tap(() => this.isSubmitting$.next(true)),\r\n switchMap(orderFields => this.saveReservationToBackend(orderFields)),\r\n catchError(error => of({ succeeded: false, error, errorDetails: null })),\r\n tap(() => this.isSubmitting$.next(false)),\r\n ).subscribe(response => {\r\n if (response.succeeded) {\r\n const orderId = this.store.selectSignal(selectOrderId)()\r\n\r\n if (!isBlock || orderId)\r\n this.store.dispatch(NavigateTo({ route: 'Cart', queryParams: { OrderId: orderId } }))\r\n else {\r\n this.advancedOptions?.reset()\r\n this.store.dispatch(SetRecurrenceFreq({ recurrenceFreq: null }))\r\n this.store.dispatch(ReloadAppointments({ ignoreSchedulerErrors: true }))\r\n this.snackBar.open(this.translate.instant('BLOCK_CREATED'), undefined, { duration: 5000 })\r\n }\r\n }\r\n else {\r\n {\r\n let errorKey: string | null\r\n switch (response.error) {\r\n case 'NoItemPermission':\r\n errorKey = _('ERROR.NO_PERMISSION')\r\n break\r\n case 'InvalidRecurrenceRule':\r\n errorKey = response.errorDetails?.includes('exceeds max length') ? _('ERROR.TOO_MANY_RECURRENCES') : _('ERROR.INVALID_RECURRENCE_RULE')\r\n break\r\n case 'MultipleCatalogs':\r\n errorKey = _('ERROR.MULTIPLE_CATALOGS')\r\n break\r\n case 'TimeNotAvailable':\r\n errorKey = _('ERROR.INVALID_WISH_TIME')\r\n break\r\n default:\r\n // snackbar for 403 will be shown by WebApiInterceptor, so we don't show it here again\r\n errorKey = response.error.status === 403 ? null : _('ERROR.UNKNOWN')\r\n break;\r\n }\r\n\r\n if (errorKey) {\r\n if (errorKey === _('ERROR.UNKNOWN'))\r\n this.snackBarSvc.showUnknownError(response.error)\r\n else\r\n this.snackBar.open(this.translate.instant(errorKey, { error: response.error }),\r\n this.translate.instant('CLOSE'), { duration: 10000 })\r\n }\r\n }\r\n\r\n this.store.dispatch(ReloadAppointments()) // just reload appointments, to ensure current appointments are shown\r\n }\r\n })\r\n }\r\n\r\n private saveReservationToBackend(orderFields: { [key: number]: { [key: string]: string } }): Observable {\r\n const timePicker = this.store.selectSignal(selectTimePicker)()\r\n const objectTree = this.store.selectSignal(selectObjectTree)()\r\n\r\n if (!timePicker.startDate || !timePicker.endDate)\r\n return of({ succeeded: false, error: 'StartEndMissing' })\r\n\r\n const params = {\r\n itemIds: objectTree.selectedItems.map(i => i.itemId).join(','),\r\n start: timePicker.startDate.toISOString(),\r\n end: timePicker.endDate.toISOString()\r\n } as { [param: string]: string | boolean | number }\r\n\r\n if (timePicker.availabilityPlanId)\r\n params['availabilityPlanId'] = timePicker.availabilityPlanId\r\n\r\n if (timePicker.quantity && timePicker.quantity > 1)\r\n params['quantity'] = timePicker.quantity.toString()\r\n\r\n if (this.advancedOptions?.controls.comment.value)\r\n params['comment'] = this.advancedOptions.controls.comment.value\r\n\r\n if (this.advancedOptions?.controls.externalComment.value)\r\n params['externalComment'] = this.advancedOptions.controls.externalComment.value\r\n\r\n if (timePicker.recurrenceRule)\r\n params['recurrence'] = timePicker.recurrenceRule\r\n\r\n const isBlock = this.isBlock$.value\r\n if (isBlock) {\r\n params['doubleReservationAllowed'] = this.advancedOptions?.controls.doubleReservationAllowed.value ?? false\r\n\r\n if (params['doubleReservationAllowed'] && this.advancedOptions?.controls.mailOverlappingBlock.value)\r\n params['mailRecipientOnOverlappingWithBlockInfo'] = this.advancedOptions.controls.mailOverlappingBlock.value\r\n }\r\n\r\n return isBlock ? this.backend.addBlock(orderFields, params) : this.backend.addToCart(orderFields, params)\r\n }\r\n\r\n public get PersistentSelectedItemIds(): number[] | null {\r\n return this.PersistItemsTreeSelectionEnabled ? localStorage.getItem(this.persistItemsTreeStorageKey!)?.split(',').map(Number) ?? null : null\r\n }\r\n\r\n public set PersistentSelectedItemIds(ids: number[] | null) {\r\n if (this.PersistItemsTreeSelectionEnabled)\r\n localStorage.setItem(this.persistItemsTreeStorageKey!, ids?.join(',') ?? '')\r\n }\r\n\r\n public get PersistItemsTreeSelectionEnabled(): boolean {\r\n let userIsAtLeastJanitor!: boolean\r\n this.store.select(selectUser).subscribe(usr => userIsAtLeastJanitor = !!usr.isAtLeastJanitor)\r\n return userIsAtLeastJanitor && this.persistItemsTreeSelection\r\n }\r\n\r\n public loadTreeItems(store: Store) {\r\n store.dispatch(SetTreeItemsLoading())\r\n\r\n return this.backend.getItemTree().subscribe(items => store.dispatch(SetTreeItems({ items })))\r\n }\r\n\r\n public initItemInfoDialog() {\r\n // open object-info-dialog on initial load (if needed)\r\n this.openItemInfo(ItemService.getItemFromUrl(this.router.url)?.id)\r\n\r\n // open object-info-dialog on route-changes (if needed)\r\n if (!this.navigateEndSubs)\r\n this.navigateEndSubs = this.router.events\r\n .pipe(filter(event => event instanceof NavigationEnd))\r\n .subscribe(async val => await this.openItemInfo(ItemService.getItemFromUrl((val as NavigationEnd).url)?.id))\r\n }\r\n\r\n // open object-info-dialog\r\n private async openItemInfo(itemId: number | undefined) {\r\n if (!itemId)\r\n return\r\n\r\n const catalog = this.store.selectSignal(selectCatalog)();\r\n\r\n (await this.dialogSvc.openObjectInfo(itemId, true))\r\n .afterClosed()\r\n .subscribe(closeResult => {\r\n if (!closeResult?.redirectedToNewSeoName)\r\n this.router.navigate(['/' + catalog.name, this.localeService.currentLang()])\r\n })\r\n }\r\n}\r\n"], "mappings": "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", "names": ["selectScheduler", "createFeatureSelector", "selectSchedulerErrors", "createSelector", "scheduler", "errors", "selectIsPrintView", "printView", "selectShowConsolidatedAppointments", "showConsolidatedAppointments", "ObjectChoiceService", "constructor", "store", "translate", "localeService", "dialog", "backend", "snackBar", "snackBarSvc", "router", "dialogSvc", "isSubmitting$", "BehaviorSubject", "hasItemsSelected$", "select", "selectSelectedItems", "pipe", "map", "i", "length", "smallScreenStepIndex", "signal", "persistItemsTreeSelection", "isBlock$", "hasErrors$", "combineLatest", "selectObjectTreeErrors", "selectSchedulerErrors", "selectTimePickerErrors", "items", "treeErrors", "schedulerErrors", "timeErrors", "Object", "keys", "__spreadValues", "allowAddToCart$", "selectUser", "user", "isBlock", "isAtLeastAdmin", "couldBypassSchedulerErrors", "entries", "forEach", "errorDetails", "selectCatalogSettings", "filter", "s", "take", "subscribe", "settings", "PersistItemsTreeSelection", "selectCatName", "name", "persistItemsTreeStorageKey", "saveReservation", "itemFieldValues", "__async", "value", "timePicker", "selectSignal", "selectTimePicker", "scheduler", "selectScheduler", "objectTree", "selectObjectTree", "errors", "confirm", "instant", "orderFields$", "of", "itemsWithOrderFields", "selectedItems", "item", "fields", "dialogOrderFieldsComponent", "DialogOrderFieldsComponent", "open", "data", "mode", "panelClass", "panelClassMobileFullscreen", "afterClosed", "res", "tap", "next", "switchMap", "orderFields", "saveReservationToBackend", "catchError", "error", "succeeded", "response", "orderId", "selectOrderId", "dispatch", "NavigateTo", "route", "queryParams", "OrderId", "advancedOptions", "reset", "SetRecurrenceFreq", "recurrenceFreq", "ReloadAppointments", "ignoreSchedulerErrors", "undefined", "duration", "errorKey", "includes", "status", "showUnknownError", "startDate", "endDate", "params", "itemIds", "itemId", "join", "start", "toISOString", "end", "availabilityPlanId", "quantity", "toString", "controls", "comment", "externalComment", "recurrenceRule", "doubleReservationAllowed", "mailOverlappingBlock", "addBlock", "addToCart", "PersistentSelectedItemIds", "PersistItemsTreeSelectionEnabled", "localStorage", "getItem", "split", "Number", "ids", "setItem", "userIsAtLeastJanitor", "usr", "isAtLeastJanitor", "loadTreeItems", "SetTreeItemsLoading", "getItemTree", "SetTreeItems", "initItemInfoDialog", "openItemInfo", "ItemService", "getItemFromUrl", "url", "id", "navigateEndSubs", "events", "event", "NavigationEnd", "val", "catalog", "selectCatalog", "openObjectInfo", "closeResult", "redirectedToNewSeoName", "navigate", "currentLang", "\u0275\u0275inject", "Store", "TranslateService", "LocaleService", "MatDialog", "BackendService", "MatSnackBar", "SnackBarService", "Router", "DialogService", "factory", "\u0275fac", "providedIn", "_ObjectChoiceService"] }