{"version":3,"file":"static/js/7210fe02e5e8440e4eda.bundle.js","mappings":"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","sources":["webpack://sgi-bookstore/./src/themes/sgi-theme/views/reviews-list.view.tsx?76a9","webpack://sgi-bookstore/./lib/reviews-list/module-registration.js?7db4","webpack://sgi-bookstore/./src/modules/fabrikam/views/reviews-list.view.tsx?cd2e","webpack://sgi-bookstore/./src/actions/get-product-reviews.ts?6edb","webpack://sgi-bookstore/./src/actions/get-user-review.ts?bad7","webpack://sgi-bookstore/./src/actions/inputs/get-product-reviews-input.ts?c654","webpack://sgi-bookstore/./src/actions/inputs/get-user-review-input.ts?ab81","webpack://sgi-bookstore/./src/actions/ratings-reviews-state-data-action.ts?26cd","webpack://sgi-bookstore/./src/actions/submit-user-review.ts?ac78","webpack://sgi-bookstore/./src/actions/inputs/submit-user-review-input.ts?3afb","webpack://sgi-bookstore/./src/common/review-modal.tsx?54a9","webpack://sgi-bookstore/./src/common/rnrInterface.ts?f761","webpack://sgi-bookstore/./src/modules/ratings-histogram/component/components.tsx?f324","webpack://sgi-bookstore/./src/modules/ratings-histogram/ratings-histogram.tsx?f6bc","webpack://sgi-bookstore/./src/modules/ratings-histogram/ratings-histogram.view.tsx?5bff","webpack://sgi-bookstore/./src/actions/report-review-concern.ts?bf43","webpack://sgi-bookstore/./src/actions/submit-helpfulness-vote.ts?a8ab","webpack://sgi-bookstore/./src/actions/inputs/report-review-concern-input.ts?b071","webpack://sgi-bookstore/./src/modules/reviews-list/components/components.tsx?033b","webpack://sgi-bookstore/./src/modules/reviews-list/components/report-review-modal.tsx?53d3","webpack://sgi-bookstore/./src/modules/reviews-list/components/review-card.tsx?6bbd","webpack://sgi-bookstore/./src/actions/inputs/submit-helpfulness-vote-input.ts?07aa","webpack://sgi-bookstore/./src/modules/reviews-list/reviews-list.tsx?37e8","webpack://sgi-bookstore/./src/modules/reviews-list/reviews-list.view.tsx?0e4a","webpack://sgi-bookstore/./src/modules/write-review/components/components.tsx?3575","webpack://sgi-bookstore/./src/modules/write-review/write-review.tsx?9afc","webpack://sgi-bookstore/./src/modules/write-review/write-review.view.tsx?b867","webpack://sgi-bookstore/./src/modules/adventureworks/views/reviews-list.view.tsx?39ca","webpack://sgi-bookstore/external var \"React\"?0d3b","webpack://sgi-bookstore/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\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 { IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n IReportReviewModalViewProps,\r\n IReviewCardViewProps,\r\n IReviewsListData,\r\n IReviewsListResources,\r\n IReviewsListState,\r\n IReviewsListViewProps\r\n} from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\r\n\r\n/**\r\n * Build Review Card.\r\n * @param props - Review Card ViewProps.\r\n * @param resources - Resource Strings.\r\n * @param isUserReview - User review flag.\r\n * @returns JSX Element.\r\n */\r\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\r\n return (\r\n \r\n \r\n
\r\n {props.rating}\r\n {props.date}\r\n
\r\n {props.name}\r\n
\r\n \r\n \r\n {props.reviewTitle}\r\n {props.reviewText}\r\n \r\n \r\n {props.responseName}\r\n {props.responseDate}\r\n {props.responseText}\r\n \r\n \r\n {isUserReview ? undefined :

{resources.wasReviewHelpfulText}

}\r\n {props.like}\r\n {props.dislike}\r\n {props.edit}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Product Image.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\r\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\r\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product Description.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const product = props.data.product.result;\r\n return (\r\n \r\n
{renderProductImage(props)}
\r\n
\r\n
{product?.Name}
\r\n
{product?.Name}
\r\n
{product?.ItemId}
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review list ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n return (\r\n \r\n {reviewModal.modalHeader}\r\n \r\n \r\n \r\n {renderProductDescription(props)}\r\n \r\n
{resources.selectRatingLabel}
\r\n {reviewModal.rating}\r\n
\r\n
\r\n \r\n {resources.reviewTitleLabel}\r\n {reviewModal.titleInput}\r\n \r\n \r\n {resources.reviewTextLabel}\r\n {reviewModal.textInput}\r\n \r\n {reviewModal.privacyPolicyUrl}\r\n {reviewModal.error}\r\n
\r\n
\r\n \r\n {reviewModal.submitButton}\r\n {reviewModal.cancelButton}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review modal ViewProps.\r\n * @param state - Review List State.\r\n * @returns JSX Element.\r\n */\r\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\r\n return (\r\n \r\n {state.reported ? props.headerSubmitted : props.header}\r\n \r\n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\r\n \r\n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * ReviewsList view.\r\n * @param props - Ratings ReviewsList ViewProps.\r\n * @returns ReviewsList view module.\r\n */\r\nconst ReviewsListview: React.FC> = props => {\r\n const {\r\n filterByDropdown,\r\n heading,\r\n moduleProps,\r\n noReviewsMessage,\r\n noReviewsWithFilterMessage,\r\n pageControls,\r\n refineReviewsProps,\r\n reportReviewModal,\r\n reviewsListProps,\r\n reviewCards,\r\n sortByDropdown,\r\n state,\r\n userReview,\r\n resources\r\n } = props;\r\n\r\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\r\n return {noReviewsMessage};\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n \r\n {sortByDropdown}\r\n {filterByDropdown}\r\n \r\n \r\n {userReview && buildReviewCard(userReview, resources, true)}\r\n {reviewCards.map(review => {\r\n return buildReviewCard(review, resources, false);\r\n })}\r\n \r\n {!ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\r\n {pageControls}\r\n {createReviewModal(props)}\r\n {createReportModal(reportReviewModal, state)}\r\n \r\n );\r\n};\r\n\r\nexport default ReviewsListview;\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['reviews-list'] = {\n c: () => require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list/reviews-list'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'ratingsReviewsState', path:'@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action', runOn: 1},{name:'ratingsSummary', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary', runOn: 0},{name:'reviewsList', path:'@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-product-reviews', runOn: 0},{name:'userReview', path:'@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'reviews-list',\n p: 'ratings-reviews',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-product-reviews';\n let dataAction = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-product-reviews');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review';\n let dataAction = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\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 };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|sgi-theme|views|reviews-list'] = {\n c: () => require('partner/themes/sgi-theme/views/reviews-list.view.tsx'),\n cn: '__local__-__local__-reviews-list'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|reviews-list'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/reviews-list.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-reviews-list'\n };\nviewDictionary['@msdyn365-commerce-modules|ratings-reviews|modules|reviews-list|reviews-list'] = {\n c: () => require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list/reviews-list.view.js'),\n cn: '@msdyn365-commerce-modules-ratings-reviews-reviews-list'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|reviews-list'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/reviews-list.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-reviews-list'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport {\n IReportReviewModalViewProps,\n IReviewCardViewProps,\n IReviewsListState,\n IReviewsListViewProps\n} from '@msdyn365-commerce-modules/ratings-reviews/src/modules/reviews-list';\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst ReviewsListview: React.FC = props => {\n const {\n averageRating,\n filterByDropdown,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n reviewCount,\n reviewModal,\n sortByDropdown,\n state,\n userReview\n } = props;\n\n if (!userReview && reviewCards.length === 0 && !state.isFilterApplied) {\n return {noReviewsMessage};\n }\n\n return (\n \n {averageRating}\n {reviewCount}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview)}\n {reviewCards.map(review => {\n return buildReviewCard(review);\n })}\n \n {reviewCards.length === 0 && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(reviewModal, moduleProps)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nconst buildReviewCard = (props: IReviewCardViewProps) => {\n return (\n \n \n {props.rating}\n {props.name}\n {props.date}\n \n \n \n {props.reviewTitle}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {props.ratingHelpfulLabel}\n {props.like}\n {props.dislike}\n {props.edit}\n {props.report}\n \n \n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n {state.reported ? props.headerSubmitted : props.header}\n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n );\n};\n\nexport default ReviewsListview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Reviews } from '@msdyn365-commerce/commerce-entities';\nimport {\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric,\n sendRequest\n} from '@msdyn365-commerce/core';\nimport { getRnrEndpointId, getRnrPartnerId, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { GetProductReviewsInput } from './inputs/get-product-reviews-input';\n\n/**\n * TODO: Use this function to create the input required to make the API call.\n * @param input\n */\nexport const createInputForProductReviews = (input: ICreateActionContext>): IActionInput => {\n const productId = getSelectedProductIdFromActionInput(input);\n if (productId) {\n // Task #211227597 Remove these hardcoded values.\n return new GetProductReviewsInput(productId, getRnrPartnerId(input), input.requestContext.locale, getRnrEndpointId(input));\n }\n throw new Error('[GetProductReviews] Not all necessary parameters found while creating Input for GetProductReviewsApi');\n};\n\nexport async function getReviewsForGivenProduct(input: GetProductReviewsInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n throw new Error(\n `[GetProductReviews] Invalid input. ProductId = ${input.productId}, TenantId = ${input.tenantId}, localeListFilter = ${input.localeListFilter}`\n );\n }\n let requestUrl =\n `${input.serviceEndpoint}/v2.0/reviews/product/${input.productId}` +\n `?tenantId=${input.tenantId}` +\n `&localeListFilter=${input.localeListFilter}` +\n `&pageSize=${input.pageSize}` +\n `&orderBy=${input.orderBy}` +\n `&skipItems=${input.skipItems}`;\n\n if (input.starFilters !== undefined && input.starFilters.length > 0) {\n requestUrl = `${requestUrl}&starFilters=${input.starFilters}`;\n }\n\n if (input.pageToken !== null) {\n requestUrl = `${requestUrl}&pageToken=${input.pageToken}`;\n }\n return sendRequest(requestUrl, 'get')\n .then(response => {\n if (response.data && response.data.items && response.data.items.length > 0) {\n return {\n items: response.data.items.filter(i => !i.isTakenDown),\n pagingInfo: response.data.pagingInfo\n };\n }\n ctx.trace('[GetProductReviews] No reviews found for this product.');\n return response.data;\n })\n .catch(error => {\n ctx.trace('[GetProductReviews] Failed to get reviews for product');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[GetProductReviews] Failed to get reviews for product');\n throw error;\n });\n}\n\nfunction inputIsValid(input: GetProductReviewsInput): boolean {\n return input && input.productId.length > 0 && input.tenantId.length > 0 && input.localeListFilter.length > 0 && input.pageSize > 0;\n}\n\nexport const getReviewsForGivenProductDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/get-product-reviews',\n action: >getReviewsForGivenProduct,\n input: createInputForProductReviews\n});\n\nexport default getReviewsForGivenProductDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport {\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n sendRequest\n} from '@msdyn365-commerce/core';\nimport { getRnrAuthEndpointId, getRnrPartnerId, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { GetUserReviewInput } from './inputs/get-user-review-input';\n\n/**\n * This method builds the input for the getUserReviewApi call.\n * @param input\n */\nconst createInput = (input: ICreateActionContext): IActionInput => {\n const productId = getSelectedProductIdFromActionInput(input);\n const userInfo = input.requestContext.user;\n if (productId && userInfo && userInfo.isAuthenticated) {\n // Task #211227597 Remove these hardcoded values.\n return new GetUserReviewInput(productId, getRnrPartnerId(input), userInfo.token, getRnrAuthEndpointId(input));\n }\n throw new Error('[GetUserReview] Not all necessary parameters found while creating Input for GetUserReviewAPI');\n};\n\n/**\n * This method gets the user's review from the RnR service endpoint.\n * @param input\n * @param ctx\n */\nasync function getUserReview(input: GetUserReviewInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n const errorMessage = `[GettUserReview] Failed to get user's review due to bad input ${input}`;\n ctx.trace(errorMessage);\n throw new Error(errorMessage);\n }\n\n const requestUrl = `${input.serviceEndpoint}/v2.0/reviews/product/${input.productId}/user?tenantId=${input.tenantId}`;\n\n return sendRequest(requestUrl, 'get', null, { headers: { Authorization: `id_token ${input.authorization}` } })\n .then(response => {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- These are valid status code for requests.\n if (response.status !== 200 && response.status !== 201) {\n throw new Error(`An error occurred in getting user review. Response message - ${response.statusText}`);\n }\n return response.data;\n })\n .catch(error => {\n ctx.trace(\"[GettUserReview] Failed to get user's review for product\");\n ctx.telemetry.exception(error);\n ctx.telemetry.debug(\"[GettUserReview] Failed to get user's review for product\");\n ctx.trace(error);\n throw error;\n });\n}\n\nfunction inputIsValid(input: GetUserReviewInput): boolean {\n return input.productId.length > 0 && input.authorization.length > 0 && input.tenantId.length > 0;\n}\n\nexport const getUserReviewDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/get-user-review',\n action: >getUserReview,\n input: createInput\n});\n\nexport default getUserReviewDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\nexport type OrderBy =\n | 'None'\n | 'MostRecent'\n | 'Oldest'\n | 'HighestRating'\n | 'LowestRating'\n | 'MostHelpful'\n | 'LeastHelpful'\n | 'MostAsked'\n | 'MostAnswered'\n | 'LeastConcerns'\n | 'MostConcerns'\n | 'ReviewerNameAsc'\n | 'ReviewerNameDesc';\n\n/**\n * ReviewsGetRatingsSummary Input Action.\n */\nexport class GetProductReviewsInput implements IActionInput {\n /**\n * The Id representing the product to get the reviews for.\n */\n public productId: string;\n\n /**\n * The ID representing the tenant.\n */\n public tenantId: string;\n\n /**\n * The market for which to get the reviews from.\n */\n public localeListFilter: string;\n\n /**\n * Number of reviews to be shown on each page.\n */\n public pageSize: number;\n\n /**\n * Order in which reviews to be shown.\n */\n public orderBy: string;\n\n /**\n * Need to set this value if reviews need to be filtered with specific star rating .\n */\n public starFilters?: string;\n\n /**\n * Need to set this value if we need to skip few reviews.\n */\n public skipItems: number;\n\n /**\n * The continuation token.\n */\n public pageToken: string | null;\n\n /**\n * Selects which data sources to use to retrieve data.\n */\n public dataSources: string | null;\n\n /**\n * The ratings and reviews service endpoint.\n */\n public serviceEndpoint: string;\n\n constructor(\n productId: string,\n tenantId: string,\n localeListFilter: string,\n serviceEndpoint: string,\n orderBy: string = 'MostHelpful',\n starFilters: string = '',\n skipItems: number = 0,\n pageSize: number = 10,\n pageToken: string | null = null,\n dataSources: string | null = null\n ) {\n this.productId = productId;\n this.tenantId = tenantId;\n this.localeListFilter = localeListFilter;\n\n // Max page size which Rnr API supports is 25.\n // Hence if config has page size more than 25, we'll default it to 25.\n this.pageSize = pageSize > 25 ? 25 : pageSize;\n this.orderBy = orderBy;\n this.starFilters = starFilters;\n this.skipItems = skipItems;\n this.pageToken = pageToken;\n this.dataSources = dataSources;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () =>\n `${this.productId}-${this.tenantId}-${this.localeListFilter}-${this.pageSize}-${this.orderBy}-${this.starFilters}-${this.skipItems}`;\n\n public getCacheObjectType = () => 'ProductReview';\n\n public dataCacheType = (): CacheType => 'request';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\n/**\n * These are the get user review API inputs.\n */\nexport class GetUserReviewInput implements IActionInput {\n /**\n * The Id representing the product to get the ratings for.\n */\n public productId: string;\n\n /**\n * The ID representing the tenant.\n */\n public tenantId: string;\n\n /**\n * The user's authorization token.\n */\n public authorization: string;\n\n /**\n * The ratings and reviews service endpoint.\n */\n public serviceEndpoint: string;\n\n constructor(productId: string, tenantId: string, authorization: string, serviceEndpoint: string) {\n this.productId = productId;\n this.tenantId = tenantId;\n this.authorization = authorization;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'GetUserReview';\n\n public getCacheObjectType = () => 'GetUserReview';\n\n public dataCacheType = (): CacheType => 'none';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nexport interface IRatingsReviewsState {\n filterKey: string;\n}\n\nexport function createRatingsReviewsStateInput(result: IRatingsReviewsState): GenericInput {\n return new GenericInput('ratingsReviewsState', result, 'ratingsReviewsStateInput');\n}\n\nconst createInternalRatingsReviewsStateInput = (): IActionInput => {\n return createRatingsReviewsStateInput({ filterKey: '1;2;3;4;5' });\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createInternalRatingsReviewsStateInput\n});\n\nexport default getGenericActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { SubmitUserReviewInput } from './inputs/submit-user-review-input';\n\n/**\n * This data action allows submitting review to the reviews service.\n * @param input This user review submission text.\n * @param ctx The data action context.\n */\nasync function submitReview(input: SubmitUserReviewInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n ctx.trace(`[SubmitUserReview] Failed to submit reviews for product due to bad input ${input}`);\n return '';\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/reviews/product/${input.productId}/user?` +\n `tenantId=${input.tenantId}&` +\n `channelId=${input.channelId}&` +\n `locale=${input.locale}`;\n\n return sendRequest(requestUrl, 'post', input.userReviewData, { headers: { Authorization: `id_token ${input.authorization}` } })\n .then(response => {\n if (response.status !== 200 && response.status !== 201) {\n ctx.trace('[SubmitUserReview] Failed to submit reviews for product');\n ctx.trace(response.data);\n return '';\n }\n return response.data;\n })\n .catch(error => {\n ctx.trace('[SubmitUserReview] Failed to submit reviews for product');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[SubmitUserReview] Failed to submit reviews for product');\n ctx.trace(error);\n return '';\n });\n}\n\nfunction inputIsValid(input: SubmitUserReviewInput): boolean {\n return input && !!input.productId && !!input.tenantId;\n}\n\nexport const submitReviewDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/submit-user-review',\n action: >submitReview\n});\n\nexport default submitReviewDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\nimport { IUserReviewData } from './submit-user-review-input-data';\n\n/**\n * SubmitUserReview Input Action.\n */\nexport class SubmitUserReviewInput implements IActionInput {\n /**\n * The Id representing the product to get the ratings for.\n */\n public productId?: string;\n\n /**\n * The ID representing the tenant.\n */\n public tenantId: string;\n\n /**\n * The calling organization's channel id.\n */\n public channelId: string;\n\n /**\n * The locale for which to get the ratings from.\n */\n public locale: string;\n\n /**\n * The user's review data.\n */\n public userReviewData: IUserReviewData;\n\n /**\n * The user's authorization token.\n */\n public authorization: string;\n\n /**\n * The ratings and reviews service endpoint.\n */\n public serviceEndpoint: string;\n\n constructor(\n productId: string | undefined,\n tenantId: string,\n channelId: string,\n locale: string,\n userReviewData: IUserReviewData,\n authorization: string,\n serviceEndpoint: string\n ) {\n this.productId = productId;\n this.tenantId = tenantId;\n this.channelId = channelId;\n this.locale = locale;\n this.userReviewData = userReviewData;\n this.authorization = authorization;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'SubmitUserReview';\n\n public getCacheObjectType = () => 'SubmitUserReview';\n\n public dataCacheType = (): CacheType => 'none';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getRnrAuthEndpointId, getRnrPartnerId } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport classNames from 'classnames';\nimport { GetUserReviewInput } from '../actions/inputs/get-user-review-input';\nimport { SubmitUserReviewInput } from '../actions/inputs/submit-user-review-input';\nimport submitUserReview from '../actions/submit-user-review';\n\nexport interface IReviewModalProps {\n userReview?: Review;\n product?: SimpleProduct;\n renderContextId: string;\n resources: IReviewModalResources;\n context: ICoreContext>;\n parentId: string;\n parentType: string;\n isOpen: boolean;\n rating: number;\n reviewTitle: string;\n reviewText: string;\n returnRef: React.RefObject | undefined;\n hasError: boolean;\n telemetryContent?: ITelemetryContent;\n onModalToggle(): void;\n onTitleChange(event: React.ChangeEvent): void;\n onTextChange(event: React.ChangeEvent): void;\n onRatingChange(value: number): void;\n onReviewComplete?(isSuccess: boolean): void;\n modalCSS?: string;\n}\n\nexport interface IReviewModalResources {\n selectRatingAriaLabel: string;\n selectRatingLabel: string;\n reviewTitleLabel: string;\n reviewTextLabel: string;\n privacyPolicyTitle: string;\n privacyPolicyTextFormat: string;\n writeReviewModalTitle: string;\n editReviewModalTitle: string;\n submitReviewButtonText: string;\n discardReviewButtonText: string;\n errorMessageText: string;\n reviewTitleAriaLabel?: string;\n reviewAriaLabel?: string;\n}\n\nexport interface IReviewModalViewProps {\n modal: INodeProps;\n modalHeader: React.ReactElement;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n rating: React.ReactElement;\n ratingLabel: React.ReactElement;\n titleInput: React.ReactElement;\n titleLabel: React.ReactElement;\n textInput: React.ReactElement;\n textLabel: React.ReactElement;\n privacyPolicyUrl: React.ReactElement;\n form: INodeProps;\n inputRow: INodeProps;\n error: React.ReactElement;\n}\n\n/**\n * On Click Submit.\n * @param props -Review Modal props.\n * @returns On submit.\n */\nconst onClickSubmit = (props: IReviewModalProps) => () => {\n onSubmit(props);\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const ReviewModal = (props: IReviewModalProps): IReviewModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SubmitReview);\n const submitButtonAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelButtonAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return {\n modal: {\n tag: Modal,\n className: props.modalCSS ? classNames(props.modalCSS, 'msc-modal-input-required') : 'ms-review-modal msc-modal-input-required',\n toggle: props.onModalToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: modalHeaderNode(props),\n modalFooter: { tag: ModalFooter, className: 'ms-review-modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-review-modal-body' },\n cancelButton: (\n \n ),\n submitButton: (\n \n {props.resources.submitReviewButtonText}\n \n ),\n rating: ratingsInput(props),\n ratingLabel: ratingsLabel(props),\n titleInput: titleInput(props),\n titleLabel: titleLabel(props),\n textInput: textInput(props),\n textLabel: textLabel(props),\n privacyPolicyUrl: privacyPolicyLink(props),\n form: { tag: 'form', className: 'ms-review-modal-form', autoComplete: 'off' },\n inputRow: { tag: 'div', className: 'ms-review-modal-row', autoComplete: 'off' },\n error: (\n \n {props.resources.errorMessageText}\n \n )\n };\n};\n\nconst modalHeaderNode = (props: IReviewModalProps) => {\n return (\n \n {props.userReview && props.userReview.reviewId ? props.resources.editReviewModalTitle : props.resources.writeReviewModalTitle}\n \n );\n};\n\nconst submitDisabled = (props: IReviewModalProps) => {\n return !props.rating || !stripWhiteSpacesFromString(props.reviewText) || !stripWhiteSpacesFromString(props.reviewTitle);\n};\n\nconst ratingsInput = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst ratingsLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst titleInput = (props: IReviewModalProps) => {\n const maxLength = props.context.app.config.reviewTitleMaxLength;\n\n return (\n \n );\n};\n\nconst titleLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst reviewTextWidth: number = 50;\n\nconst textInput = (props: IReviewModalProps) => {\n const maxLength = props.context.app.config.reviewTextMaxLength;\n return (\n \n );\n};\n\nconst textLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst privacyPolicyLink = (props: IReviewModalProps) => {\n const policyTextBlocks = props.resources.privacyPolicyTextFormat.split('{0}');\n const isSeparatorAtStart = props.resources.privacyPolicyTextFormat.startsWith('{0}');\n const isSeparatorAtEnd = props.resources.privacyPolicyTextFormat.endsWith('{0}');\n const privacyPolicyUrl = getUrlSync('rnrPrivacyPolicy', props.context.actionContext);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.PrivacyPolicy);\n const privacyPolicyAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n return (\n

\n {isSeparatorAtStart ? '' : policyTextBlocks[0]}\n \n {props.resources.privacyPolicyTitle}\n \n {isSeparatorAtEnd ? '' : isSeparatorAtStart ? policyTextBlocks[0] : policyTextBlocks[1]}\n

\n );\n};\n\nconst onSubmit = (props: IReviewModalProps): void => {\n if (props.product) {\n submitReview(\n props.product,\n props.reviewTitle,\n props.reviewText,\n props.rating,\n props.context,\n props.userReview,\n props.onReviewComplete\n );\n }\n};\n\n/**\n * This method strips content of extra white spaces.\n * @param text The text to be stripped of extra white spaces.\n */\nconst stripWhiteSpacesFromString = (text: string): string => {\n return text\n .replace(new RegExp('\\\\r?\\\\n|\\\\r+', 'g'), ' ')\n .replace(new RegExp('\\\\s+', 'g'), ' ')\n .trim();\n};\n\nexport const submitReview = (\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n) => {\n const { request } = context;\n const { user } = request;\n if (user && request) {\n const input = new SubmitUserReviewInput(\n product.RecordId.toString(),\n getRnrPartnerId(context.actionContext),\n request.apiSettings.channelId.toString(),\n request.locale,\n {\n productName: product && product.Name,\n rating,\n reviewText: stripWhiteSpacesFromString(text),\n title: stripWhiteSpacesFromString(title),\n userEmail: user.emailAddress,\n userName: user.name\n },\n request.user.token,\n getRnrAuthEndpointId(context.actionContext)\n );\n\n submitUserReview(input, context.actionContext)\n .then(reviewId => {\n const review = reviewId\n ? {\n rating,\n title: stripWhiteSpacesFromString(title),\n reviewText: stripWhiteSpacesFromString(text),\n submittedDateTime: new Date(),\n helpfulPositive: userReview ? userReview.helpfulPositive : 0,\n helpfulNegative: userReview ? userReview.helpfulNegative : 0,\n reviewId,\n userName: request.user.firstName || request.user.name\n }\n : userReview;\n\n const getReviewInput = new GetUserReviewInput(input.productId!, input.tenantId, input.authorization, input.serviceEndpoint);\n context.actionContext.update(getReviewInput, review);\n\n if (onReviewSubmission) {\n onReviewSubmission(!!reviewId);\n }\n })\n .catch(() => {\n const productId = product.RecordId;\n context.telemetry.error(`Failed to submit review for product with recordId: ${productId}`);\n context.telemetry.debug(`Failed to submit review for product with recordId: ${productId}`);\n if (onReviewSubmission) {\n onReviewSubmission(false);\n }\n });\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { OrderBy } from '../actions/inputs/get-product-reviews-input';\n\nexport interface IRnrKeyValuePair {\n key: string;\n value: string;\n}\n\nexport interface IRnrOrderByKeyValuePair {\n key: OrderBy;\n value: string;\n}\n\nexport function setFocusOnElement(id: string): void {\n const element = document.getElementById(id);\n if (element) {\n element.focus();\n }\n}\n\nexport const TOGGLE_REVIEW_MODAL_BUTTON_ID: string = 'reviewproductid';\nexport const TOGGLE_EDIT_MODAL_BUTTON_ID: string = 'ms-write-review__edit';\nexport const TOGGLE_EDIT_MODAL_BUTTON_CARD_ID: string = 'ms-reviews-list__edit';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { format, INodeProps, Progress } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IHistogramItemsProps {\n ratingsSummary: RatingsSummary;\n resources: IHistogramItemsResources;\n locale: string;\n onClick(stars: number): void;\n}\n\nexport interface IHistogramItemsResources {\n barItemAriaLabel: string;\n}\n\nexport interface IHistogramItemViewProps {\n starLabel: React.ReactElement;\n bar: React.ReactElement;\n percentage: React.ReactElement;\n buttonProps: INodeProps;\n}\n\n/**\n * CartLineItems component.\n */\n\nexport const HistogramItems = (props: IHistogramItemsProps): IHistogramItemViewProps[] => {\n const { ratingsSummary } = props;\n const totalRatingsCount: number = ratingsSummary.totalRatingsCount || 0;\n if (totalRatingsCount === 0) {\n return [];\n }\n return [\n renderItem(props, 5, ratingsSummary.star5Count, totalRatingsCount),\n renderItem(props, 4, ratingsSummary.star4Count, totalRatingsCount),\n renderItem(props, 3, ratingsSummary.star3Count, totalRatingsCount),\n renderItem(props, 2, ratingsSummary.star2Count, totalRatingsCount),\n renderItem(props, 1, ratingsSummary.star1Count, totalRatingsCount)\n ];\n};\n\nconst renderItem = (props: IHistogramItemsProps, stars: number, count?: number, totalCount?: number): IHistogramItemViewProps => {\n count = count || 0;\n totalCount = totalCount || 0;\n const percentage = totalCount === 0 ? 0 : count / totalCount;\n const formattedPercent = new Intl.NumberFormat(props.locale, { style: 'percent' }).format(percentage);\n const ariaLabel = format(props.resources.barItemAriaLabel, stars, formattedPercent);\n\n return {\n starLabel: (\n \n ),\n percentage: (\n \n ),\n bar: ,\n buttonProps: {\n tag: 'button',\n className: 'ms-ratings-histogram__item',\n onClick: () => {\n props.onClick(stars);\n }\n }\n };\n};\n\nexport const AverageRatingNumber: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return (\n

\n {props.summary.averageRating}\n {` `}/ 5\n

\n );\n};\n\nexport const TotalReviews: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return

{props.summary.totalRatingsCount}

;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { format, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createRatingsReviewsStateInput } from '../../actions/ratings-reviews-state-data-action';\nimport { AverageRatingNumber, HistogramItems, IHistogramItemViewProps, TotalReviews } from './component/components';\nimport { IRatingsHistogramData } from './ratings-histogram.data';\nimport { IRatingsHistogramProps } from './ratings-histogram.props.autogenerated';\n\nexport interface IRatingsHistogramViewProps extends IRatingsHistogramProps {\n className: string;\n histogramItems: IHistogramItemViewProps[];\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n averageRating: React.ReactNode;\n averageNumber: React.ReactNode;\n totalReviews: React.ReactNode;\n histogramProps: INodeProps;\n ratingsSummaryProps: INodeProps;\n callbacks: IRatingsHistogramCallbacks;\n}\n\nexport interface IRatingsHistogramCallbacks {\n selectFilterBy(stars: number): void;\n}\n\n/**\n * RatingsHistogram component.\n * @extends {React.Component>}\n */\n@observer\nclass RatingsHistogram extends React.PureComponent> {\n constructor(props: IRatingsHistogramProps) {\n super(props);\n this.selectFilterBy = this.selectFilterBy.bind(this);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const ratingCount = ratingsSummary && ratingsSummary.totalRatingsCount ? `${ratingsSummary.totalRatingsCount}` : '0';\n\n const completeClass = classname('ms-ratings-histogram', className);\n const viewProps: IRatingsHistogramViewProps = {\n ...this.props,\n className: completeClass,\n callbacks: {\n selectFilterBy: this.selectFilterBy\n },\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n histogramItems: ratingsSummary\n ? HistogramItems({\n ratingsSummary,\n resources: { ...resources },\n locale: this.props.context.request.locale,\n onClick: this.selectFilterBy\n })\n : [],\n averageRating: ratingsSummary && (\n \n ),\n averageNumber: ratingsSummary && ,\n totalReviews: ratingsSummary && ,\n ratingsSummaryProps: { className: 'ms-ratings-histogram__summary' },\n heading: heading && (\n \n ),\n histogramProps: { className: 'ms-ratings-histogram__histogram' }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public selectFilterBy(stars: number): void {\n const filterKey = `${stars}`;\n this.props.context.actionContext.update(createRatingsReviewsStateInput({ filterKey }), { filterKey });\n }\n}\n\nexport default RatingsHistogram;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHistogramItemViewProps } from './component/components';\nimport { IRatingsHistogramViewProps } from './ratings-histogram';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { ReportReviewConcernInput } from './inputs/report-review-concern-input';\n\nasync function reportReviewConcern(input: ReportReviewConcernInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n throw new Error(\n `[SubmitHelpfulnessVote] Invalid input. ReviewId=${input.reviewId},tenantId=${input.tenantId},locale= ${input.locale},`\n );\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/concerns/review/${input.reviewId}` + `?tenantId=${input.tenantId}` + `&locale=${input.locale}`;\n\n const requestBody = {\n concernCategory: input.concernCategory\n };\n\n const requestHeader = {\n headers: {\n Authorization: `id_token ${input.authToken}`\n }\n };\n\n return sendRequest(requestUrl, 'post', requestBody, requestHeader)\n .then(response => {\n return response.status === 200 || response.status === 201;\n })\n .catch(error => {\n ctx.trace('[ReportReviewConcernInput] Failed to report a concern');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[ReportReviewConcernInput] Failed to report a concern');\n return false;\n });\n}\n\nfunction inputIsValid(input: ReportReviewConcernInput): boolean {\n return input && input.reviewId.length > 0 && input.tenantId.length > 0 && input.locale.length > 0 && input.authToken.length > 0;\n}\n\nexport const reportReviewConcernDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/report-review-concern',\n action: >reportReviewConcern\n});\n\nexport default reportReviewConcernDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { SubmitHelpfulnessVoteInput } from './inputs/submit-helpfulness-vote-input';\n\nasync function submitHelpfulnessVote(input: SubmitHelpfulnessVoteInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n throw new Error(\n `[SubmitHelpfulnessVote] Invalid input. ReviewId=${input.reviewId},tenantId=${input.tenantId}, locale= ${input.locale},`\n );\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/votes/review/${input.reviewId}` + `?tenantId=${input.tenantId}` + `&locale=${input.locale}`;\n\n const requestBody = {\n isHelpful: !!input.isHelpful\n };\n\n const requestHeader = {\n headers: {\n Authorization: `id_token ${input.authToken}`\n }\n };\n\n return sendRequest(requestUrl, 'post', requestBody, requestHeader)\n .then(response => {\n return response.status === 200 || response.status === 201;\n })\n .catch(error => {\n ctx.trace('[SubmitHelpfulnessVote] Failed to vote on a review');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[SubmitHelpfulnessVote] Failed to vote on a review');\n return false;\n });\n}\n\nfunction inputIsValid(input: SubmitHelpfulnessVoteInput): boolean {\n return input && input.reviewId.length > 0 && input.tenantId.length > 0 && input.locale.length > 0 && input.authToken.length > 0;\n}\n\nexport const submitHelpfulnessVoteDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/submit-helpfulness-vote',\n action: >submitHelpfulnessVote\n});\n\nexport default submitHelpfulnessVoteDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\nexport enum ReviewConcernCategory {\n OffensiveContent = '1',\n ReviewResponse = '7',\n SpamAdvertising = '8',\n Profanity = '9'\n}\n\n/**\n * ReportReviewConcern Input Action.\n */\nexport class ReportReviewConcernInput implements IActionInput {\n public reviewId: string;\n\n public tenantId: string;\n\n public locale: string;\n\n public serviceEndpoint: string;\n\n public concernCategory: string;\n\n public authToken: string;\n\n constructor(reviewId: string, tenantId: string, locale: string, concernCategory: string, authToken: string, serviceEndpoint: string) {\n this.reviewId = reviewId;\n this.tenantId = tenantId;\n this.locale = locale;\n this.concernCategory = concernCategory;\n this.authToken = authToken;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'ReportReviewConcern';\n\n public getCacheObjectType = () => 'ReportReviewConcern';\n\n public dataCacheType = (): CacheType => 'none';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n format,\n getPayloadObject,\n getTelemetryAttributes,\n ILabeledDropdownOption,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IReviewCountResources {\n pageReviewCountText: string;\n}\n\nexport interface IReviewCountProps {\n resources: IReviewCountResources;\n currentPage: number;\n reviewsCount: number;\n reviewsShownOnEachPage: number;\n}\n\nexport const ReviewCount: React.FC = (props: IReviewCountProps) => {\n const { currentPage, resources, reviewsCount, reviewsShownOnEachPage } = props;\n\n return (\n \n {format(\n resources.pageReviewCountText,\n _getReviewStartNumber(currentPage, reviewsShownOnEachPage),\n _getReviewEndNumber(currentPage, reviewsCount, reviewsShownOnEachPage),\n reviewsCount\n )}\n \n );\n};\n\nexport interface IPageControlResources {\n previousButtonText: string;\n nextButtonText: string;\n pageReviewAriaLabel: string;\n}\n\nexport interface IPageControlsProps {\n resources: IPageControlResources;\n currentPage: number;\n reviewsCount: number;\n reviewsShownOnEachPage: number;\n selectedSortByOption: ILabeledDropdownOption;\n selectedFilterByOption: ILabeledDropdownOption;\n telemetryContent?: ITelemetryContent;\n updateReviews(\n skipItems: number,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ): Promise;\n}\n\nexport const PageControls: React.FC = (props: IPageControlsProps) => {\n const { currentPage, resources, reviewsCount, reviewsShownOnEachPage } = props;\n const previousPageClick = React.useCallback(() => {\n return _getPreviousPageData(props);\n }, [props]);\n const nextPageClick = React.useCallback(() => {\n return _getNextPageData(props);\n }, [props]);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Next);\n const nextAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Previous;\n const previousAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n return (\n
\n {_hasPreviousPage(currentPage) && (\n \n {resources.previousButtonText}\n \n )}\n {_hasNextPage(currentPage, reviewsCount, reviewsShownOnEachPage) && (\n \n {resources.nextButtonText}\n \n )}\n
\n );\n};\n\nconst _hasPreviousPage = (currentPage: number): boolean => {\n return currentPage > 1;\n};\n\nconst _hasNextPage = (currentPage: number, reviewsCount: number, reviewsShownOnEachPage: number): boolean => {\n return _getPagesCount(reviewsCount, reviewsShownOnEachPage) > currentPage;\n};\n\nconst _getReviewsShown = (reviewsShownOnEachPage: number) => {\n return Math.min(25, reviewsShownOnEachPage);\n};\n\nconst _getPagesCount = (reviewsCount: number, reviewsShownOnEachPage: number): number => {\n return Math.ceil(reviewsCount / _getReviewsShown(reviewsShownOnEachPage));\n};\n\nconst _paginationAriaLabel = (\n pageReviewAriaLabel: string,\n currentPage: number,\n reviewsCount: number,\n reviewsShownOnEachPage: number,\n isNextPage: boolean,\n page?: number\n): string => {\n const pageModifier = isNextPage ? 1 : -1;\n return format(\n pageReviewAriaLabel,\n _getReviewStartNumber(currentPage, reviewsShownOnEachPage, currentPage + pageModifier),\n _getReviewEndNumber(currentPage, reviewsCount, reviewsShownOnEachPage, currentPage + pageModifier),\n reviewsCount\n );\n};\n\nconst _getReviewStartNumber = (currentPage: number, reviewsShownOnEachPage: number, page?: number): number => {\n return ((page || currentPage) - 1) * _getReviewsShown(reviewsShownOnEachPage) + 1;\n};\n\nconst _getReviewEndNumber = (currentPage: number, reviewsCount: number, reviewsShownOnEachPage: number, page?: number): number => {\n const pageUsed = page || currentPage;\n const pageReviewCount = pageUsed * _getReviewsShown(reviewsShownOnEachPage);\n return pageReviewCount < reviewsCount ? pageReviewCount : reviewsCount;\n};\n\nconst _getPreviousPageData = async (props: IPageControlsProps) => {\n await props.updateReviews(\n _getReviewStartNumber(props.currentPage, props.reviewsShownOnEachPage) - 1 - _getReviewsShown(props.reviewsShownOnEachPage),\n props.selectedSortByOption,\n props.selectedFilterByOption,\n props.currentPage - 1,\n false\n );\n};\n\nconst _getNextPageData = async (props: IPageControlsProps) => {\n await props.updateReviews(\n _getReviewEndNumber(props.currentPage, props.reviewsCount, props.reviewsShownOnEachPage),\n props.selectedSortByOption,\n props.selectedFilterByOption,\n props.currentPage + 1,\n false\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n Alert,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ReviewConcernCategory } from '../../../actions/inputs/report-review-concern-input';\nimport { IRnrKeyValuePair } from '../../../common/rnrInterface';\n\nexport interface IReportReviewModalProps {\n resources: IReportReviewModalResources;\n context: ICoreContext>;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n reportedKey: string;\n hasError: boolean;\n telemetryContent?: ITelemetryContent;\n onModalToggle(): void;\n onRadioChange(event: React.ChangeEvent): void;\n reportReview(): void;\n}\n\nexport interface IReportReviewModalResources {\n reportConcernText: string;\n feedbackThankYouText: string;\n reportModalMessage: string;\n reportSubmittedMessage: string;\n reportSpamText: string;\n offensiveContentText: string;\n profanityContentText: string;\n okReportReviewText: string;\n cancelReportReviewText: string;\n reportReviewButtonText: string;\n errorMessageText: string;\n}\n\nexport interface IReportReviewModalViewProps {\n modal: INodeProps;\n modalHeader: INodeProps;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n header: React.ReactElement;\n headerSubmitted: React.ReactElement;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n succesfulButton: React.ReactElement;\n reportMessage: React.ReactElement;\n reportSubmittedMessage: React.ReactElement;\n radioButtons: React.ReactElement;\n error: React.ReactElement;\n}\n\nlet reportConcernDropdownOptions: IRnrKeyValuePair[];\n\n/**\n * CartLineItems component.\n */\n\nexport const ReportReviewModal = (props: IReportReviewModalProps): IReportReviewModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SubmitReview);\n const submitReviewAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.SuccessButton;\n const successAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n reportConcernDropdownOptions = [\n { key: ReviewConcernCategory.SpamAdvertising, value: props.resources.reportSpamText },\n { key: ReviewConcernCategory.OffensiveContent, value: props.resources.offensiveContentText },\n { key: ReviewConcernCategory.Profanity, value: props.resources.profanityContentText }\n ];\n\n return {\n modal: {\n tag: Modal,\n className: 'ms-report-review-modal msc-modal-input-required',\n toggle: props.onModalToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: { tag: ModalHeader, toggle: props.onModalToggle, className: 'ms-report-review-modal-header' },\n modalFooter: { tag: ModalFooter, className: 'ms-report-review-modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-report-review-modal-body' },\n header:

{props.resources.reportConcernText}

,\n headerSubmitted:

{props.resources.feedbackThankYouText}

,\n cancelButton: (\n \n ),\n submitButton: (\n \n ),\n succesfulButton: (\n \n ),\n reportMessage:

{props.resources.reportModalMessage}

,\n reportSubmittedMessage:

{props.resources.reportSubmittedMessage}

,\n radioButtons: radioPairs(props),\n error: (\n \n {props.resources.errorMessageText}\n \n )\n };\n};\n\nconst radioPairs = (props: IReportReviewModalProps) => {\n const pairs = [];\n for (const option of reportConcernDropdownOptions) {\n const inputId = `report-review-${option.key}`;\n const checked = option.key === props.reportedKey;\n pairs.push(\n
\n \n \n
\n );\n }\n\n return
{pairs}
;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric, isOboRequest } from '@msdyn365-commerce/core';\nimport { Button, format, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { TOGGLE_EDIT_MODAL_BUTTON_CARD_ID } from '../../../common/rnrInterface';\n\nexport interface IReviewCardResources {\n wasReviewHelpfulText: string;\n yesButtonText: string;\n noButtonText: string;\n editReviewCardText: string;\n reportedText: string;\n reportConcernText: string;\n reviewRatingNarratorText: string;\n}\n\nexport interface IReviewCardProps {\n review: Review;\n resources: IReviewCardResources;\n context: ICoreContext>;\n isUserReview?: boolean;\n parentId: string;\n parentType: string;\n reportedReviews: string[];\n returnRef: React.RefObject | undefined;\n reportedReviewId: string;\n votedReviews: { reviewId: string; approved: boolean }[];\n toggleWriteReviewModal?(): void;\n toggleReportReviewModal(reviewId: string): void;\n updateReviewHelpfulness(reviewId: string, isHelpful: boolean): void;\n}\n\nexport interface IReviewCardViewProps {\n cardProps: INodeProps;\n name: React.ReactElement;\n rating: React.ReactElement;\n date: React.ReactElement;\n reviewTitle: React.ReactElement;\n reviewText: React.ReactElement;\n ratingHelpfulLabel?: React.ReactElement;\n like?: React.ReactElement;\n dislike?: React.ReactElement;\n edit: React.ReactNode;\n report: React.ReactNode;\n responseName: React.ReactNode;\n responseDate: React.ReactNode;\n responseText: React.ReactNode;\n cardBodyProps: INodeProps;\n responseProps: INodeProps;\n reviewProps: INodeProps;\n controlsProps: INodeProps;\n headerProps: INodeProps;\n}\n\n/**\n * Review card component.\n */\n\nexport const ReviewCard = (props: IReviewCardProps): IReviewCardViewProps => {\n const className = props.isUserReview ? 'ms-reviews-list__card ms-reviews-list__user-review' : 'ms-reviews-list__card';\n return {\n cardProps: { className, key: props.review.reviewId },\n name:

{props.review.userName}

,\n rating: rating(props),\n date:

{renderDate(props, props.review.submittedDateTime)}

,\n reviewTitle:

{props.review.title}

,\n reviewText:

{props.review.reviewText}

,\n ratingHelpfulLabel: props.isUserReview ? (\n undefined\n ) : (\n

{props.resources.wasReviewHelpfulText}

\n ),\n like: props.isUserReview ? undefined : voteHelpfulButton(props, true),\n dislike: props.isUserReview ? undefined : voteHelpfulButton(props, false),\n edit: editButton(props),\n report: reportToggle(props),\n responseName: props.review.userResponse ? (\n

{props.review.userResponse.responderName}

\n ) : (\n undefined\n ),\n responseText: props.review.userResponse ? (\n

{props.review.userResponse.responseText}

\n ) : (\n undefined\n ),\n responseDate: props.review.userResponse ? (\n

{renderDate(props, props.review.userResponse.submittedDateTime)}

\n ) : (\n undefined\n ),\n cardBodyProps: { className: 'ms-reviews-list__card-body' },\n responseProps: { className: 'ms-reviews-list__response' },\n reviewProps: { className: 'ms-reviews-list__review' },\n controlsProps: { className: 'ms-reviews-list__card-controls' },\n headerProps: { className: 'ms-reviews-list__card-header' }\n };\n};\n\nconst rating = (props: IReviewCardProps) => {\n return (\n \n );\n};\n\nconst isVotedFor = (props: IReviewCardProps, isHelpful: boolean): boolean => {\n for (let i = 0; i < props.votedReviews.length; i++) {\n if (props.votedReviews[i].reviewId === props.review.reviewId) {\n return props.votedReviews[i].approved === isHelpful;\n }\n }\n\n return false;\n};\n\nconst voteHelpfulButton = (props: IReviewCardProps, isHelpful: boolean) => {\n const isVoted = isVotedFor(props, isHelpful);\n const isDisabled = props.isUserReview || isVoted || isOboRequest(props.context.request) ? 'disabled' : '';\n let className = isHelpful ? 'ms-reviews-list__like' : 'ms-reviews-list__dislike';\n className = `${className} ${isDisabled}`;\n const label = isHelpful ? props.resources.yesButtonText : props.resources.noButtonText;\n let voteCount = (isHelpful ? props.review.helpfulPositive : props.review.helpfulNegative) || 0;\n voteCount = isVoted ? voteCount + 1 : voteCount;\n const title = `(${voteCount})`;\n const user = props.context.request.user;\n const onClickMethod = () => {\n props.updateReviewHelpfulness(props.review.reviewId!, isHelpful);\n };\n const onClick = isDisabled ? undefined : onClickMethod;\n\n if (user.isAuthenticated) {\n return (\n \n );\n }\n return (\n \n );\n};\n\nconst editButton = (props: IReviewCardProps) => {\n if (props.isUserReview && !isOboRequest(props.context.request)) {\n return (\n \n );\n }\n\n return undefined;\n};\n\nconst renderDate = (props: IReviewCardProps, date?: Date): string | Date => {\n if (!date) {\n return '';\n }\n\n try {\n return new Intl.DateTimeFormat(props.context.request.locale, { month: 'long', day: 'numeric', year: 'numeric' }).format(\n new Date(date)\n );\n } catch {\n return date;\n }\n};\n\n/**\n * On Click Handler.\n * @param props -Review card props.\n * @returns Report review modal.\n */\nconst onClick = (props: IReviewCardProps) => () => {\n props.toggleReportReviewModal(props.review.reviewId!);\n};\n\nconst reportToggle = (props: IReviewCardProps) => {\n const user = props.context.request.user;\n if (props.isUserReview || isOboRequest(props.context.request)) {\n return undefined;\n } else if (!user.isAuthenticated) {\n return (\n \n );\n }\n\n if (props.reportedReviews.includes(props.review.reviewId!)) {\n return

{props.resources.reportedText}

;\n }\n\n const ref = props.review.reviewId === props.reportedReviewId ? props.returnRef : undefined;\n\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\n/**\n * SubmitHelpfulnessVote Input Action.\n */\nexport class SubmitHelpfulnessVoteInput implements IActionInput {\n public reviewId: string;\n\n public tenantId: string;\n\n public locale: string;\n\n public serviceEndpoint: string;\n\n public isHelpful: boolean;\n\n public authToken: string;\n\n constructor(reviewId: string, tenantId: string, locale: string, isHelpful: boolean, authToken: string, serviceEndpoint: string) {\n this.reviewId = reviewId;\n this.tenantId = tenantId;\n this.locale = locale;\n this.isHelpful = isHelpful;\n this.authToken = authToken;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'SubmitHelpfulnessVote';\n\n public getCacheObjectType = () => 'SubmitHelpfulnessVote';\n\n public dataCacheType = (): CacheType => 'none';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n getRnrAuthEndpointId,\n getRnrEndpointId,\n getRnrPartnerId,\n getSelectedProductIdFromActionInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n format,\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n LabeledDropdown\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { reportReviewConcern, submitHelpfulnessVote } from '../..';\nimport { getReviewsForGivenProduct } from '../../actions/get-product-reviews';\nimport { GetProductReviewsInput } from '../../actions/inputs/get-product-reviews-input';\nimport { ReportReviewConcernInput, ReviewConcernCategory } from '../../actions/inputs/report-review-concern-input';\nimport { SubmitHelpfulnessVoteInput } from '../../actions/inputs/submit-helpfulness-vote-input';\nimport { IReviewModalViewProps, ReviewModal, submitReview } from '../../common/review-modal';\nimport { IRnrKeyValuePair, IRnrOrderByKeyValuePair } from '../../common/rnrInterface';\nimport { PageControls, ReviewCount } from './components/components';\nimport { IReportReviewModalViewProps, ReportReviewModal } from './components/report-review-modal';\nimport { IReviewCardViewProps, ReviewCard } from './components/review-card';\nimport { IReviewsListData } from './reviews-list.data';\nimport { IReviewsListProps } from './reviews-list.props.autogenerated';\n\nexport interface IReviewsListState {\n skipItems: number;\n listOfReviews: Review[];\n currentPage: number;\n reviewsCount: number;\n showSpinner: boolean;\n isFilterApplied: boolean;\n selectedSortByOption: ILabeledDropdownOption;\n selectedFilterByOption: ILabeledDropdownOption;\n userReviewRating: number;\n userReviewTitle: string;\n userReviewText: string;\n isReviewModalOpen: boolean;\n hasReviewError: boolean;\n isReportModalOpen: boolean;\n hasReportError: boolean;\n reportingReviewId: string;\n reportedKey: string;\n reported: boolean;\n reportedReviews: string[];\n votedReviews: { reviewId: string; approved: boolean }[];\n}\n\nexport interface IReviewsListCallbacks {\n toggleModal(): void;\n updateReviewTitle(title: string): void;\n updateReviewText(text: string): void;\n updateRating(rating: number): void;\n onReviewSubmitted(isSuccessful: boolean): void;\n submitReview(\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: Msdyn365.ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n ): void;\n updateReviewHelpfulnessVote(reviewId: string, isHelpful: boolean): void;\n toggleReportModal(reviewId: string): void;\n reportReview(reviewId: string, reportedKey: string): void;\n updateSortByDropdown(notification: ILabeledDropdownOnChangeNotification): void;\n updateFilterByDropdown(notification: ILabeledDropdownOnChangeNotification): void;\n updateReviews(\n skipItems: number,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ): void;\n}\n\nexport interface IReviewsListViewProps extends IReviewsListProps {\n state: IReviewsListState;\n className: string;\n callbacks: IReviewsListCallbacks;\n moduleProps: IModuleProps;\n reviewModal: IReviewModalViewProps;\n reportReviewModal: IReportReviewModalViewProps;\n sortByDropdown: React.ReactNode;\n filterByDropdown: React.ReactNode;\n averageRating: React.ReactNode;\n reviewCount: React.ReactElement;\n refineReviewsProps: INodeProps;\n reviewsListProps: INodeProps;\n reviewCards: IReviewCardViewProps[];\n userReview?: IReviewCardViewProps;\n pageControls: React.ReactNode;\n noReviewsMessage: React.ReactElement;\n noReviewsWithFilterMessage: React.ReactElement;\n heading: React.ReactNode;\n sortByOptions: IRnrOrderByKeyValuePair[];\n filterByOptions: IRnrOrderByKeyValuePair[];\n}\n\n/**\n *\n * ReviewsList component.\n * @extends {React.Component, IReviewsListState>}\n */\n@observer\nclass ReviewsList extends React.Component, IReviewsListState> {\n public sortByDropdownOptions: IRnrOrderByKeyValuePair[] = [\n { key: 'MostHelpful', value: this.props.resources.mostHelpfulSortOptionText },\n { key: 'MostRecent', value: this.props.resources.mostRecentSortOptionText },\n { key: 'HighestRating', value: this.props.resources.highestRatedSortOptionText },\n { key: 'LowestRating', value: this.props.resources.lowestRatedSortOptionText }\n ];\n\n public filterByDropdownOptions: IRnrKeyValuePair[] = [\n { key: '1;2;3;4;5', value: this.props.resources.allRatinsFilterByOptionText },\n { key: '5', value: this.props.resources.fiveStarFilterByOptionText },\n { key: '4', value: this.props.resources.fourStarFilterByOptionText },\n { key: '3', value: this.props.resources.threeStarFilterByOptionText },\n { key: '2', value: this.props.resources.twoStarFilterByOptionText },\n { key: '1', value: this.props.resources.oneStarFilterByOptionText }\n ];\n\n private readonly _userReviewModalToggle: React.RefObject;\n\n private readonly _userReportModalToggle: React.RefObject;\n\n private readonly telemetryContent?: ITelemetryContent;\n private readonly reviewsListCallbacks: IReviewsListCallbacks = {\n updateReviewTitle: (title: string): void => {\n this.setState({ userReviewTitle: title });\n },\n updateReviewText: (text: string): void => {\n this.setState({ userReviewText: text });\n },\n updateRating: (rating: number): void => {\n this.setState({ userReviewRating: rating });\n },\n onReviewSubmitted: (isSuccessful: boolean): void => {\n if (isSuccessful) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n },\n submitReview,\n // @ts-expect-error\n toggleModal: this._toggleReviewModal,\n // @ts-expect-error\n updateReviewHelpfulnessVote: this.updateReviewHelpfulnessVote,\n toggleReportModal: (reviewId: string): void => {\n this.state.isReportModalOpen ? this._onReportModalOpen(reviewId) : this._onReportModalClose();\n },\n // @ts-expect-error\n reportReview: this._reportReviewCallback,\n // @ts-expect-error\n updateFilterByDropdown: this.updateFilterByDropdown,\n // @ts-expect-error\n updateSortByDropdown: this.updateSortByDropdown,\n // @ts-expect-error\n updateReviews: this.updateReviews\n };\n constructor(props: IReviewsListProps) {\n super(props);\n const {\n userReview: { result: userReview }\n } = this.props.data;\n\n this.state = {\n skipItems: 0,\n reviewsCount: 0,\n listOfReviews: [],\n currentPage: 1,\n showSpinner: false,\n isFilterApplied: false,\n selectedSortByOption: this.sortByDropdownOptions[0],\n selectedFilterByOption: this.filterByDropdownOptions[0],\n userReviewRating: userReview ? userReview.rating : 0,\n userReviewText: userReview ? userReview.reviewText : '',\n userReviewTitle: userReview ? userReview.title : '',\n isReviewModalOpen: false,\n hasReviewError: false,\n isReportModalOpen: false,\n hasReportError: false,\n reported: false,\n reportedKey: ReviewConcernCategory.SpamAdvertising,\n reportingReviewId: '',\n reportedReviews: [],\n votedReviews: []\n };\n\n this._userReviewModalToggle = React.createRef();\n this._userReportModalToggle = React.createRef();\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public shouldComponentUpdate(nextProps: IReviewsListProps, nextState: IReviewsListState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n public componentDidMount = async () => {\n this.props.data.reviewsList.then(reviewsList => {\n if (\n reviewsList &&\n reviewsList.pagingInfo &&\n reviewsList.pagingInfo.totalItems &&\n reviewsList.items &&\n reviewsList.items.length > 0\n ) {\n this.setState({\n listOfReviews: reviewsList.items,\n reviewsCount: reviewsList.pagingInfo.totalItems\n });\n }\n });\n await this.updateReviews(0, this.state.selectedSortByOption, this.state.selectedFilterByOption, 1, this.state.isFilterApplied);\n\n reaction(\n () => this.props.data.ratingsReviewsState.result && this.props.data.ratingsReviewsState.result.filterKey,\n async (filterKey: string | undefined) => {\n const filterKeyValue = Number(filterKey);\n const dropdownItemsCount = this.filterByDropdownOptions.length;\n if (filterKey && !isNaN(filterKeyValue) && filterKeyValue < dropdownItemsCount) {\n const filterByOption = this.filterByDropdownOptions.find((option: IRnrKeyValuePair) => option.key === filterKey);\n if (!filterByOption) {\n this.props.telemetry.warning(`[reviews-list] cannot find filter with key ${filterKey}`);\n } else {\n await this.updateReviews(0, this.state.selectedSortByOption, filterByOption, 1, true);\n const selectedIndex = dropdownItemsCount - filterKeyValue;\n this.setState({\n selectedFilterByOption: this.filterByDropdownOptions[selectedIndex]\n });\n }\n }\n }\n );\n };\n public render(): JSX.Element | null {\n const { className, heading, reviewsShownOnEachPage } = this.props.config;\n const { currentPage, reviewsCount, selectedFilterByOption, selectedSortByOption } = this.state;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const resources = this.props.resources;\n const completeClass = classname('ms-reviews-list', className);\n const viewProps: IReviewsListViewProps = {\n ...this.props,\n state: this.state,\n className: completeClass,\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n callbacks: this.reviewsListCallbacks,\n reviewModal: this._userReviewModal(),\n reportReviewModal: this._reportReviewModal(),\n filterByDropdown: (\n \n ),\n sortByDropdown: (\n \n ),\n averageRating: ratingsSummary && (\n \n ),\n reviewCount: (\n \n ),\n refineReviewsProps: { className: 'ms-reviews-list__refiners' },\n reviewsListProps: { className: 'ms-reviews-list__reviews' },\n reviewCards: this._reviewCards(this.state.listOfReviews),\n userReview: this._userReview(),\n pageControls: (\n \n ),\n noReviewsMessage: (\n \n {resources.noReviewsMessage}\n \n ),\n noReviewsWithFilterMessage: (\n \n {resources.noReviewsWithSelectedFilterMessage}\n \n ),\n heading: heading && heading.text && (\n \n ),\n sortByOptions: this.sortByDropdownOptions,\n filterByOptions: this.filterByDropdownOptions\n } as IReviewsListViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n private readonly _userReview = () => {\n const userReview = this.props.data.userReview.result;\n\n return userReview && this._reviewCard(userReview, true);\n };\n\n private readonly _reviewCards = (reviewList: Review[]) => {\n const userReview = this.props.data.userReview.result;\n const reviewElements: IReviewCardViewProps[] = [];\n\n for (const review of reviewList) {\n if (!review.isTakenDown && review.isPublished && userReview ? review.reviewId !== userReview.reviewId : true) {\n reviewElements.push(this._reviewCard(review, false));\n }\n }\n return reviewElements;\n };\n\n private readonly _reviewCard = (review: Review, userReview: boolean): IReviewCardViewProps => {\n return ReviewCard({\n review,\n resources: { ...this.props.resources },\n context: this.props.context,\n isUserReview: userReview,\n parentId: this.props.id,\n parentType: this.props.typeName,\n reportedReviews: this.state.reportedReviews,\n returnRef: this._userReportModalToggle,\n reportedReviewId: this.state.reportingReviewId,\n toggleWriteReviewModal: this._toggleReviewModal,\n toggleReportReviewModal: this._onReportModalOpen,\n updateReviewHelpfulness: this.updateReviewHelpfulnessVote,\n votedReviews: this.state.votedReviews\n });\n };\n\n private readonly _userReviewModal = (): IReviewModalViewProps => {\n return ReviewModal({\n userReview: this.props.data.userReview.result,\n product: this.props.data.product.result,\n resources: { ...this.props.resources },\n context: this.props.context,\n parentId: this.props.id,\n parentType: this.props.typeName,\n isOpen: this.state.isReviewModalOpen,\n rating: this.state.userReviewRating,\n reviewTitle: this.state.userReviewTitle,\n reviewText: this.state.userReviewText,\n onModalToggle: this._toggleReviewModal,\n onTitleChange: this._onTitleChange,\n onTextChange: this._onTextChange,\n onRatingChange: this._onRatingChange,\n onReviewComplete: this._onReviewComplete,\n renderContextId: 'writeReview-list',\n returnRef: this._userReviewModalToggle,\n hasError: this.state.hasReviewError,\n modalCSS: 'ms-reviews-list'\n });\n };\n\n private readonly _onTitleChange = (event: React.ChangeEvent): void => {\n this.reviewsListCallbacks.updateReviewTitle(event.target.value);\n };\n\n private readonly _onTextChange = (event: React.ChangeEvent): void => {\n this.reviewsListCallbacks.updateReviewText(event.target.value);\n };\n\n private readonly _onRatingChange = (value: number): void => {\n this.reviewsListCallbacks.updateRating(value);\n };\n\n private readonly _toggleReviewModal = (): void => {\n const userReview = this.props.data.userReview.result;\n if (this.state.isReviewModalOpen) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({\n isReviewModalOpen: true,\n userReviewText: userReview!.reviewText,\n userReviewTitle: userReview!.title,\n userReviewRating: userReview!.rating\n });\n }\n };\n\n private readonly _onReviewComplete = (isSuccess: boolean): void => {\n if (isSuccess) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n };\n\n private readonly _reportReviewModal = () => {\n return ReportReviewModal({\n resources: { ...this.props.resources },\n context: this.props.context,\n isOpen: this.state.isReportModalOpen,\n returnRef: this._userReportModalToggle,\n reportedKey: this.state.reportedKey,\n onModalToggle: this._onReportModalClose,\n onRadioChange: this._onRadioChange,\n reportReview: this._reportReview,\n hasError: this.state.hasReportError,\n telemetryContent: this.telemetryContent\n });\n };\n\n private readonly _onReportModalOpen = (reviewId: string) => {\n this.setState({\n isReportModalOpen: true,\n reportingReviewId: reviewId,\n reported: false,\n reportedKey: ReviewConcernCategory.SpamAdvertising\n });\n };\n\n private readonly _onReportModalClose = () => {\n this.setState({ isReportModalOpen: false, hasReportError: false });\n };\n\n private readonly _onRadioChange = (event: React.ChangeEvent) => {\n this.setState({ reportedKey: event.currentTarget.getAttribute('data-key') || '' });\n };\n\n private readonly _reportReviewCallback = (reviewId: string, reportedKey: string) => {\n reportReviewConcern(\n new ReportReviewConcernInput(\n reviewId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n reportedKey,\n this.getUserToken(this.props.context.request),\n getRnrAuthEndpointId(this.props.context.actionContext)\n ),\n this.props.context.actionContext\n )\n .then((_value: boolean) => {\n const reportedReview = this.state.reportedReviews;\n reportedReview.push(reviewId);\n this.setState({ reported: true, reportedReviews: reportedReview, hasReportError: false });\n })\n .catch((error: boolean) => {\n this.setState({ hasReportError: true });\n });\n };\n\n private readonly _reportReview = () => {\n this._reportReviewCallback(this.state.reportingReviewId, this.state.reportedKey);\n };\n\n private readonly updateSortByDropdown = async (notification: ILabeledDropdownOnChangeNotification) => {\n await this.updateReviews(0, notification.selectedOption, this.state.selectedFilterByOption, 1, this.state.isFilterApplied);\n };\n\n private readonly updateFilterByDropdown = async (notification: ILabeledDropdownOnChangeNotification) => {\n await this.updateReviews(0, this.state.selectedSortByOption, notification.selectedOption, 1, true);\n };\n\n private readonly updateReviews = async (\n skipItems: number | 0,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ) => {\n const productId = getSelectedProductIdFromActionInput(this.props.context.actionContext);\n if (productId === undefined) {\n return;\n }\n const result = await getReviewsForGivenProduct(\n // Task #211227597 Remove this hardcoded values.\n new GetProductReviewsInput(\n productId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n getRnrEndpointId(this.props.context.actionContext),\n selectedSortByOption.key,\n selectedFilterByOption.key,\n skipItems < 0 ? 0 : skipItems,\n this.props.config.reviewsShownOnEachPage\n ),\n this.props.context.actionContext\n );\n if (result && result.items && result.pagingInfo && result.pagingInfo.totalItems !== undefined) {\n this.setState({\n currentPage,\n listOfReviews: result.items,\n selectedSortByOption,\n selectedFilterByOption,\n reviewsCount: result.pagingInfo.totalItems,\n isFilterApplied\n });\n }\n };\n\n private readonly _updateVoteUi = (reviewId: string, isHelpful: boolean): void => {\n let alreadyExists = false;\n let list = this.state.votedReviews.map(review => {\n if (review.reviewId === reviewId) {\n review.approved = isHelpful;\n alreadyExists = true;\n }\n return review;\n });\n\n if (!alreadyExists) {\n list = list.concat({ reviewId, approved: isHelpful });\n }\n\n this.setState({ votedReviews: list });\n };\n\n private readonly updateReviewHelpfulnessVote = (reviewId: string, isHelpful: boolean): void => {\n submitHelpfulnessVote(\n new SubmitHelpfulnessVoteInput(\n reviewId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n isHelpful,\n this.getUserToken(this.props.context.request),\n getRnrAuthEndpointId(this.props.context.actionContext)\n ),\n this.props.context.actionContext\n )\n .then(() => {\n this._updateVoteUi(reviewId, isHelpful);\n })\n .catch((error: Error) => {\n throw new Error('[submitHelpfulnessVote]Error executing action');\n });\n };\n\n private readonly getUserToken = (context: Msdyn365.IRequestContext): string => {\n return context && context.user && context.user.token;\n };\n}\n\nexport default ReviewsList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewModalViewProps } from '../../common/review-modal';\nimport { IReportReviewModalViewProps } from './components/report-review-modal';\nimport { IReviewCardViewProps } from './components/review-card';\nimport { IReviewsListState, IReviewsListViewProps } from './reviews-list';\n\nconst ReviewsListview: React.FC = props => {\n const {\n averageRating,\n filterByDropdown,\n heading,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n reviewCount,\n reviewModal,\n sortByDropdown,\n state,\n userReview\n } = props;\n\n if (!userReview && reviewCards.length === 0 && !state.isFilterApplied) {\n return {noReviewsMessage};\n }\n\n return (\n \n {heading}\n {averageRating}\n {reviewCount}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview)}\n {reviewCards.map(review => {\n return buildReviewCard(review);\n })}\n \n {reviewCards.length === 0 && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(reviewModal, moduleProps)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nconst buildReviewCard = (props: IReviewCardViewProps) => {\n return (\n \n \n {props.rating}\n {props.name}\n \n \n \n {props.reviewTitle}\n {props.date}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {props.ratingHelpfulLabel}\n {props.like}\n {props.dislike}\n {props.edit}\n {props.report}\n \n \n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n {state.reported ? props.headerSubmitted : props.header}\n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n );\n};\n\nexport default ReviewsListview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport const SignInMessage: React.FC<{ text: string }> = (props: { text: string }) => {\n return

{props.text}

;\n};\n\nexport const SignInButton: React.FC<{ text: string; href: string; ariaLabel: string; telemetryContent?: ITelemetryContent }> = (props: {\n text: string;\n href: string;\n ariaLabel: string;\n telemetryContent?: ITelemetryContent;\n}) => {\n const { text, href, ariaLabel, telemetryContent } = props;\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n \n );\n};\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n telemetryContent?: ITelemetryContent;\n onClick(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, telemetryContent, id } = props;\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.WriteReview);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { IReviewModalViewProps, ReviewModal, submitReview } from '../../common/review-modal';\nimport { TOGGLE_REVIEW_MODAL_BUTTON_ID } from '../../common/rnrInterface';\nimport { ModalToggle, SignInButton, SignInMessage } from './components/components';\nimport { IWriteReviewData } from './write-review.data';\nimport { IWriteReviewProps } from './write-review.props.autogenerated';\n\nexport interface IWriteReviewCallbacks {\n toggleModal(): void;\n updateReviewTitle(title: string): void;\n updateReviewText(text: string): void;\n updateRating(rating: number): void;\n onReviewSubmitted(isSuccessful: boolean): void;\n submitReview(\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: Msdyn365.ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n ): void;\n}\n\nexport interface IWriteReviewState {\n rating: number;\n reviewTitle: string;\n reviewText: string;\n isReviewModalOpen: boolean;\n hasReviewError: boolean;\n}\n\nexport interface IWriteReviewViewProps extends IWriteReviewProps {\n state: IWriteReviewState;\n className: string;\n callbacks: IWriteReviewCallbacks;\n signInMessage: React.ReactNode;\n signInButton: React.ReactNode;\n modalToggle: React.ReactNode;\n reviewModal: IReviewModalViewProps;\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n}\n\n/**\n * This module is enables user's to leave ratings and reviews on a specific product\n * WriteReview module.\n * @extends {React.PureComponent>}\n */\nclass WriteReview extends React.PureComponent, IWriteReviewState> {\n private readonly _modalToggleRef: React.RefObject | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n private readonly writeReviewCallbacks: IWriteReviewCallbacks = {\n // @ts-expect-error\n toggleModal: this._toggleReviewModal,\n updateReviewTitle: (title: string): void => {\n this.setState({ reviewTitle: title });\n },\n updateReviewText: (text: string): void => {\n this.setState({ reviewText: text });\n },\n updateRating: (rating: number): void => {\n this.setState({ rating });\n },\n onReviewSubmitted: (isSuccessful: boolean): void => {\n if (isSuccessful) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n },\n submitReview\n };\n public constructor(props: IWriteReviewProps) {\n super(props);\n const {\n userReview: { result: userReview }\n } = this.props.data;\n this._toggleReviewModal = this._toggleReviewModal.bind(this);\n this._modalToggleRef = React.createRef();\n const rating = userReview ? userReview.rating : 0;\n const reviewTitle = userReview ? userReview.title : '';\n const reviewText = userReview ? userReview.reviewText : '';\n\n this.state = {\n isReviewModalOpen: false,\n rating,\n reviewTitle,\n reviewText,\n hasReviewError: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n product: { result: product },\n userReview: { result: userReview }\n } = this.props.data;\n\n const userInfo = this.props.context && this.props.context.request && this.props.context.request.user;\n const completeClass = classnames('ms-write-review', 'msc-modal-input-required', className);\n const viewProps = {\n ...this.props,\n state: this.state,\n className: completeClass,\n moduleProps: {\n moduleProps: this.props,\n className: completeClass,\n id: null\n },\n callbacks: this.writeReviewCallbacks,\n signInMessage: ,\n signInButton: (\n \n ),\n modalToggle: !Msdyn365.isOboRequest(this.props.context.request) && product && (\n \n ),\n reviewModal: this._buildUserReviewModal(),\n heading: heading && heading.text && (\n \n )\n } as IWriteReviewViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n private readonly _onTitleChange = (event: React.ChangeEvent): void => {\n this.writeReviewCallbacks.updateReviewTitle(event.target.value);\n };\n\n private readonly _onTextChange = (event: React.ChangeEvent): void => {\n this.writeReviewCallbacks.updateReviewText(event.target.value);\n };\n\n private readonly _onRatingChange = (value: number): void => {\n this.writeReviewCallbacks.updateRating(value);\n };\n\n private readonly _toggleReviewModal = (): void => {\n const userReview = this.props.data.userReview.result;\n if (this.state.isReviewModalOpen) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else if (userReview) {\n this.setState({\n isReviewModalOpen: true,\n reviewText: userReview.reviewText,\n reviewTitle: userReview.title,\n rating: userReview.rating\n });\n } else {\n this.setState({\n isReviewModalOpen: true,\n reviewText: '',\n reviewTitle: '',\n rating: 0\n });\n }\n };\n\n /**\n * This method builds the user review modal.\n * @param config The module config.\n */\n private _buildUserReviewModal(): IReviewModalViewProps {\n return ReviewModal({\n userReview: this.props.data.userReview.result,\n product: this.props.data.product.result,\n resources: { ...this.props.resources },\n context: this.props.context,\n parentId: this.props.id,\n parentType: this.props.typeName,\n isOpen: this.state.isReviewModalOpen,\n rating: this.state.rating,\n reviewTitle: this.state.reviewTitle,\n reviewText: this.state.reviewText,\n onModalToggle: this._toggleReviewModal,\n onTitleChange: this._onTitleChange,\n onTextChange: this._onTextChange,\n onRatingChange: this._onRatingChange,\n onReviewComplete: this.writeReviewCallbacks.onReviewSubmitted,\n renderContextId: 'writeReview',\n returnRef: this._modalToggleRef,\n hasError: this.state.hasReviewError,\n telemetryContent: this.telemetryContent\n });\n }\n}\n\nexport default WriteReview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewModalViewProps } from '../../common/review-modal';\nimport { IWriteReviewViewProps } from './write-review';\n\nconst WriteReviewView: React.FC = props => {\n const { heading, signInMessage, signInButton, modalToggle, reviewModal, moduleProps } = props;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {modalToggle}\n {createReviewModal(reviewModal, moduleProps)}\n \n )}\n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nexport default WriteReviewView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport {\n IReportReviewModalViewProps,\n IReviewCardViewProps,\n IReviewsListData,\n IReviewsListResources,\n IReviewsListState,\n IReviewsListViewProps\n} from '@msdyn365-commerce-modules/ratings-reviews';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\n\n/**\n * Build Review Card.\n * @param props - Review Card ViewProps.\n * @param resources - Resource Strings.\n * @param isUserReview - User review flag.\n * @returns JSX Element.\n */\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\n return (\n \n \n
\n {props.rating}\n {props.date}\n
\n {props.name}\n
\n \n \n {props.reviewTitle}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {isUserReview ? undefined :

{resources.wasReviewHelpfulText}

}\n {props.like}\n {props.dislike}\n {props.edit}\n
\n
\n
\n );\n};\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
{renderProductImage(props)}
\n
\n
{product?.Name}
\n
{product?.Name}
\n
{product?.ItemId}
\n
\n
\n );\n};\n\n/**\n * Build Review modal.\n * @param props - Review list ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
{resources.selectRatingLabel}
\n {reviewModal.rating}\n
\n
\n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
\n
\n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
\n );\n};\n\n/**\n * Build Review modal.\n * @param props - Review modal ViewProps.\n * @param state - Review List State.\n * @returns JSX Element.\n */\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n {state.reported ? props.headerSubmitted : props.header}\n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n );\n};\n\n/**\n * ReviewsList view.\n * @param props - Ratings ReviewsList ViewProps.\n * @returns ReviewsList view module.\n */\nconst ReviewsListview: React.FC> = props => {\n const {\n filterByDropdown,\n heading,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n sortByDropdown,\n state,\n userReview,\n resources\n } = props;\n\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\n return {noReviewsMessage};\n }\n\n return (\n \n {heading}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview, resources, true)}\n {reviewCards.map(review => {\n return buildReviewCard(review, resources, false);\n })}\n \n {!ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(props)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nexport default ReviewsListview;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["buildReviewCard","props","resources","isUserReview","React","Node","Object","assign","cardProps","headerProps","rating","date","name","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","undefined","className","wasReviewHelpfulText","like","dislike","edit","renderProductDescription","product","data","result","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","context","request","apiSettings","Image","src","gridSettings","imageSettings","config","viewports","xs","q","w","h","sm","md","lg","xl","lazyload","cropFocalRegion","renderProductImage","Name","ItemId","filterByDropdown","heading","moduleProps","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","sortByDropdown","state","userReview","ArrayExtensions","hasElements","isFilterApplied","Module","map","review","reviewModal","modal","modalHeader","modalBody","form","inputRow","selectRatingLabel","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","error","modalFooter","submitButton","cancelButton","createReviewModal","createReportModal","reported","headerSubmitted","header","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","window","__bindings__","_objectSpread","viewDictionary","cn","ratingHelpfulLabel","report","ratingLabel","titleLabel","textLabel","averageRating","reviewCount","length","createInputForProductReviews","input","productId","getSelectedProductIdFromActionInput","GetProductReviewsInput","getRnrPartnerId","requestContext","locale","getRnrEndpointId","async","getReviewsForGivenProduct","ctx","tenantId","localeListFilter","pageSize","inputIsValid","requestUrl","serviceEndpoint","orderBy","skipItems","starFilters","pageToken","sendRequest","then","response","items","filter","i","isTakenDown","pagingInfo","trace","catch","telemetry","exception","debug","getReviewsForGivenProductDataAction","createObservableDataAction","action","getUserReviewDataAction","authorization","errorMessage","headers","Authorization","status","statusText","userInfo","user","isAuthenticated","GetUserReviewInput","token","getRnrAuthEndpointId","constructor","arguments","dataSources","getCacheKey","this","getCacheObjectType","dataCacheType","createRatingsReviewsStateInput","GenericInput","getGenericActionDataAction","getGenericAction","createInternalRatingsReviewsStateInput","filterKey","channelId","userReviewData","SubmitUserReviewInput","onClickSubmit","onSubmit","ReviewModal","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","SubmitReview","submitButtonAttribute","getTelemetryAttributes","contentAction","etext","Cancel","cancelButtonAttribute","tag","Modal","modalCSS","classNames","toggle","onModalToggle","applicationNode","isOpen","returnFocusRef","returnRef","modalHeaderNode","ModalFooter","ModalBody","Button","onClick","discardReviewButtonText","disabled","submitDisabled","submitReviewButtonText","ratingsInput","ratingsLabel","privacyPolicyLink","autoComplete","Alert","hasError","color","errorMessageText","ModalHeader","reviewId","editReviewModalTitle","writeReviewModalTitle","stripWhiteSpacesFromString","RatingComponent","readOnly","avgRating","ariaLabel","selectRatingAriaLabel","initialRating","parentId","typeName","parentType","key","onChange","onRatingChange","maxLength","app","reviewTitleMaxLength","renderContextId","onTitleChange","value","reviewTitleAriaLabel","htmlFor","reviewTextMaxLength","onTextChange","rows","reviewAriaLabel","policyTextBlocks","privacyPolicyTextFormat","split","isSeparatorAtStart","startsWith","isSeparatorAtEnd","endsWith","getUrlSync","actionContext","PrivacyPolicy","privacyPolicyAttribute","href","rel","target","privacyPolicyTitle","submitReview","onReviewComplete","text","replace","RegExp","trim","title","onReviewSubmission","RecordId","toString","productName","userEmail","emailAddress","userName","submitUserReview","submittedDateTime","Date","helpfulPositive","helpfulNegative","firstName","getReviewInput","update","TOGGLE_REVIEW_MODAL_BUTTON_ID","TOGGLE_EDIT_MODAL_BUTTON_CARD_ID","HistogramItems","ratingsSummary","totalRatingsCount","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","stars","count","totalCount","percentage","formattedPercent","Intl","NumberFormat","style","format","barItemAriaLabel","starLabel","bar","Progress","max","buttonProps","AverageRatingNumber","summary","TotalReviews","RatingsHistogram","super","handleHeadingChange","event","selectFilterBy","bind","render","ratingCount","completeClass","classname","viewProps","callbacks","histogramItems","averageRatingAriaLabel","hideCount","averageNumber","totalReviews","ratingsSummaryProps","Msdyn365","editProps","onEdit","histogramProps","renderView","__decorate","observer","histogramItem","item","authToken","requestBody","concernCategory","requestHeader","isHelpful","ReviewConcernCategory","ReportReviewConcernInput","ReviewCount","currentPage","reviewsCount","reviewsShownOnEachPage","pageReviewCountText","_getReviewStartNumber","_getReviewEndNumber","PageControls","previousPageClick","_getPreviousPageData","nextPageClick","_getNextPageData","Next","nextAttribute","Previous","previousAttribute","_hasPreviousPage","_paginationAriaLabel","pageReviewAriaLabel","previousButtonText","_hasNextPage","nextButtonText","_getPagesCount","_getReviewsShown","Math","min","ceil","isNextPage","page","pageModifier","pageReviewCount","updateReviews","selectedSortByOption","selectedFilterByOption","reportConcernDropdownOptions","radioPairs","pairs","option","inputId","checked","reportedKey","push","type","onRadioChange","reviewRatingNarratorText","voteHelpfulButton","isVoted","isVotedFor","votedReviews","approved","isDisabled","isOboRequest","label","yesButtonText","noButtonText","voteCount","onClickMethod","updateReviewHelpfulness","signInUrl","editButton","toggleWriteReviewModal","editReviewCardText","renderDate","DateTimeFormat","month","day","year","_unused","toggleReportReviewModal","reportToggle","reportConcernText","reportedReviews","includes","reportedText","ref","reportedReviewId","innerRef","SubmitHelpfulnessVoteInput","ReviewsList","sortByDropdownOptions","mostHelpfulSortOptionText","mostRecentSortOptionText","highestRatedSortOptionText","lowestRatedSortOptionText","filterByDropdownOptions","allRatinsFilterByOptionText","fiveStarFilterByOptionText","fourStarFilterByOptionText","threeStarFilterByOptionText","twoStarFilterByOptionText","oneStarFilterByOptionText","reviewsListCallbacks","updateReviewTitle","setState","userReviewTitle","updateReviewText","userReviewText","updateRating","userReviewRating","onReviewSubmitted","isSuccessful","isReviewModalOpen","hasReviewError","toggleModal","_toggleReviewModal","updateReviewHelpfulnessVote","toggleReportModal","isReportModalOpen","_onReportModalOpen","_onReportModalClose","reportReview","_reportReviewCallback","updateFilterByDropdown","updateSortByDropdown","componentDidMount","reviewsList","totalItems","listOfReviews","reaction","ratingsReviewsState","filterKeyValue","Number","dropdownItemsCount","isNaN","filterByOption","find","selectedIndex","warning","_userReview","_reviewCard","_reviewCards","reviewList","reviewElements","isPublished","userResponse","responderName","ReviewCard","_userReportModalToggle","reportingReviewId","_userReviewModal","_onTitleChange","_onTextChange","_onRatingChange","_onReviewComplete","_userReviewModalToggle","isSuccess","_reportReviewModal","submitReviewAttribute","SuccessButton","successAttribute","cancelAttribute","SpamAdvertising","reportSpamText","OffensiveContent","offensiveContentText","Profanity","profanityContentText","feedbackThankYouText","cancelReportReviewText","reportReviewButtonText","okReportReviewText","reportModalMessage","ReportReviewModal","_onRadioChange","_reportReview","hasReportError","currentTarget","getAttribute","reportReviewConcern","getUserToken","_value","reportedReview","notification","selectedOption","_updateVoteUi","alreadyExists","list","concat","submitHelpfulnessVote","showSpinner","getTelemetryObject","telemetryPageName","friendlyName","shouldComponentUpdate","nextProps","nextState","LabeledDropdown","labelText","filterByDropdownText","dropdownId","dropdownOptions","onSelectOption","controlledByParent","sortByDropdownText","noReviewsWithSelectedFilterMessage","sortByOptions","filterByOptions","SignInMessage","SignInButton","SignIn","attributes","ModalToggle","WriteReview","writeReviewCallbacks","_modalToggleRef","classnames","signInMessage","signInButton","signInLabel","signInAriaLabel","modalToggle","editReviewButtonText","reviewButtonLabel","_buildUserReviewModal","module","exports","ReactDOM"],"sourceRoot":""}