{"version":3,"file":"static/js/580fe949128f3166352a.bundle.js","mappings":"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","sources":["webpack://morland-ecommerce/./lib/write-review/module-registration.js?74a1","webpack://morland-ecommerce/./src/actions/get-user-review.ts?bad7","webpack://morland-ecommerce/./src/actions/inputs/get-user-review-input.ts?ab81","webpack://morland-ecommerce/./src/actions/submit-user-review.ts?ac78","webpack://morland-ecommerce/./src/actions/inputs/submit-user-review-input.ts?3afb","webpack://morland-ecommerce/./src/common/review-modal.tsx?54a9","webpack://morland-ecommerce/./src/common/rnrInterface.ts?f761","webpack://morland-ecommerce/./src/modules/write-review/components/components.tsx?3575","webpack://morland-ecommerce/./src/modules/write-review/write-review.tsx?9afc","webpack://morland-ecommerce/./src/modules/write-review/write-review.view.tsx?b867","webpack://morland-ecommerce/./src/modules/adventureworks/views/write-review.view.tsx?c67c","webpack://morland-ecommerce/external var \"React\"?0d3b","webpack://morland-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["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['@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 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 { 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, 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?.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":["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","error","telemetry","exception","debug","getSelectedProductIdFromActionInput","userInfo","requestContext","user","isAuthenticated","GetUserReviewInput","getRnrPartnerId","token","getRnrAuthEndpointId","constructor","getCacheKey","getCacheObjectType","dataCacheType","this","channelId","locale","userReviewData","SubmitUserReviewInput","onClickSubmit","props","onSubmit","ReviewModal","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","SubmitReview","submitButtonAttribute","getTelemetryAttributes","contentAction","etext","Cancel","cancelButtonAttribute","modal","tag","Modal","className","modalCSS","classNames","toggle","onModalToggle","applicationNode","isOpen","returnFocusRef","returnRef","modalHeader","modalHeaderNode","modalFooter","ModalFooter","modalBody","ModalBody","cancelButton","React","Button","Object","assign","onClick","resources","discardReviewButtonText","submitButton","disabled","submitDisabled","submitReviewButtonText","rating","ratingsInput","ratingLabel","ratingsLabel","titleInput","titleLabel","textInput","textLabel","privacyPolicyUrl","privacyPolicyLink","form","autoComplete","inputRow","Alert","hasError","color","errorMessageText","ModalHeader","userReview","reviewId","editReviewModalTitle","writeReviewModalTitle","stripWhiteSpacesFromString","reviewText","reviewTitle","RatingComponent","readOnly","avgRating","ariaLabel","selectRatingAriaLabel","initialRating","context","parentId","typeName","parentType","key","onChange","onRatingChange","selectRatingLabel","maxLength","app","config","reviewTitleMaxLength","renderContextId","onTitleChange","value","reviewTitleAriaLabel","htmlFor","reviewTitleLabel","reviewTextMaxLength","onTextChange","rows","reviewAriaLabel","reviewTextLabel","policyTextBlocks","privacyPolicyTextFormat","split","isSeparatorAtStart","startsWith","isSeparatorAtEnd","endsWith","getUrlSync","actionContext","PrivacyPolicy","privacyPolicyAttribute","href","rel","target","privacyPolicyTitle","product","submitReview","onReviewComplete","text","replace","RegExp","trim","title","onReviewSubmission","request","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","SignInButton","SignIn","attributes","ModalToggle","innerRef","WriteReview","ref","super","writeReviewCallbacks","toggleModal","_toggleReviewModal","updateReviewTitle","setState","updateReviewText","updateRating","onReviewSubmitted","isSuccessful","isReviewModalOpen","hasReviewError","handleHeadingChange","event","heading","_onTitleChange","_onTextChange","_onRatingChange","result","state","bind","_modalToggleRef","getTelemetryObject","telemetryPageName","friendlyName","render","completeClass","classnames","viewProps","moduleProps","callbacks","signInMessage","signInButton","signInLabel","signInAriaLabel","signInUrl","modalToggle","Msdyn365","editReviewButtonText","reviewButtonLabel","reviewModal","_buildUserReviewModal","editProps","onEdit","renderView","createReviewModal","Module","Node","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","Image","src","fallBackSrc","loadFailureBehavior","gridSettings","imageSettings","viewports","xs","q","w","h","sm","lg","xl","lazyload","cropFocalRegion","renderProductImage","ItemId","paragraph","RichTextComponent","module","exports","ReactDOM"],"sourceRoot":""}