{"version":3,"file":"static/js/6e4530fb4dc038a30006.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/components/signinbutton.component.tsx?619b","webpack://Msdyn365.Commerce.Online/./src/themes/moekwrsitetheme/views/write-review.view.tsx?563c","webpack://Msdyn365.Commerce.Online/./src/themes/moenzcsitetheme/views/write-review.view.tsx?faad","webpack://Msdyn365.Commerce.Online/./src/themes/moetwksitetheme/views/write-review.view.tsx?2bbb","webpack://Msdyn365.Commerce.Online/./lib/write-review/module-registration.js?74a1","webpack://Msdyn365.Commerce.Online/./src/actions/get-user-review.ts?bad7","webpack://Msdyn365.Commerce.Online/./src/actions/inputs/get-user-review-input.ts?ab81","webpack://Msdyn365.Commerce.Online/./src/actions/submit-user-review.ts?ac78","webpack://Msdyn365.Commerce.Online/./src/actions/inputs/submit-user-review-input.ts?3afb","webpack://Msdyn365.Commerce.Online/./src/common/review-modal.tsx?54a9","webpack://Msdyn365.Commerce.Online/./src/common/rnrInterface.ts?f761","webpack://Msdyn365.Commerce.Online/./src/modules/write-review/components/components.tsx?3575","webpack://Msdyn365.Commerce.Online/./src/modules/write-review/write-review.tsx?9afc","webpack://Msdyn365.Commerce.Online/./src/modules/write-review/write-review.view.tsx?b867","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/write-review.view.tsx?c67c","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["import { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport const SignInButton: React.FC<{\r\n text: string;\r\n href: string;\r\n ariaLabel: string;\r\n telemetryContent?: ITelemetryContent;\r\n imageURL: string;\r\n}> = (props: { text: string; href: string; ariaLabel: string; telemetryContent?: ITelemetryContent; imageURL: string }) => {\r\n const { text, href, ariaLabel, telemetryContent, imageURL } = props;\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.SignIn);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n \r\n \r\n {text}\r\n \r\n \r\n ESL\r\n \r\n \r\n \r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IModuleProps, Module, Node, getTelemetryObject } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { getAsset } from '@msdyn365-commerce/core';\r\n\r\nimport { IReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/write-review/../../common/review-modal';\r\nimport { IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/write-review/./write-review';\r\n\r\nimport { SignInButton } from '../../../components/signinbutton.component';\r\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\r\n\r\nconst WriteReviewView: React.FC> = props => {\r\n const { heading, signInMessage, modalToggle, reviewModal, moduleProps } = props;\r\n const isAuthenticated = props.context.request.user.isAuthenticated;\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const defaultBtnBackground = getAsset('images/esl_default.png', props.context.request);\r\n return (\r\n \r\n {heading}\r\n {!isAuthenticated ? (\r\n <>\r\n {signInMessage}\r\n {\r\n \r\n }\r\n \r\n ) : (\r\n <>\r\n {modalToggle}\r\n {createReviewModal(reviewModal, moduleProps)}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\r\n return (\r\n \r\n {props.modalHeader}\r\n \r\n \r\n \r\n {props.rating}\r\n {props.ratingLabel}\r\n \r\n \r\n {props.titleLabel}\r\n {props.titleInput}\r\n \r\n \r\n {props.textLabel}\r\n {props.textInput}\r\n \r\n {props.privacyPolicyUrl}\r\n {props.error}\r\n \r\n \r\n \r\n {props.submitButton}\r\n {props.cancelButton}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default WriteReviewView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IModuleProps, Module, Node, getTelemetryObject } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { getAsset } from '@msdyn365-commerce/core';\r\n\r\nimport { IReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/write-review/../../common/review-modal';\r\nimport { IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/write-review/./write-review';\r\n\r\nimport { SignInButton } from '../../../components/signinbutton.component';\r\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\r\n\r\nconst WriteReviewView: React.FC> = props => {\r\n const { heading, signInMessage, modalToggle, reviewModal, moduleProps } = props;\r\n const isAuthenticated = props.context.request.user.isAuthenticated;\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const defaultBtnBackground = getAsset('images/esl_default.png', props.context.request);\r\n return (\r\n \r\n {heading}\r\n {!isAuthenticated ? (\r\n <>\r\n {signInMessage}\r\n {\r\n \r\n }\r\n \r\n ) : (\r\n <>\r\n {modalToggle}\r\n {createReviewModal(reviewModal, moduleProps)}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\r\n return (\r\n \r\n {props.modalHeader}\r\n \r\n \r\n \r\n {props.rating}\r\n {props.ratingLabel}\r\n \r\n \r\n {props.titleLabel}\r\n {props.titleInput}\r\n \r\n \r\n {props.textLabel}\r\n {props.textInput}\r\n \r\n {props.privacyPolicyUrl}\r\n {props.error}\r\n \r\n \r\n \r\n {props.submitButton}\r\n {props.cancelButton}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default WriteReviewView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IModuleProps, Module, Node, getTelemetryObject } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { getAsset } from '@msdyn365-commerce/core';\r\n\r\nimport { IReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/write-review/../../common/review-modal';\r\nimport { IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/write-review/./write-review';\r\n\r\nimport { SignInButton } from '../../../components/signinbutton.component';\r\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\r\n\r\nconst WriteReviewView: React.FC> = props => {\r\n const { heading, signInMessage, modalToggle, reviewModal, moduleProps } = props;\r\n const isAuthenticated = props.context.request.user.isAuthenticated;\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const defaultBtnBackground = getAsset('images/esl_default.png', props.context.request);\r\n return (\r\n \r\n {heading}\r\n {!isAuthenticated ? (\r\n <>\r\n {signInMessage}\r\n {\r\n \r\n }\r\n \r\n ) : (\r\n <>\r\n {modalToggle}\r\n {createReviewModal(reviewModal, moduleProps)}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\r\n return (\r\n \r\n {props.modalHeader}\r\n \r\n \r\n \r\n {props.rating}\r\n {props.ratingLabel}\r\n \r\n \r\n {props.titleLabel}\r\n {props.titleInput}\r\n \r\n \r\n {props.textLabel}\r\n {props.textInput}\r\n \r\n {props.privacyPolicyUrl}\r\n {props.error}\r\n \r\n \r\n \r\n {props.submitButton}\r\n {props.cancelButton}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default WriteReviewView;\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['write-review'] = {\n c: () => require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review/write-review'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', 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: 'write-review',\n p: 'ratings-reviews',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review'\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/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|moekwrsitetheme|views|write-review'] = {\n c: () => require('partner/themes/moekwrsitetheme/views/write-review.view.tsx'),\n cn: '__local__-__local__-write-review'\n };\nviewDictionary['__local__|__local__|themes|moenzcsitetheme|views|write-review'] = {\n c: () => require('partner/themes/moenzcsitetheme/views/write-review.view.tsx'),\n cn: '__local__-__local__-write-review'\n };\nviewDictionary['__local__|__local__|themes|moetwksitetheme|views|write-review'] = {\n c: () => require('partner/themes/moetwksitetheme/views/write-review.view.tsx'),\n cn: '__local__-__local__-write-review'\n };\nviewDictionary['@msdyn365-commerce-modules|ratings-reviews|modules|write-review|write-review'] = {\n c: () => require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review/write-review.view.js'),\n cn: '@msdyn365-commerce-modules-ratings-reviews-write-review'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|write-review'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/write-review.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-write-review'\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 { 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\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, 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 { 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}\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: '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 { 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: 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, RichTextComponent } from '@msdyn365-commerce/core';\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IWriteReviewViewProps & IWriteReviewProps): 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: IWriteReviewViewProps & IWriteReviewProps): 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 * Create Write Review Modal.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n\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 * WriteReview view.\n * @param props - WriteReview ViewProps.\n * @returns WriteReview view module.\n */\nconst WriteReviewView: React.FC> = props => {\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\n const { paragraph } = config;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n const text = paragraph && ;\n\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {text}\n {modalToggle}\n {createReviewModal(props)}\n \n )}\n \n );\n};\n\nexport default WriteReviewView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["SignInButton","props","text","href","ariaLabel","telemetryContent","imageURL","payLoad","getPayloadObject","TelemetryConstant","SignIn","attributes","getTelemetryAttributes","React","Object","assign","className","tabIndex","src","alt","createReviewModal","moduleProps","Module","modal","modalHeader","Node","modalBody","form","inputRow","rating","ratingLabel","titleLabel","titleInput","textLabel","textInput","privacyPolicyUrl","error","modalFooter","submitButton","cancelButton","_props$config","heading","signInMessage","modalToggle","reviewModal","isAuthenticated","context","request","user","getTelemetryObject","telemetryPageName","friendlyName","telemetry","defaultBtnBackground","getAsset","resources","signInLabel","signInUrl","config","sigInBackgroundImage","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","viewDictionary","cn","getUserReviewDataAction","createObservableDataAction","action","async","input","ctx","productId","length","authorization","tenantId","inputIsValid","errorMessage","trace","requestUrl","serviceEndpoint","sendRequest","headers","Authorization","then","response","status","statusText","data","catch","exception","debug","getSelectedProductIdFromActionInput","userInfo","requestContext","GetUserReviewInput","getRnrPartnerId","token","getRnrAuthEndpointId","constructor","getCacheKey","getCacheObjectType","dataCacheType","this","channelId","locale","userReviewData","SubmitUserReviewInput","onClickSubmit","onSubmit","ReviewModal","SubmitReview","submitButtonAttribute","contentAction","etext","Cancel","cancelButtonAttribute","tag","Modal","toggle","onModalToggle","applicationNode","isOpen","returnFocusRef","returnRef","modalHeaderNode","ModalFooter","ModalBody","Button","onClick","discardReviewButtonText","disabled","submitDisabled","submitReviewButtonText","ratingsInput","ratingsLabel","privacyPolicyLink","autoComplete","Alert","hasError","color","errorMessageText","ModalHeader","userReview","reviewId","editReviewModalTitle","writeReviewModalTitle","stripWhiteSpacesFromString","reviewText","reviewTitle","RatingComponent","readOnly","avgRating","selectRatingAriaLabel","initialRating","parentId","typeName","parentType","key","onChange","onRatingChange","selectRatingLabel","maxLength","app","reviewTitleMaxLength","renderContextId","onTitleChange","value","reviewTitleAriaLabel","htmlFor","reviewTitleLabel","reviewTextMaxLength","onTextChange","rows","reviewAriaLabel","reviewTextLabel","policyTextBlocks","privacyPolicyTextFormat","split","isSeparatorAtStart","startsWith","isSeparatorAtEnd","endsWith","getUrlSync","actionContext","PrivacyPolicy","privacyPolicyAttribute","rel","target","privacyPolicyTitle","product","submitReview","onReviewComplete","replace","RegExp","trim","title","onReviewSubmission","RecordId","toString","apiSettings","productName","Name","userEmail","emailAddress","userName","submitUserReview","review","submittedDateTime","Date","helpfulPositive","helpfulNegative","firstName","getReviewInput","update","TOGGLE_REVIEW_MODAL_BUTTON_ID","TOGGLE_EDIT_MODAL_BUTTON_CARD_ID","SignInMessage","ModalToggle","innerRef","WriteReview","ref","super","writeReviewCallbacks","toggleModal","_toggleReviewModal","updateReviewTitle","setState","updateReviewText","updateRating","onReviewSubmitted","isSuccessful","isReviewModalOpen","hasReviewError","handleHeadingChange","event","_onTitleChange","_onTextChange","_onRatingChange","result","state","bind","_modalToggleRef","render","completeClass","classnames","viewProps","callbacks","signInButton","signInAriaLabel","editReviewButtonText","reviewButtonLabel","_buildUserReviewModal","Msdyn365","editProps","onEdit","renderView","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","Image","fallBackSrc","loadFailureBehavior","gridSettings","imageSettings","viewports","xs","q","w","h","sm","lg","xl","lazyload","cropFocalRegion","renderProductImage","ItemId","paragraph","RichTextComponent","module","exports","ReactDOM"],"sourceRoot":""}