From b07085ef219d0061ac9799dc41daffb5af9fc327 Mon Sep 17 00:00:00 2001 From: tsm-odoo Date: Thu, 11 May 2023 07:47:57 +0000 Subject: [PATCH] [IMP] mail,*: remove server data key in thread insert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit *: im_livechat, website_livechat. Before this commit, the `thread.insert` method received an arbitrary `serverData` key. This was cumbersome since we needed to create this key manually at each insertion.Moreover some attributes where coming from dedicated keys, some from the serverData key, some from both which led to a bug-prone, hard to maintain code. This commit removes the `serverData` key in order to solve those issues. closes odoo/odoo#121117 Signed-off-by: Sébastien Theys (seb) --- .../static/src/core/thread_service_patch.js | 4 +-- .../mail/static/src/core/messaging_service.js | 24 ++++--------- addons/mail/static/src/core/thread_model.js | 1 + addons/mail/static/src/core/thread_service.js | 36 ++++++++----------- .../mail/static/src/public/discuss_public.js | 2 +- .../static/src/rtc/call_participant_card.js | 4 +-- addons/mail/static/src/rtc/rtc_service.js | 7 +--- .../static/src/core/thread_service_patch.js | 4 +-- .../website_livechat_notification_handler.js | 1 - 9 files changed, 29 insertions(+), 54 deletions(-) diff --git a/addons/im_livechat/static/src/core/thread_service_patch.js b/addons/im_livechat/static/src/core/thread_service_patch.js index 849b34e4a21..7f11f919dd1 100644 --- a/addons/im_livechat/static/src/core/thread_service_patch.js +++ b/addons/im_livechat/static/src/core/thread_service_patch.js @@ -10,8 +10,8 @@ patch(ThreadService.prototype, "im_livechat", { const isUnknown = !(createLocalId(data.model, data.id) in this.store.threads); const thread = this._super(data); if (thread.type === "livechat") { - if (data.serverData?.channel) { - assignDefined(thread, data.serverData.channel, ["anonymous_name"]); + if (data?.channel) { + assignDefined(thread, data.channel, ["anonymous_name"]); } if (isUnknown) { this.store.discuss.livechat.threads.push(thread.localId); diff --git a/addons/mail/static/src/core/messaging_service.js b/addons/mail/static/src/core/messaging_service.js index e5a673be6d3..6339d71b536 100644 --- a/addons/mail/static/src/core/messaging_service.js +++ b/addons/mail/static/src/core/messaging_service.js @@ -221,9 +221,7 @@ export class Messaging { ...channel, model: "discuss.channel", rtcSessions: undefined, - serverData: { - channel: channel.channel, - }, + channel: channel.channel, type: channel.channel.channel_type, }); const rtcSessions = channel.rtcSessions; @@ -243,8 +241,8 @@ export class Messaging { this.threadService.insert({ id: notif.payload.channel.id, model: "discuss.channel", - serverData: notif.payload, type: notif.payload.channel.channel_type, + ...notif.payload, }); break; case "discuss.channel/transient_message": { @@ -459,7 +457,7 @@ export class Messaging { const { id, last_interest_dt } = notif.payload; const channel = this.store.threads[createLocalId("discuss.channel", id)]; if (channel) { - this.threadService.update(channel, { serverData: { last_interest_dt } }); + this.threadService.update(channel, { last_interest_dt }); } if (["chat", "group"].includes(channel?.type)) { this.threadService.sortChannels(); @@ -472,10 +470,9 @@ export class Messaging { if (!channel || !channel.type) { const [channelData] = await this.orm.call("discuss.channel", "channel_info", [id]); channel = this.threadService.insert({ - id: channelData.id, model: "discuss.channel", type: channelData.channel.channel_type, - serverData: channelData, + ...channelData, }); } if (!channel.is_pinned) { @@ -544,23 +541,14 @@ export class Messaging { _handleNotificationRecordInsert(notif) { if (notif.payload.Thread) { - this.threadService.insert({ - id: notif.payload.Thread.id, - model: notif.payload.Thread.model, - serverData: notif.payload.Thread, - }); + this.threadService.insert(notif.payload.Thread); } if (notif.payload.Channel) { this.threadService.insert({ id: notif.payload.Channel.id, model: "discuss.channel", - serverData: { - channel: { - avatarCacheKey: notif.payload.Channel.avatarCacheKey, - ...notif.payload.Channel, - }, - }, + channel: notif.payload.Channel, }); } if (notif.payload.RtcSession) { diff --git a/addons/mail/static/src/core/thread_model.js b/addons/mail/static/src/core/thread_model.js index 2a7450a55a0..660d0daab52 100644 --- a/addons/mail/static/src/core/thread_model.js +++ b/addons/mail/static/src/core/thread_model.js @@ -133,6 +133,7 @@ export class Thread { _store: store, }); store.threads[this.localId] = this; + return store.threads[this.localId]; } get accessRestrictedToGroupText() { diff --git a/addons/mail/static/src/core/thread_service.js b/addons/mail/static/src/core/thread_service.js index 884878a93cc..069fb535742 100644 --- a/addons/mail/static/src/core/thread_service.js +++ b/addons/mail/static/src/core/thread_service.js @@ -58,21 +58,13 @@ export class ThreadService { * @returns {Thread} */ createChannelThread(serverData) { - const { id, name, description, channel, uuid, authorizedGroupFullName } = serverData; - const type = channel.channel_type; - const channelType = serverData.channel.channel_type; - const isAdmin = - channelType !== "group" && serverData.create_uid === this.store.user?.user?.id; const thread = this.insert({ - id, + ...serverData, model: "discuss.channel", - name, - type, - description, - serverData: serverData, - isAdmin, - uuid, - authorizedGroupFullName, + type: serverData.channel.channel_type, + isAdmin: + serverData.channel.channel_type !== "group" && + serverData.create_uid === this.store.user?.user?.id, }); return thread; } @@ -582,7 +574,7 @@ export class ThreadService { model: "discuss.channel", name, type: "channel", - serverData: { channel: { avatarCacheKey: "hello" } }, + channel: { avatarCacheKey: "hello" }, }); this.sortChannels(); this.open(thread); @@ -594,11 +586,9 @@ export class ThreadService { partners_to: [id], }); return this.insert({ - id: data.id, + ...data, model: "discuss.channel", - name: undefined, type: "chat", - serverData: data, }); } @@ -681,8 +671,8 @@ export class ThreadService { * @param {Object} data */ update(thread, data) { - const { attachments, serverData, ...remainingData } = data; - assignDefined(thread, remainingData); + const { id, name, attachments, description, ...serverData } = data; + assignDefined(thread, { id, name, description }); if (attachments) { // smart process to avoid triggering reactives when there is no change between the 2 arrays replaceArrayWithCompare( @@ -698,10 +688,15 @@ export class ThreadService { "description", "hasWriteAccess", "is_pinned", + "isLoaded", + "isLoadingAttachments", + "mainAttachment", + "message_unread_counter", "message_needaction_counter", "name", "seen_message_id", "state", + "type", "group_based_subscription", "last_interest_dt", "defaultDisplayMode", @@ -845,7 +840,7 @@ export class ThreadService { this.update(thread, data); return thread; } - let thread = new Thread(this.store, data); + const thread = new Thread(this.store, data); onChange(thread, "isLoaded", () => thread.isLoadedDeferred.resolve()); onChange(thread, "channelMembers", () => this.store.updateBusSubscription()); onChange(thread, "is_pinned", () => { @@ -853,7 +848,6 @@ export class ThreadService { this.store.discuss.threadLocalId = null; } }); - thread = this.store.threads[thread.localId] = thread; this.update(thread, data); this.insertComposer({ thread }); return thread; diff --git a/addons/mail/static/src/public/discuss_public.js b/addons/mail/static/src/public/discuss_public.js index ca7f2445d02..2c935720f97 100644 --- a/addons/mail/static/src/public/discuss_public.js +++ b/addons/mail/static/src/public/discuss_public.js @@ -54,7 +54,7 @@ export class DiscussPublic extends Component { id: this.props.data.channelData.id, model: "discuss.channel", type: this.props.data.channelData.channel.channel_type, - serverData: { uuid: this.props.data.channelData.uuid }, + uuid: this.props.data.channelData.uuid, }); } } diff --git a/addons/mail/static/src/rtc/call_participant_card.js b/addons/mail/static/src/rtc/call_participant_card.js index e1e740a0050..5f5e31c4e5a 100644 --- a/addons/mail/static/src/rtc/call_participant_card.js +++ b/addons/mail/static/src/rtc/call_participant_card.js @@ -107,9 +107,7 @@ export class CallParticipantCard extends Component { member_ids: [this.channelMember.id], }); this.threadService.update(this.props.thread, { - serverData: { - invitedMembers: channelData.invitedMembers, - }, + invitedMembers: channelData.invitedMembers, }); } diff --git a/addons/mail/static/src/rtc/rtc_service.js b/addons/mail/static/src/rtc/rtc_service.js index fc67dc1207e..c7b58f163a0 100644 --- a/addons/mail/static/src/rtc/rtc_service.js +++ b/addons/mail/static/src/rtc/rtc_service.js @@ -738,12 +738,7 @@ export class Rtc { this.clear(); this.state.logs.clear(); this.state.channel = channel; - this.threadService.update(this.state.channel, { - serverData: { - rtcSessions, - invitedMembers, - }, - }); + this.threadService.update(this.state.channel, { rtcSessions, invitedMembers }); this.state.selfSession = this.store.rtcSessions[sessionId]; this.state.iceServers = iceServers || DEFAULT_ICE_SERVERS; this.state.logs.set("channelId", this.state.channel?.id); diff --git a/addons/website_livechat/static/src/core/thread_service_patch.js b/addons/website_livechat/static/src/core/thread_service_patch.js index 3aeebc130d5..3204323a218 100644 --- a/addons/website_livechat/static/src/core/thread_service_patch.js +++ b/addons/website_livechat/static/src/core/thread_service_patch.js @@ -7,9 +7,9 @@ import { patch } from "@web/core/utils/patch"; patch(ThreadService.prototype, "website_livechat", { update(thread, data) { this._super(thread, data); - if (data.serverData?.visitor) { + if (data?.visitor) { thread.visitor = this.personaService.insert({ - ...data.serverData.visitor, + ...data.visitor, type: "visitor", }); } diff --git a/addons/website_livechat/static/src/core/website_livechat_notification_handler.js b/addons/website_livechat/static/src/core/website_livechat_notification_handler.js index 3407a183ee0..bd408d429a4 100644 --- a/addons/website_livechat/static/src/core/website_livechat_notification_handler.js +++ b/addons/website_livechat/static/src/core/website_livechat_notification_handler.js @@ -17,7 +17,6 @@ export const websiteLivechatNotifications = { ...payload, id: payload.id, model: "discuss.channel", - serverData: payload, type: payload.channel.channel_type, }); const chatWindow = chatWindowService.insert({ thread: channel });