summaryrefslogtreecommitdiff
path: root/addons/im_support/static/src/js/support_channel.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/im_support/static/src/js/support_channel.js')
-rw-r--r--addons/im_support/static/src/js/support_channel.js270
1 files changed, 0 insertions, 270 deletions
diff --git a/addons/im_support/static/src/js/support_channel.js b/addons/im_support/static/src/js/support_channel.js
deleted file mode 100644
index 402b590919f..00000000000
--- a/addons/im_support/static/src/js/support_channel.js
+++ /dev/null
@@ -1,270 +0,0 @@
-odoo.define('im_support.SupportChannel', function (require) {
-"use strict";
-
-var supportSession = require('im_support.SupportSession');
-
-var SearchableThread = require('mail.model.SearchableThread');
-
-var core = require('web.core');
-var session = require('web.session');
-
-var _t = core._t;
-
-/**
- * This mail model represents support channel, which are communication channels
- * between two different databases for support-related reasons. It is like
- * livechat, but both users are in different databases, and both users
- * communicate from their respective 'backend' access.
- *
- * FIXME: it should inherit from mail.model.Channel, not from
- * mail.model.SearchableThread
- */
-var SupportChannel = SearchableThread.extend({
-
- /**
- * @override
- * @param {Object} params
- * @param {Object} params.data
- * @param {boolean} params.data.available
- * @param {string|integer} params.data.id
- * @param {boolean} params.data.is_minimized
- * @param {Object} params.data.operator
- * @param {string} params.data.state ['open', 'closed', 'folded']
- * @param {string} params.data.uuid
- * @param {string} params.data.welcome_message
- * @param {Object} params.options
- */
- init: function (params) {
- var data = params.data;
-
- data.type = 'support_channel';
- data.name = _t("Support");
-
- this._available = data.available;
- this._operator = data.operator;
- this._supportChannelUUID = data.id;
- this._welcomeMessage = data.welcome_message;
- if (!this._available) {
- data.name += _t(" (offline)");
- }
-
- this._super.apply(this, arguments);
-
- // force stuff that should probably be in Thread (or at least
- // SearchableThread), but that are currently in Channel
- this._detached = data.is_minimized;
- this._folded = data.state === 'folded';
- this._uuid = data.uuid;
- },
-
- //--------------------------------------------------------------------------
- // Public
- //--------------------------------------------------------------------------
-
- /**
- * Adds the default message in the Support channel (depending on its
- * availability).
- */
- addDefaultMessage: function () {
- if (!this._available) {
- this._addSupportNotAvailableMessage();
- } else {
- this._addSupportWelcomeMessage();
- }
- },
- /**
- * Overrides to store the state of the Support channel in the localStorage.
- *
- * @override
- */
- close: function () {
- this._super.apply(this, arguments);
- this.call('mail_service', 'updateSupportChannelState', 'closed');
- },
- /**
- * Overrides to store the state of the Support channel in the localStorage.
- *
- * @override
- */
- detach: function () {
- this._super.apply(this, arguments);
- this.call('mail_service', 'updateSupportChannelState', 'open');
- },
- /**
- * Overrides to store the state of the Support channel in the localStorage.
- *
- * @override
- */
- fold: function (folded) {
- this._super.apply(this, arguments);
- var value = folded ? 'folded' : 'open';
- this.call('mail_service', 'updateSupportChannelState', value);
- },
- /**
- * FIXME: this override is necessary just because the support channel is
- * considered as a channel, even though it does not inherit from
- * mail.model.Channel.
- *
- * @returns {integer}
- */
- getNeedactionCounter: function () {
- return 0;
- },
- /**
- * @return {string} uuid of this channel
- */
- getUUID: function () {
- return this._uuid;
- },
- /**
- * FIXME: this method is necessary just because the support channel is
- * considered as a channel, even though it does not inherit from
- * mail.model.Channel.
- *
- * @returns {boolean}
- */
- hasBeenPreviewed: function () {
- return true;
- },
- /**
- * @returns {boolean} true iff the Support channel is available
- */
- isAvailable: function () {
- return this._available;
- },
- /**
- * FIXME: this override is necessary just because the support channel is
- * considered as a channel, even though it does not inherit from
- * mail.model.Channel.
- *
- * @override
- * @returns {boolean}
- */
- isChannel: function () {
- return true;
- },
- /**
- * Called when fold or detach (or both) status have changed on the support
- * channel.
- *
- * Note: this is partially a hack due to support channel not being a
- * channel. Also, the support channel uses another way to handle its window
- * state, by means of the local storage.
- *
- * @param {Object} params
- * @param {boolean} [params.folded]
- * @param {boolean} [params.detached]
- */
- updateWindowState: function (params) {
- if ('detached' in params) {
- this._detached = params.detached;
- }
- if ('folded' in params) {
- this._folded = params.folded;
- }
-
- if (!this._detached) {
- this.call('mail_service', 'updateSupportChannelState', 'closed');
- } else {
- var value = this._folded ? 'folded' : 'open';
- this.call('mail_service', 'updateSupportChannelState', value);
- }
- },
-
- //--------------------------------------------------------------------------
- // Private
- //--------------------------------------------------------------------------
-
- /**
- * Adds a message in the Support channel indicating that this channel is
- * not available for now.
- *
- * @private
- */
- _addSupportNotAvailableMessage: function () {
- var msg = {
- author_id: this.call('mail_service', 'getOdoobotID'),
- body: _t("None of our operators are available. <a href='https://www.odoo.com/help' " +
- "target='_blank'>Submit a ticket</a> to ask your question now."),
- channel_ids: [this.getID()],
- id: Number.MAX_SAFE_INTEGER, // last message in the channel
- };
- this.call('mail_service', 'addMessage', msg, { silent: true });
- },
- /**
- * Adds the welcome message as first message of the Support channel.
- *
- * @private
- */
- _addSupportWelcomeMessage: function () {
- if (this._welcomeMessage) {
- var msg = {
- author_id: this._operator,
- body: this._welcomeMessage,
- channel_ids: [this.getID()],
- id: -1, // first message of the channel
- };
- this.call('mail_service', 'addMessage', msg, { silent: true });
- }
- },
- /**
- * Fetches the messages from the Support server.
- *
- * @override
- * @private
- */
- _fetchMessages: function (pDomain, loadMore) {
- var self = this;
- var domain = [];
- var cache = this._getCache(pDomain);
- if (pDomain) {
- domain = domain.concat(pDomain || []);
- }
- if (loadMore) {
- // ignore the welcome message (ID==-1)
- var msgs = cache.messages.filter(function(m) {return m.getID() !== -1});
- var minMessageID = msgs[0].getID();
- domain = [['id', '<', minMessageID]].concat(domain);
- }
- return supportSession.rpc('/odoo_im_support/fetch_messages', {
- domain: domain,
- channel_uuid: session.support_token,
- limit: self._FETCH_LIMIT,
- }).then(function (messages) {
- if (!cache.allHistoryLoaded) {
- cache.allHistoryLoaded = messages.length < self._FETCH_LIMIT;
- }
- cache.loaded = true;
- _.each(messages, function (message) {
- message.channel_ids = [self.getID()];
- message.channel_id = self.getID();
- self.call('mail_service', 'addMessage', message, {
- silent: true,
- domain: pDomain,
- });
- });
- cache = self._getCache(pDomain || []);
- return cache.messages;
- });
- },
-
- /**
- * Posts the message on the Support server.
- *
- * @override
- * @private
- * @return {Promise}
- */
- _postMessage: function (data) {
- // ensure that the poll is active before posting the message
- this.call('mail_service', 'startPollingSupport');
- return supportSession.rpc('/odoo_im_support/chat_post', {
- uuid: this._supportChannelUUID,
- message_content: data.content,
- });
- },
-});
-
-return SupportChannel;
-
-});