odoo18/addons/survey/static/src/js/survey_quick_access.js

98 lines
3.4 KiB
JavaScript

/** @odoo-module **/
import publicWidget from "@web/legacy/js/public/public_widget";
import { rpc } from "@web/core/network/rpc";
publicWidget.registry.SurveyQuickAccessWidget = publicWidget.Widget.extend({
selector: '.o_survey_quick_access',
events: {
'click button[type="submit"]': '_onSubmit',
'input #session_code': '_onSessionCodeInput',
'click .o_survey_launch_session': '_onLaunchSessionClick',
},
//--------------------------------------------------------------------------
// Widget
//--------------------------------------------------------------------------
init() {
this._super(...arguments);
this.orm = this.bindService("orm");
},
/**
* @override
*/
start: function () {
var self = this;
return this._super.apply(this, arguments).then(function () {
// Init event listener
if (!self.readonly) {
$(document).on('keypress', self._onKeyPress.bind(self));
}
});
},
// -------------------------------------------------------------------------
// Private
// -------------------------------------------------------------------------
// Handlers
// -------------------------------------------------------------------------
_onLaunchSessionClick: async function () {
const sessionResult = await this.orm.call(
"survey.survey",
"action_start_session",
[[this.$(".o_survey_launch_session").data("surveyId")]]
);
window.location = sessionResult.url;
},
_onSessionCodeInput: function () {
this.el.querySelectorAll('.o_survey_error > span').forEach((elem) => elem.classList.add('d-none'));
this.$('.o_survey_launch_session').addClass('d-none');
this.$('button[type="submit"]').removeClass('d-none');
},
_onKeyPress: function (event) {
if (event.key === "Enter") {
event.preventDefault();
this._submitCode();
}
},
_onSubmit: function (event) {
event.preventDefault();
this._submitCode();
},
_submitCode: function () {
var self = this;
this.$('.o_survey_error > span').addClass('d-none');
const sessionCodeInputVal = this.$('input#session_code').val().trim();
if (!sessionCodeInputVal) {
self.$('.o_survey_session_error_invalid_code').removeClass('d-none');
return;
}
rpc(`/survey/check_session_code/${sessionCodeInputVal}`).then(function (response) {
if (response.survey_url) {
window.location = response.survey_url;
} else {
if (response.error && response.error === 'survey_session_not_launched') {
self.$('.o_survey_session_error_not_launched').removeClass('d-none');
if ("survey_id" in response) {
self.$('button[type="submit"]').addClass('d-none');
self.$('.o_survey_launch_session').removeClass('d-none');
self.$('.o_survey_launch_session').data('surveyId', response.survey_id);
}
} else {
self.$('.o_survey_session_error_invalid_code').removeClass('d-none');
}
}
});
},
});
export default publicWidget.registry.SurveyQuickAccessWidget;