{"version":3,"file":"static/js/32b23024a27fe61f6cd1.bundle.js","mappings":"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","sources":["webpack://sgi-bookstore/./src/themes/sgi-theme/views/write-review.view.tsx?2688","webpack://sgi-bookstore/./lib/write-review/module-registration.js?74a1","webpack://sgi-bookstore/./src/actions/get-user-review.ts?bad7","webpack://sgi-bookstore/./src/actions/inputs/get-user-review-input.ts?ab81","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/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/write-review.view.tsx?c67c","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, RichTextComponent } from '@msdyn365-commerce/core';\r\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { 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 { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\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: IWriteReviewViewProps & IWriteReviewProps): 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: IWriteReviewViewProps & IWriteReviewProps): 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 * Create Write Review Modal.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n\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 * WriteReview view.\r\n * @param props - WriteReview ViewProps.\r\n * @returns WriteReview view module.\r\n */\r\nconst WriteReviewView: React.FC> = props => {\r\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\r\n const { paragraph } = config;\r\n const isAuthenticated = props.context.request.user.isAuthenticated;\r\n const text = paragraph && ;\r\n\r\n return (\r\n \r\n {heading}\r\n {!isAuthenticated ? (\r\n <>\r\n {signInMessage}\r\n {signInButton}\r\n \r\n ) : (\r\n <>\r\n {text}\r\n {modalToggle}\r\n {createReviewModal(props)}\r\n \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|sgi-theme|views|write-review'] = {\n c: () => require('partner/themes/sgi-theme/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 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":["renderProductDescription","props","product","data","result","React","Node","className","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","context","request","apiSettings","Image","src","fallBackSrc","loadFailureBehavior","gridSettings","imageSettings","config","viewports","xs","q","w","h","sm","md","lg","xl","lazyload","cropFocalRegion","renderProductImage","Name","ItemId","heading","signInMessage","signInButton","modalToggle","moduleProps","paragraph","isAuthenticated","user","text","RichTextComponent","Module","Object","assign","resources","reviewModal","modal","modalHeader","modalBody","form","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","error","modalFooter","submitButton","cancelButton","createReviewModal","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","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","catch","telemetry","exception","debug","getSelectedProductIdFromActionInput","userInfo","requestContext","GetUserReviewInput","getRnrPartnerId","token","getRnrAuthEndpointId","constructor","getCacheKey","getCacheObjectType","dataCacheType","this","channelId","locale","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","ratingLabel","ratingsLabel","titleLabel","textLabel","privacyPolicyLink","autoComplete","Alert","hasError","color","errorMessageText","ModalHeader","userReview","reviewId","editReviewModalTitle","writeReviewModalTitle","stripWhiteSpacesFromString","reviewText","reviewTitle","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","replace","RegExp","trim","title","onReviewSubmission","RecordId","toString","productName","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","_onTitleChange","_onTextChange","_onRatingChange","state","bind","_modalToggleRef","getTelemetryObject","telemetryPageName","friendlyName","render","completeClass","classnames","viewProps","callbacks","signInLabel","signInAriaLabel","signInUrl","Msdyn365","editReviewButtonText","reviewButtonLabel","_buildUserReviewModal","editProps","onEdit","renderView","module","exports","ReactDOM"],"sourceRoot":""}