summaryrefslogtreecommitdiff
path: root/addons/mail/static
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-09-10 19:21:57 +0200
committerChristophe Simonis <chs@odoo.com>2018-09-10 19:21:57 +0200
commit826cd9b3d3281fa78bf7a8b10d2ca1efff87d703 (patch)
tree538e6b7162ba66be03958ddf5f7b7cf027b98a75 /addons/mail/static
parent4850fb08385de3f0851a732c97c90402e89838b7 (diff)
parentc3ea0a781132b6bb4c00e7856b2e0aa1b5c20f28 (diff)
[MERGE] forward port branch 11.0 up to c3ea0a78113
Diffstat (limited to 'addons/mail/static')
-rw-r--r--addons/mail/static/src/js/activity.js35
-rw-r--r--addons/mail/static/tests/chatter_tests.js70
2 files changed, 97 insertions, 8 deletions
diff --git a/addons/mail/static/src/js/activity.js b/addons/mail/static/src/js/activity.js
index fce7eb29f6f..6e66d73ea07 100644
--- a/addons/mail/static/src/js/activity.js
+++ b/addons/mail/static/src/js/activity.js
@@ -187,6 +187,28 @@ var Activity = AbstractActivityField.extend({
this.trigger_up('reload_mail_fields', fieldsToReload);
},
+ /** Binds a focusout handler on a bootstrap popover
+ * Useful to do some operations on the popover's HTML,
+ * like keeping the user's input for the feedback
+ * @param {JQuery} $popover_el: the element on which
+ * the popover() method has been called
+ */
+ _bindPopoverFocusout: function ($popover_el) {
+ var self = this;
+ // Retrieve the actual popover's HTML
+ var $popover = $popover_el.data("bs.popover").tip();
+ var activity_id = $popover_el.data('activity-id');
+ $popover.off('focusout');
+ $popover.focusout(function (e) {
+ // outside click of popover hides the popover
+ // e.relatedTarget is the element receiving the focus
+ self.feedbackValue[activity_id] = $popover.find('#activity_feedback').val().trim();
+ if(!$popover.is(e.relatedTarget) && !$popover.find(e.relatedTarget).length) {
+ $popover_el.popover('hide');
+ }
+ });
+ },
+
// handlers
_onClickRedirect: function (ev) {
var id = $(ev.target).data('oe-id');
@@ -236,19 +258,23 @@ var Activity = AbstractActivityField.extend({
})
.then(this._reload.bind(this, {activity: true}));
},
+
_onMarkActivityDone: function (event) {
event.preventDefault();
var self = this;
+ this.feedbackValue = this.feedbackValue || {};
var $popover_el = $(event.currentTarget);
var activity_id = $popover_el.data('activity-id');
var previous_activity_type_id = $popover_el.data('previous-activity-type-id');
if (!$popover_el.data('bs.popover')) {
+ this.feedbackValue[activity_id] = "";
$popover_el.popover({
title : _t('Feedback'),
html: 'true',
trigger:'click',
content : function() {
var $popover = $(QWeb.render("mail.activity_feedback_form", {'previous_activity_type_id': previous_activity_type_id}));
+ $popover.find('#activity_feedback').val(self.feedbackValue[activity_id]);
$popover.on('click', '.o_activity_popover_done_next', function () {
var feedback = _.escape($popover.find('#activity_feedback').val());
var previous_activity_type_id = $popover_el.data('previous-activity-type-id');
@@ -272,14 +298,7 @@ var Activity = AbstractActivityField.extend({
}).on("shown.bs.popover", function () {
var $popover = $(this).data("bs.popover").tip();
$popover.find('#activity_feedback').focus();
- $popover.off('focusout');
- $popover.focusout(function (e) {
- // outside click of popover hide the popover
- // e.relatedTarget is the element receiving the focus
- if(!$popover.is(e.relatedTarget) && !$popover.find(e.relatedTarget).length) {
- $popover.popover('hide');
- }
- });
+ self._bindPopoverFocusout($(this));
}).popover('show');
}
},
diff --git a/addons/mail/static/tests/chatter_tests.js b/addons/mail/static/tests/chatter_tests.js
index f1f6097cb97..f98cd1382a8 100644
--- a/addons/mail/static/tests/chatter_tests.js
+++ b/addons/mail/static/tests/chatter_tests.js
@@ -17,6 +17,8 @@ var createBusService = mailTestUtils.createBusService;
var createAsyncView = testUtils.createAsyncView;
var createView = testUtils.createView;
+var Activity = require('mail.Activity');
+
QUnit.module('mail', {}, function () {
QUnit.module('Chatter', {
@@ -72,6 +74,7 @@ QUnit.module('Chatter', {
type: 'selection',
selection: [['overdue', 'Overdue'], ['today', 'Today'], ['planned', 'Planned']],
},
+ note : { string: "Note", type: "char" },
},
},
'mail.activity.type': {
@@ -143,6 +146,73 @@ QUnit.test('basic rendering', function (assert) {
form.destroy();
});
+QUnit.test('Activity Done keep feedback on blur', function (assert) {
+ assert.expect(3);
+ var done = assert.async();
+
+ this.data['mail.activity'].records = [
+ {activity_type_id: 1, id: 1, user_id: 2, state: 'today', note: 'But I\'m talkin\' about Shaft'},
+ ];
+ this.data.partner.records[0].activity_ids = [1];
+
+ var shownDef = $.Deferred();
+ var hiddenDef = $.Deferred();
+ testUtils.patch(Activity, {
+ _bindPopoverFocusout: function () {
+ this._super.apply(this, arguments);
+ shownDef.resolve();
+ },
+ });
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ res_id: 2,
+ arch:'<form string="Partners">' +
+ '<div class="oe_chatter">' +
+ '<field name="activity_ids" widget="mail_activity"/>' +
+ '</div>' +
+ '</form>',
+ });
+
+ // sanity checks
+ var $activityEl = form.$('.o_mail_activity[name=activity_ids]');
+ assert.strictEqual($activityEl.find('.o_thread_message').length, 1,
+ 'There should be one activity');
+ assert.strictEqual($activityEl.find('.o_thread_message .o_thread_message_note').text().trim(),
+ 'But I\'m talkin\' about Shaft', 'The activity should have the right note');
+
+ var $popoverEl = $activityEl.find('.o_thread_message_tools .o_activity_done');
+ $popoverEl.on('hidden.bs.popover', hiddenDef.resolve.bind(hiddenDef));
+
+ // open popover
+ $popoverEl.click();
+
+ shownDef.then(function () {
+ // write a feedback and focusout
+ var $feedbackPopover = $popoverEl.data('bs.popover').tip();
+ $feedbackPopover.find('#activity_feedback').val('John Shaft').focusout();
+
+ hiddenDef.then(function () {
+ shownDef = $.Deferred();
+
+ // re-open popover
+ $popoverEl.click();
+
+ shownDef.then(function () {
+ var $feedbackPopover = $popoverEl.data('bs.popover').tip();
+ assert.strictEqual($feedbackPopover.find('#activity_feedback').val(), 'John Shaft',
+ "feedback should have been kept");
+
+ form.destroy();
+ testUtils.unpatch(Activity);
+ done();
+ });
+ });
+ });
+});
+
QUnit.test('chatter in create mode', function (assert) {
assert.expect(9);