You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
3.0 KiB
75 lines
3.0 KiB
/** @odoo-module **/
|
|
import { _t } from "@web/core/l10n/translation";
|
|
import { rpc } from "@web/core/network/rpc";
|
|
import publicWidget from "@web/legacy/js/public/public_widget";
|
|
import {ReCaptcha} from "@google_recaptcha/js/recaptcha";
|
|
publicWidget.registry.subscription = publicWidget.Widget.extend({
|
|
selector: ".subscription_template",
|
|
disabledInEditableMode: false,
|
|
read_events: {
|
|
'click .st-newsletter_subscribe--btn': '_onSubscribeClick',
|
|
},
|
|
/**
|
|
* @constructor
|
|
*/
|
|
init: function () {
|
|
this._super(...arguments);
|
|
this._recaptcha = new ReCaptcha();
|
|
this.rpc = rpc;
|
|
this.notification = this.bindService("notification");
|
|
},
|
|
/**
|
|
* @override
|
|
*/
|
|
willStart: function () {
|
|
this._recaptcha.loadLibs();
|
|
return this._super(...arguments);
|
|
},
|
|
/**
|
|
* @override
|
|
*/
|
|
_getListId: function () {
|
|
return this.$el.closest('[data-snippet=s_newsletter_block').data('list-id') || this.$el.data('list-id');
|
|
},
|
|
_onSubscribeClick: async function () {
|
|
var self = this;
|
|
const inputName = this.$('input').attr('name');
|
|
const $input = this.$(".st-newsletter_input:visible, .js_subscribe_email:visible"); // js_subscribe_email is kept by compatibility (it was the old name of js_subscribe_value)
|
|
if (inputName === 'email' && $input.length && !$input.val().match(/.+@.+/)) {
|
|
this.$el.addClass('o_has_error').find('.form-control').addClass('is-invalid');
|
|
return false;
|
|
}
|
|
this.$el.removeClass('o_has_error').find('.form-control').removeClass('is-invalid');
|
|
const tokenObj = await this._recaptcha.getToken('website_mass_mailing_subscribe');
|
|
if (tokenObj.error) {
|
|
self.notification.add(tokenObj.error, {
|
|
type: 'danger',
|
|
title: _t("Error"),
|
|
sticky: true,
|
|
});
|
|
return false;
|
|
}
|
|
this.rpc('/website_mass_mailing/subscribe', {
|
|
'list_id': 1,
|
|
'value': $input.length ? $input.val() : false,
|
|
'subscription_type': inputName,
|
|
recaptcha_token_response: tokenObj.token,
|
|
}).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_value, input.js_subscribe_email').prop('disabled', !!result); // js_subscribe_email is kept by compatibility (it was the old name of js_subscribe_value)
|
|
const $popup = self.$el.closest('.o_newsletter_modal');
|
|
if ($popup.length) {
|
|
$popup.modal('hide');
|
|
}
|
|
}
|
|
self.notification.add(result.toast_content, {
|
|
type: toastType,
|
|
title: toastType === 'success' ? _t('Success') : _t('Error'),
|
|
sticky: true,
|
|
});
|
|
});
|
|
},
|
|
});
|
|
|