{"version":3,"file":"webinar-collection.js","sources":["../../../../src/assets/scripts/webinar-collection.entry.js"],"sourcesContent":["import { queryString } from '@helpers/QueryString';\nimport { throttle } from 'lodash';\nimport { getApiWebinarapi } from '@_api';\n\nconst queryFilterByLv1Key = 'webinar-filter-by-lv1';\nconst queryFilterByLv2Key = 'webinar-filter-by-lv2';\nconst queryFilterByCountryKey = 'webinar-filter-by-country';\nconst queryFilterByLanguageKey = 'webinar-filter-by-language';\nconst queryFilterByTypeKey = 'webinar-filter-by-type';\nconst queryFilterByCertificateKey = 'webinar-filter-by-certificate';\n\nwindow.arjoWebinarCollectionModule =\n window.arjoWebinarCollectionModule ||\n (() => {\n const state = {\n isInitialized: false,\n elements: {},\n };\n\n const classNamePrefix = 'arjo-o-webinar-collection';\n\n const setUp = () => {\n const elements = [...document.querySelectorAll(`.${classNamePrefix}`)];\n elements.forEach(async (element) => {\n let isLoading = false;\n\n let hasMoreData = window.hasMoreWebinar !== undefined ? window.hasMoreWebinar : true;\n\n const dropdowns = element.querySelectorAll('.arjo-m-dropdown');\n\n const filterLv1Id = element.dataset.filterLv1Id;\n const filterLv2Id = element.dataset.filterLv2Id;\n const listId = element.dataset.listId;\n const blockId = element.dataset.blockId;\n\n if (!filterLv1Id || !filterLv2Id || !listId || !blockId) return;\n\n const queryFilterByLv1 = queryString.getQuery(queryFilterByLv1Key) || null;\n const queryFilterByLv2 = queryString.getQuery(queryFilterByLv2Key) || null;\n const queryFilterByCountry = queryString.getQuery(queryFilterByCountryKey) || null;\n const queryFilterByLanguage = queryString.getQuery(queryFilterByLanguageKey) || null;\n const queryFilterByType = queryString.getQuery(queryFilterByTypeKey) || null;\n const queryFilterByCertificate = queryString.getQuery(queryFilterByCertificateKey) || null;\n\n const listBlock = window.arjoWebinarListModule.getElement(listId);\n const filterLv1Block = window.arjoFilterProductListModule.getElement(filterLv1Id);\n const filterLv2Block = window.arjoFilterProductListModule.getElement(filterLv2Id);\n\n const scrollToWebinarList = () => {\n if (\n queryFilterByLv1 ||\n queryFilterByLv2 ||\n queryFilterByCountry ||\n queryFilterByLanguage ||\n queryFilterByType ||\n queryFilterByCertificate\n ) {\n element.scrollIntoViewEx();\n }\n };\n\n const renderDropdown = (filters) => {\n filters?.forEach((filter) => {\n const filterElement = [...dropdowns].find((dropdown) => dropdown.dataset.dropdownId === filter.dropdownId);\n\n if (!filterElement) return;\n const optionInputs = filterElement.querySelectorAll('.arjo-m-dropdown__options-input');\n\n [...optionInputs].forEach((input) => {\n const label = filterElement.querySelector(`.arjo-m-dropdown__options-label[for=\"${input.id}\"]`);\n\n const option = filter?.options.find((option) => option?.value === input.value && !option.hidden);\n\n if (!option && input?.value) {\n label.hidden = true;\n return;\n }\n\n label.removeAttribute('hidden');\n\n const currentLabelSum = label.querySelector(`.sum`);\n\n if (!currentLabelSum) return;\n\n currentLabelSum.textContent = ` (${option?.count ?? 0}/${option?.total ?? 0})`;\n });\n });\n };\n\n const getWebinars = async (skipDefault) => {\n try {\n isLoading = true;\n element.classList.add(`${classNamePrefix}--show-spinner`);\n const queryStringObject = queryString.getQueryStringAsObject();\n const listData = listBlock.currentState?.data;\n const skip = skipDefault === 0 ? skipDefault : listData?.length;\n\n const response = await getApiWebinarapi({\n 'webinar-filter-by-certificate': queryStringObject['webinar-filter-by-certificate'],\n 'webinar-filter-by-country': queryStringObject['webinar-filter-by-country'],\n 'webinar-filter-by-lv1': queryStringObject['webinar-filter-by-lv1'],\n 'webinar-filter-by-lv2': queryStringObject['webinar-filter-by-lv2'],\n 'webinar-filter-by-language': queryStringObject['webinar-filter-by-language'],\n 'webinar-filter-by-type': queryStringObject['webinar-filter-by-type'],\n skip,\n });\n\n if (!response || !response.success) return;\n\n const data = response.data;\n const concatenationData = skipDefault !== undefined ? data?.webinars : [...listData, ...data?.webinars];\n listBlock.setData(concatenationData);\n listBlock.setState(listBlock.currentState);\n hasMoreData = data?.hasMore;\n if (hasMoreData) {\n handleInfiniteScroll();\n }\n renderDropdown(data?.filterGroups);\n } catch (error) {\n console.log(error);\n } finally {\n isLoading = false;\n element.classList.remove(`${classNamePrefix}--show-spinner`);\n }\n };\n\n const getWebinarOnPushingState = async ({ data, unused, url, init }) => {\n if (!init) {\n await getWebinars(0);\n window.history.pushState(data, unused, url);\n }\n };\n\n const getFilterDefaultOption = (options, selectedValue) => {\n return options.map((option) => {\n if (option.value === selectedValue?.value) {\n return { ...option, isDefault: true };\n }\n\n return option;\n });\n };\n\n const initFilterLv1 = (options) => {\n const selectedValue = options.find((opt) => opt.value === queryFilterByLv1 ?? opt.isDefault);\n\n const defaultOptions = getFilterDefaultOption(options, selectedValue);\n\n filterLv1Block.setState({\n expanded: false,\n currentValue: selectedValue && selectedValue?.value,\n options: defaultOptions,\n init: true,\n });\n };\n\n const initFilterLv2 = (options) => {\n const selectedValue = options.find((opt) => opt.value === queryFilterByLv2 ?? opt.isDefault);\n\n const defaultOptions = getFilterDefaultOption(options, selectedValue);\n\n filterLv2Block.setState({\n expanded: false,\n currentValue: selectedValue && selectedValue?.value,\n options: defaultOptions,\n init: true,\n });\n };\n\n const initDropdownData = () => {\n for (const dropdown of dropdowns) {\n const dropdownName = dropdown.dataset.name;\n if (dropdownName === 'country' && queryFilterByCountry) {\n dropdown.dispatchEvent(\n new CustomEvent('optionChange', {\n detail: {\n value: queryFilterByCountry,\n init: true,\n },\n })\n );\n } else if (dropdownName === 'language' && queryFilterByLanguage) {\n dropdown.dispatchEvent(\n new CustomEvent('optionChange', {\n detail: {\n value: queryFilterByLanguage,\n init: true,\n },\n })\n );\n } else if (dropdownName === 'type' && queryFilterByType) {\n dropdown.dispatchEvent(new CustomEvent('optionChange', { detail: { value: queryFilterByType, init: true } }));\n } else if (dropdownName === 'certificate' && queryFilterByCertificate) {\n dropdown.dispatchEvent(\n new CustomEvent('optionChange', {\n detail: {\n value: queryFilterByCertificate,\n init: true,\n },\n })\n );\n }\n }\n };\n\n const initData = (data) => {\n listBlock.setData(data);\n listBlock.setState({\n filterByLv1Category: filterLv1Block.currentValue,\n filterByLv2Category: filterLv2Block.currentValue,\n dropdowns: {\n countryLabel: queryFilterByCountry,\n languageLabel: queryFilterByLanguage,\n typeLabel: queryFilterByType,\n certificateLabel: queryFilterByCertificate,\n toString() {\n return `${this.countryLabel ?? null} | ${this.languageLabel ?? null} | ${this.typeLabel ?? null} | ${this.certificateLabel ?? null}`;\n },\n },\n });\n\n scrollToWebinarList();\n initDropdownData();\n };\n\n state.elements[blockId] = (() => {\n return {\n initData,\n initFilterLv1,\n initFilterLv2,\n };\n })();\n\n const lv1FilterHandler = async (e) => {\n const label = e.detail.filterForTracking;\n const FilterTracker = window.GA4?.analyticsGa4?.FilterTracker;\n\n if (FilterTracker && label && listBlock.currentState.filterByLv2Label) {\n FilterTracker.pushFilter(label, listBlock.currentState.filterByLv2Label, listBlock.currentState.dropdowns?.toString());\n }\n\n const value = e.detail.filterForValue;\n\n if (value) {\n await getWebinarOnPushingState({\n data: null,\n unused: '',\n url: queryString.getUrlQueryString(queryFilterByLv1Key, value, true).href,\n init: e.detail.init,\n });\n }\n\n listBlock.setState({\n filterByLv1Category: value,\n filterByLv1Label: label,\n filterByLv2Category: listBlock.currentState.filterByLv2Category,\n filterByLv2Label: listBlock.currentState.filterByLv2Label,\n });\n };\n\n const lv2FilterHandler = async (e) => {\n const label = e.detail.filterForTracking;\n const FilterTracker = window.GA4?.analyticsGa4?.FilterTracker;\n\n if (FilterTracker && label && listBlock.currentState.filterByLv1Label) {\n FilterTracker.pushFilter(listBlock.currentState.filterByLv1Label, label, listBlock.currentState.dropdowns?.toString());\n }\n\n const value = e.detail.filterForValue;\n\n if (value) {\n await getWebinarOnPushingState({\n data: null,\n unused: '',\n url: queryString.getUrlQueryString(queryFilterByLv2Key, value, true).href,\n init: e.detail.init,\n });\n }\n\n listBlock.setState({\n filterByLv1Category: listBlock.currentState.filterByLv1Category,\n filterByLv1Label: listBlock.currentState.filterByLv1Label,\n filterByLv2Category: value?.toLowerCase(),\n filterByLv2Label: label,\n });\n };\n\n window.removeEventListener(`filterProductList:${filterLv1Id}`, lv1FilterHandler);\n window.addEventListener(`filterProductList:${filterLv1Id}`, lv1FilterHandler);\n\n window.removeEventListener(`filterProductList:${filterLv2Id}`, lv2FilterHandler);\n window.addEventListener(`filterProductList:${filterLv2Id}`, lv2FilterHandler);\n\n // set label text\n const setLabelText = (label, text) => {\n label.textContent = text;\n };\n\n // dropdown handle change\n const handleDropdownChange = async (event) => {\n // default text\n const defaultCountryInput = element.querySelector('input[name=\"country\"][value=\"\"]');\n const defaultCountryText = defaultCountryInput?.dataset?.label;\n const defaultLanguageInput = element.querySelector('input[name=\"language\"][value=\"\"]');\n const defaultLanguageText = defaultLanguageInput?.dataset?.label;\n const defaultTypeInput = element.querySelector('input[name=\"type\"][value=\"\"]');\n const defaultTypeText = defaultTypeInput?.dataset?.label;\n const defaultCertificateInput = element.querySelector('input[name=\"certificate\"][value=\"\"]');\n const defaultCertificateText = defaultCertificateInput?.dataset?.label;\n\n const target = event.target;\n const allText = window?.webinarConfig?.allText || 'All';\n\n const inputElement = event.detail.inputElement;\n const trackingLabel = inputElement?.dataset?.trackingLabel ?? null;\n\n const value = event?.detail?.value || '';\n\n if (target?.dataset?.name === 'country') {\n const label = element?.querySelector(`label[for=\"${defaultCountryInput?.id}\"]`);\n\n listBlock.setState({ dropdowns: { ...listBlock.currentState.dropdowns, countryLabel: trackingLabel } });\n\n await getWebinarOnPushingState({\n data: null,\n unused: '',\n url: queryString.getUrlQueryString(queryFilterByCountryKey, value, true).href,\n init: event.detail.init,\n });\n\n label && setLabelText(label, value ? allText : defaultCountryText);\n } else if (target?.dataset?.name === 'language') {\n const label = element?.querySelector(`label[for=\"${defaultLanguageInput?.id}\"]`);\n\n listBlock.setState({ dropdowns: { ...listBlock.currentState.dropdowns, languageLabel: trackingLabel } });\n\n await getWebinarOnPushingState({\n data: null,\n unused: '',\n url: queryString.getUrlQueryString(queryFilterByLanguageKey, value, true).href,\n init: event.detail.init,\n });\n\n label && setLabelText(label, value ? allText : defaultLanguageText);\n } else if (target?.dataset?.name === 'type') {\n const label = element?.querySelector(`label[for=\"${defaultTypeInput?.id}\"]`);\n\n await getWebinarOnPushingState({\n data: null,\n unused: '',\n url: queryString.getUrlQueryString(queryFilterByTypeKey, value, true).href,\n init: event.detail.init,\n });\n\n listBlock.setState({ dropdowns: { ...listBlock.currentState.dropdowns, typeLabel: trackingLabel } });\n\n label && setLabelText(label, value ? allText : defaultTypeText);\n } else if (target?.dataset?.name === 'certificate') {\n const label = element?.querySelector(`label[for=\"${defaultCertificateInput?.id}\"]`);\n\n await getWebinarOnPushingState({\n data: null,\n unused: '',\n url: queryString.getUrlQueryString(queryFilterByCertificateKey, value, true).href,\n init: event.detail.init,\n });\n\n listBlock.setState({ dropdowns: { ...listBlock.currentState.dropdowns, certificateLabel: trackingLabel } });\n\n label && setLabelText(label, value ? allText : defaultCertificateText);\n }\n\n const FilterTracker = window.GA4?.analyticsGa4?.FilterTracker;\n\n FilterTracker?.pushFilter(\n listBlock.currentState.filterByLv1Label,\n listBlock.currentState.filterByLv2Label,\n listBlock.currentState.dropdowns?.toString()\n );\n };\n\n for (const dropdown of dropdowns) {\n dropdown.addEventListener('dropdownChange', handleDropdownChange);\n }\n\n const handleInfiniteScroll = () => {\n const loadMoreOnScroll = () => {\n if (!hasMoreData) {\n window.removeEventListener('scroll', loadMoreOnScroll);\n return;\n }\n\n const throttler = throttle(async () => {\n const cards = element.querySelectorAll(`.arjo-o-webinar-card`);\n\n if (!cards?.length || isLoading) return;\n\n const gridHeight = element.offsetTop + element.scrollHeight;\n const windowScrollPosition = window.scrollY + window.innerHeight;\n const threshold = 100;\n\n if (windowScrollPosition >= gridHeight - threshold) {\n // Trigger the function to load more content\n await getWebinars();\n }\n }, 1000);\n\n throttler();\n };\n\n window.addEventListener('scroll', loadMoreOnScroll);\n };\n\n handleInfiniteScroll();\n\n // Dispatch custom event to help outside script add their function\n window.dispatchEvent(new CustomEvent('webinarLoaded'));\n });\n };\n\n const init = () => {\n if (state.isInitialized) return;\n setUp();\n state.isInitialized = true;\n };\n\n const getElement = (id) => {\n return state.elements[id];\n };\n\n return { init, getElement };\n })();\n\nwindow.addEventListener('load', window.arjoWebinarCollectionModule.init);\n"],"names":["queryFilterByLv1Key","queryFilterByLv2Key","queryFilterByCountryKey","queryFilterByLanguageKey","queryFilterByTypeKey","queryFilterByCertificateKey","state","classNamePrefix","setUp","element","isLoading","hasMoreData","dropdowns","filterLv1Id","filterLv2Id","listId","blockId","queryFilterByLv1","queryString","queryFilterByLv2","queryFilterByCountry","queryFilterByLanguage","queryFilterByType","queryFilterByCertificate","listBlock","filterLv1Block","filterLv2Block","scrollToWebinarList","renderDropdown","filters","filter","filterElement","dropdown","input","label","option","currentLabelSum","getWebinars","skipDefault","queryStringObject","listData","_a","skip","response","getApiWebinarapi","data","concatenationData","handleInfiniteScroll","error","getWebinarOnPushingState","unused","url","init","getFilterDefaultOption","options","selectedValue","initFilterLv1","opt","defaultOptions","initFilterLv2","initDropdownData","dropdownName","initData","lv1FilterHandler","e","FilterTracker","_b","_c","value","lv2FilterHandler","setLabelText","text","handleDropdownChange","event","defaultCountryInput","defaultCountryText","defaultLanguageInput","defaultLanguageText","defaultTypeInput","defaultTypeText","defaultCertificateInput","defaultCertificateText","_d","target","allText","_e","inputElement","trackingLabel","_f","_g","_h","_i","_j","_k","_m","_l","_n","loadMoreOnScroll","throttle","cards","gridHeight","id"],"mappings":"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"}