summaryrefslogtreecommitdiff
path: root/addons/im_livechat/static/src/components/discuss_sidebar
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/im_livechat/static/src/components/discuss_sidebar
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/im_livechat/static/src/components/discuss_sidebar')
-rw-r--r--addons/im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.js78
-rw-r--r--addons/im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.xml25
2 files changed, 103 insertions, 0 deletions
diff --git a/addons/im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.js b/addons/im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.js
new file mode 100644
index 00000000..35070cb8
--- /dev/null
+++ b/addons/im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.js
@@ -0,0 +1,78 @@
+odoo.define('im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.js', function (require) {
+'use strict';
+
+const components = {
+ DiscussSidebar: require('mail/static/src/components/discuss_sidebar/discuss_sidebar.js'),
+};
+
+const { patch } = require('web.utils');
+
+patch(components.DiscussSidebar, 'im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.js', {
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * Return the list of livechats that match the quick search value input.
+ *
+ * @returns {mail.thread[]}
+ */
+ quickSearchOrderedAndPinnedLivechatList() {
+ const allOrderedAndPinnedLivechats = this.env.models['mail.thread']
+ .all(thread =>
+ thread.channel_type === 'livechat' &&
+ thread.isPinned &&
+ thread.model === 'mail.channel'
+ ).sort((c1, c2) => {
+ // sort by: last message id (desc), id (desc)
+ if (c1.lastMessage && c2.lastMessage) {
+ return c2.lastMessage.id - c1.lastMessage.id;
+ }
+ // a channel without a last message is assumed to be a new
+ // channel just created with the intent of posting a new
+ // message on it, in which case it should be moved up.
+ if (!c1.lastMessage) {
+ return -1;
+ }
+ if (!c2.lastMessage) {
+ return 1;
+ }
+ return c2.id - c1.id;
+ });
+ if (!this.discuss.sidebarQuickSearchValue) {
+ return allOrderedAndPinnedLivechats;
+ }
+ const qsVal = this.discuss.sidebarQuickSearchValue.toLowerCase();
+ return allOrderedAndPinnedLivechats.filter(livechat => {
+ const nameVal = livechat.displayName.toLowerCase();
+ return nameVal.includes(qsVal);
+ });
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ */
+ _useStoreCompareDepth() {
+ return Object.assign(this._super(...arguments), {
+ allOrderedAndPinnedLivechats: 1,
+ });
+ },
+ /**
+ * Override to include livechat channels on the sidebar.
+ *
+ * @override
+ */
+ _useStoreSelector(props) {
+ return Object.assign(this._super(...arguments), {
+ allOrderedAndPinnedLivechats: this.quickSearchOrderedAndPinnedLivechatList(),
+ });
+ },
+
+});
+
+});
diff --git a/addons/im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.xml b/addons/im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.xml
new file mode 100644
index 00000000..15c6fc35
--- /dev/null
+++ b/addons/im_livechat/static/src/components/discuss_sidebar/discuss_sidebar.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates xml:space="preserve">
+ <t t-inherit="mail.DiscussSidebar" t-inherit-mode="extension">
+ <xpath expr="//*[@name='root']" position="inside">
+ <t t-set="livechats" t-value="quickSearchOrderedAndPinnedLivechatList()"/>
+ <t t-if="livechats and livechats.length">
+ <div class="o_DiscussSidebar_group o_DiscussSidebar_groupLivechat">
+ <div class="o_DiscussSidebar_groupHeader">
+ <div class="o_DiscussSidebar_groupHeaderItem o_DiscussSidebar_groupTitle">
+ Livechat
+ </div>
+ </div>
+ <div class="o_DiscussSidebar_list">
+ <t t-foreach="livechats" t-as="livechat" t-key="livechat.localId">
+ <DiscussSidebarItem
+ class="o_DiscussSidebar_item"
+ threadLocalId="livechat.localId"
+ />
+ </t>
+ </div>
+ </div>
+ </t>
+ </xpath>
+ </t>
+</templates>