Odoo18-Base/addons/survey/static/src/js/survey_quick_access.js
2025-03-10 11:12:23 +07:00

97 lines
3.3 KiB
JavaScript

odoo.define('survey.quick.access', function (require) {
'use strict';
var publicWidget = require('web.public.widget');
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
//--------------------------------------------------------------------------
/**
* @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._rpc({
'model': 'survey.survey',
'method': 'action_start_session',
'args': [[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.keyCode === 13) { // 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;
}
this._rpc({
route: `/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');
}
}
});
},
});
return publicWidget.registry.SurveyQuickAccessWidget;
});