summaryrefslogtreecommitdiff
path: root/addons/survey/static
diff options
context:
space:
mode:
authorDavid Beguin <dbe@odoo.com>2020-02-28 13:27:17 +0000
committerThibault Delavallée <tde@odoo.com>2020-03-06 10:29:50 +0000
commit2d499c0236927f010f47a4cb5f9908c770b1d0db (patch)
tree33a57709311f51ca2495defa43de15ffbeb020a9 /addons/survey/static
parent3968bed23947722f92d1c8679b9a5955319a0cbc (diff)
[IMP] survey: integrate conditional questions in session mode
Purpose ======= This commit makes the live session mode work with conditional question. The point is to determine which question to display next. As multiple users are 'voting' for answers of the same questions, the way to determine the next question to display is to keep only the most voted answer. The most voted answer will be the only one to trigger the linked conditional question. E.g.: considering - following survey configuration: - Q1: A1, A2 - Q2: triggered by Q1-A1 - Q3: triggered by Q1-A2 - following user inputs: - U1: A1 selected - U2: A2 selected - U3: A2 selected The next question displayed to ALL users will be Q3. Note: If U4 had selected A1, the next question would have been Q2 as when there is an equality, we select the first one. Link ==== Task ID: 23509 PR #44950
Diffstat (limited to 'addons/survey/static')
-rw-r--r--addons/survey/static/src/js/survey_session_leaderboard.js17
-rw-r--r--addons/survey/static/src/js/survey_session_manage.js25
2 files changed, 30 insertions, 12 deletions
diff --git a/addons/survey/static/src/js/survey_session_leaderboard.js b/addons/survey/static/src/js/survey_session_leaderboard.js
index 0126a00f1c7..ae050ddedcf 100644
--- a/addons/survey/static/src/js/survey_session_leaderboard.js
+++ b/addons/survey/static/src/js/survey_session_leaderboard.js
@@ -24,14 +24,21 @@ publicWidget.registry.SurveySessionLeaderboard = publicWidget.Widget.extend({
*
* The width of the progress bars is set after the rendering to enable a width css animation.
*/
- showLeaderboard: function () {
+ showLeaderboard: function (fadeOut) {
var self = this;
var resolveFadeOut;
- var fadeOutPromise = new Promise(function (resolve, reject) { resolveFadeOut = resolve; });
- self.$sessionResults.fadeOut(400, function () {
- resolveFadeOut();
- });
+ var fadeOutPromise;
+ if (fadeOut) {
+ fadeOutPromise = new Promise(function (resolve, reject) { resolveFadeOut = resolve; });
+ self.$sessionResults.fadeOut(400, function () {
+ resolveFadeOut();
+ });
+ } else {
+ fadeOutPromise = Promise.resolve();
+ self.$sessionResults.hide();
+ self.$('.o_survey_session_leaderboard_container').empty();
+ }
var leaderboardPromise = this._rpc({
route: _.str.sprintf('/survey/session/leaderboard/%s', this.surveyAccessToken)
diff --git a/addons/survey/static/src/js/survey_session_manage.js b/addons/survey/static/src/js/survey_session_manage.js
index 0d473cdc9b9..aec3c1f76bf 100644
--- a/addons/survey/static/src/js/survey_session_manage.js
+++ b/addons/survey/static/src/js/survey_session_manage.js
@@ -161,7 +161,7 @@ publicWidget.registry.SurveySessionManage = publicWidget.Widget.extend({
this.$('.o_survey_session_leaderboard_title').text(_('Final Leaderboard'));
this.$('.o_survey_session_navigation_next').addClass('d-none');
}
- this.leaderBoard.showLeaderboard();
+ this.leaderBoard.showLeaderboard(true);
} else {
if (!this.isLastQuestion) {
this._nextQuestion();
@@ -317,12 +317,23 @@ publicWidget.registry.SurveySessionManage = publicWidget.Widget.extend({
}
Promise.all([fadeOutPromise, nextQuestionPromise]).then(function (results) {
- var $renderedTemplate = $(results[1]);
- self.$el.replaceWith($renderedTemplate);
- self.attachTo($renderedTemplate);
- self.$el.fadeIn(1000, function () {
- self._startTimer();
- });
+ if (results[1]) {
+ var $renderedTemplate = $(results[1]);
+ self.$el.replaceWith($renderedTemplate);
+ self.attachTo($renderedTemplate);
+ self.$el.fadeIn(1000, function () {
+ self._startTimer();
+ });
+ } else {
+ // Display last screen
+ self.isLastQuestion = true;
+ self._setupLeaderboard().then(function () {
+ self.$('.o_survey_session_leaderboard_title').text(_('Final Leaderboard'));
+ self.$('.o_survey_session_navigation_next').addClass('d-none');
+ self.$('.o_survey_leaderboard_buttons').removeClass('d-none');
+ self.leaderBoard.showLeaderboard(false);
+ });
+ }
});
},