{"version":3,"file":"static/js/e279e3119194d2733781.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/get-all-articles.action.ts?5930","webpack://Msdyn365.Commerce.Online/./src/actions/lobas-articles-list-page-state.ts?1c23","webpack://Msdyn365.Commerce.Online/./src/actions/lobas-url-utils.ts?fbe6","webpack://Msdyn365.Commerce.Online/./src/modules/components/lobas-url-utils.ts?7bae","webpack://Msdyn365.Commerce.Online/./src/modules/lobas-article-collection/components/articleCollectionCard.tsx?517d","webpack://Msdyn365.Commerce.Online/./src/modules/lobas-article-collection/lobas-article-collection.tsx?5cad","webpack://Msdyn365.Commerce.Online/./lib/lobas-article-collection/module-registration.js?eb5a","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/* eslint-disable no-debugger */\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n// import { createObservableDataAction, IAction, ICreateActionContext } from '@msdyn365-commerce/core';\r\n// import { IArticle } from './DataServiceEntities.g';\r\n\r\nimport {\r\n createObservableDataAction,\r\n IAction,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IActionInput,\r\n IActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { IQueryResultSettings, convertToString, SortColumn, CacheType, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { IArticle } from './DataServiceEntities.g';\r\nimport { getAllArticlesAsync } from './DataActionExtension.g';\r\nimport { ILobasTableRefinerValue } from '../modules/components/lobas-table';\r\nimport { generateCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { toJS } from 'mobx';\r\n\r\nimport { hydrateRefinersFromUrl } from './lobas-url-utils';\r\n\r\nexport class BaseCollectionInput implements IActionInput {\r\n public refiners: ILobasTableRefinerValue[];\r\n\r\n public queryResultSettings: IQueryResultSettings;\r\n\r\n public apiSettings: ICommerceApiSettings;\r\n\r\n public locale?: string;\r\n\r\n public articlePageURL?: string;\r\n\r\n public constructor(\r\n apiSettings: ICommerceApiSettings,\r\n queryResultSettings: IQueryResultSettings,\r\n refiners: ILobasTableRefinerValue[],\r\n locale?: string,\r\n articlePageURL?: string\r\n ) {\r\n this.apiSettings = apiSettings;\r\n this.queryResultSettings = queryResultSettings;\r\n this.refiners = refiners;\r\n this.locale = locale;\r\n this.articlePageURL = articlePageURL;\r\n }\r\n\r\n public getCacheKey = () => {\r\n const queryResultSettings = {\r\n ...this.queryResultSettings.Paging,\r\n ...toJS(this.queryResultSettings.Sorting)\r\n };\r\n\r\n const cacheKey = generateCacheKey(\r\n this.apiSettings,\r\n {\r\n key: 'Refiners',\r\n value: this.refiners.map(\r\n refiner =>\r\n `RefinerRecordId:${refiner.RefinerRecordId}-LeftValueBoundString:${refiner.LeftValueBoundString ||\r\n ''}-RightValueBoundString:${refiner.RightValueBoundString || ''}`\r\n )\r\n },\r\n { key: 'QueryResultSettings', value: convertToString(queryResultSettings) },\r\n { key: 'Locale', value: this.locale }\r\n );\r\n return cacheKey;\r\n };\r\n\r\n public getCacheObjectType = () => 'CollectionActionResult';\r\n\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\nexport class GetFullArticlesByCollectionInput extends BaseCollectionInput implements IActionInput {\r\n /**\r\n * The cache object type.\r\n * @returns The cache object type.\r\n */\r\n public getCacheObjectType = (): string => 'FullArticlesResult';\r\n\r\n /**\r\n * The data cache type.\r\n * @returns The data cache type.\r\n */\r\n public dataCacheType = (): CacheType => {\r\n if (\r\n (this.refiners && this.refiners.length > 0) ||\r\n (this.queryResultSettings &&\r\n this.queryResultSettings.Sorting &&\r\n this.queryResultSettings.Sorting.Columns &&\r\n this.queryResultSettings.Sorting.Columns.length > 0)\r\n ) {\r\n return 'request';\r\n }\r\n return 'application';\r\n };\r\n}\r\n\r\nexport type CollectionClassConstructor = new (\r\n apiSettings: ICommerceApiSettings,\r\n queryResultSettings: IQueryResultSettings,\r\n refiners: ILobasTableRefinerValue[],\r\n locale?: string\r\n) => BaseCollectionInput;\r\n\r\nexport interface IFullArticleResultsWithCount {\r\n articles: IArticle[];\r\n count: number;\r\n}\r\n\r\n/**\r\n * TODO: Use this function to create the input required to make the action call.\r\n * @param args\r\n * @param inputClassConstuctor\r\n */\r\nexport const createBaseCollectionInput = (\r\n args: ICreateActionContext,\r\n inputClassConstuctor: CollectionClassConstructor\r\n): BaseCollectionInput => {\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(args).QueryResultSettings;\r\n const queryRefiners = hydrateRefinersFromUrl(args.requestContext);\r\n\r\n if (args.requestContext.query && args.requestContext.query.sorting) {\r\n queryResultSettings.Sorting = { Columns: JSON.parse(decodeURIComponent(args.requestContext.query.sorting)) };\r\n }\r\n\r\n return new inputClassConstuctor(args.requestContext.apiSettings, queryResultSettings, queryRefiners, args.requestContext.locale);\r\n};\r\n\r\n/**\r\n * CreateInput function which creates and actionInput used to fetch products for a list page.\r\n * @param args - The API arguments.\r\n * @returns IActionInput - The action input.\r\n */\r\nconst createInput = (args: ICreateActionContext<{ itemsPerPage: number; articlePageURL: string }>): IActionInput => {\r\n const input = createBaseCollectionInput(args, GetFullArticlesByCollectionInput);\r\n\r\n // Set Top\r\n if (input.queryResultSettings.Paging) {\r\n input.queryResultSettings.Paging.Top = args.config?.itemsPerPage || 1;\r\n }\r\n\r\n // Set Skip\r\n if (input.queryResultSettings.Paging && args.requestContext.query && args.requestContext.query.skip) {\r\n input.queryResultSettings.Paging.Skip = +args.requestContext.query.skip;\r\n }\r\n\r\n input.queryResultSettings.Sorting = { Columns: [{ IsDescending: true, ColumnName: 'DateReleased' }] };\r\n\r\n input.queryResultSettings.count = true;\r\n\r\n input.articlePageURL = args.config && args.config.articlePageURL;\r\n\r\n return input;\r\n};\r\n\r\n/**\r\n * Action function to fetch products for a list page.\r\n * @param input - The input.\r\n * @param context - The context.\r\n * @returns IFullArticleResultsWithCount - The full product search result with count.\r\n */\r\nasync function action(input: GetFullArticlesByCollectionInput, context: IActionContext): Promise {\r\n const defaultNumber: number = 0;\r\n\r\n const promise: AsyncResult = getAllArticlesAsync({\r\n callerContext: context,\r\n queryResultSettings: input.queryResultSettings\r\n });\r\n\r\n let articleResults = await promise;\r\n\r\n const pageName = context.requestContext.url.requestUrl.pathname.split('/').at(1);\r\n\r\n if (pageName === input.articlePageURL?.replace('/', '')) {\r\n const articleURL = context.requestContext.url.requestUrl.pathname.split('/').at(-1);\r\n articleResults = articleResults.filter(article => article.URL !== articleURL);\r\n }\r\n\r\n return { articles: articleResults, count: promise.metadata.count ?? defaultNumber };\r\n}\r\n\r\nexport const getArticlesDataAction = createObservableDataAction({\r\n id: 'lobas-article-collection/get-full-articles-by-collection',\r\n action: action as IAction,\r\n input: createInput\r\n});\r\n\r\nexport default getArticlesDataAction;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n//import { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { SortingInfo } from '@msdyn365-commerce/retail-proxy';\r\n//import { ProductPrice, ProductRefinerValue, ProductSearchResult, SimpleProduct, SortingInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { observable } from 'mobx';\r\nimport { ILobasTableRefinerHierarchy, ILobasTableRefinerValue } from '../modules/components/lobas-table';\r\nimport { IArticle } from './DataServiceEntities.g';\r\n\r\n/**\r\n * Export listPageType.\r\n */\r\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\r\n\r\n/**\r\n * ListPageState class.\r\n */\r\nexport class ListPageState {\r\n @observable public activeFilters: ILobasTableRefinerValue[] | null = null;\r\n\r\n //@observable public activeProducts: ProductSearchResult[] = [];\r\n\r\n @observable public activeArticles: IArticle[] = [];\r\n\r\n @observable public sortingCritera: SortingInfo | null = null;\r\n\r\n @observable public currentPageNumber: number | null = null;\r\n\r\n @observable public refiners: ILobasTableRefinerHierarchy[] | null = null;\r\n\r\n @observable public totalTableCount: number | undefined;\r\n\r\n @observable public pageSize: number = 1000;\r\n\r\n @observable public pageType: listPageType = 'Unknown';\r\n\r\n //@observable public featureProduct: SimpleProduct | null = null;\r\n\r\n //@observable public productPrices: ProductPrice[] | undefined = [];\r\n}\r\n\r\n/**\r\n * ListPageStateInput - action input.\r\n */\r\nexport class ListPageStateInput implements IActionInput {\r\n public getCacheKey = () => 'ListPageState';\r\n\r\n public getCacheObjectType = () => 'ListPageState';\r\n\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\nexport async function listPageStateAction(input: ListPageStateInput, ctx: IActionContext): Promise {\r\n return new ListPageState();\r\n}\r\n\r\n/**\r\n * Create new input for create action.\r\n * @param inputData\r\n */\r\nexport const createListPageInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new ListPageStateInput();\r\n};\r\n\r\n/**\r\n * ListPageState - create action.\r\n */\r\nexport default createObservableDataAction({\r\n action: >listPageStateAction,\r\n input: createListPageInput\r\n});\r\n","/* eslint-disable no-debugger */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport MsDyn365, { IRequestContext, getUrlSync, IActionContext } from '@msdyn365-commerce/core';\r\nimport { SortColumn } from '@msdyn365-commerce/retail-proxy';\r\nimport { ILobasTableRefinerValue } from '../modules/components/lobas-table';\r\n\r\n/**\r\n * Refiner Compression:\r\n * Refiners contains a non-trivial amount of data that is required to successfully make\r\n * a refiner-based API call. To allow for deep-linking of refiners in the URL, refiner data\r\n * must be compressed so that URL max length is not exceeded. Refiners will be compressed into\r\n * the following array style index-based format:\r\n * [DataTypeValue, LeftValueBoundString, RefinerRecordId, RefinerSourceValue, RightValueBoundString, UnitText].\r\n */\r\nconst compressedRefinerKeys = [\r\n 'DataTypeValue',\r\n 'LeftValueBoundString',\r\n 'RefinerRecordId',\r\n 'RefinerSourceValue',\r\n 'RightValueBoundString',\r\n 'UnitText'\r\n];\r\n\r\n/**\r\n * Hydrates compressed refiner data from URL.\r\n * @param fullUrl The full URL of the page.\r\n * @param requestContext\r\n */\r\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ILobasTableRefinerValue[] => {\r\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\r\n if (!compressedRefinerArray || compressedRefinerArray.length === 0) {\r\n return [];\r\n }\r\n\r\n return compressedRefinerArray\r\n .map(compressedRefiner => {\r\n try {\r\n const parsedRefiner: ILobasTableRefinerValue = {};\r\n compressedRefinerKeys.forEach((refinerKey, index) => {\r\n parsedRefiner[refinerKey] = compressedRefiner[index];\r\n });\r\n return parsedRefiner;\r\n } catch {\r\n return undefined;\r\n }\r\n })\r\n .filter(Boolean);\r\n};\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs.\r\n * @param refiners The uncompressed refiners.\r\n */\r\nexport const compressRefiners = (refiners: ILobasTableRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach(refiner => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach(refinerKey => {\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n\r\n/**\r\n * Method which creates a URL contiaining serialized active refiners.\r\n * @param fullUrl The Current URL of the page.\r\n * @param refiners The refiners which should be added to the URL.\r\n * @param sortingColumns\r\n * @param skipCount\r\n */\r\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ILobasTableRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\r\n // Refiner Change flow\r\n if (refiners !== undefined) {\r\n if (refiners.length === 0) {\r\n fullUrl.searchParams.delete('refiners');\r\n } else {\r\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(refiners)));\r\n }\r\n\r\n // Adding or removing a refiner means we want to always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n debugger;\r\n if (sortingColumns !== undefined) {\r\n if (sortingColumns.length === 0) {\r\n fullUrl.searchParams.delete('sorting');\r\n } else {\r\n fullUrl.searchParams.set('sorting', JSON.stringify(sortingColumns));\r\n }\r\n\r\n // Changing the sort means always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (skipCount) {\r\n fullUrl.searchParams.set('skip', skipCount.toString());\r\n }\r\n\r\n return fullUrl.href;\r\n};\r\n\r\n/**\r\n * Parses a query param from the query object of the request context.\r\n * @param key The query parameter key.\r\n * @param requestContext The request context.\r\n */\r\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): T | null => {\r\n if (requestContext.query && requestContext.query[key]) {\r\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Gets the current URL of the page from the request context.\r\n * @param requestContext The request context.\r\n */\r\nexport const getCurrentUrl = (requestContext: IRequestContext): URL => {\r\n if (MsDyn365.isBrowser) {\r\n return new URL(window.location.href);\r\n }\r\n\r\n // NOTE: Typing on requestURL is incorrect\r\n if (requestContext.url.requestUrl.href) {\r\n return new URL(requestContext.url.requestUrl.href);\r\n }\r\n return new URL((requestContext.url.requestUrl));\r\n};\r\n\r\nexport function getArticlePageUrlSync(name: string, recordId: number, ctx: IActionContext): string {\r\n return getUrlSync('article', ctx, {\r\n article: { Title: name || '', Id: recordId }\r\n })!;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * Refiner Compression:\r\n * Refiners contains a non-trivial amount of data that is required to successfully make\r\n * a refiner-based API call. To allow for deep-linking of refiners in the URL, refiner data\r\n * must be compressed so that URL max length is not exceeded. Refiners will be compressed into\r\n * the following array style index-based format:\r\n * [DataTypeValue, LeftValueBoundString, RefinerRecordId, RefinerSourceValue, RightValueBoundString, UnitText].\r\n */\r\nconst compressedRefinerKeys = [\r\n 'DataTypeValue',\r\n 'LeftValueBoundString',\r\n 'RefinerRecordId',\r\n 'RefinerSourceValue',\r\n 'RightValueBoundString',\r\n 'UnitText'\r\n];\r\n\r\n/**\r\n * Hydrates compressed refiner data from URL.\r\n * @param fullUrl The full URL of the page.\r\n * @param requestContext\r\n */\r\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ProductRefinerValue[] => {\r\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\r\n if (!compressedRefinerArray || compressedRefinerArray.length === 0) {\r\n return [];\r\n }\r\n\r\n return compressedRefinerArray\r\n .map(compressedRefiner => {\r\n try {\r\n const parsedRefiner: ProductRefinerValue = {};\r\n compressedRefinerKeys.forEach((refinerKey, index) => {\r\n parsedRefiner[refinerKey] = compressedRefiner[index];\r\n });\r\n return parsedRefiner;\r\n } catch {\r\n return undefined;\r\n }\r\n })\r\n .filter(Boolean);\r\n};\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs.\r\n * @param refiners The uncompressed refiners.\r\n */\r\nexport const compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach(refiner => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach(refinerKey => {\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n\r\n/**\r\n * Method which creates a URL contiaining serialized active refiners.\r\n * @param fullUrl The Current URL of the page.\r\n * @param refiners The refiners which should be added to the URL.\r\n * @param sortingColumns\r\n * @param skipCount\r\n */\r\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ProductRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\r\n // Refiner Change flow\r\n if (refiners !== undefined) {\r\n if (refiners.length === 0) {\r\n fullUrl.searchParams.delete('refiners');\r\n } else {\r\n const sortedRefiners = refiners.sort((first, second) =>\r\n first.RefinerRecordId && second.RefinerRecordId && first.RefinerRecordId > second.RefinerRecordId ? 1 : -1\r\n );\r\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(sortedRefiners)));\r\n }\r\n\r\n // Adding or removing a refiner means we want to always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (sortingColumns !== undefined) {\r\n if (sortingColumns.length === 0) {\r\n fullUrl.searchParams.delete('sorting');\r\n } else {\r\n fullUrl.searchParams.set('sorting', JSON.stringify(sortingColumns));\r\n }\r\n\r\n // Changing the sort means always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (skipCount) {\r\n fullUrl.searchParams.set('skip', skipCount.toString());\r\n }\r\n\r\n return fullUrl.href;\r\n};\r\n\r\n/**\r\n * Parses a query param from the query object of the request context.\r\n * @param key The query parameter key.\r\n * @param requestContext The request context.\r\n */\r\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): T | null => {\r\n if (requestContext.query && requestContext.query[key]) {\r\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Gets the current URL of the page from the request context.\r\n * @param requestContext The request context.\r\n */\r\nexport const getCurrentUrl = (requestContext: IRequestContext): URL => {\r\n if (MsDyn365.isBrowser) {\r\n return new URL(window.location.href);\r\n }\r\n\r\n // NOTE: Typing on requestURL is incorrect\r\n if (requestContext.url.requestUrl.href) {\r\n return new URL(requestContext.url.requestUrl.href);\r\n }\r\n return new URL((requestContext.url.requestUrl));\r\n};\r\n","import React, { Component } from 'react';\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { ILobasArticleCollectionViewProps } from '../lobas-article-collection';\r\nimport { ILobasArticleCollectionMiniViewProps } from '../../lobas-article-collection-mini/lobas-article-collection-mini';\r\n\r\nclass ArticleCollectionCard extends Component {\r\n private fixDateFormat(date: Date | undefined): String {\r\n if (!date) {\r\n return '';\r\n }\r\n\r\n const length = 10;\r\n return new Date(date).toLocaleDateString(this.props.locale).substring(0, length);\r\n }\r\n\r\n public render() {\r\n return (\r\n
\r\n \r\n

{this.props.article.Title}

\r\n
{`${this.props.resources.articlePublishedDate} ${this.fixDateFormat(\r\n this.props.article.DateReleased\r\n )}`}
\r\n

\r\n
\r\n {this.props.article.Keywords?.split(',').map(kw => (\r\n // eslint-disable-next-line react/jsx-key\r\n

{kw}

\r\n ))}\r\n
\r\n
{this.props.resources.readMoreLabel}
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ArticleCollectionCard;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { IArticle } from '../../actions/DataServiceEntities.g';\r\nimport ArticleCollectionCard from './components/articleCollectionCard';\r\nimport classNames from 'classnames';\r\nimport { ILobasArticleCollectionData } from './lobas-article-collection.data';\r\nimport { ILobasArticleCollectionProps, ILobasArticleCollectionResources } from './lobas-article-collection.props.autogenerated';\r\nimport { UncontrolledPagination } from '@msdyn365-commerce-modules/utilities';\r\nimport { getCurrentUrl, hydrateRefinersFromUrl } from '../components/lobas-url-utils';\r\nimport { reaction } from 'mobx';\r\nimport { ListPageState } from '../../actions/lobas-articles-list-page-state';\r\nimport getCollectionArticles, {\r\n GetFullArticlesByCollectionInput,\r\n IFullArticleResultsWithCount\r\n} from '../../actions/get-all-articles.action';\r\nimport { SortColumn } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nexport interface ILobasArticleCollectionViewProps extends ILobasArticleCollectionProps {\r\n article: IArticle;\r\n resources: ILobasArticleCollectionResources;\r\n locale: string;\r\n}\r\n\r\nexport interface ILobasArticleCollectionState {\r\n articles: IArticle[];\r\n currentPageNumber: number;\r\n totalArticleCount: number;\r\n}\r\n/**\r\n *\r\n * LobasArticleCollection component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass LobasArticleCollection extends React.PureComponent<\r\n ILobasArticleCollectionProps,\r\n ILobasArticleCollectionState\r\n> {\r\n public constructor(props: ILobasArticleCollectionProps, state: ILobasArticleCollectionState) {\r\n super(props);\r\n this.state = { articles: [], currentPageNumber: 0, totalArticleCount: 0 };\r\n }\r\n\r\n //private readonly defaultPageNumber: number = 10;\r\n private isListPageStateUpdated: boolean = false;\r\n\r\n public async componentDidMount() {\r\n console.log(this.props.data.articles);\r\n /*void this.props.data.articles.then(res => {\r\n this.setState({\r\n articles: res.articles,\r\n totalArticleCount: res.count,\r\n currentPageNumber:\r\n (this.props.context.request.query &&\r\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? this.defaultPageNumber)) ||\r\n 0\r\n });\r\n });*/\r\n\r\n const listPageState = await this.props.data.listPageState;\r\n const articles = await this.props.data.articles;\r\n\r\n this._updateListPageState(listPageState, articles);\r\n\r\n // Initialize reaction based on listPageState properties\r\n reaction(\r\n () => {\r\n return [\r\n listPageState.activeFilters?.length,\r\n listPageState.currentPageNumber,\r\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\r\n ];\r\n },\r\n async () => {\r\n const newListPageState = await this.props.data.listPageState;\r\n const input = new GetFullArticlesByCollectionInput(\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\r\n },\r\n count: true,\r\n Sorting: newListPageState.sortingCritera ?? {}\r\n },\r\n newListPageState.activeFilters ?? [],\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\r\n this.props.context.request.locale\r\n );\r\n\r\n const articleResult = await getCollectionArticles(input, this.props.context.actionContext);\r\n newListPageState.totalTableCount = articleResult.count;\r\n newListPageState.activeArticles = articleResult.articles;\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n data: { listPageState, articles: articles }\r\n } = this.props;\r\n\r\n if (!this.isListPageStateUpdated && listPageState.result && articles.result) {\r\n this._updateListPageState(listPageState.result, articles.result);\r\n this.isListPageStateUpdated = true;\r\n }\r\n\r\n if (this.props.data.articles.status === 'FAILED') {\r\n return
{this.props.resources.noArticlesLabel}
;\r\n } else {\r\n //var articles = this.state['articles'];\r\n\r\n var filteredArticles = articles.result\r\n ? articles.result.articles.filter((a: IArticle) => {\r\n if (a.FilterKeywords && this.props.config.filterByTags) {\r\n const keywords = a.FilterKeywords.split(',').map(k => k.trim());\r\n return this.props.config.filterByTags.every(k => keywords.includes(k));\r\n } else {\r\n if (this.props.config.filterByTags) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n })\r\n : [];\r\n return (\r\n
\r\n {filteredArticles.map((a: IArticle) => {\r\n const articleCollectionViewProps = {\r\n article: a,\r\n resources: this.props.resources,\r\n locale: this.props.context.request.locale\r\n } as ILobasArticleCollectionViewProps;\r\n return (\r\n // eslint-disable-next-line react/jsx-key\r\n \r\n \r\n \r\n );\r\n })}\r\n {this._getPagination()}\r\n
\r\n );\r\n }\r\n }\r\n\r\n private readonly _getPagination = (): React.ReactNode => {\r\n const { config, context, resources, data } = this.props;\r\n\r\n const listPageState = data.listPageState.result;\r\n const fullUrl = getCurrentUrl(context.request);\r\n const itemsPerPage = config.itemsPerPage || 10;\r\n // eslint-disable-next-line max-len -- existing code\r\n const skipCount = listPageState?.currentPageNumber\r\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\r\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\r\n const totalItems = listPageState?.totalTableCount || 0;\r\n const previousText = resources.flipperPrevious;\r\n const nextText = resources.flipperNext;\r\n\r\n if (totalItems <= itemsPerPage) {\r\n return null;\r\n }\r\n return (\r\n \r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination previous text.\r\n * @param paginationPreviousText - Pagination previous text from resources.\r\n * @returns Previous text and flipper icon.\r\n */\r\n private readonly _renderPrev = (paginationPreviousText: string) => {\r\n return (\r\n
\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination next text.\r\n * @param paginationNextText - Pagination next text from resources.\r\n * @returns Next text and flipper icon.\r\n */\r\n private readonly _renderNext = (paginationNextText: string) => {\r\n return (\r\n
\r\n {paginationNextText}\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Update the list page state with initial data.\r\n * @param listPageState -- List page State.\r\n * @param products -- Products.\r\n */\r\n private readonly _updateListPageState = (listPageState: ListPageState, articles: IFullArticleResultsWithCount): void => {\r\n let querySorting: SortColumn[] = [];\r\n const defaultPageNumber: number = 10;\r\n\r\n if (this.props.context.request.query?.sorting) {\r\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\r\n }\r\n\r\n listPageState.currentPageNumber =\r\n (this.props.context.request.query &&\r\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\r\n 0;\r\n listPageState.sortingCritera = { Columns: querySorting };\r\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\r\n listPageState.activeArticles = articles.articles;\r\n listPageState.totalTableCount = articles.count;\r\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request);\r\n };\r\n}\r\n\r\nexport default LobasArticleCollection;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['lobas-article-collection'] = {\n c: () => require('partner/modules/lobas-article-collection/lobas-article-collection.tsx'),\n $type: 'contentModule',\n da: [{name:'articles', path:'actions/get-all-articles.action', runOn: 0},{name:'listPageState', path:'actions/lobas-articles-list-page-state', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'lobas-article-collection',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/lobas-article-collection'\n });\n \n\n {\n const sanitizedActionPath = 'actions/get-all-articles.action';\n let dataAction = require('partner/actions/get-all-articles.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/lobas-articles-list-page-state';\n let dataAction = require('partner/actions/lobas-articles-list-page-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["BaseCollectionInput","constructor","apiSettings","queryResultSettings","refiners","locale","articlePageURL","getCacheKey","_objectSpread","this","Paging","toJS","Sorting","generateCacheKey","key","value","map","refiner","RefinerRecordId","LeftValueBoundString","RightValueBoundString","convertToString","getCacheObjectType","dataCacheType","GetFullArticlesByCollectionInput","length","Columns","createBaseCollectionInput","args","inputClassConstuctor","QueryResultSettingsProxy","QueryResultSettings","queryRefiners","hydrateRefinersFromUrl","requestContext","query","sorting","JSON","parse","decodeURIComponent","getArticlesDataAction","createObservableDataAction","id","action","async","input","context","_input$articlePageURL","_promise$metadata$cou","promise","getAllArticlesAsync","callerContext","articleResults","url","requestUrl","pathname","split","at","replace","articleURL","filter","article","URL","articles","count","metadata","_args$config","Top","config","itemsPerPage","skip","Skip","IsDescending","ColumnName","ListPageState","activeFilters","activeArticles","sortingCritera","currentPageNumber","pageSize","pageType","__decorate","observable","ListPageStateInput","listPageStateAction","ctx","createListPageInput","inputData","compressedRefinerKeys","compressedRefinerArray","parseQueryParam","compressedRefiner","parsedRefiner","forEach","refinerKey","index","_unused","Boolean","buildListPageUrl","fullUrl","sortingColumns","skipCount","undefined","searchParams","delete","set","stringify","compressedRefiners","push","compressRefiners","href","toString","getCurrentUrl","MsDyn365","window","location","sortedRefiners","sort","first","second","ArticleCollectionCard","Component","fixDateFormat","date","Date","toLocaleDateString","props","substring","render","_this$props$article$K","React","className","src","ThumbnailImage","Title","resources","articlePublishedDate","DateReleased","dangerouslySetInnerHTML","getRichTextHtml","Summary","Keywords","kw","readMoreLabel","LobasArticleCollection","state","super","isListPageStateUpdated","_getPagination","data","listPageState","result","request","totalItems","totalTableCount","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","role","paginationAriaLabel","qsp","items","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","paginationPreviousText","paginationNextText","_updateListPageState","_this$props$context$r","_this$props$config$it","_this$props$config$it2","querySorting","totalArticleCount","console","log","reaction","_listPageState$active","_listPageState$sortin","ArrayExtensions","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","newListPageState","Math","max","articleResult","getCollectionArticles","actionContext","status","noArticlesLabel","filteredArticles","a","FilterKeywords","filterByTags","keywords","k","trim","every","includes","classNames","articleCollectionViewProps","origin","Object","assign","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","module","exports","ReactDOM"],"sourceRoot":""}