george
george

Reputation: 586

How to disable toast message for Newsletter module on Odoo (v14) website

For the website I develop, I use Newsletter module to create a mailing list. It's quite enough for basic needs. When you insert an e-mail and click to subscribe button, it shows (replace) "Thanks" message and hide the "Subscribe" button. It also shows a toast message: "Thanks for subscribing!" on the top right side of the page.

I don't want to show toast messages for newsletter subscriptions. Unfortunately, there is no option to enable/disable it.

If I disable/remove that part below from website_mass_mailing.js file it doesn't show the toast message.

self.displayNotification({
    type: toastType,
    title: toastType === 'success' ? _t('Success') : _t('Error'),
    message: result.toast_content,
    sticky: true,
});

I don't want to touch this file (website_mass_mailing.js) but instead, inherit it and remove that part but I couldn't succeed. Any suggestion on how to do it?

Upvotes: 0

Views: 150

Answers (2)

george
george

Reputation: 586

After suggestions of @icra I've tried to figure it out and here is the code that worked for me.

Thanks to Cybrosys Techno Solutions Pvt.Ltd as well to achieve the solution.

Here is the code:

odoo.define('your_module.name', function (require){

    var publicWidget = require('web.public.widget');
    
    var _t = core._t;

    publicWidget.registry.subscribe.include({
        _onSubscribeClick: async function () {
            var self = this;
            var $email = this.$(".js_subscribe_email:visible");

            if ($email.length && !$email.val().match(/.+@.+/)) {
                this.$target.addClass('o_has_error').find('.form-control').addClass('is-invalid');
                return false;
            }
            this.$target.removeClass('o_has_error').find('.form-control').removeClass('is-invalid');
            let tokenObj = null;
            if (this._recaptcha) {
                tokenObj = await this._recaptcha.getToken('website_mass_mailing_subscribe');
                if (tokenObj.error) {
                    self.displayNotification({
                        type: 'danger',
                        title: _t("Error"),
                        message: tokenObj.error,
                        sticky: true,
                    });
                    return false;
                }
            }
            const params = {
                'list_id': this.$target.data('list-id'),
                'email': $email.length ? $email.val() : false,
            };
            if (this._recaptcha) {
                params['recaptcha_token_response'] = tokenObj.token;
            }
            this._rpc({
                route: '/website_mass_mailing/subscribe',
                params: params,
            }).then(function (result) {
                let toastType = result.toast_type;
                if (toastType === 'success') {
                    self.$(".js_subscribe_btn").addClass('d-none');
                    self.$(".js_subscribed_btn").removeClass('d-none');
                    self.$('input.js_subscribe_email').prop('disabled', !!result);
                    if (self.$popup.length) {
                        self.$popup.modal('hide');
                    }
                }

                // make the changes you need accordingly or comment out the below code.
                self.displayNotification({
                    type: toastType,
                    title: toastType === 'success' ? _t('Success') : _t('Error'),
                    message: result.toast_content,
                    sticky: true,
                });
            });
        },

    })

})

Upvotes: 0

icra
icra

Reputation: 501

You should create a new module which depends on website_mass_mailing and extends mass_mailing.website_integration via a dedicated javascript module.

For example:

odoo.define('my_module.mass_mailing_website_integration', function (require) {
  var website_integration = require('mass_mailing.website_integration');
  website_integration.extend({
    // Your Logic Here
  });
}

Find mass_mailing method who's calling displayNotification and override it. Unfortunately i see no alternative to copy-pasting it entirely from source and then removing desired behaviours.

Do not forget to include your javascript in web_assets template.

Upvotes: 1

Related Questions