{"version":3,"file":"chunk-gttl7ref.js","sources":["packages/vanilla/lib/features/header/src/header.service.ts"],"sourcesContent":["import { Injectable, Type, WritableSignal, computed, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport {\n DslService,\n DynamicComponentsRegistry,\n ElementRepositoryService,\n MenuContentItem,\n MenuItemsService,\n MenuSection,\n NavigationService,\n ResizeObserverService,\n VanillaDynamicComponentsCategory,\n VanillaElements,\n} from '@frontend/vanilla/core';\nimport { MenuItemHighlightService } from '@frontend/vanilla/shared/menu-item';\nimport { BehaviorSubject, Observable, ReplaySubject, Subject, debounceTime, distinctUntilChanged, map, of, startWith, switchMap } from 'rxjs';\n\nimport { HeaderConfig, HeaderConfigElements } from './header.client-config';\n\n/**\n * @whatItDoes Provides utility functions for manipulating the header\n *\n * @description\n *\n * # Overview\n * This provides functionality for manipulating the header:\n * - Get header height\n * - Highlight product\n * - show/hide\n * @stable\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class HeaderService {\n currentHighlightedProductName: string | null = null;\n\n readonly unauthItems = signal(null);\n readonly productItems = signal(null);\n readonly pillItems = signal(null);\n readonly balance = signal(null);\n readonly bonusBalance = signal(null);\n readonly activeProduct = signal(null);\n readonly headerVisible = signal(false);\n readonly headerElementRect = signal<{ width: number; height: number }>({ width: 0, height: 0 });\n readonly headerComponentRect = signal<{ width: number; height: number }>({ width: 0, height: 0 });\n readonly hasHeaderElement = computed(() => this.headerComponentRect().width !== 0 || this.headerComponentRect().height !== 0);\n\n private highlightedProductEvents = new BehaviorSubject(null);\n private headerDisplayEvents: BehaviorSubject = new BehaviorSubject(true);\n private disabledItems: string[] = [];\n\n /** @internal */\n get highlightedProduct(): Observable {\n return this.highlightedProductEvents;\n }\n\n /** Observable of when the header is shown or hidden. Will instantly return current value to subscribers. */\n get display(): Observable {\n return this.headerDisplayEvents;\n }\n\n get version(): number {\n return this.headerContent.version;\n }\n\n private readonly authItems$$ = new ReplaySubject(1);\n readonly authItems$ = this.authItems$$.asObservable();\n\n // debounceTime prevents header flickering\n private readonly leftItems$$ = new ReplaySubject(1);\n readonly leftItems$ = this.leftItems$$.asObservable().pipe(\n debounceTime(10),\n distinctUntilChanged((prev, current) => prev.every((item, index) => item.name === current[index]?.name)),\n );\n\n constructor(\n private resizeObserver: ResizeObserverService,\n private elementRepositoryService: ElementRepositoryService,\n private headerContent: HeaderConfig,\n private dslService: DslService,\n private menuItemsService: MenuItemsService,\n private navigationService: NavigationService,\n private dynamicComponentsRegistry: DynamicComponentsRegistry,\n private menuItemHighlightingService: MenuItemHighlightService,\n ) {\n this.elementRepositoryService.elements$\n .pipe(\n map((v) => v.get(VanillaElements.HEADER_SLOT)),\n distinctUntilChanged(),\n switchMap((element) => {\n if (element) {\n return this.resizeObserver\n .observe(element)\n .pipe(map((entry) => ({ width: entry.contentBoxSize[0]!.blockSize, height: entry.contentBoxSize[0]!.inlineSize })));\n }\n return of({ width: 0, height: 0 });\n }),\n takeUntilDestroyed(),\n )\n .subscribe((rect) => this.headerComponentRect.set(rect));\n }\n\n initMenuItems() {\n this.evaluateMenuContentItems('leftItems', this.leftItems$$);\n this.evaluateMenuContentItems('authItems', this.authItems$$);\n this.evaluateMenuContentItems('unauthItems', this.unauthItems);\n this.evaluateMenuContentItems('productItems', this.productItems);\n this.evaluateMenuContentItems('pillItems', this.pillItems);\n this.evaluateBalanceParams();\n }\n\n private evaluateMenuContentItems(key: keyof HeaderConfigElements, store: Subject | WritableSignal) {\n const items = this.headerContent.elements[key];\n\n if (items?.length > 0) {\n // preload the components needed for the header section\n items.forEach((item) => this.preload(item.type));\n\n this.dslService.evaluateContent(items).subscribe((items: MenuContentItem[]) => {\n store instanceof Subject ? store.next(items) : store.set(items);\n });\n }\n }\n\n private authItemBalanceParam(condition: (item: MenuContentItem) => boolean): Observable {\n return this.authItems$$.pipe(\n startWith(this.headerContent.elements.authItems),\n map(\n (authItems: MenuContentItem[]) =>\n authItems.find((authItem: MenuContentItem) => condition(authItem) && authItem?.parameters?.balance)?.parameters?.balance,\n ),\n distinctUntilChanged(),\n switchMap((balanceParam: string | undefined) => {\n if (balanceParam) {\n return this.dslService.evaluateExpression(balanceParam);\n }\n\n return of(0);\n }),\n );\n }\n\n private evaluateBalanceParams() {\n this.authItemBalanceParam((authItem: MenuContentItem) => authItem.type === 'avatar-balance' || authItem.type === 'balance').subscribe(\n (balance: number) => {\n this.balance.set(balance);\n },\n );\n this.authItemBalanceParam((authItem) => authItem.type === 'bonus-balance').subscribe((balance: number) => {\n this.bonusBalance.set(balance);\n });\n }\n\n initProductHighlighting() {\n this.menuItemHighlightingService.initHighlighting(this.headerContent.products);\n this.navigationService.locationChange.subscribe(() => this.setHighlightedProduct());\n }\n\n /**\n * Because the header is fixed and therefore obstructs the top of the page, sometimes it's needed to know it's\n * height (f.e. for scrolling calculations).\n *\n * ```\n * headerService.getHeaderHeight();\n * ```\n */\n getHeaderHeight(): number {\n return this.headerComponentRect().height;\n }\n\n /**\n * Overrides highlighted product in the product switcher. If null is provided, it will reset selected product to\n * current product.\n *\n * ```\n * headerService.highlightProduct('sports');\n * headerService.highlightProduct(null);\n * ```\n *\n * Rules for highlighting (first one that matches will be highlighted):\n *\n * - first item with `highlight-url-pattern` parameter that matches current location absolute path will be\n * highlighted\n * - first item without `highlight-url-pattern` whose `url` is an exact match for current location absolute path\n * will be highlighted\n * - if `HeaderService.highlightProduct()` is called, that product will be highlighted (if it exists)\n * until `HeaderService.highlightProduct(null)` is called.\n * - the item corresponding to `Page.product` will be highlighted (if it exists)\n * - nothing will be highlighted\n */\n highlightProduct(name: string | null) {\n this.currentHighlightedProductName = name;\n\n this.setHighlightedProduct();\n }\n\n /** Set a component type for header item type. */\n setHeaderComponent(itemType: string, component: Type) {\n this.dynamicComponentsRegistry.registerComponent(VanillaDynamicComponentsCategory.Header, itemType, component);\n }\n\n // TODO: find all places where this is used and replace it with preload and get lazy component methods\n /** Gets a component type for header item type. */\n getHeaderComponent(itemType: string | undefined): Type | null {\n return this.dynamicComponentsRegistry.get(VanillaDynamicComponentsCategory.Header, itemType || 'button');\n }\n\n registerLazyCmp(itemType: string, lazyImportFn: () => Promise>) {\n this.dynamicComponentsRegistry.registerLazyComponent(VanillaDynamicComponentsCategory.Header, itemType, lazyImportFn);\n }\n\n /** Gets a lazy component type for header item type. */\n getLazyComponent(itemType: string | undefined): Promise | null> {\n return this.dynamicComponentsRegistry.getLazyComponent(VanillaDynamicComponentsCategory.Header, itemType || 'button');\n }\n\n /** Preload lazy component */\n preload(itemType: string) {\n this.dynamicComponentsRegistry.preloadLazyComponent(VanillaDynamicComponentsCategory.Header, itemType);\n }\n\n /** Assigns a number to be shown as a counter for a header item. */\n setItemCounter(itemName: string, count: any, cssClass?: string) {\n this.menuItemsService.setCounter(MenuSection.Header, itemName, count, cssClass);\n }\n\n /** Shows the header. List of items to be disabled can be passed. */\n show(disabledItems?: string[]) {\n this.headerDisplayEvents.next(true);\n this.headerVisible.set(true);\n this.disabledItems = disabledItems || [];\n }\n\n /** Hides the header. */\n hide() {\n this.headerDisplayEvents.next(false);\n this.headerVisible.set(false);\n }\n\n /** Checks if specific header element is disabled according to list on dynacon config.*/\n itemDisabled(item: string): boolean {\n return this.disabledItems.some((x) => x == item);\n }\n\n setHighlightedProduct() {\n const product = this.menuItemHighlightingService.setHighlightedProduct(this.headerContent.products, this.currentHighlightedProductName);\n\n if (product?.name) {\n this.menuItemHighlightingService.setActiveItem(MenuSection.Header, product.name);\n }\n\n this.highlightedProductEvents.next(product || null);\n this.activeProduct.set(product);\n }\n}\n"],"names":["HeaderService","highlightedProduct","highlightedProductEvents","display","headerDisplayEvents","version","headerContent","constructor","resizeObserver","elementRepositoryService","dslService","menuItemsService","navigationService","dynamicComponentsRegistry","menuItemHighlightingService","currentHighlightedProductName","unauthItems","signal","productItems","pillItems","balance","bonusBalance","activeProduct","headerVisible","headerElementRect","width","height","headerComponentRect","hasHeaderElement","computed","BehaviorSubject","disabledItems","authItems$$","ReplaySubject","authItems$","asObservable","leftItems$$","leftItems$","pipe","debounceTime","distinctUntilChanged","prev","current","every","item","index","_a","name","elements$","map","v","get","VanillaElements","HEADER_SLOT","switchMap","element","observe","entry","contentBoxSize","blockSize","inlineSize","of","takeUntilDestroyed","subscribe","rect","set","initMenuItems","evaluateMenuContentItems","evaluateBalanceParams","key","store","items","elements","length","forEach","preload","type","evaluateContent","Subject","next","authItemBalanceParam","condition","startWith","authItems","_b","find","authItem","parameters","balanceParam","evaluateExpression","initProductHighlighting","initHighlighting","products","locationChange","setHighlightedProduct","getHeaderHeight","highlightProduct","setHeaderComponent","itemType","component","registerComponent","VanillaDynamicComponentsCategory","Header","getHeaderComponent","registerLazyCmp","lazyImportFn","registerLazyComponent","getLazyComponent","preloadLazyComponent","setItemCounter","itemName","count","cssClass","setCounter","MenuSection","show","hide","itemDisabled","some","x","product","setActiveItem","ɵɵinject","ResizeObserverService","ElementRepositoryService","HeaderConfig","DslService","MenuItemsService","NavigationService","DynamicComponentsRegistry","MenuItemHighlightService","R","factory","ɵfac","providedIn","_HeaderService"],"mappings":"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"}