{"version":3,"file":"BazaarvoiceRatingAndReviews.js","names":["BazaarvoiceRatingAndReviews","a","setters","Event","BazaarvoiceService","default","mix","AnalyticsMixin","execute","with","bindEvents","on","onSubmissionLoad","bind","onSubmissionSubmitted","emit","category","action","label","analytics","extraData","event_name","product_info","eventData","contentType","typeData","review","emitEvent","eventName","question","answer","virtualPageURL","element","dataset","pathname","virtualPageTitle","destroy","removeListener"],"sources":["components/product/BazaarvoiceRatingAndReviews.js"],"sourcesContent":["import { Event } from 'services/EventEmitter';\nimport BazaarvoiceService from './BazaarvoiceService';\nimport { mix } from 'core/mixwith';\nimport AnalyticsMixin from 'mixins/Analytics';\n\n/**\n * This is a description of the BazaarvoiceRatingAndReviews constructor function.\n * @class\n * @classdesc BazaarvoiceService extend. It emits BazaarVoice RR specific events.\n * @extends BazaarvoiceService\n */\nexport default class BazaarvoiceRatingAndReviews extends mix(BazaarvoiceService).with(AnalyticsMixin) {\n    /**\n     * Should contain only event listeners and nothing else\n     * All the event handlers should be into a separated function. No usage of anonyous function\n     */\n    bindEvents() {\n        super.bindEvents();\n        Event.on('BV.submission.load', this.onSubmissionLoad.bind(this));\n        Event.on('BV.submission.submitted', this.onSubmissionSubmitted.bind(this));\n    }\n\n    /**\n     * Handler for submissionLoad event,\n     * triggered when a consumer opens a review or Q&A submission form.\n     */\n    onSubmissionLoad() {\n        Event.emit('analytics.event', {\n            category: 'product detail page',\n            action: 'write review',\n            label: this.analytics.label,\n            extraData: {\n                event_name: 'write_review',\n                product_info: this.analytics.label,\n            },\n        });\n    }\n\n    /**\n     * Handler for submissionLoad event,\n     * triggered when a consumer opens a review or Q&A submission form.\n     * @param {Object} eventData - Third-party provider event data.\n     */\n    onSubmissionSubmitted(eventData) {\n        if (eventData.contentType === 'review' || eventData.contentType === 'question' || eventData.contentType === 'answer') {\n            const contentTypeMap = {\n                review: {\n                    emitEvent: 'BV.review.submitted',\n                    action: 'submit a review',\n                    eventName: 'submit_review',\n                },\n                question: {\n                    emitEvent: 'BV.question.submitted',\n                    action: 'ask a question',\n                    eventName: 'ask_question',\n                },\n                answer: {\n                    emitEvent: 'BV.answer.submitted',\n                    action: 'post answer',\n                    eventName: 'post_answer',\n                },\n            };\n            const typeData = contentTypeMap[eventData.contentType];\n\n            if (eventData.contentType === 'question') {\n                Event.emit('analytics.virtualPage', {\n                    virtualPageURL: `/quick-view${this.element.dataset.pathname}/questions-&-answers/ask-question`,\n                    virtualPageTitle: 'questions & answers ask question',\n                });\n            }\n\n            Event.emit(typeData.emitEvent);\n            Event.emit('analytics.event', {\n                category: 'product detail page',\n                action: typeData.action,\n                label: this.analytics.label,\n                extraData: {\n                    event_name: typeData.eventName,\n                    product_info: this.analytics.label,\n                },\n            });\n        }\n    }\n\n    /**\n     * Destroy is called automatically after the component is being removed from the DOM\n     * You must always destroy the listeners attached to an element to avoid any memory leaks\n     */\n    destroy() {\n        Event.removeListener('BV.submission.load');\n        Event.removeListener('BV.submission.submitted');\n    }\n}\n"],"mappings":"qJAWqBA,CAA2B,QAAAC,CAAA,oBAAAC,OAAA,WAAAD,CAAA,EAXvCE,CAAK,CAAAF,CAAA,CAALE,KAAK,WAAAF,CAAA,EACPG,CAAkB,CAAAH,CAAA,CAAAI,OAAA,WAAAJ,CAAA,EAChBK,CAAG,CAAAL,CAAA,CAAHK,GAAG,WAAAL,CAAA,EACLM,CAAc,CAAAN,CAAA,CAAAI,OAAA,GAAAG,OAAA,SAAAA,CAAA,EAAAP,CAAA,WAQAD,CAA2B,CAAjC,aAA0C,CAAAM,CAAG,CAACF,CAAkB,CAAC,CAACK,IAAI,CAACF,CAAc,CAAE,CAKlGG,UAAUA,CAAA,CAAG,CACT,KAAK,CAACA,UAAU,CAAC,CAAC,CAClBP,CAAK,CAACQ,EAAE,CAAC,oBAAoB,CAAE,IAAI,CAACC,gBAAgB,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC,CAChEV,CAAK,CAACQ,EAAE,CAAC,yBAAyB,CAAE,IAAI,CAACG,qBAAqB,CAACD,IAAI,CAAC,IAAI,CAAC,CAC7E,CAMAD,gBAAgBA,CAAA,CAAG,CACfT,CAAK,CAACY,IAAI,CAAC,iBAAiB,CAAE,CAC1BC,QAAQ,CAAE,qBAAqB,CAC/BC,MAAM,CAAE,cAAc,CACtBC,KAAK,CAAE,IAAI,CAACC,SAAS,CAACD,KAAK,CAC3BE,SAAS,CAAE,CACPC,UAAU,CAAE,cAAc,CAC1BC,YAAY,CAAE,IAAI,CAACH,SAAS,CAACD,KACjC,CACJ,CAAC,CACL,CAOAJ,qBAAqBA,CAACS,CAAS,CAAE,CAC7B,GAA8B,QAAQ,GAAlCA,CAAS,CAACC,WAAwB,EAA8B,UAAU,GAApCD,CAAS,CAACC,WAA0B,EAA8B,QAAQ,GAAlCD,CAAS,CAACC,WAAwB,CAAE,MAkB5G,CAAAC,CAAQ,CAjBS,CACnBC,MAAM,CAAE,CACJC,SAAS,CAAE,qBAAqB,CAChCV,MAAM,CAAE,iBAAiB,CACzBW,SAAS,CAAE,eACf,CAAC,CACDC,QAAQ,CAAE,CACNF,SAAS,CAAE,uBAAuB,CAClCV,MAAM,CAAE,gBAAgB,CACxBW,SAAS,CAAE,cACf,CAAC,CACDE,MAAM,CAAE,CACJH,SAAS,CAAE,qBAAqB,CAChCV,MAAM,CAAE,aAAa,CACrBW,SAAS,CAAE,aACf,CACJ,CAAC,CAC+BL,CAAS,CAACC,WAAW,CAAC,CAExB,UAAU,GAApCD,CAAS,CAACC,WAA0B,EACpCrB,CAAK,CAACY,IAAI,CAAC,uBAAuB,CAAE,CAChCgB,cAAc,CAAG,cAAa,IAAI,CAACC,OAAO,CAACC,OAAO,CAACC,QAAS,mCAAkC,CAC9FC,gBAAgB,CAAE,kCACtB,CAAC,CAAC,CAGNhC,CAAK,CAACY,IAAI,CAACU,CAAQ,CAACE,SAAS,CAAC,CAC9BxB,CAAK,CAACY,IAAI,CAAC,iBAAiB,CAAE,CAC1BC,QAAQ,CAAE,qBAAqB,CAC/BC,MAAM,CAAEQ,CAAQ,CAACR,MAAM,CACvBC,KAAK,CAAE,IAAI,CAACC,SAAS,CAACD,KAAK,CAC3BE,SAAS,CAAE,CACPC,UAAU,CAAEI,CAAQ,CAACG,SAAS,CAC9BN,YAAY,CAAE,IAAI,CAACH,SAAS,CAACD,KACjC,CACJ,CAAC,CACL,CACJ,CAMAkB,OAAOA,CAAA,CAAG,CACNjC,CAAK,CAACkC,cAAc,CAAC,oBAAoB,CAAC,CAC1ClC,CAAK,CAACkC,cAAc,CAAC,yBAAyB,CAClD,CACJ,CAAC","ignoreList":[]}