Source: widget/learning/FeedbackBubbleControl.js

(function() {
    /**
     * Bubble control for providing learning feedback.
     * @augments Help4.control2.bubble.Bubble
     */
    Help4.widget.learning.FeedbackBubbleControl = class extends Help4.control2.bubble.Bubble {
        /**
         * @override
         * @param {Help4.control2.bubble.Bubble.Params} params
         */
        constructor(params) {
            super(params, {
                params: {
                    headerLayout:   {init: Help4.control2.bubble.HEADER_LAYOUT.CaptionTranslateClose},
                    contentLayout:  {init: 'Help4.widget.learning.FeedbackBubbleContentControl'},
                    footerLayout:   {init: 'Help4.widget.learning.FeedbackBubbleFooterControl'},
                    resizableAlign: {init: true},
                    size:           {init: 's'},
                    modal:          {init: true},
                    enableDragDrop: {init: true}
                },
                config: {
                    css: 'bubble-feedback'
                }
            });
        }

        /**
         * incompatible override!
         * @override
         */
        _onCreateContent() {
            super._onCreateContent({textOnly: false});

            this._content?.addListener('change', event => {
                const {
                    /** @type {Help4.widget.learning.FeedbackBubbleContentControl.Data} */ data: {rating, text}
                } = event;

                if (this._footer) this._footer.disableSend = rating === 0 && !text;
                this._fireEvent(event);
            });
        }

        /**
         * incompatible override!
         * @override
         */
        _onCreateFooter() {
            super._onCreateFooter();

            this._footer?.addListener(['send', 'close'], event => void this._fireEvent(event));
        }

        /** @override */
        _onGetDragDropParams() {
            const {_header, remoteMode} = this;
            return {
                object: this.getDom(),
                area: _header.getDragDropElement(),
                remoteMode
            }
        }
    }
})();