{"version":3,"file":"js/dynamic-list-block.eb513edd28ef89c94921.js","mappings":"mBAAA,MAAMA,EAAuBC,IAC3B,MAAMC,EAAsBC,SAAUF,EAAaG,kBAAqCC,QAAQH,aAC1FI,EAAQC,MAAMC,KAAKP,EAAaQ,iBAAiB,8BACjDC,EAAgBT,EAAaQ,iBAAiB,sCAC9CE,EAA2CV,EAAaW,cAAc,kCACtEC,EAA2CZ,EAAaW,cAAc,yCAwCtEE,EAAgB,CAACR,EAAwBS,EAAwBC,KACrEV,EAAMW,SAAQ,CAACC,EAAMC,KACfD,EAAKE,QAAUD,GAASJ,IAC1BG,EAAKE,QAAS,EAGdF,EAAKG,UAAUC,IAAI,qCAEnBC,YAAW,KACTL,EAAKG,UAAUG,OAAO,oCAAoC,GACzD,K,IAMoB,IADPlB,EAAMmB,QAAQP,GAASA,EAAKE,SAChCM,QAAgBf,IAAsBA,EAAkBS,SACtET,EAAkBS,QAAS,GAI7B,IAAIO,EAAuCrB,EAAMU,GACjD,GAAIW,EAAgB,CACOA,EAAef,cAAc,KACnCgB,O,GAiCjBC,EAAsB,KAC1B,MACMC,EADexB,EAAMmB,QAAQP,IAAUA,EAAKE,SACRM,OAAS,EAC7CX,EAAiBe,EAAuB5B,EACxC6B,EAAgBzB,EAAMmB,QAAQP,GAASA,EAAKG,UAAUW,SAAS,wCAEjED,EAAcL,OAAS,EACzBZ,EAAciB,EAAehB,EAAgBe,EAAuB,GAEpEhB,EAAcR,EAAOS,EAAgBe,EAAuB,E,EAI1DG,EAAqBC,IACzB,MAAMC,EAAeD,EAAME,OAC3B,IAAIC,EAAgC,GAEpCF,EAAad,UAAUiB,OAAO,oBA1F9BhC,EAAMW,SAASC,IACRA,EAAKE,SACRF,EAAKE,QAAS,GAGZF,EAAKG,UAAUW,SAAS,uCAC1Bd,EAAKG,UAAUG,OAAO,qC,IAKtBb,IAAsBA,EAAkBS,SAC1CT,EAAkBS,QAAS,GAmFCnB,EAAaQ,iBAAiB,oCACtCQ,SAASsB,IAC7BF,EAAoBG,KAAKrC,SAASoC,EAAOE,cAAepC,QAAQqC,YAAa,IAI3EL,EAAoBX,OAAS,EAzDK,CAACW,IACvC,MAAMM,EAAsBrC,EAAMmB,QAAQP,GAASA,EAAKd,kBAAmBwC,aAAa,uBAClFC,EAA2C,GAEjDF,EAAoB1B,SAASC,IAC3B,MAAM4B,EAAc5B,EAAKd,kBACS2C,KAAKC,MAAMF,EAAYzC,QAAQ4C,aAG7CC,MAAMC,GAAOd,EAAoBe,SAASD,MAC5DN,EAA0BL,KAAKtB,GAIjCA,EAAKE,QAAS,EAGdyB,EAA0B5B,SAAQ,CAACC,EAAMC,KACvCD,EAAKG,UAAUC,IAAI,sCAEfH,EAAQjB,IACVgB,EAAKE,QAAS,E,GAEhB,GACF,EAkCAiC,CAAgChB,IAxHlC/B,EAAMW,SAAQ,CAACC,EAAMC,KACfA,EAAQjB,GAAegB,EAAKE,SAC9BF,EAAKE,QAAS,GAGZF,EAAKG,UAAUW,SAAS,uCAC1Bd,EAAKG,UAAUG,OAAO,qC,IAKtBlB,EAAMoB,OAASxB,GAAeS,GAAqBA,EAAkBS,SACvET,EAAkBS,QAAS,IAkHPnB,EAAaQ,iBAAiB,uCAClCiB,OAASxB,GAAeS,IACxCA,EAAkBS,QAAS,E,EAMvBP,GACFA,EAAeyC,iBAAiB,QAASzB,GAGvCnB,EAAcgB,OAAS,GACzBhB,EAAcO,SAASsB,IACrBA,EAAOe,iBAAiB,QAASrB,EAAkB,GAK/C,EAGdsB,SAASD,iBAAiB,oBAAoB,KAC5C,MAAME,EAA2BD,SAAS9C,iBAAiB,uBAEvD+C,EAAyB9B,OAAS,GACpC8B,EAAyBvC,SAAShB,IAChCD,EAAoBC,EAAa,G","sources":["webpack:///./Features/Components/DynamicListBlock/_js/dynamicListBlock.ts"],"sourcesContent":["const useDynamicListBlock = (blockElement: HTMLElement): void => {\r\n const pagesToShow: number = parseInt((blockElement.firstElementChild as HTMLDivElement).dataset.pagesToShow!);\r\n const pages = Array.from(blockElement.querySelectorAll('.dynamic-list-block__page')) as HTMLLIElement[];\r\n const filterButtons = blockElement.querySelectorAll('.dynamic-list-block__filter-button') as NodeListOf;\r\n const showMoreContainer: HTMLDivElement | null = blockElement.querySelector('.dynamic-list-block__show-more');\r\n const showMoreButton: HTMLButtonElement | null = blockElement.querySelector('.dynamic-list-block__show-more-button');\r\n \r\n /* Show and hide pages */\r\n \r\n // Show all pages and \"Show more\" button if needed\r\n const showAllPages = (): void => {\r\n pages.forEach((page, index) => {\r\n if (index < pagesToShow && page.hidden) {\r\n page.hidden = false;\r\n }\r\n\r\n if (page.classList.contains('dynamic-list-block__page--filtered')) {\r\n page.classList.remove('dynamic-list-block__page--filtered');\r\n }\r\n });\r\n\r\n // Show \"Show more\" button if needed\r\n if (pages.length > pagesToShow && showMoreContainer && showMoreContainer.hidden) {\r\n showMoreContainer.hidden = false;\r\n }\r\n }\r\n \r\n // Hide all pages and remove \"Show more\" button\r\n const hideAllPages = (): void => {\r\n pages.forEach((page) => {\r\n if (!page.hidden) {\r\n page.hidden = true;\r\n }\r\n \r\n if (page.classList.contains('dynamic-list-block__page--filtered')) {\r\n page.classList.remove('dynamic-list-block__page--filtered');\r\n }\r\n });\r\n\r\n // Hide \"Show more\" button\r\n if (showMoreContainer && !showMoreContainer.hidden) {\r\n showMoreContainer.hidden = true;\r\n }\r\n };\r\n \r\n const showMorePages = (pages: HTMLLIElement[], maxIndexToShow: number, firstShownPageIndex: number): void => {\r\n pages.forEach((page, index) => {\r\n if (page.hidden && index <= maxIndexToShow) {\r\n page.hidden = false;\r\n\r\n // Fade in animation\r\n page.classList.add('dynamic-list-block__page--fade-in');\r\n \r\n setTimeout(() => {\r\n page.classList.remove('dynamic-list-block__page--fade-in');\r\n }, 100);\r\n }\r\n });\r\n \r\n // Hide \"Show more\" button if there are no more hidden pages\r\n const hiddenPages = pages.filter((page) => page.hidden);\r\n if (hiddenPages.length === 0 && showMoreContainer && !showMoreContainer.hidden) {\r\n showMoreContainer.hidden = true;\r\n }\r\n \r\n // Set focus to the first shown page\r\n let firstShownPage: HTMLLIElement | null = pages[firstShownPageIndex];\r\n if (firstShownPage) {\r\n let firstShownPageLink = firstShownPage.querySelector('a') as HTMLAnchorElement;\r\n firstShownPageLink.focus();\r\n }\r\n }\r\n\r\n const showPagesWithSelectedCategories = (selectedCategoryIds: number[]) => {\r\n const pagesWithCategories = pages.filter((page) => page.firstElementChild!.hasAttribute('data-category-ids'));\r\n const pagesWithCategoriesToShow: HTMLElement[] = [];\r\n\r\n pagesWithCategories.forEach((page) => {\r\n const pageArticle = page.firstElementChild as HTMLElement;\r\n const pageCategoryIds: number[] = JSON.parse(pageArticle.dataset.categoryIds!);\r\n\r\n // Show pages that match the selected categories\r\n if (pageCategoryIds.some((id) => selectedCategoryIds.includes(id))) {\r\n pagesWithCategoriesToShow.push(page);\r\n }\r\n\r\n // Hide all selected pages initially\r\n page.hidden = true;\r\n\r\n // Show as many pages as pagesToShow\r\n pagesWithCategoriesToShow.forEach((page, index) => {\r\n page.classList.add('dynamic-list-block__page--filtered');\r\n\r\n if (index < pagesToShow) {\r\n page.hidden = false;\r\n }\r\n });\r\n });\r\n }\r\n\r\n /* Handle events */\r\n \r\n const handleShowMoreEvent = (): void => {\r\n const visiblePages = pages.filter((page) => !page.hidden);\r\n const lastVisiblePageIndex = visiblePages.length - 1;\r\n const maxIndexToShow = lastVisiblePageIndex + pagesToShow;\r\n const filteredPages = pages.filter((page) => page.classList.contains('dynamic-list-block__page--filtered'));\r\n \r\n if (filteredPages.length > 0) {\r\n showMorePages(filteredPages, maxIndexToShow, lastVisiblePageIndex + 1);\r\n } else {\r\n showMorePages(pages, maxIndexToShow, lastVisiblePageIndex + 1);\r\n }\r\n };\r\n\r\n const handleFilterEvent = (event: MouseEvent): void => {\r\n const filterButton = event.target as HTMLButtonElement;\r\n let selectedCategoryIds: number[] = [];\r\n \r\n filterButton.classList.toggle('button--selected');\r\n \r\n hideAllPages();\r\n\r\n // Store selected category id:s\r\n const selectedFilterButtons = blockElement.querySelectorAll('.button--filter.button--selected') as NodeListOf;\r\n selectedFilterButtons.forEach((button) => {\r\n selectedCategoryIds.push(parseInt(button.parentElement!.dataset.categoryId!));\r\n });\r\n \r\n // Show pages based on selected category id:s\r\n if (selectedCategoryIds.length > 0) {\r\n showPagesWithSelectedCategories(selectedCategoryIds);\r\n } else {\r\n showAllPages();\r\n }\r\n \r\n // Show \"Show more\" button if filtered pages are more than pages to show\r\n const filteredPages = blockElement.querySelectorAll('.dynamic-list-block__page--filtered') as NodeListOf;\r\n if (filteredPages.length > pagesToShow && showMoreContainer) {\r\n showMoreContainer.hidden = false;\r\n }\r\n }; \r\n \r\n /* Initializing and adding event listeners */\r\n const initialize = (): void => {\r\n if (showMoreButton) {\r\n showMoreButton.addEventListener('click', handleShowMoreEvent);\r\n }\r\n \r\n if (filterButtons.length > 0) {\r\n filterButtons.forEach((button) => {\r\n button.addEventListener('click', handleFilterEvent);\r\n });\r\n }\r\n };\r\n\r\n initialize();\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n const dynamicListBlockElements = document.querySelectorAll('.dynamic-list-block') as NodeListOf;\r\n\r\n if (dynamicListBlockElements.length > 0) {\r\n dynamicListBlockElements.forEach((blockElement) => {\r\n useDynamicListBlock(blockElement);\r\n })\r\n }\r\n});\r\n"],"names":["useDynamicListBlock","blockElement","pagesToShow","parseInt","firstElementChild","dataset","pages","Array","from","querySelectorAll","filterButtons","showMoreContainer","querySelector","showMoreButton","showMorePages","maxIndexToShow","firstShownPageIndex","forEach","page","index","hidden","classList","add","setTimeout","remove","filter","length","firstShownPage","focus","handleShowMoreEvent","lastVisiblePageIndex","filteredPages","contains","handleFilterEvent","event","filterButton","target","selectedCategoryIds","toggle","button","push","parentElement","categoryId","pagesWithCategories","hasAttribute","pagesWithCategoriesToShow","pageArticle","JSON","parse","categoryIds","some","id","includes","showPagesWithSelectedCategories","addEventListener","document","dynamicListBlockElements"],"sourceRoot":""}