{"version":3,"file":"chunk-o427fr50.js","sources":["packages/vanilla/lib/shared/menu-item/src/menu-item-highlight.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { MenuContentItem, MenuItemsService, NavigationService, Page, UrlService } from '@frontend/vanilla/core';\n\nabstract class ProductHighlightMatcher {\n protected constructor(public item: MenuContentItem) {}\n\n abstract match(url: string): boolean;\n}\n\nclass RegexProductHighlightMatcher extends ProductHighlightMatcher {\n private regex: RegExp;\n\n constructor(item: MenuContentItem, pattern: string) {\n super(item);\n\n this.regex = new RegExp(pattern);\n }\n\n match(url: string): boolean {\n return this.regex.test(url);\n }\n}\n\nclass ExactMatchProductHighlightMatcher extends ProductHighlightMatcher {\n constructor(\n item: MenuContentItem,\n private readonly url: string,\n ) {\n super(item);\n\n this.url = this.url.toLowerCase();\n }\n\n match(url: string): boolean {\n return url === this.url;\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MenuItemHighlightService {\n regexProductHighlightMatchers: ProductHighlightMatcher[] = [];\n exactProductHighlightMatchers: ProductHighlightMatcher[] = [];\n\n constructor(\n private urlService: UrlService,\n private page: Page,\n private navigationService: NavigationService,\n private menuItemsService: MenuItemsService,\n ) {}\n\n initHighlighting(menuItems: MenuContentItem[]) {\n menuItems.forEach((p) => {\n const highlightUrlPattern = p.parameters ? p.parameters['highlight-url-pattern'] : null;\n if (highlightUrlPattern) {\n this.regexProductHighlightMatchers.push(new RegexProductHighlightMatcher(p, highlightUrlPattern));\n } else if (p.url) {\n const url = this.urlService.parse(p.url);\n if (url.isSameHost) {\n this.exactProductHighlightMatchers.push(new ExactMatchProductHighlightMatcher(p, url.baseUrl() + url.path()));\n }\n }\n });\n }\n\n setHighlightedProduct(content: MenuContentItem[], currentHighlightedProductName: string | null): MenuContentItem | null {\n let product: MenuContentItem | null;\n\n product = this.findHighlightMatch(this.exactProductHighlightMatchers) || this.findHighlightMatch(this.regexProductHighlightMatchers);\n\n if (!product) {\n product = content.find((p) => p.name === currentHighlightedProductName || p.name === this.page.product.toLowerCase()) || null;\n }\n\n return product;\n }\n\n /** Sets item to active state. */\n setActiveItem(section: string, itemName: string) {\n this.menuItemsService.setActive(section, itemName);\n }\n\n private findHighlightMatch(matchers: ProductHighlightMatcher[]): MenuContentItem | null {\n const byMatcher = matchers.find((p) =>\n p.match(this.navigationService.location.baseUrl() + this.navigationService.location.path().toLowerCase()),\n );\n if (byMatcher) {\n return byMatcher.item;\n }\n\n return null;\n }\n}\n"],"names":["ProductHighlightMatcher","constructor","item","RegexProductHighlightMatcher","pattern","regex","RegExp","match","url","test","ExactMatchProductHighlightMatcher","toLowerCase","MenuItemHighlightService","urlService","page","navigationService","menuItemsService","regexProductHighlightMatchers","exactProductHighlightMatchers","initHighlighting","menuItems","forEach","p","highlightUrlPattern","parameters","push","parse","isSameHost","baseUrl","path","setHighlightedProduct","content","currentHighlightedProductName","product","findHighlightMatch","find","name","setActiveItem","section","itemName","setActive","matchers","byMatcher","location","ɵɵinject","UrlService","Page","NavigationService","MenuItemsService","factory","ɵfac","providedIn","_MenuItemHighlightService"],"mappings":"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"}