diff options
| author | David Beguin <dbe@odoo.com> | 2020-02-28 13:27:17 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-03-06 10:29:50 +0000 |
| commit | 2d499c0236927f010f47a4cb5f9908c770b1d0db (patch) | |
| tree | 33a57709311f51ca2495defa43de15ffbeb020a9 /addons/survey/static | |
| parent | 3968bed23947722f92d1c8679b9a5955319a0cbc (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.js | 17 | ||||
| -rw-r--r-- | addons/survey/static/src/js/survey_session_manage.js | 25 |
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); + }); + } }); }, |
