{"version":3,"file":"BazaarVoiceHosted.js","names":["BazaarVoiceHosted","a","setters","deepMerge","ThirdPartyLoader","default","setHash","Event","trigger","execute","constructor","element","options","arguments","length","version","afterInit","emit","onDependencyLoaded","loadScript","onScriptLoaded","data","events","submissionLoad","onSubmissionLoad","bind","submissionSubmitted","onSubmissionSubmitted","bubbles","window","bvCallback","onBVCallback","$BV","configure","BV","initCache","selectors","reviews","document","querySelector","questions","reviewsTab","questionsTab","reviewsTabHash","parentElement","getAttribute","questionsTabHash","bindEvents","once","eventData","reviewsApp","swat_reviews","questionsApp","swat_questions","on","location","hash"],"sources":["components/global/BazaarVoiceHosted.js"],"sourcesContent":["import { deepMerge } from 'toolbox/deepMerge';\nimport ThirdPartyLoader from 'components/global/ThirdPartyLoader';\nimport { setHash } from 'toolbox/location';\nimport { Event } from 'services/EventEmitter';\nimport { trigger } from 'toolbox/event';\n\n/**\n * This is a description of the BazaarVoiceHosted constructor function.\n * @class\n * @classdesc Loads bazaarvoice script and after sets up some necessary events\n * @extends ThirdPartyLoader\n */\nexport default class BazaarVoiceHosted extends ThirdPartyLoader {\n    /**\n     * Constructor of the class that mainly merge the options of the components\n     * @param {HTMLElement} element HTMLElement of the component\n     * @param {object} options options that belongs to the component\n     */\n    constructor(element, options = {}) {\n        super(element, deepMerge({\n            version: 'v1', // the default version of the BV library; can also be set to v2\n        }, options));\n    }\n\n    /**\n     * After init\n     * Run any script after the component is fully initialized\n     */\n    afterInit() {\n        Event.emit('BV.dependency.check');\n    }\n\n    /**\n     * On BV dependent component load event handler, called when BV dependent component is loaded\n     */\n    onDependencyLoaded() {\n        this.loadScript();\n    }\n\n    /**\n     * On script load handler, called when the third-party is loaded\n     * @param {Object} data - Response of the provider\n     */\n    onScriptLoaded(data) {\n        const events = {\n            submissionLoad: this.onSubmissionLoad.bind(this),\n            submissionSubmitted: this.onSubmissionSubmitted.bind(this),\n        };\n\n        super.onScriptLoaded(data);\n\n        trigger('BV.dependency.scriptloaded', this.element, { bubbles: true });\n\n        if (typeof window.bvCallback !== 'function') {\n            window.bvCallback = this.onBVCallback.bind(this);\n        }\n\n        if (this.options.version === 'v1' && typeof $BV !== 'undefined' && $BV !== 'null') {\n            $BV.configure('global', { events });\n        } else if (this.options.version === 'v2' && typeof BV !== 'undefined' && BV !== 'null') {\n            BV.configure('global', { events });\n        }\n    }\n\n    /**\n     * All selectors must be cached. Never cache elements that are out of the component scope\n     */\n    initCache() {\n        this.selectors.reviews = document.querySelector('[data-element-type=\"reviews\"]');\n        this.selectors.questions = document.querySelector('[data-element-type=\"questions\"]');\n        this.selectors.reviewsTab = document.querySelector('[data-titlehash=\"reviews\"]');\n        this.selectors.questionsTab = document.querySelector('[data-titlehash=\"questions-answers\"]');\n        this.reviewsTabHash = this.selectors.reviews ? this.selectors.reviews.parentElement.getAttribute('data-tab-hash') : '';\n        this.questionsTabHash = this.selectors.questions ? this.selectors.questions.parentElement.getAttribute('data-tab-hash') : '';\n    }\n\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.once('BV.dependency.loaded', this.onDependencyLoaded, this);\n    }\n\n    /**\n     * Handler for submissionSubmitted event,\n     * triggered when a consumer submits a submission form.\n     * @param {Object} eventData - Third-party provider event data.\n     */\n    onSubmissionSubmitted(eventData) {\n        Event.emit('BV.submission.submitted', eventData);\n    }\n\n    /**\n     * Bazaarvoice library callback\n     * @param {Object} BV Bazaarvoice library instance\n     */\n    onBVCallback(BV) {\n        const reviewsApp = BV.reviews || BV.swat_reviews;\n        const questionsApp = BV.questions || BV.swat_questions;\n\n        reviewsApp.on('show', () => {\n            if (this.reviewsTabHash) {\n                if (!this.selectors.reviews.getAttribute('data-bv-show')) {\n                    document.location.hash = '';\n                    setHash('tab', this.reviewsTabHash);\n                } else {\n                    trigger('tab.change', this.selectors.reviewsTab, {\n                        bubbles: true,\n                    });\n                }\n            } else {\n                document.location.hash = '';\n                setHash('section', 'reviews');\n            }\n        });\n\n        questionsApp.on('show', () => {\n            if (this.questionsTabHash) {\n                if (!this.selectors.reviews.getAttribute('data-bv-show')) {\n                    document.location.hash = '';\n                    setHash('tab', this.questionsTabHash);\n                } else {\n                    trigger('tab.change', this.selectors.questionsTab, {\n                        bubbles: true,\n                    });\n                }\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    onSubmissionLoad(eventData) {\n        Event.emit('BV.submission.load', eventData);\n    }\n}\n"],"mappings":"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","ignoreList":[]}