\n\n\n\n\n\n","import mod from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??ref--0-0!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatePicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../../node_modules/babel-loader/lib/index.js??ref--0-0!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatePicker.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"","\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n\n
\n
\n \n \n
\n
\n
\n
\n\n\n\n\n \n","import { render, staticRenderFns } from \"./DatePicker.vue?vue&type=template&id=a3444f34\"\nimport script from \"./DatePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DatePicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./DatePicker.vue?vue&type=style&index=0&id=a3444f34&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"date-picker-container uk-margin-small-bottom uk-margin-bottom@xs uk-margin-medium-bottom@m\"},[_c('label',{staticClass:\"uk-position-relative\",on:{\"focusin\":_vm.toggleIcon,\"focusout\":_vm.toggleIcon}},[_c('v-date-picker',{ref:\"calendar\",staticClass:\"date-picker\",attrs:{\"locale\":_vm.calLocale,\"mode\":\"range\",\"value\":_vm.selectedDate,\"theme\":_vm.theme,\"transition\":'none',\"update-on-input\":true,\"attributes\":_vm.calendarEvents,\"is-inline\":!_vm.isMobile,\"popover\":{visibility: \"focus\", placement: \"bottom\"},\"input-props\":{ placeholder: _vm.$t(\"filters.date_range\"), readonly: \"readonly\", class: \"uk-form-small uk-input uk-text-medium\" },\"color\":\"blue\"},on:{\"input\":_vm.setDate}}),_vm._v(\" \"),(_vm.isMobile)?_c('span',{staticClass:\"uk-position-absolute uk-position-center-right uk-margin-xsmall-right uk-icon\",class:{ 'uk-text-link uk-icon-rotate': _vm.isOpen },attrs:{\"uk-icon\":\"chevron-down\"}}):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=1f4fed52\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=1f4fed52&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"uk-grid uk-grid-large\",attrs:{\"uk-grid\":\"\"}},[_c('div',{staticClass:\"uk-width-1-1 uk-width-1-3@m uk-width-1-4@l\"},[_c('div',{staticClass:\"dr-webinars-sidebar\"},[_c('dr-date-picker'),_vm._v(\" \"),_c('div',{staticClass:\"uk-margin-medium-bottom@m\"},[_c('dr-checkbox-group')],1)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"uk-width-expand dr-webinars-main\"},[_c('div',{staticClass:\"dr-webinars-main-wrapper\"},[_c('dr-active-filter'),_vm._v(\" \"),_c('dr-webinar-list')],1)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from \"vue\";\nimport Router from \"vue-router\";\nimport Index from \"./components/Index.vue\";\n\nVue.use(Router);\n\nconst getBasePath = () => {\n\t// Add safety check for window.webinars_data\n\tif (!window.webinars_data) {\n\t\tconsole.error(\"window.webinars_data is undefined. This might indicate that webinars router is being loaded incorrectly.\");\n\t\treturn \"/webinars\"; // Default fallback\n\t}\n\n\tif (window.webinars_data.locale === \"en\") {\n\t\treturn \"/webinars\";\n\t}\n\t// see if url path begins with jp-refresh or jp...\n\tconst path = window.location.pathname;\n\tif (path.startsWith(\"/jp-refresh\")) {\n\t\treturn \"/jp-refresh/webinars\";\n\t}\n\n\treturn \"/jp/webinars\";\n};\n\nexport default new Router({\n\tmode: \"history\",\n\t// base: \"/webinars\", //un-comment this line for local environment\n\tbase: getBasePath(),\n\troutes: [\n\t\t{\n\t\t\tpath: \"/\",\n\t\t\tname: \"index\",\n\t\t\tcomponent: Index,\n\t\t\t// Automatic region selection for non-en locales\n\t\t\tbeforeEnter: (to, from, next) => {\n\t\t\t\t// Add safety check for window.webinars_data\n\t\t\t\tif (!window.webinars_data || (to.fullPath === \"/\" && from.fullPath === \"/\" && Object.keys(from.query).length === 0)) {\n\t\t\t\t\tif (window.webinars_data && window.webinars_data.locale === \"ja\") {\n\t\t\t\t\t\tnext({ name: \"index\", query: { regions: \"APAC\" } });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnext();\n\t\t\t},\n\t\t},\n\t],\n});\n","import Vue from \"vue\";\nimport VueI18n from \"vue-i18n\";\n\nVue.use(VueI18n);\n\nconst dateTimeFormats = {\n\ten: {\n\t\tshort: {\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"short\",\n\t\t\tday: \"numeric\",\n\t\t},\n\t\tlong: {\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"long\",\n\t\t\tday: \"numeric\",\n\t\t\thour: \"numeric\",\n\t\t\tminute: \"numeric\",\n\t\t\thour12: true,\n\t\t},\n\t},\n\tja: {\n\t\tshort: {\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"short\",\n\t\t\tday: \"numeric\",\n\t\t},\n\t\tlong: {\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"long\",\n\t\t\tday: \"numeric\",\n\t\t\thour: \"numeric\",\n\t\t\tminute: \"numeric\",\n\t\t\thour12: true,\n\t\t},\n\t},\n};\n\n// Transform translation structure for proper access\nconst translations = {};\nif (window.webinars_data.translation && window.webinars_data.translation.dictionary && window.webinars_data.translation.dictionary.default) {\n\t// Copy translations from nested structure to top level\n\tObject.assign(translations, window.webinars_data.translation.dictionary.default);\n}\n\n// Create VueI18n instance with options\nexport default new VueI18n({\n\tlocale: \"default\",\n\tfallbackLocale: \"default\",\n\tsilentFallbackWarn: true,\n\tmessages: { default: translations },\n\tdateTimeFormats,\n});\n","import axios from \"axios\";\n\nconst instance = axios.create({\n\theaders: { \"X-REQUESTED-WITH\": \"XMLHttpRequest\", \"Access-Control-Allow-Origin\": \"*\" },\n});\n\ninstance.interceptors.response.use(\n\t(config) => {\n\t\treturn config;\n\t},\n\t(error) => {\n\t\treturn Promise.reject(error);\n\t}\n);\n\nexport default instance;\nexport const getWebinars = () => instance.get(window.webinars_data.route);\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport router from \"../router\";\nimport i18n from \"../i18n\";\nimport * as api from \"./../helpers/api\";\n\nVue.use(Vuex);\n\nlet $store = null;\n\nconst state = {\n\twebinarsList: [],\n\tfilteredWebinarsList: [],\n\tpastWebinarsCounter: 0,\n\tupcomingWebinarsCounter: 0,\n\tcheckedFilter: [],\n\tactiveFilters: {},\n\tfilters: {},\n\tavailableFilters: {},\n\tcalendarWebinars: [],\n\tselectedDate: {},\n\tfiltersInfo: {},\n\tquery: {},\n\tlocalQueryParams: {},\n\tcurrentPage: 1,\n\tqueryNotFound: false,\n};\n\n// actions\nconst actions = {\n\t//get main data\n\tasync getData({ dispatch }) {\n\t\t//for access to global Store\n\t\t$store = this;\n\t\ttry {\n\t\t\tawait api.getWebinars().then((response) => {\n\t\t\t\tif (response.data) {\n\t\t\t\t\tdispatch(\"setData\", response.data);\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t},\n\t// Alias for getData to maintain compatibility with updated components\n\tfetchWebinars({ dispatch }) {\n\t\tdispatch(\"getData\");\n\t},\n\t// Initialize filters from the store\n\tinitializeFilters({ dispatch }) {\n\t\t// This is just an alias for now, as the filters are already initialized in setData\n\t\t// We can add specific initialization logic here if needed in the future\n\t},\n\tsetData: ({ commit, dispatch }, response) => {\n\t\tconst webinarsList = [...response.webinars];\n\t\tconst filters = { ...response.filters };\n\t\t// set data to store\n\t\tcommit(\"SET_DATA\", { webinarsList, filters });\n\t\t//get data about filters\n\t\tdispatch(\"setFiltersInfo\");\n\n\t\t// Check if there are query parameters in the URL\n\t\tif (Object.keys(router.currentRoute.query).length) {\n\t\t\t// Load query parameters and apply filters\n\t\t\tdispatch(\"loadQueryParams\", router.currentRoute.query);\n\t\t} else {\n\t\t\t//set query params from URL\n\t\t\tdispatch(\"setQueryParams\");\n\t\t\t//filter webinars\n\t\t\tdispatch(\"filterWebinars\");\n\t\t\t// Set upcoming and past webinars\n\t\t\tdispatch(\"setUpcomingPastWebinars\");\n\t\t\t// Set webinars to calendar\n\t\t\tdispatch(\"setWebinarsToCalendar\", webinarsList);\n\t\t}\n\t},\n\tsetFiltersInfo: ({ commit, state }) => {\n\t\tconst filtersInfo = {};\n\t\tconst availableFilters = {};\n\n\t\t// Collect filter values that are used by actual webinars\n\t\tstate.webinarsList.forEach((webinar) => {\n\t\t\tif (!webinar.filters) return;\n\n\t\t\tfor (let filterCategory in webinar.filters) {\n\t\t\t\tif (!availableFilters[filterCategory]) {\n\t\t\t\t\tavailableFilters[filterCategory] = new Set();\n\t\t\t\t}\n\n\t\t\t\twebinar.filters[filterCategory].forEach((filterValue) => {\n\t\t\t\t\tconst value = typeof filterValue === \"object\" ? filterValue.label : filterValue;\n\t\t\t\t\tavailableFilters[filterCategory].add(value);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Process each filter category\n\t\tfor (let filterCategory in state.filters) {\n\t\t\tfiltersInfo[filterCategory] = {\n\t\t\t\tid: getFilterId(filterCategory),\n\t\t\t\titems: {},\n\t\t\t};\n\n\t\t\t// Only include filter items that are used by at least one webinar\n\t\t\tconst filteredItems = state.filters[filterCategory].filter((filterItem) => {\n\t\t\t\t// Check if this filter category has any webinars using it\n\t\t\t\treturn availableFilters[filterCategory] && availableFilters[filterCategory].has(filterItem.label);\n\t\t\t});\n\n\t\t\tfilteredItems.forEach((filterItem, index) => {\n\t\t\t\tfiltersInfo[filterCategory].items[filterItem.label] = {\n\t\t\t\t\tid: index,\n\t\t\t\t\tcount: 0,\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\tcommit(\"SET_FILTERS_INFO\", filtersInfo);\n\n\t\t// Update filters to include only those that have webinars\n\t\tconst updatedFilters = {};\n\t\tfor (let filterCategory in state.filters) {\n\t\t\tconst filteredCategoryItems = state.filters[filterCategory].filter((filterItem) => {\n\t\t\t\treturn filtersInfo[filterCategory].items[filterItem.label] !== undefined;\n\t\t\t});\n\n\t\t\t// Only include non-empty filter categories\n\t\t\tif (filteredCategoryItems.length > 0) {\n\t\t\t\tupdatedFilters[filterCategory] = filteredCategoryItems;\n\t\t\t}\n\t\t}\n\n\t\tcommit(\"UPDATE_FILTERS\", updatedFilters);\n\n\t\tfunction getFilterId(filterCategory) {\n\t\t\treturn Object.keys(state.filters).indexOf(filterCategory);\n\t\t}\n\t},\n\tsetQueryParams: ({ commit, state }) => {\n\t\tconst query = router.currentRoute.query;\n\t\tcommit(\"SET_QUERY\", query);\n\t\t// set active filters from query\n\t\tfor (let filterCategory in state.filters) {\n\t\t\tif (query[filterCategory]) {\n\t\t\t\tconst queryFilterValues = query[filterCategory].split(\",\");\n\t\t\t\tqueryFilterValues.forEach((queryFilterValue) => {\n\t\t\t\t\tconst filterIndex = getFilterIndex(queryFilterValue, state.filters[filterCategory]);\n\t\t\t\t\tif (filterIndex !== -1) {\n\t\t\t\t\t\tcommit(\"SET_ACTIVE_FILTER\", {\n\t\t\t\t\t\t\tfilterCategory,\n\t\t\t\t\t\t\tfilterIndex,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction getFilterIndex(filterLabel, filterItems) {\n\t\t\treturn filterItems.findIndex((item) => item.label === filterLabel);\n\t\t}\n\t},\n\tfilterWebinars: ({ commit, state, dispatch }) => {\n\t\tlet filteredWebinarsList = [...state.webinarsList];\n\n\t\t// If there are no active filters, return all webinars\n\t\tif (Object.keys(state.activeFilters).length === 0) {\n\t\t\tcommit(\"SET_FILTERED_WEBINARS_LIST\", filteredWebinarsList);\n\t\t\t// Update calendar events with all webinars\n\t\t\tdispatch(\"setWebinarsToCalendar\", filteredWebinarsList);\n\t\t\treturn;\n\t\t}\n\n\t\t// Filter webinars by active filters\n\t\tfor (let filterCategory in state.activeFilters) {\n\t\t\tif (state.activeFilters[filterCategory].length) {\n\t\t\t\tfilteredWebinarsList = filteredWebinarsList.filter((webinar) => {\n\t\t\t\t\t// Check if webinar has filters for this category\n\t\t\t\t\tif (!webinar.filters || !webinar.filters[filterCategory]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get the webinar's filter values for this category\n\t\t\t\t\tconst webinarFilterValues = webinar.filters[filterCategory];\n\n\t\t\t\t\t// Check if any of the webinar's filter values match any of the active filter values\n\t\t\t\t\tconst hasMatch = webinarFilterValues.some((filterValue) => {\n\t\t\t\t\t\t// Handle both string and object filter values\n\t\t\t\t\t\tconst value = typeof filterValue === \"object\" ? filterValue.label : filterValue;\n\n\t\t\t\t\t\t// Check if this value is in the active filters (case-insensitive)\n\t\t\t\t\t\tconst isMatch = state.activeFilters[filterCategory].some((activeFilter) => {\n\t\t\t\t\t\t\t// Convert both to lowercase for case-insensitive comparison\n\t\t\t\t\t\t\tconst activeFilterLower = activeFilter.toLowerCase();\n\t\t\t\t\t\t\tconst valueLower = value.toLowerCase();\n\n\t\t\t\t\t\t\t// Check for exact match or if one contains the other\n\t\t\t\t\t\t\treturn activeFilterLower === valueLower || activeFilterLower.includes(valueLower) || valueLower.includes(activeFilterLower);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn isMatch;\n\t\t\t\t\t});\n\n\t\t\t\t\treturn hasMatch;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tcommit(\"SET_FILTERED_WEBINARS_LIST\", filteredWebinarsList);\n\t\t// Update calendar events with filtered webinars\n\t\tdispatch(\"setWebinarsToCalendar\", filteredWebinarsList);\n\t},\n\tsetUpcomingPastWebinars: ({ commit, state }) => {\n\t\tconst upcomingWebinars = state.filteredWebinarsList.filter((webinar) => webinar.status === \"upcoming\");\n\t\tconst pastWebinars = state.filteredWebinarsList.filter((webinar) => webinar.status === \"past\");\n\n\t\t// Count upcoming and past webinars\n\t\tconst upcomingWebinarsCounter = upcomingWebinars.length;\n\t\tconst pastWebinarsCounter = pastWebinars.length;\n\n\t\t// Add featured webinar to count if it exists\n\t\tlet totalUpcomingCounter = upcomingWebinarsCounter;\n\t\tif (window.webinars_data.featured_webinar && window.webinars_data.featured_webinar.title) {\n\t\t\ttotalUpcomingCounter += 1;\n\t\t}\n\n\t\tcommit(\"SET_WEBINARS_COUNTER\", {\n\t\t\tupcomingWebinarsCounter: totalUpcomingCounter,\n\t\t\tpastWebinarsCounter,\n\t\t});\n\t},\n\tsetActiveFilter: ({ commit, dispatch, state }, { filterCategory, filterIndex }) => {\n\t\tcommit(\"SET_ACTIVE_FILTER\", { filterCategory, filterIndex });\n\t\tdispatch(\"updateQueryParams\");\n\t\tdispatch(\"filterWebinars\");\n\t\tdispatch(\"setUpcomingPastWebinars\");\n\t},\n\tremoveActiveFilter: ({ commit, dispatch, state }, { filterCategory, filterIndex }) => {\n\t\tcommit(\"REMOVE_ACTIVE_FILTER\", { filterCategory, filterIndex });\n\t\tdispatch(\"updateQueryParams\");\n\t\tdispatch(\"filterWebinars\");\n\t\tdispatch(\"setUpcomingPastWebinars\");\n\t},\n\tclearAllFilters: ({ commit, dispatch }) => {\n\t\tcommit(\"CLEAR_ALL_FILTERS\");\n\t\tdispatch(\"updateQueryParams\");\n\t\tdispatch(\"filterWebinars\");\n\t\tdispatch(\"setUpcomingPastWebinars\");\n\t},\n\tupdateQueryParams: ({ state }) => {\n\t\tconst query = {};\n\t\t// Add active filters to query\n\t\tfor (let filterCategory in state.activeFilters) {\n\t\t\tif (state.activeFilters[filterCategory].length) {\n\t\t\t\tquery[filterCategory] = state.activeFilters[filterCategory].join(\",\");\n\t\t\t}\n\t\t}\n\n\t\t// Add date range to query if selected\n\t\tif (state.selectedDate && state.selectedDate.start && state.selectedDate.end) {\n\t\t\t// Format dates as YYYY-MM-DD for URL\n\t\t\tconst formatDate = (date) => {\n\t\t\t\tconst d = new Date(date);\n\t\t\t\treturn `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, \"0\")}-${String(d.getDate()).padStart(2, \"0\")}`;\n\t\t\t};\n\n\t\t\tquery.date = `${formatDate(state.selectedDate.start)},${formatDate(state.selectedDate.end)}`;\n\t\t}\n\n\t\trouter.push({ query }).catch(() => {});\n\t},\n\tsetPageParams: ({ commit }, page) => {\n\t\tcommit(\"SET_CURRENT_PAGE\", page);\n\t},\n\tloadQueryParams: ({ commit, dispatch }, query) => {\n\t\tcommit(\"SET_QUERY\", query);\n\n\t\t// Process date parameter if present\n\t\tif (query.date) {\n\t\t\tconst dateParts = query.date.split(\",\");\n\t\t\tif (dateParts.length === 2) {\n\t\t\t\t// Create date object with start and end dates\n\t\t\t\tconst date = {\n\t\t\t\t\tstart: dateParts[0].replace(/-/g, \"/\"), // Replace hyphens with slashes for cross-browser compatibility\n\t\t\t\t\tend: dateParts[1].replace(/-/g, \"/\"),\n\t\t\t\t};\n\n\t\t\t\t// Send the received date to the store to draw the tag\n\t\t\t\tdispatch(\"setDateToStore\", date);\n\t\t\t\treturn; // Return early as setDateToStore already handles filtering\n\t\t\t}\n\t\t}\n\n\t\t// If no date parameter or invalid format, proceed with normal filtering\n\t\tdispatch(\"filterWebinars\");\n\t\tdispatch(\"setUpcomingPastWebinars\");\n\t},\n\tsetDateQueryParams: ({ dispatch, commit }, date) => {\n\t\tif (date) {\n\t\t\t// If date range is selected, send it to store\n\t\t\tdispatch(\"setDateToStore\", date);\n\t\t} else {\n\t\t\t// If date range is cleared, remove date filter\n\t\t\tdispatch(\"removeDateFilters\");\n\t\t}\n\t\t// Update pager\n\t\tcommit(\"SET_CURRENT_PAGE\", 1);\n\t},\n\tsetDateToStore: ({ dispatch, commit }, date) => {\n\t\t// We get the date from query, translate it into the desired format\n\t\tlet dateItem = Object.assign({}, date);\n\n\t\t// Format dates\n\t\tlet start = new Date(dateItem.start);\n\t\tlet end = new Date(dateItem.end);\n\n\t\t// Set end time to end of day\n\t\tend.setHours(23, 59, 59, 999);\n\n\t\t// If we chose the same day in range\n\t\tif (start.getDate() === end.getDate() && start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n\t\t\t// Then write in short format\n\t\t\tdateItem.value = i18n.d(start, \"short\", window.webinars_data.locale);\n\t\t} else {\n\t\t\t// If the days are different - then write them through a dash\n\t\t\tdateItem.value = i18n.d(start, \"short\", window.webinars_data.locale) + \" - \" + i18n.d(end, \"short\", window.webinars_data.locale);\n\t\t}\n\n\t\t// Save formatted dates\n\t\tdateItem.start = start;\n\t\tdateItem.end = end;\n\n\t\t// Write new data to store\n\t\tcommit(\"SET_SELECTED_DATE\", dateItem);\n\n\t\t// Filter webinars by date\n\t\tdispatch(\"filterByDate\");\n\t},\n\tremoveDateFilters: ({ commit, dispatch }) => {\n\t\t// Clear selected date\n\t\tcommit(\"SET_SELECTED_DATE\", {});\n\n\t\t// Reset current page\n\t\tcommit(\"SET_CURRENT_PAGE\", 1);\n\n\t\t// Filter webinars without date filter\n\t\tdispatch(\"filterWebinars\");\n\t\tdispatch(\"setUpcomingPastWebinars\");\n\n\t\t// Update URL (will remove date parameters)\n\t\tdispatch(\"updateQueryParams\");\n\t},\n\tremoveAllFilters: ({ commit, dispatch, state }) => {\n\t\tcommit(\"CLEAR_ALL_FILTERS\");\n\t\tdispatch(\"removeDateFilters\");\n\t\t// Update calendar events with all webinars\n\t\tdispatch(\"setWebinarsToCalendar\", state.webinarsList);\n\t},\n\tsetWebinarsToCalendar: ({ commit }, webinarsList) => {\n\t\t// create current date\n\t\tconst today = {\n\t\t\tkey: \"today\",\n\t\t\tdates: new Date(),\n\t\t\thighlight: \"blue\",\n\t\t};\n\t\t// we go through all the webinars and add them to the calendar\n\t\tlet calendarWebinars = webinarsList.map((webinar) => {\n\t\t\treturn {\n\t\t\t\tkey: \"webinars\",\n\t\t\t\tdates: new Date(webinar.date * 1000), // Convert Unix timestamp (seconds) to milliseconds\n\t\t\t\thighlight: \"gray\",\n\t\t\t\tid: webinar.id,\n\t\t\t\ttitle: webinar.title,\n\t\t\t};\n\t\t});\n\t\tcalendarWebinars.push(today);\n\t\tcommit(\"SET_WEBINARS_TO_CALENDAR\", calendarWebinars);\n\t},\n\tfilterByDate: ({ commit, dispatch, state }) => {\n\t\t// Get filtered webinars list based on active filters\n\t\tlet filteredWebinarsList;\n\t\tif (Object.keys(state.activeFilters).length > 0) {\n\t\t\tfilteredWebinarsList = state.filteredWebinarsList;\n\t\t} else {\n\t\t\tfilteredWebinarsList = state.webinarsList;\n\t\t}\n\n\t\t// Filter by date range\n\t\tif (state.selectedDate && state.selectedDate.start && state.selectedDate.end) {\n\t\t\tconst rangeStart = new Date(state.selectedDate.start);\n\t\t\tconst rangeEnd = new Date(state.selectedDate.end);\n\n\t\t\tfilteredWebinarsList = filteredWebinarsList.filter((webinar) => {\n\t\t\t\t// Convert Unix timestamp (seconds) to milliseconds\n\t\t\t\tconst webinarDate = new Date(webinar.date * 1000);\n\n\t\t\t\t// Check if webinar date is within the selected range\n\t\t\t\treturn webinarDate >= rangeStart && webinarDate <= rangeEnd;\n\t\t\t});\n\t\t}\n\n\t\t// Update filtered webinars list\n\t\tcommit(\"SET_FILTERED_WEBINARS_LIST\", filteredWebinarsList);\n\n\t\t// Update upcoming and past webinars counters\n\t\tdispatch(\"setUpcomingPastWebinars\");\n\n\t\t// Update calendar events with filtered webinars\n\t\tdispatch(\"setWebinarsToCalendar\", filteredWebinarsList);\n\t},\n};\n\n// mutations\nconst mutations = {\n\tSET_DATA: (state, { webinarsList, filters }) => {\n\t\tstate.webinarsList = webinarsList;\n\t\tstate.filters = filters;\n\t},\n\tSET_FILTERS_INFO: (state, filtersInfo) => {\n\t\tstate.filtersInfo = filtersInfo;\n\t},\n\tSET_QUERY: (state, query) => {\n\t\tstate.query = query;\n\t},\n\tSET_ACTIVE_FILTER: (state, { filterCategory, filterIndex }) => {\n\t\tif (!state.activeFilters[filterCategory]) {\n\t\t\tVue.set(state.activeFilters, filterCategory, []);\n\t\t}\n\n\t\tconst filterLabel = state.filters[filterCategory][filterIndex].label;\n\n\t\tif (!state.activeFilters[filterCategory].includes(filterLabel)) {\n\t\t\tstate.activeFilters[filterCategory].push(filterLabel);\n\t\t}\n\t},\n\tREMOVE_ACTIVE_FILTER: (state, { filterCategory, filterIndex }) => {\n\t\tconst filterLabel = state.filters[filterCategory][filterIndex].label;\n\n\t\tconst index = state.activeFilters[filterCategory].indexOf(filterLabel);\n\n\t\tif (index !== -1) {\n\t\t\tstate.activeFilters[filterCategory].splice(index, 1);\n\t\t}\n\t},\n\tCLEAR_ALL_FILTERS: (state) => {\n\t\tstate.activeFilters = {};\n\t},\n\tSET_FILTERED_WEBINARS_LIST: (state, filteredWebinarsList) => {\n\t\tstate.filteredWebinarsList = filteredWebinarsList;\n\t},\n\tSET_WEBINARS_COUNTER: (state, { upcomingWebinarsCounter, pastWebinarsCounter }) => {\n\t\tstate.upcomingWebinarsCounter = upcomingWebinarsCounter;\n\t\tstate.pastWebinarsCounter = pastWebinarsCounter;\n\t},\n\tSET_CURRENT_PAGE: (state, page) => {\n\t\tstate.currentPage = page;\n\t},\n\tSET_SELECTED_DATE: (state, value) => {\n\t\tstate.selectedDate = value;\n\t},\n\tUPDATE_FILTERS: (state, updatedFilters) => {\n\t\tstate.filters = updatedFilters;\n\t},\n\tSET_WEBINARS_TO_CALENDAR: (state, calendarWebinars) => {\n\t\tstate.calendarWebinars = calendarWebinars;\n\t},\n};\n\n// getters\nconst getters = {\n\tgetWebinarsList: (state) => state.webinarsList,\n\tgetFilteredWebinarsList: (state) => state.filteredWebinarsList,\n\tgetUpcomingWebinars: (state) => state.filteredWebinarsList.filter((webinar) => webinar.status === \"upcoming\"),\n\tgetPastWebinars: (state) => state.filteredWebinarsList.filter((webinar) => webinar.status === \"past\"),\n\tgetFilters: (state) => {\n\t\t// Transform state.filters into the format expected by the Checkbox-group component\n\t\tconst result = {};\n\t\tfor (let filterCategory in state.filters) {\n\t\t\t// Only include filter categories that have items\n\t\t\tif (state.filters[filterCategory] && state.filters[filterCategory].length > 0) {\n\t\t\t\tresult[filterCategory] = {\n\t\t\t\t\tid: Object.keys(state.filters).indexOf(filterCategory),\n\t\t\t\t\titems: state.filters[filterCategory],\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\tgetActiveFilters: (state) => state.activeFilters,\n\tgetUpcomingWebinarsCounter: (state) => state.upcomingWebinarsCounter,\n\tgetPastWebinarsCounter: (state) => state.pastWebinarsCounter,\n\tcurrentPage: (state) => state.currentPage,\n\tselectedDate: (state) => state.selectedDate,\n\tcalendarEvents: (state) => state.calendarWebinars,\n\tfilters: (state) => {\n\t\t// Transform state.filters into the format expected by the Checkbox-group component\n\t\tconst result = {};\n\t\tfor (let filterCategory in state.filters) {\n\t\t\t// Only include filter categories that have items\n\t\t\tif (state.filters[filterCategory] && state.filters[filterCategory].length > 0) {\n\t\t\t\tresult[filterCategory] = {\n\t\t\t\t\tid: Object.keys(state.filters).indexOf(filterCategory),\n\t\t\t\t\titems: state.filters[filterCategory],\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\tactiveFilters: (state) => state.activeFilters,\n\tcheckedFilter: (state) => {\n\t\tconst result = [];\n\t\tfor (let filterCategory in state.activeFilters) {\n\t\t\tif (state.activeFilters[filterCategory].length) {\n\t\t\t\tstate.activeFilters[filterCategory].forEach((filterLabel) => {\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tcategory: filterCategory,\n\t\t\t\t\t\tlabel: filterLabel,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\twebinarsList: (state) => state.webinarsList,\n\tupcomingWebinarsCounter: (state) => state.upcomingWebinarsCounter,\n\tpastWebinarsCounter: (state) => state.pastWebinarsCounter,\n\tcalendarWebinars: (state) => state.calendarWebinars,\n};\n\nexport default new Vuex.Store({\n\tstate,\n\tactions,\n\tmutations,\n\tgetters,\n});\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","\n\t
\n\t\t\n\t
\n\n\n \n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=cfd74e06\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['webinars'],attrs:{\"id\":\"webinars\"}},[_c('router-view')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from \"vue\";\nimport \"../../scss/layouts/webinars.scss\";\n\n// Plugins\nimport Vuex from \"vuex\";\nimport store from \"../vue/webinars/store/store\";\nimport router from \"../vue/webinars/router\";\nimport i18n from \"../vue/webinars/i18n\";\nimport VueAxios from \"vue-axios\";\nimport VCalendar from \"v-calendar\";\nimport vClickOutside from \"v-click-outside\";\nimport dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\ndayjs.extend(customParseFormat);\n\n// todo: Let's find a dynamic way to load locales\nif (window.webinars_data.locale === \"ja\") {\n\trequire(\"dayjs/locale/ja\");\n\tdayjs.locale(\"ja\");\n}\n\n//Components\nimport App from \"../vue/webinars/App.vue\";\n\nexport const WebinarBus = new Vue();\n\nexport default function () {\n\tVue.config.productionTip = false;\n\tVue.config.devtools = true;\n\n\tVue.use(Vuex, VueAxios, VCalendar, vClickOutside);\n\n\t// Let Vue use Dayjs as well\n\tObject.defineProperty(Vue.prototype, \"$dayjs\", { value: dayjs });\n\n\tVue.filter(\"capitalize\", function (value) {\n\t\tif (!value) return \"\";\n\t\tvalue = value.toString();\n\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\n\t});\n\n\tVue.filter(\"array_key\", function (value) {\n\t\tif (!value) return \"\";\n\t\tvalue = value.toString();\n\n\t\tvalue = value.replace(/\\s/g, \"_\");\n\t\tvalue = value.replace(\"+\", \"and\");\n\t\tvalue = value.replace(/[^a-zA-Z0-9_+]+/g, \"\");\n\n\t\treturn value.toLowerCase();\n\t});\n\n\tnew Vue({\n\t\tel: \"#webinars\",\n\t\trouter,\n\t\tstore,\n\t\ti18n,\n\t\tdata: {},\n\t\trender: (h) => h(App),\n\t});\n}\n"],"sourceRoot":""}