odoo.define('mail.model.Livechat', function (require) { "use strict"; var TwoUserChannel = require('mail.model.TwoUserChannel'); /** * backend-side of the livechat. * * Any piece of code in JS that make use of Livechats must ideally interact with * such objects, instead of direct data from the server. */ var Livechat = TwoUserChannel.extend({ _WEBSITE_USER_ID: '_websiteUser', _WEBSITE_USER_NAME: 'Website user', /** * @override * @param {Object} params * @param {Object} params.data * @param {string} params.data.anonymous_name name of the website user */ init: function (params) { this._super.apply(this, arguments); this._name = params.data.anonymous_name; this._WEBSITE_USER_NAME = this._name; }, //-------------------------------------------------------------------------- // Public //-------------------------------------------------------------------------- /** * Override so that the list of members has the website use. This is * necessary in order for the 'is_typing' feature to compute the name to * display of a user that is typing. * * @override * @returns {$.Promise} resolved with list of livechat members */ getMentionPartnerSuggestions: function () { var self = this; return this._super.apply(this, arguments).then(function () { var websiteUser = _.findWhere(self._members, { id: self._WEBSITE_USER_ID }); if (!websiteUser) { self._members.push({ id: self._WEBSITE_USER_ID, name: self._WEBSITE_USER_NAME, }); } return self._members; }); }, /** * Called when someone starts typing something on the livechat. * * Overrides it so that it determine the partner based on the received * userID. The reason is that anonymous users have the partner ID of the * admin, which is likely also an operator, so userID must be used in order * to distinct them. * * @override {mail.model.ThreadTypingMixin} * @param {Object} params * @param {integer} params.partnerID ID of the partner that is currently * typing something on the thread. * @param {boolean} [params.isWebsiteUser=false] whether the typing partner * is an anonymous user (reminder: they share partnerID with admin). */ registerTyping: function (params) { params.partnerID = this._WEBSITE_USER_ID; this._super.call(this, params); }, /** * Called when someone stops typing something on the livechat. * * Overrides it so that it determine the partner based on the received * userID. The reason is that anonymous users have the partner ID of the * admin, which is likely also an operator, so userID must be used in order * to distinct them. * * @override {mail.model.ThreadTypingMixin} * @param {Object} params * @param {integer} params.partnerID ID of the partner that stops typing * something on the thread. * @param {boolean} [params.isWebsiteUser=false] whether the typing partner * is an anonymous user (reminder: they share partnerID with admin). */ unregisterTyping: function (params) { params.partnerID = this._WEBSITE_USER_ID; this._super.call(this, params); }, }); return Livechat; });