{"version":3,"file":"js/initInsightsContainer.bundle.js","mappings":"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","sources":["webpack://webpack-workflow/./src/scripts/helpers/isEmpty.js","webpack://webpack-workflow/./src/scripts/models/TagModel.js","webpack://webpack-workflow/./src/scripts/models/NewsModel.js","webpack://webpack-workflow/./src/scripts/models/CategoryModel.js","webpack://webpack-workflow/./src/scripts/models/PagedResponse.js","webpack://webpack-workflow/./src/scripts/helpers/buildQuery.js","webpack://webpack-workflow/./src/scripts/exceptions/ProblemDetailsException.js","webpack://webpack-workflow/./src/scripts/initInsightsContainer.js","webpack://webpack-workflow/./src/scripts/api/newsFetch.js","webpack://webpack-workflow/./src/scripts/helpers/buildUrl.js","webpack://webpack-workflow/./src/scripts/helpers/buildUrlLocation.js","webpack://webpack-workflow/./src/scripts/helpers/fetchClient.js"],"sourcesContent":["/**\n * Checks if provided object/array is empty\n * \n * @param {Object} variable - variable to check if is set\n * @return {boolean}\n */\nexport default (variable) => {\n if (Array.isArray(variable) && variable.length) {\n return false;\n }\n if (\n typeof variable === \"object\" &&\n variable !== null &&\n !Array.isArray(variable) &&\n Object.keys(variable).length\n ) {\n return false;\n }\n\n return true;\n};\n","import isEmpty from \"../helpers/isEmpty\";\n\nclass TagModel {\n constructor(data) {\n this.id = data.id || \"\";\n this.title = data.title || \"\";\n this.key = data.key || \"\";\n }\n\n static displayTags(tags) {\n return !isEmpty(tags) && Array.isArray(tags)\n ? `\n
\n ${tags.map((tag) =>\n tag instanceof TagModel && tag.title ? tag.displayTag(tag) : \"\"\n )}\n
\n
`\n : \"\";\n }\n\n displayTag(tag) {\n return `${tag.title}`;\n }\n}\n\nexport default TagModel;\n","import buildUrlLocation from \"../helpers/buildUrlLocation\";\nimport isEmpty from \"../helpers/isEmpty\";\nimport TagModel from \"./TagModel\";\nimport CategoryModel from \"./CategoryModel\";\n\nclass NewsModel {\n constructor(data) {\n this.id = data.id || \"\";\n if(data.title){\n this.title = this.truncateText(data.title,100);\n }\n if(data.shortContent){\n this.shortContent = this.truncateText(data.shortContent,300);\n }\n this.timestamp = data.timestamp || \"\";\n this.categoryId = data.categoryId || \"\";\n this.category = data.category || \"\";\n this.coverImage = data.coverImage || \"\";\n this.readMoreButton = data.readMoreButton || \"\";\n this.url = data.url || \"\";\n this.target = data.target || \"_self\";\n this.tags = [];\n if (!isEmpty(data.tags) && Array.isArray(data.tags)) {\n data.tags.forEach((tag) => this.tags.push(new TagModel(tag)));\n }\n }\n /**\n * Truncate string\n *\n * @param {string} text - text to truncate\n * @param {number} charsCount - number of chars to truncate\n * @returns {string} string\n */\n truncateText(text, charsCount){\n if (charsCount > text.length) {\n return text;\n } \n var trimmedText = text.slice(0, charsCount);\n return trimmedText.slice(0, Math.min(trimmedText.length, trimmedText.lastIndexOf(\" \")));\n }\n /**\n * Generate news card\n *\n * @returns {string} html in string format\n */\n generateNewsCard() {\n const variantClass = \"item_press--primary\";\n\n const postDate = new Date(this.timestamp).toLocaleDateString(\"en-us\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n var coverImage = \"\";\n if(this.coverImage){\n coverImage=`
\n \"\"\n
`;\n }\n return ` \n ${coverImage}\n
\n \n

${this.title}

\n
${this.shortContent}
\n
\n
\n ${this.readMoreButton}\n \n \n \n
\n
\n
\n
\n `;\n }\n\n /**\n * Generate insight card\n *\n * @returns {string} html in string format\n */\n generateInsightCard() {\n const postDate = new Date(this.timestamp).toLocaleDateString(\"en-us\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n\n const title =\n this.title.length > 30 ? this.title.substring(0, 27) + \"...\" : this.title;\n\n return `
\n \"\"
\n
\n ${postDate}\n

\n ${title}\n

\n
\n
\n \n ${this.readMoreButton}\n \n \n \n \n
\n
`;\n }\n}\n\nexport default NewsModel;\n","import isEmpty from \"../helpers/isEmpty\";\n\nclass CategoryModel {\n constructor(data) {\n this.id = data.id || \"\";\n this.name = data.name || \"\";\n }\n\n static displayCategory(category) {\n return `${category.name}`;\n }\n}\n\nexport default CategoryModel;\n","class PagedResponse {\n constructor(data = {}) {\n this.pageSize = data.pageSize || 1;\n this.totalItemsCount = data.totalItemsCount || 0;\n this.currentPageNumber = data.currentPageNumber || 1;\n this.lastPageNumber = data.lastPageNumber || 1;\n this.results = [];\n }\n\n /**\n * Set paged response data\n *\n * @param {Array} results\n */\n setResults(results) {\n this.results = results;\n }\n\n /**\n * Create pagination component\n *\n * @param {HTMLElement} currentPagination - current pagination html element\n * @param {HTMLElement} container - html data container\n * @param {Function} callback - callback function\n * @returns {HTMLElement} new pagination element\n */\n createPagination(currentPagination, container, callback) {\n if (\n currentPagination &&\n currentPagination.classList.contains(\"pagination\")\n ) {\n currentPagination.parentElement.removeChild(currentPagination);\n }\n const pagination = document.createElement(\"div\");\n pagination.classList.add(\"pagination\");\n pagination.dataset.page = this.currentPageNumber;\n pagination.dataset.perPage = this.pageSize;\n pagination.dataset.total = this.lastPageNumber;\n\n const nextButton = document.createElement(\"span\");\n nextButton.innerHTML = \"»\";\n const previousButton = document.createElement(\"span\");\n previousButton.innerHTML = \"«\";\n\n const currentPage = document.createElement(\"span\");\n currentPage.classList.add(\"active\");\n currentPage.innerHTML = this.currentPageNumber;\n const previousPage = document.createElement(\"span\");\n previousPage.innerHTML = this.currentPageNumber - 1;\n const nextPage = document.createElement(\"span\");\n nextPage.innerHTML = this.currentPageNumber + 1;\n\n nextButton.addEventListener(\"click\", (e) =>\n this.fetchCallback(e, container, this.currentPageNumber + 1, callback)\n );\n nextPage.addEventListener(\"click\", (e) =>\n this.fetchCallback(e, container, this.currentPageNumber + 1, callback)\n );\n previousButton.addEventListener(\"click\", (e) =>\n this.fetchCallback(e, container, this.currentPageNumber - 1, callback)\n );\n previousPage.addEventListener(\"click\", (e) =>\n this.fetchCallback(e, container, this.currentPageNumber - 1, callback)\n );\n\n if (this.currentPageNumber > 1) {\n pagination.appendChild(previousButton);\n pagination.appendChild(previousPage);\n }\n if (this.lastPageNumber !== 1) {\n pagination.appendChild(currentPage);\n }\n if (this.currentPageNumber < this.lastPageNumber) {\n pagination.appendChild(nextPage);\n pagination.appendChild(nextButton);\n }\n\n return pagination;\n }\n\n /**\n * Create inifnity scroll component\n *\n * @param {HTMLElement} currentInfinityScroll - current infinity scroll html element\n * @param {HTMLElement} container - html data container\n * @param {Function} callback - callback function\n * @returns {(HTMLElement|null)} new infinity scroll element\n */\n createInfinityScroll(currentInfinityScroll, container, callback) {\n if (\n currentInfinityScroll &&\n currentInfinityScroll.classList.contains(\"infinity-scroll-pagination\")\n ) {\n currentInfinityScroll.parentElement.removeChild(currentInfinityScroll);\n }\n\n const infinityScroll = document.createElement(\"div\");\n infinityScroll.classList.add(\"infinity-scroll-pagination\");\n infinityScroll.dataset.page = this.currentPageNumber;\n infinityScroll.dataset.perPage = this.pageSize;\n infinityScroll.dataset.total = this.lastPageNumber;\n\n const nextButton = document.createElement(\"button\");\n const arrowDown = document.createElement(\"i\");\n nextButton.appendChild(arrowDown);\n infinityScroll.appendChild(nextButton);\n\n nextButton.addEventListener(\"click\", (e) =>\n this.fetchCallback(e, container, this.currentPageNumber + 1, callback)\n );\n\n if (this.currentPageNumber >= this.lastPageNumber) {\n infinityScroll.style.display = \"none\";\n }\n\n return infinityScroll;\n }\n\n /**\n * Invoke callback when page is changed\n *\n * @param {Event} event\n * @param {HTMLElement} container\n * @param {number} page\n * @param {Function} callback\n */\n fetchCallback(event, container, page, callback) {\n event.preventDefault();\n container.dataset.page = page;\n callback();\n }\n\n /**\n * Generate html when no results found\n *\n * @param {string} perRow - dataset parameter per-row\n * @param {number} fallbackPerRow - if dataset per-row was not provided\n * @returns {string} html in string\n */\n generateNoResults(perRow, fallbackPerRow) {\n const perRowString = `--perRowColumn: ${parseInt(perRow) + 1}`;\n const fallbackString = `--fallbackPerRow: ${fallbackPerRow}`;\n return `\n
\n Could not find any results \n
\n `;\n }\n}\n\nexport default PagedResponse;\n","import isEmpty from \"./isEmpty\";\n\n/**\n * Build query from provided params\n *\n * @param {Object} params - build query string from provided params, ex. {page: 1, perPage: 3}\n * @returns {string} query string\n */\nexport default (params) => {\n if (!isEmpty(params)) {\n return Object.keys(params)\n .reduce(\n (query, currentParam) =>\n params[currentParam]\n ? `${query}${currentParam}=${params[currentParam]}&`\n : query,\n \"?\"\n )\n .replace(/&$/g, \"\")\n .replace(/^\\?$/g, \"\");\n } else {\n return \"\";\n }\n};\n","/**\n * \n * @param {Object} exception - exception object \n * @returns {Error} custom exception for problems details\n */\nfunction ProblemDetailsException(exception) {\n console.log(exception)\n if (!exception) {\n return new Error(\"Error occured but problem details response is empty\");\n }\n const error = new Error(exception.detail || \"Error\");\n error.code = \"PROBLEM_DETAILS\";\n error.name = exception.title || \"Problem details response\";\n error.statusCode = exception.status || 500;\n error.invalidProperties = exception.errors || {};\n\n return error;\n};\n\nProblemDetailsException.prototype = Error.prototype;\n\nexport default ProblemDetailsException;\n","import isEmpty from \"./helpers/isEmpty\";\nimport NewsModel from \"./models/NewsModel\";\nimport PagedResponse from \"./models/PagedResponse\";\nimport newsFetch from \"./api/newsFetch\";\n\n/**\n * Init insights container\n *\n * @param {string} htmlContainerId\n * @param {string} htmlInsightsListId\n * @param {string} htmlFilterButtonId\n * @param {string} htmlCategorySelectId\n * @returns\n */\nconst initInsightsContainer = (\n htmlContainerId,\n htmlInsightsListId,\n htmlFilterButtonId,\n htmlCategorySelectId\n) => {\n const container = document.getElementById(htmlContainerId);\n if (!container) return;\n\n fetchData(container, htmlInsightsListId);\n\n $(document).ready(() => {\n $(\"#loadMorePress\").on(\"click\", function (e) {\n e.preventDefault();\n\n if (window.currentPageNumber < window.lastPageNumber) {\n getDataPress(window.currentPageNumber + 1, PerPageQuery);\n }\n\n if (window.currentPageNumber == window.lastPageNumber) {\n $(\"#loadMorePress\").text(\"No more content\").addClass(\"noContent\");\n }\n });\n\n $(`#${htmlFilterButtonId}`).on(\"click\", (e) => {\n e.preventDefault();\n const categorySelect = document.getElementById(htmlCategorySelectId);\n if (categorySelect) {\n container.dataset.page = 1;\n container.dataset.categoryId = categorySelect.value;\n fetchData(container, htmlInsightsListId);\n }\n });\n });\n};\n\n/**\n * Load insights content.\n *\n * @param {HTMLElement} container - container containing html data variables\n * @param {string} htmlInsightsListId - id of html container containing insights cards\n */\nconst fetchData = async (container, htmlInsightsListId) => {\n const {\n protocol,\n host,\n apiSuffix,\n folderId,\n page,\n perPage,\n categoryId,\n listingPageId,\n } = container.dataset;\n\n const response = await newsFetch(\n protocol,\n host,\n apiSuffix,\n folderId,\n categoryId,\n page,\n perPage,\n listingPageId\n );\n\n if (response.success) {\n const data = !isEmpty(response.data) ? response.data : new PagedResponse();\n printDataPress(container, data, htmlInsightsListId);\n } else {\n printDataPress(container, new PagedResponse(), htmlInsightsListId);\n }\n};\n\n/**\n *\n * @param {HTMLElement} container - container containing html data variables\n * @param {PagedResponse} pagedResponse - class model of paged response\n * @param {string} htmlInsightsListId - id of html container containing insights cards\n */\nfunction printDataPress(container, pagedResponse, htmlInsightsListId) {\n const insightsListContainer = document.getElementById(htmlInsightsListId);\n if (!insightsListContainer) return;\n\n if (container.dataset.perRow) {\n insightsListContainer.style.setProperty(\n \"--perRow\",\n container.dataset.perRow\n );\n }\n\n let html = \"\";\n if (pagedResponse && pagedResponse.results && pagedResponse.results.length) {\n pagedResponse.results.forEach((element) => {\n if (element instanceof NewsModel) {\n html += element.generateInsightCard();\n }\n });\n } else {\n html = pagedResponse.generateNoResults(container.dataset.perRow, 4);\n }\n insightsListContainer.innerHTML = html;\n\n const pagination = pagedResponse.createPagination(\n insightsListContainer.nextElementSibling,\n container,\n () => fetchData(container, htmlInsightsListId)\n );\n insightsListContainer.insertAdjacentElement(\"afterend\", pagination);\n}\n\ninitInsightsContainer(\n \"insightsContainer\",\n \"insightsGeneralList\",\n \"insightsFilterButton\",\n \"insightsCategorySelect\"\n);\n\nexport default initInsightsContainer;\n","import buildUrl from \"../helpers/buildUrl\";\nimport buildUrlLocation from \"../helpers/buildUrlLocation\";\nimport fetchClient from \"../helpers/fetchClient\";\nimport isEmpty from \"../helpers/isEmpty\";\nimport NewsModel from \"../models/NewsModel\";\nimport PagedResponse from \"../models/PagedResponse\";\n\n/**\n * Fetch news from api\n *\n * @param {string} protocol - protocol of the request, i.e. http:// or https://\n * @param {string} host - host of the request, i.e. loomis.en-gb.dev.docker\n * @param {string} apiSuffix - api suffix, i.e. /api/loomis/news\n * @param {string} folderId - folder id, i.e. {FF005073-5F75-488C-8242-3E83FFC239AA}\n * @param {string} categoryId - category id, i.e {58668B86-BCED-4CF1-811A-E5EF4B74A874}\n * @param {number} page - page to fetch\n * @param {number} perPage - how many per page\n * @param {string} listingPageId - listing page id, i.e. {3A50B6D2-56FD-4B4F-B6B9-41E7A646CD21}\n * @return {Object} json response\n */\nconst newsFetch = async (\n protocol,\n host,\n apiSuffix,\n folderId,\n categoryId,\n page,\n perPage,\n listingPageId\n) => {\n let url = \"\";\n if (protocol && host && apiSuffix) {\n url = buildUrl(protocol, host, apiSuffix, [folderId, listingPageId], {\n categoryId,\n page,\n perPage,\n });\n } else {\n url = buildUrlLocation(\n [apiSuffix, folderId, listingPageId],\n {\n categoryId,\n page,\n perPage,\n },\n true\n );\n }\n\n const response = await fetchClient(url);\n if (response.success && response.data) {\n const pagedResponse = new PagedResponse(response.data);\n const news = [];\n if (!isEmpty(response.data.news) && Array.isArray(response.data.news)) {\n response.data.news.forEach((newsItem) =>\n news.push(new NewsModel(newsItem))\n );\n pagedResponse.setResults(news);\n }\n response.data = pagedResponse;\n }\n return response;\n};\n\nexport default newsFetch;\n","import buildQuery from \"./buildQuery\";\n\n/**\n * Build valid url from provided parameters\n * \n * @param {string} protocol - url protocol, ex. https://\n * @param {string} host - url host, ex. loomis.en-gb.dev.docker\n * @param {string} apiSuffix - api suffix, ex. /api/loomis/news\n * @param {Array} additionalParams - additional parameters to join at the end after /\n * @param {Object} queryParams - query params, ex. ?page=1&perPage=3\n * @returns {string} valid url\n */\nexport default (\n protocol,\n host,\n apiSuffix,\n additionalParams = [],\n queryParams = {}\n) => {\n const baseUrl = `${host}/${apiSuffix}/${\n additionalParams ? additionalParams.join(\"/\") : \"\"\n }`.replace(/\\/\\//g, \"/\");\n const query = buildQuery(queryParams);\n\n return `${protocol}${baseUrl}${query}`;\n};\n","import buildQuery from \"./buildQuery\";\n\n/**\n * Build valid url from current location\n *\n * @param {Array} additionalParams - additional parameters to join at the end after /\n * @param {Object} queryParams - query params, ex. ?page=1&perPage=3\n * @param {boolean} onlyOrigin - use only window location origin\n * @returns {string} valid url\n */\nexport default (\n additionalParams = [],\n queryParams = {},\n onlyOrigin = false\n) => {\n let location = \"\";\n if (onlyOrigin) {\n location = window.location.origin.replace(/\\/$/g, \"\");\n } else {\n location = window.location.href.replace(/\\/$/g, \"\").replace(\".html\", \"\");\n }\n const pathname = `${\n additionalParams ? additionalParams.join(\"/\") : \"\"\n }`.replace(/\\/$/g, \"\");\n const query = buildQuery(queryParams);\n return `${location}/${pathname}${query}`.replace(/(? {\n try {\n const response = await fetch(url, options);\n\n if (!response) {\n throw new Error(\"Response is not defined\");\n }\n if (!response.status) {\n throw new Error(\"Response status is not defined\");\n }\n\n const data = await response.json();\n\n if (response.status !== 200) {\n throw new ProblemDetailsException(data);\n }\n if (response.status === 200) {\n return {\n success: true,\n data,\n };\n }\n\n return {\n success: false,\n data: null,\n };\n } catch (error) {\n console.error(error);\n if (error instanceof ProblemDetailsException && error.invalidProperties) {\n const invalidProperties = error.invalidProperties;\n const errors = Object.keys(invalidProperties).map((key) =>\n Array.isArray(invalidProperties[key])\n ? invalidProperties[key].join(\" | \")\n : invalidProperties[key]\n );\n return {\n success: false,\n data: null,\n errors,\n };\n } else {\n return {\n success: false,\n data: null,\n };\n }\n }\n};\n"],"names":["variable","Array","isArray","length","Object","keys","TagModel","constructor","data","this","id","title","key","tags","isEmpty","map","tag","displayTag","truncateText","shortContent","timestamp","categoryId","category","coverImage","readMoreButton","url","target","forEach","push","text","charsCount","trimmedText","slice","Math","min","lastIndexOf","generateNewsCard","Date","toLocaleDateString","year","month","day","name","generateInsightCard","postDate","substring","pageSize","totalItemsCount","currentPageNumber","lastPageNumber","results","setResults","createPagination","currentPagination","container","callback","classList","contains","parentElement","removeChild","pagination","document","createElement","add","dataset","page","perPage","total","nextButton","innerHTML","previousButton","currentPage","previousPage","nextPage","addEventListener","e","fetchCallback","appendChild","createInfinityScroll","currentInfinityScroll","infinityScroll","arrowDown","style","display","event","preventDefault","generateNoResults","perRow","fallbackPerRow","perRowString","parseInt","params","reduce","query","currentParam","replace","ProblemDetailsException","exception","console","log","Error","error","detail","code","statusCode","status","invalidProperties","errors","prototype","fetchData","async","htmlInsightsListId","protocol","host","apiSuffix","folderId","listingPageId","response","additionalParams","queryParams","join","buildQuery","buildUrl","onlyOrigin","location","window","origin","href","buildUrlLocation","options","fetch","json","success","fetchClient","pagedResponse","news","newsItem","printDataPress","insightsListContainer","getElementById","setProperty","html","element","nextElementSibling","insertAdjacentElement","htmlContainerId","htmlFilterButtonId","htmlCategorySelectId","$","ready","on","getDataPress","PerPageQuery","addClass","categorySelect","value","initInsightsContainer"],"sourceRoot":""}