{"version":3,"file":"load-more-C1SnzYET.js","sources":["../../src/project/AramcoLife/load-more/load-more.ts"],"sourcesContent":["import { addLoader } from \"~/foundation/Loaders/loader.ts\";\r\nimport { setupInView } from \"~/foundation/Dom/inView\";\r\nimport { type SearchTeaserHtmlResponseModel, type TeaserRequestModel } from \"../generated-types.ts\";\r\nimport { type ApiResponse } from \"~/foundation/Api/http.ts\";\r\nimport { bootstrapConstructorOnElement } from \"~/foundation/Bootstrapper\";\r\nimport openRestrictContent from \"../restricted-content/open-restrict-content.ts\";\r\n\r\nexport const loadMore = (loadMoreButton: HTMLButtonElement, appendContainer: HTMLElement, pageSize: number, service: (queryStrings: TeaserRequestModel) => Promise>, callback?: (elements: HTMLElement[]) => void) => {\r\n\tconst statusMessage = document.createElement(\"span\");\r\n\tstatusMessage.setAttribute(\"role\", \"status\");\r\n\tstatusMessage.setAttribute(\"aria-live\", \"polite\");\r\n\tstatusMessage.setAttribute(\"aria-atomic\", \"true\");\r\n\tstatusMessage.classList.add(\"status-message\");\r\n\tstatusMessage.classList.add(\"visuallyhidden\");\r\n\tloadMoreButton.insertAdjacentElement(\"beforebegin\", statusMessage);\r\n\r\n\t//load more on pollArchiveList are listed as featured-banners and there are no need for correcting the offset\r\n\tlet offset = loadMoreButton.dataset.listType === \"featured-banner\" ? appendContainer.children.length : appendContainer.children.length + 1;\r\n\r\n\tconst fetchData = async () => {\r\n\t\tappendContainer.setAttribute(\"aria-busy\", \"true\");\r\n\r\n\t\taddLoader(appendContainer, { isAbsolute: true });\r\n\t\tif (statusMessage) {\r\n\t\t\tstatusMessage.textContent = \"Loading content\";\r\n\t\t}\r\n\r\n\t\tpageSize = pageSize % 2 === 0 || pageSize < 7 ? pageSize : pageSize - 1;\r\n\r\n\t\tconst response = await service({ startIndex: offset, pageSize, context: loadMoreButton.dataset.loadMoreContext || document.body.dataset.currentItemId!, topic: loadMoreButton.dataset.loadMoreTopic, local: loadMoreButton.dataset.loadMoreLocal === 'true' });\r\n\t\tif (response.error || !response.data) {\r\n\t\t\tconsole.error(\"Error loading more\", response.error)\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst totalResults = response.data.totalResults;\r\n\t\tconst results = (response.data.results || []).filter(Boolean);\r\n\r\n\t\t//focus last element in list before adding new content\r\n\t\tconst focusChildNum = offset - 2; //the loader is also a child at this moment\r\n\t\tconst focusElement = appendContainer.children[focusChildNum]?.querySelector(\"a, button\") || appendContainer.children[focusChildNum] as HTMLElement;\r\n\t\tfocusElement?.focus({ preventScroll: true });\r\n\r\n\t\toffset += results.length;\r\n\r\n\t\tif (statusMessage) {\r\n\t\t\tstatusMessage.textContent = \"Done loading content\";\r\n\t\t}\r\n\r\n\t\tif (statusMessage && totalResults <= offset) {\r\n\t\t\tstatusMessage.textContent = \"No more content to load\";\r\n\t\t\tloadMoreButton.classList.add(\"visuallyhidden\");\r\n\t\t\tloadMoreButton.setAttribute(\"aria-disabled\", \"true\");\r\n\t\t\tloadMoreButton.setAttribute(\"disabled\", \"disabled\");\r\n\t\t\tloadMoreButton.ariaLabel = \"No more content to load\";\r\n\t\t}\r\n\r\n\t\t//create new items based on results\r\n\t\taddItems(results);\r\n\t};\r\n\r\n\tconst addItems = (results: string[]) => {\r\n\t\tfor (const result of results) {\r\n\t\t\t//script tags are removed from string with regex\r\n\t\t\tappendContainer.insertAdjacentHTML(\"beforeend\", result.replace(/)<[^<]*)*<\\/script\\s*>/gi, \"\"));\r\n\t\t}\r\n\r\n\t\t// Initiating inview after we appended the data\r\n\t\tconst inViewClass = \".inview\";\r\n\t\tconst inViewElements = appendContainer.querySelectorAll(inViewClass);\r\n\r\n\t\tif (inViewElements) {\r\n\t\t\tsetupInView(inViewClass, \"inview--active\", \"show\", 0);\r\n\t\t}\r\n\r\n\t\tconst restrictedElements = appendContainer.querySelectorAll(\"[data-module='open-restricted-content']\");\r\n\t\tfor (const restrictedElement of restrictedElements) {\r\n\t\t\tif (restrictedElement.dataset.bootstrapped !== \"true\") {\r\n\t\t\t\tbootstrapConstructorOnElement(restrictedElement, openRestrictContent, \"open-restricted-content\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcallback?.(appendContainer.querySelectorAll(\":not([data-bootstrapped])\") as unknown as HTMLElement[])\r\n\r\n\t\tappendContainer.setAttribute(\"aria-busy\", \"false\");\r\n\t\tappendContainer.querySelector(\".loader\")?.remove();\r\n\t};\r\n\r\n\tloadMoreButton.addEventListener(\"click\", async () => {\r\n\t\tawait fetchData();\r\n\t});\r\n};"],"names":["loadMore","loadMoreButton","appendContainer","pageSize","service","callback","statusMessage","offset","fetchData","addLoader","response","totalResults","results","focusChildNum","focusElement","_a","addItems","result","inViewClass","setupInView","restrictedElements","restrictedElement","bootstrapConstructorOnElement","openRestrictContent"],"mappings":"4DAOO,MAAMA,EAAW,CAACC,EAAmCC,EAA8BC,EAAkBC,EAAoGC,IAAiD,CAC1P,MAAAC,EAAgB,SAAS,cAAc,MAAM,EACrCA,EAAA,aAAa,OAAQ,QAAQ,EAC7BA,EAAA,aAAa,YAAa,QAAQ,EAClCA,EAAA,aAAa,cAAe,MAAM,EAClCA,EAAA,UAAU,IAAI,gBAAgB,EAC9BA,EAAA,UAAU,IAAI,gBAAgB,EAC7BL,EAAA,sBAAsB,cAAeK,CAAa,EAG7D,IAAAC,EAASN,EAAe,QAAQ,WAAa,kBAAoBC,EAAgB,SAAS,OAASA,EAAgB,SAAS,OAAS,EAEzI,MAAMM,EAAY,SAAY,OACbN,EAAA,aAAa,YAAa,MAAM,EAEhDO,EAAUP,EAAiB,CAAE,WAAY,EAAM,CAAA,EAC3CI,IACHA,EAAc,YAAc,mBAG7BH,EAAWA,EAAW,IAAM,GAAKA,EAAW,EAAIA,EAAWA,EAAW,EAEhE,MAAAO,EAAW,MAAMN,EAAQ,CAAE,WAAYG,EAAQ,SAAAJ,EAAU,QAASF,EAAe,QAAQ,iBAAmB,SAAS,KAAK,QAAQ,cAAgB,MAAOA,EAAe,QAAQ,cAAe,MAAOA,EAAe,QAAQ,gBAAkB,MAAQ,CAAA,EAC7P,GAAIS,EAAS,OAAS,CAACA,EAAS,KAAM,CAC7B,QAAA,MAAM,qBAAsBA,EAAS,KAAK,EAClD,MACD,CAEM,MAAAC,EAAeD,EAAS,KAAK,aAC7BE,GAAWF,EAAS,KAAK,SAAW,IAAI,OAAO,OAAO,EAGtDG,EAAgBN,EAAS,EACzBO,IAAeC,EAAAb,EAAgB,SAASW,CAAa,IAAtC,YAAAE,EAAyC,cAA2B,eAAgBb,EAAgB,SAASW,CAAa,EAC/IC,GAAA,MAAAA,EAAc,MAAM,CAAE,cAAe,EAAM,GAE3CP,GAAUK,EAAQ,OAEdN,IACHA,EAAc,YAAc,wBAGzBA,GAAiBK,GAAgBJ,IACpCD,EAAc,YAAc,0BACbL,EAAA,UAAU,IAAI,gBAAgB,EAC9BA,EAAA,aAAa,gBAAiB,MAAM,EACpCA,EAAA,aAAa,WAAY,UAAU,EAClDA,EAAe,UAAY,2BAI5Be,EAASJ,CAAO,CAAA,EAGXI,EAAYJ,GAAsB,OACvC,UAAWK,KAAUL,EAEpBV,EAAgB,mBAAmB,YAAae,EAAO,QAAQ,yDAA0D,EAAE,CAAC,EAI7H,MAAMC,EAAc,UACGhB,EAAgB,iBAAiBgB,CAAW,GAGtDC,EAAAD,EAAa,iBAAkB,OAAQ,CAAC,EAG/C,MAAAE,EAAqBlB,EAAgB,iBAA8B,yCAAyC,EAClH,UAAWmB,KAAqBD,EAC3BC,EAAkB,QAAQ,eAAiB,QAChBC,EAAAD,EAAmBE,EAAqB,yBAAyB,EAItFlB,GAAA,MAAAA,EAAAH,EAAgB,iBAAiB,2BAA2B,GAEvDA,EAAA,aAAa,YAAa,OAAO,GACjCa,EAAAb,EAAA,cAAc,SAAS,IAAvB,MAAAa,EAA0B,QAAO,EAGnCd,EAAA,iBAAiB,QAAS,SAAY,CACpD,MAAMO,EAAU,CAAA,CAChB,CACF"}