{"version":3,"file":"search-menu-BcMTit7R.js","sources":["../../../../../src/scripts/modules/header/search-menu.ts"],"sourcesContent":["import { Component } from '@verndale/core';\n\nclass SearchMenu extends Component {\n outsideClickListener: EventListener;\n escapeKeyListener: EventListener;\n\n constructor(el: HTMLElement) {\n super(el);\n this.outsideClickListener = this.handleOutsideClick.bind(this);\n this.escapeKeyListener = this.handleEscapeKeyPress.bind(this) as EventListener;\n }\n\n setupDefaults() {\n this.dom = {\n desktopTrigger: this.el.querySelector('.search-menu__button'),\n form: this.el.querySelector('form.search-menu__desktop-dropdown'),\n input: this.el.querySelector('.search-menu__input'),\n submitButton: this.el.querySelector('button.search-menu__search-button'),\n eraseButton: this.el.querySelector('button.search-menu__erase-button'),\n };\n\n this.enableSubmitButton();\n }\n\n addListeners() {\n (this.dom.form as HTMLElement).addEventListener('submit', this.handleSearch.bind(this));\n (this.dom.input as HTMLElement).addEventListener('input', this.handleInput.bind(this));\n (this.dom.input as HTMLElement).addEventListener('focus', this.handleInputFocus.bind(this));\n (this.dom.input as HTMLElement).addEventListener('blur', this.handleInputBlur.bind(this));\n (this.dom.eraseButton as HTMLElement).addEventListener('click', this.handleEraseInput.bind(this));\n (this.dom.desktopTrigger as HTMLElement).addEventListener('click', this.handleDesktopDropdownOpen.bind(this));\n }\n\n handleSearch(ev: Event) {\n ev.preventDefault();\n\n const value = (this.dom.input as HTMLInputElement).value;\n let redirectPath = '/search';\n\n if (this.el.dataset.redirectPath) {\n redirectPath = this.el.dataset.redirectPath;\n }\n\n if (value) {\n window.location.href = `${redirectPath}?keyword=${value}`;\n }\n }\n\n enableEraseButton() {\n (this.dom.submitButton as HTMLElement).classList.add('search-menu__button--hidden');\n (this.dom.eraseButton as HTMLElement).classList.remove('search-menu__button--hidden');\n }\n\n enableSubmitButton() {\n (this.dom.submitButton as HTMLElement).classList.remove('search-menu__button--hidden');\n (this.dom.eraseButton as HTMLElement).classList.add('search-menu__button--hidden');\n }\n\n handleEraseInput() {\n this.enableSubmitButton();\n (this.dom.input as HTMLElement).focus();\n }\n\n handleInput() {\n const value = (this.dom.input as HTMLInputElement).value;\n\n if (value) {\n this.enableEraseButton();\n return;\n }\n\n this.enableSubmitButton();\n }\n\n handleInputFocus() {\n this.el.classList.add('search-menu--focused');\n }\n\n handleInputBlur() {\n this.el.classList.remove('search-menu--focused');\n }\n\n handleDesktopDropdownOpen(ev: Event) {\n const trigger = ev.currentTarget as HTMLElement;\n if (this.el.classList.contains('search-menu--open')) {\n this.closeDropdown(trigger);\n return;\n }\n\n this.openDropdown(trigger);\n }\n\n openDropdown(trigger: HTMLElement) {\n this.el.classList.add('search-menu--open');\n trigger.setAttribute('aria-expanded', 'true');\n\n document.addEventListener('click', this.outsideClickListener);\n document.addEventListener('keydown', this.escapeKeyListener);\n }\n\n closeDropdown(trigger: HTMLElement) {\n this.el.classList.remove('search-menu--open');\n trigger.setAttribute('aria-expanded', 'false');\n\n document.removeEventListener('click', this.outsideClickListener);\n document.removeEventListener('keydown', this.escapeKeyListener);\n }\n\n handleEscapeKeyPress(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n const trigger = this.dom.desktopTrigger as HTMLElement;\n this.closeDropdown(trigger);\n }\n }\n\n handleOutsideClick(event: Event) {\n const isClickInside = this.el.contains(event.target as Node);\n if (!isClickInside) {\n const trigger = this.dom.desktopTrigger as HTMLElement;\n this.closeDropdown(trigger);\n }\n }\n}\n\nexport default SearchMenu;"],"names":["SearchMenu","Component","el","__publicField","ev","value","redirectPath","trigger","event"],"mappings":"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"}