@@ -26,7 +26,7 @@ threadActionsRegistry.add("open-hr-profile", {
|
||||
async setup(action) {
|
||||
const component = useComponent();
|
||||
const orm = useService("orm");
|
||||
const personaService = useService("mail.persona");
|
||||
const store = useService("mail.store");
|
||||
let employeeId;
|
||||
if (!component.thread?.correspondent?.employeeId && component.thread?.chatPartnerId) {
|
||||
const employees = await orm.silent.searchRead(
|
||||
@@ -37,7 +37,7 @@ threadActionsRegistry.add("open-hr-profile", {
|
||||
employeeId = employees[0]?.id;
|
||||
}
|
||||
if (employeeId) {
|
||||
personaService.insert({
|
||||
store.Persona.insert({
|
||||
...component.thread.correspondent,
|
||||
employeeId,
|
||||
});
|
||||
|
||||
@@ -34,7 +34,7 @@ const threadServicePatch = {
|
||||
user = this.store.users[employee.user_id];
|
||||
}
|
||||
user.partner_id = employeeData.user_partner_id[0];
|
||||
this.personaService.insert({
|
||||
this.store.Persona.insert({
|
||||
displayName: employeeData.user_partner_id[1],
|
||||
id: employeeData.user_partner_id[0],
|
||||
type: "partner",
|
||||
|
||||
@@ -31,7 +31,7 @@ patch(SuggestionService.prototype, {
|
||||
},
|
||||
|
||||
searchCannedResponseSuggestions(cleanedSearchTerm, sort) {
|
||||
const cannedResponses = this.store.CannedResponse.records
|
||||
const cannedResponses = Object.values(this.store.CannedResponse.records)
|
||||
.filter((cannedResponse) => {
|
||||
return cleanTerm(cannedResponse.name).includes(cleanedSearchTerm);
|
||||
})
|
||||
|
||||
@@ -15,7 +15,7 @@ patch(ThreadService.prototype, {
|
||||
assignDefined(thread, data.channel, ["anonymous_name"]);
|
||||
}
|
||||
if (data?.operator_pid) {
|
||||
thread.operator = this.personaService.insert({
|
||||
thread.operator = this.store.Persona.insert({
|
||||
type: "partner",
|
||||
id: data.operator_pid[0],
|
||||
displayName: data.operator_pid[1],
|
||||
@@ -95,7 +95,7 @@ patch(ThreadService.prototype, {
|
||||
this.setDiscussThread(oldestUnreadThread);
|
||||
return true;
|
||||
}
|
||||
const chatWindow = this.chatWindowService.insert({ thread: oldestUnreadThread });
|
||||
const chatWindow = this.store.ChatWindow.insert({ thread: oldestUnreadThread });
|
||||
if (chatWindow.hidden) {
|
||||
this.chatWindowService.makeVisible(chatWindow);
|
||||
} else if (chatWindow.folded) {
|
||||
|
||||
@@ -112,7 +112,7 @@ export class ChatBotService {
|
||||
chatbot_script_id: this.chatbot.scriptId,
|
||||
});
|
||||
this.livechatService.thread?.messages.push(
|
||||
this.messageService.insert({ ...message, body: markup(message.body) })
|
||||
this.store.Message.insert({ ...message, body: markup(message.body) })
|
||||
);
|
||||
this.currentStep = null;
|
||||
this.start();
|
||||
@@ -127,7 +127,7 @@ export class ChatBotService {
|
||||
chatbot_script_id: this.chatbot.scriptId,
|
||||
});
|
||||
for (const rawMessage of rawMessages) {
|
||||
const message = this.messageService.insert({
|
||||
const message = this.store.Message.insert({
|
||||
...rawMessage,
|
||||
body: markup(rawMessage.body),
|
||||
});
|
||||
@@ -158,7 +158,7 @@ export class ChatBotService {
|
||||
return;
|
||||
}
|
||||
if (stepMessage) {
|
||||
const message = this.messageService.insert({
|
||||
const message = this.store.Message.insert({
|
||||
...stepMessage,
|
||||
body: markup(stepMessage.body),
|
||||
});
|
||||
@@ -263,7 +263,7 @@ export class ChatBotService {
|
||||
this.currentStep.isEmailValid = success;
|
||||
if (msg && !this.livechatService.thread.messages.some((m) => m.id === msg.id)) {
|
||||
this.livechatService.thread.messages.push(
|
||||
this.messageService.insert({ ...msg, body: markup(msg.body) })
|
||||
this.store.Message.insert({ ...msg, body: markup(msg.body) })
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import { session } from "@web/session";
|
||||
patch(Messaging.prototype, {
|
||||
initialize() {
|
||||
if (session.livechatData?.options.current_partner_id) {
|
||||
this.store.user = this.personaService.insert({
|
||||
this.store.user = this.store.Persona.insert({
|
||||
type: "partner",
|
||||
id: session.livechatData.options.current_partner_id,
|
||||
});
|
||||
|
||||
@@ -100,7 +100,7 @@ patch(ThreadService.prototype, {
|
||||
if (!thread) {
|
||||
return;
|
||||
}
|
||||
const chatWindow = this.chatWindowService.insert({
|
||||
const chatWindow = this.store.ChatWindow.insert({
|
||||
thread,
|
||||
folded: thread.state === "folded",
|
||||
});
|
||||
@@ -118,7 +118,7 @@ patch(ThreadService.prototype, {
|
||||
this.livechatService.displayWelcomeMessage &&
|
||||
!this.chatbotService.isChatbotThread(thread)
|
||||
) {
|
||||
this.livechatService.welcomeMessage = this.messageService.insert({
|
||||
this.livechatService.welcomeMessage = this.store.Message.insert({
|
||||
id: this.messageService.getNextTemporaryId(),
|
||||
body: this.livechatService.options.default_message,
|
||||
res_id: thread.id,
|
||||
@@ -127,7 +127,7 @@ patch(ThreadService.prototype, {
|
||||
});
|
||||
}
|
||||
if (this.chatbotService.isChatbotThread(thread)) {
|
||||
this.chatbotService.typingMessage = this.messageService.insert({
|
||||
this.chatbotService.typingMessage = this.store.Message.insert({
|
||||
id: this.messageService.getNextTemporaryId(),
|
||||
res_id: thread.id,
|
||||
model: thread.model,
|
||||
@@ -163,7 +163,7 @@ patch(ThreadService.prototype, {
|
||||
async update(thread, data) {
|
||||
super.update(...arguments);
|
||||
if (data.operator_pid) {
|
||||
thread.operator = this.personaService.insert({
|
||||
thread.operator = this.store.Persona.insert({
|
||||
type: "partner",
|
||||
id: data.operator_pid[0],
|
||||
name: data.operator_pid[1],
|
||||
@@ -199,7 +199,7 @@ patch(ThreadService.prototype, {
|
||||
this.notification.add(_t("No available collaborator, please try again later."));
|
||||
return;
|
||||
}
|
||||
const thread = this.insert({
|
||||
const thread = this.store.Thread.insert({
|
||||
...session,
|
||||
id: session.id ?? this.TEMPORARY_ID,
|
||||
model: "discuss.channel",
|
||||
@@ -211,7 +211,7 @@ patch(ThreadService.prototype, {
|
||||
message.parentMessage.body = markup(message.parentMessage.body);
|
||||
}
|
||||
message.body = markup(message.body);
|
||||
return this.messageService.insert(message);
|
||||
return this.store.Message.insert(message);
|
||||
});
|
||||
}
|
||||
return thread;
|
||||
|
||||
@@ -56,8 +56,7 @@ export class AttachmentService {
|
||||
const threadData = Array.isArray(data.originThread)
|
||||
? data.originThread[0][1]
|
||||
: data.originThread;
|
||||
// this prevents cyclic dependencies between mail.thread and mail.attachment
|
||||
this.env.bus.trigger("mail.thread/insert", {
|
||||
this.store.Thread.insert({
|
||||
model: threadData.model,
|
||||
id: threadData.id,
|
||||
});
|
||||
|
||||
@@ -39,12 +39,12 @@ export class AttachmentUploadService {
|
||||
const threadId = parseInt(upload.data.get("thread_id"));
|
||||
const threadModel = upload.data.get("thread_model");
|
||||
const tmpUrl = upload.data.get("tmp_url");
|
||||
const originThread = this.threadService.insert({
|
||||
const originThread = this.store.Thread.insert({
|
||||
model: threadModel,
|
||||
id: threadId,
|
||||
});
|
||||
this.abortByAttachmentId.set(tmpId, upload.xhr.abort.bind(upload.xhr));
|
||||
const attachment = this.attachmentService.insert(
|
||||
const attachment = this.store.Attachment.insert(
|
||||
this._makeAttachmentData(
|
||||
upload,
|
||||
tmpId,
|
||||
@@ -87,7 +87,7 @@ export class AttachmentUploadService {
|
||||
const threadModel = upload.data.get("thread_model");
|
||||
const originThread =
|
||||
this.store.Thread.records[createLocalId(threadModel, threadId)];
|
||||
const attachment = this.attachmentService.insert({
|
||||
const attachment = this.store.Attachment.insert({
|
||||
...response,
|
||||
extension: upload.title.split(".").pop(),
|
||||
originThread: hooker.composer ? undefined : originThread,
|
||||
|
||||
@@ -18,6 +18,7 @@ export class AttachmentView extends Component {
|
||||
|
||||
setup() {
|
||||
this.threadService = useService("mail.thread");
|
||||
this.store = useState(useService("mail.store"));
|
||||
this.iframeViewerPdfRef = useRef("iframeViewerPdf");
|
||||
this.state = useState({
|
||||
/** @type {import("@mail/core/common/thread_model").Thread|undefined} */
|
||||
@@ -53,7 +54,7 @@ export class AttachmentView extends Component {
|
||||
}
|
||||
|
||||
updateFromProps(props) {
|
||||
this.state.thread = this.threadService.insert({
|
||||
this.state.thread = this.store.Thread.insert({
|
||||
id: props.threadId,
|
||||
model: props.threadModel,
|
||||
});
|
||||
|
||||
@@ -36,7 +36,7 @@ export class ChannelMemberService {
|
||||
const [command, memberData] = Array.isArray(data) ? data : ["insert", data];
|
||||
member.id = memberData.id;
|
||||
if ("persona" in memberData) {
|
||||
member.persona = this.personaService.insert({
|
||||
member.persona = this.store.Persona.insert({
|
||||
...(memberData.persona.partner ?? memberData.persona.guest),
|
||||
type: memberData.persona.guest ? "guest" : "partner",
|
||||
country: memberData.persona.partner?.country,
|
||||
@@ -45,8 +45,7 @@ export class ChannelMemberService {
|
||||
}
|
||||
member.threadId = memberData.threadId ?? member.threadId ?? memberData.channel?.id;
|
||||
if (member.threadId && !member.thread) {
|
||||
// this prevents cyclic dependencies between mail.thread and discuss.channel.member
|
||||
this.env.bus.trigger("mail.thread/insert", {
|
||||
this.store.Thread.insert({
|
||||
id: member.threadId,
|
||||
model: "discuss.channel",
|
||||
});
|
||||
|
||||
@@ -32,7 +32,7 @@ export class ChatWindowService {
|
||||
}
|
||||
|
||||
open(thread, replaceNewMessageChatWindow) {
|
||||
const chatWindow = this.insert({
|
||||
const chatWindow = this.store.ChatWindow.insert({
|
||||
folded: false,
|
||||
thread,
|
||||
replaceNewMessageChatWindow,
|
||||
@@ -49,7 +49,7 @@ export class ChatWindowService {
|
||||
// New message chat window is already opened.
|
||||
return;
|
||||
}
|
||||
this.insert();
|
||||
this.store.ChatWindow.insert();
|
||||
}
|
||||
|
||||
closeNewMessage() {
|
||||
|
||||
@@ -432,7 +432,7 @@ export class Composer extends Component {
|
||||
});
|
||||
for (const index in partners) {
|
||||
const partnerData = partners[index];
|
||||
const persona = this.personaService.insert({ ...partnerData, type: "partner" });
|
||||
const persona = this.store.Persona.insert({ ...partnerData, type: "partner" });
|
||||
const email = emailsWithoutPartners[index];
|
||||
const recipient = this.thread.suggestedRecipients.find(
|
||||
(recipient) => recipient.email === email
|
||||
|
||||
@@ -29,7 +29,7 @@ export class MailCoreCommon {
|
||||
this.busService.subscribe("ir.attachment/delete", (payload) => {
|
||||
const { id: attachmentId, message: messageData } = payload;
|
||||
if (messageData) {
|
||||
this.messageService.insert({ ...messageData });
|
||||
this.store.Message.insert({ ...messageData });
|
||||
}
|
||||
const attachment = this.store.Attachment.records[attachmentId];
|
||||
if (attachment) {
|
||||
@@ -63,7 +63,7 @@ export class MailCoreCommon {
|
||||
});
|
||||
this.busService.subscribe("mail.message/notification_update", (payload) => {
|
||||
payload.elements.map((message) => {
|
||||
this.messageService.insert({
|
||||
this.store.Message.insert({
|
||||
...message,
|
||||
body: markup(message.body),
|
||||
// implicit: failures are sent by the server at
|
||||
@@ -76,13 +76,13 @@ export class MailCoreCommon {
|
||||
this.busService.subscribe("mail.message/toggle_star", (payload) => {
|
||||
const { message_ids: messageIds, starred } = payload;
|
||||
for (const messageId of messageIds) {
|
||||
const message = this.messageService.insert({ id: messageId });
|
||||
const message = this.store.Message.insert({ id: messageId });
|
||||
this.messageService.updateStarred(message, starred);
|
||||
}
|
||||
});
|
||||
this.busService.subscribe("mail.record/insert", (payload) => {
|
||||
if (payload.Thread) {
|
||||
this.threadService.insert(payload.Thread);
|
||||
this.store.Thread.insert(payload.Thread);
|
||||
}
|
||||
if (payload.Partner) {
|
||||
const partners = Array.isArray(payload.Partner)
|
||||
@@ -90,14 +90,14 @@ export class MailCoreCommon {
|
||||
: [payload.Partner];
|
||||
for (const partner of partners) {
|
||||
if (partner.im_status) {
|
||||
this.personaService.insert({ ...partner, type: "partner" });
|
||||
this.store.Persona.insert({ ...partner, type: "partner" });
|
||||
}
|
||||
}
|
||||
}
|
||||
if (payload.Guest) {
|
||||
const guests = Array.isArray(payload.Guest) ? payload.Guest : [payload.Guest];
|
||||
for (const guest of guests) {
|
||||
this.personaService.insert({ ...guest, type: "guest" });
|
||||
this.store.Persona.insert({ ...guest, type: "guest" });
|
||||
}
|
||||
}
|
||||
const { LinkPreview: linkPreviews } = payload;
|
||||
@@ -111,7 +111,7 @@ export class MailCoreCommon {
|
||||
const { Message: messageData } = payload;
|
||||
if (messageData) {
|
||||
const isStarred = this.store.Message.records[messageData.id]?.isStarred;
|
||||
const message = this.messageService.insert({
|
||||
const message = this.store.Message.insert({
|
||||
...messageData,
|
||||
body: messageData.body ? markup(messageData.body) : messageData.body,
|
||||
});
|
||||
|
||||
@@ -333,7 +333,7 @@ export class Message extends Component {
|
||||
const id = Number(ev.target.dataset.oeId);
|
||||
if (ev.target.closest(".o_channel_redirect")) {
|
||||
ev.preventDefault();
|
||||
const thread = this.threadService.insert({ model, id });
|
||||
const thread = this.store.Thread.insert({ model, id });
|
||||
this.threadService.open(thread);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ export class MessageService {
|
||||
message_id: message.id,
|
||||
partner_ids: validMentions?.partners?.map((partner) => partner.id),
|
||||
});
|
||||
this.insert(
|
||||
this.store.Message.insert(
|
||||
Object.assign(messageData, {
|
||||
body: messageData.body ? markup(messageData.body) : messageData.body,
|
||||
})
|
||||
@@ -133,7 +133,7 @@ export class MessageService {
|
||||
createTransient(data) {
|
||||
const { body, res_id, model } = data;
|
||||
const lastMessageId = this.getLastMessageId();
|
||||
return this.insert({
|
||||
return this.store.Message.insert({
|
||||
author: this.store.odoobot,
|
||||
body,
|
||||
id: lastMessageId + 0.01,
|
||||
@@ -216,8 +216,7 @@ export class MessageService {
|
||||
insert(data) {
|
||||
let message;
|
||||
if (data.res_id) {
|
||||
// this prevents cyclic dependencies between mail.thread and mail.message
|
||||
this.env.bus.trigger("mail.thread/insert", {
|
||||
this.store.Thread.insert({
|
||||
model: data.model,
|
||||
id: data.res_id,
|
||||
});
|
||||
@@ -268,7 +267,7 @@ export class MessageService {
|
||||
? message.starred_partner_ids.includes(this.store.user.id)
|
||||
: false,
|
||||
isTransient,
|
||||
parentMessage: parentMessage ? this.insert(parentMessage) : undefined,
|
||||
parentMessage: parentMessage ? this.store.Message.insert(parentMessage) : undefined,
|
||||
resId,
|
||||
resModel,
|
||||
subtypeDescription,
|
||||
@@ -285,7 +284,7 @@ export class MessageService {
|
||||
replaceArrayWithCompare(
|
||||
message.attachments,
|
||||
attachments.map((attachment) =>
|
||||
this.attachmentService.insert({ message, ...attachment })
|
||||
this.store.Attachment.insert({ message, ...attachment })
|
||||
)
|
||||
);
|
||||
if (
|
||||
@@ -295,13 +294,13 @@ export class MessageService {
|
||||
message.author = undefined;
|
||||
}
|
||||
if (data.author?.id) {
|
||||
message.author = this.personaService.insert({
|
||||
message.author = this.store.Persona.insert({
|
||||
...data.author,
|
||||
type: "partner",
|
||||
});
|
||||
}
|
||||
if (data.guestAuthor?.id) {
|
||||
message.author = this.personaService.insert({
|
||||
message.author = this.store.Persona.insert({
|
||||
...data.guestAuthor,
|
||||
type: "guest",
|
||||
channelId: message.originThread.id,
|
||||
@@ -314,17 +313,17 @@ export class MessageService {
|
||||
replaceArrayWithCompare(
|
||||
message.notifications,
|
||||
notifications.map((notification) =>
|
||||
this.insertNotification({ ...notification, messageId: message.id })
|
||||
this.store.Notification.insert({ ...notification, messageId: message.id })
|
||||
)
|
||||
);
|
||||
replaceArrayWithCompare(
|
||||
message.recipients,
|
||||
recipients.map((recipient) =>
|
||||
this.personaService.insert({ ...recipient, type: "partner" })
|
||||
this.store.Persona.insert({ ...recipient, type: "partner" })
|
||||
)
|
||||
);
|
||||
if ("user_follower_id" in data && data.user_follower_id && this.store.self) {
|
||||
message.originThread.selfFollower = this.env.services["mail.thread"].insertFollower({
|
||||
message.originThread.selfFollower = this.env.services["mail.store"].Follower.insert({
|
||||
followedThread: message.originThread,
|
||||
id: data.user_follower_id,
|
||||
isActive: true,
|
||||
@@ -402,7 +401,7 @@ export class MessageService {
|
||||
const [command, partnerData] = Array.isArray(rawPartner)
|
||||
? rawPartner
|
||||
: ["insert", rawPartner];
|
||||
const persona = this.personaService.insert({ ...partnerData, type: "partner" });
|
||||
const persona = this.store.Persona.insert({ ...partnerData, type: "partner" });
|
||||
if (command === "insert" && !alreadyKnownPersonaIds.has(persona.localId)) {
|
||||
reaction.personaLocalIds.push(persona.localId);
|
||||
} else if (command !== "insert") {
|
||||
@@ -411,7 +410,7 @@ export class MessageService {
|
||||
}
|
||||
for (const rawGuest of data.guests) {
|
||||
const [command, guestData] = Array.isArray(rawGuest) ? rawGuest : ["insert", rawGuest];
|
||||
const persona = this.personaService.insert({ ...guestData, type: "guest" });
|
||||
const persona = this.store.Persona.insert({ ...guestData, type: "guest" });
|
||||
if (command === "insert" && !alreadyKnownPersonaIds.has(persona.localId)) {
|
||||
reaction.personaLocalIds.push(persona.localId);
|
||||
} else if (command !== "insert") {
|
||||
@@ -450,7 +449,7 @@ export class MessageService {
|
||||
notification_type: data.notification_type,
|
||||
failure_type: data.failure_type,
|
||||
persona: data.res_partner_id
|
||||
? this.personaService.insert({
|
||||
? this.store.Persona.insert({
|
||||
id: data.res_partner_id[0],
|
||||
displayName: data.res_partner_id[1],
|
||||
type: "partner",
|
||||
@@ -461,7 +460,7 @@ export class MessageService {
|
||||
return;
|
||||
}
|
||||
const thread = notification.message.originThread;
|
||||
this.insertNotificationGroups({
|
||||
this.store.NotificationGroup.insert({
|
||||
modelName: thread?.modelName,
|
||||
resId: thread?.id,
|
||||
resModel: thread?.model,
|
||||
|
||||
@@ -30,23 +30,23 @@ export class Messaging {
|
||||
this.isReady = new Deferred();
|
||||
this.imStatusService = services.im_status;
|
||||
const user = services.user;
|
||||
this.personaService.insert({ id: user.partnerId, type: "partner", isAdmin: user.isAdmin });
|
||||
this.store.Persona.insert({ id: user.partnerId, type: "partner", isAdmin: user.isAdmin });
|
||||
this.registeredImStatusPartners = reactive([], () => this.updateImStatusRegistration());
|
||||
this.store.registeredImStatusPartners = this.registeredImStatusPartners;
|
||||
this.store.discuss.inbox = this.threadService.insert({
|
||||
this.store.discuss.inbox = this.store.Thread.insert({
|
||||
id: "inbox",
|
||||
model: "mail.box",
|
||||
name: _t("Inbox"),
|
||||
type: "mailbox",
|
||||
});
|
||||
this.store.discuss.starred = this.threadService.insert({
|
||||
this.store.discuss.starred = this.store.Thread.insert({
|
||||
id: "starred",
|
||||
model: "mail.box",
|
||||
name: _t("Starred"),
|
||||
type: "mailbox",
|
||||
counter: 0,
|
||||
});
|
||||
this.store.discuss.history = this.threadService.insert({
|
||||
this.store.discuss.history = this.store.Thread.insert({
|
||||
id: "history",
|
||||
model: "mail.box",
|
||||
name: _t("History"),
|
||||
@@ -67,19 +67,19 @@ export class Messaging {
|
||||
|
||||
initMessagingCallback(data) {
|
||||
if (data.current_partner) {
|
||||
this.store.user = this.personaService.insert({
|
||||
this.store.user = this.store.Persona.insert({
|
||||
...data.current_partner,
|
||||
type: "partner",
|
||||
});
|
||||
}
|
||||
if (data.currentGuest) {
|
||||
this.store.guest = this.personaService.insert({
|
||||
this.store.guest = this.store.Persona.insert({
|
||||
...data.currentGuest,
|
||||
type: "guest",
|
||||
channelId: data.channels[0]?.id,
|
||||
});
|
||||
}
|
||||
this.store.odoobot = this.personaService.insert({
|
||||
this.store.odoobot = this.store.Persona.insert({
|
||||
...data.odoobot,
|
||||
type: "partner",
|
||||
});
|
||||
@@ -94,7 +94,7 @@ export class Messaging {
|
||||
data.menu_id === this.router.current.hash?.menu_id ||
|
||||
this.router.hash?.action === "mail.action_discuss";
|
||||
(data.shortcodes ?? []).forEach((code) => {
|
||||
this.insertCannedResponse(code);
|
||||
this.store.CannedResponse.insert(code);
|
||||
});
|
||||
this.store.hasLinkPreviewFeature = data.hasLinkPreviewFeature;
|
||||
this.store.initBusId = data.initBusId;
|
||||
@@ -145,7 +145,7 @@ export class Messaging {
|
||||
limit,
|
||||
]);
|
||||
partners = partnersData.map((data) =>
|
||||
this.personaService.insert({ ...data, type: "partner" })
|
||||
this.store.Persona.insert({ ...data, type: "partner" })
|
||||
);
|
||||
}
|
||||
return partners;
|
||||
|
||||
@@ -12,48 +12,113 @@ export class Store {
|
||||
Activity = {
|
||||
/** @type {Object.<number, import("@mail/core/web/activity_model").Activity>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {import("@mail/core/web/activity_model").Data} data
|
||||
* @param {Object} [param1]
|
||||
* @param {boolean} param1.broadcast
|
||||
* @returns {import("@mail/core/web/activity_model").Activity}
|
||||
*/
|
||||
insert: (data, { broadcast = true } = {}) =>
|
||||
this.env.services["mail.activity"].insert(data, { broadcast }),
|
||||
};
|
||||
Attachment = {
|
||||
/** @type {Object.<number, import("@mail/core/common/attachment_model").Attachment>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {Object} data
|
||||
* @returns {import("@mail/core/common/attachment_model").Attachment}
|
||||
*/
|
||||
insert: (data) => this.env.services["mail.attachment"].insert(data),
|
||||
};
|
||||
CannedResponse = {
|
||||
records: [],
|
||||
/** @type {Object.<number, import("@mail/core/common/canned_response_model").CannedResponse>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {Object} data
|
||||
* @returns {import("@mail/core/common/canned_response_model").CannedResponse}
|
||||
*/
|
||||
insert: (data) => this.env.services["mail.messaging"].insertCannedResponse(data),
|
||||
};
|
||||
ChannelMember = {
|
||||
/** @type {Object.<number, import("@mail/core/common/channel_member_model").ChannelMember>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {Object|Array} data
|
||||
* @returns {import("@mail/core/common/channel_member_model").ChannelMember}
|
||||
*/
|
||||
insert: (data) => this.env.services["discuss.channel.member"].insert(data),
|
||||
};
|
||||
ChatWindow = {
|
||||
/** @type {import("@mail/core/common/chat_window_model").ChatWindow[]} */
|
||||
records: [],
|
||||
/**
|
||||
* @param {ChatWindowData} [data]
|
||||
* @returns {import("@mail/core/common/chat_window_model").ChatWindow}
|
||||
*/
|
||||
insert: (data = {}) => this.env.services["mail.chat_window"].insert(data),
|
||||
};
|
||||
Follower = {
|
||||
/** @type {Object.<number, import("@mail/core/common/follower_model").Follower>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {import("@mail/core/common/follower_model").Data} data
|
||||
* @returns {import("@mail/core/common/follower_model").Follower}
|
||||
*/
|
||||
insert: (data) => this.env.services["mail.thread"].insertFollower(data),
|
||||
};
|
||||
Message = {
|
||||
/** @type {Object.<number, import("@mail/core/common/message_model").Message>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {Object} data
|
||||
* @returns {import("@mail/core/common/message_model").Message}
|
||||
*/
|
||||
insert: (data) => this.env.services["mail.message"].insert(data),
|
||||
};
|
||||
Notification = {
|
||||
/** @type {Object.<number, import("@mail/core/common/notification_model").Notification>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {Object} data
|
||||
* @returns {import("@mail/core/common/notification_model").Notification}
|
||||
*/
|
||||
insert: (data) => this.env.services["mail.message"].insertNotification(data),
|
||||
};
|
||||
NotificationGroup = {
|
||||
/** @type {import("@mail/core/common/notification_group_model").NotificationGroup[]} */
|
||||
records: [],
|
||||
/**
|
||||
* @param {Object} data
|
||||
* @returns {import("@mail/core/common/notification_group_model").NotificationGroup}
|
||||
*/
|
||||
insert: (data) => this.env.services["mail.message"].insertNotificationGroups(data),
|
||||
};
|
||||
Persona = {
|
||||
/** @type {Object.<number, import("@mail/core/common/persona_model").Persona>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {import("@mail/core/common/persona_model").Data} data
|
||||
* @returns {import("@mail/core/common/persona_model").Persona}
|
||||
*/
|
||||
insert: (data) => this.env.services["mail.persona"].insert(data),
|
||||
};
|
||||
RtcSession = {
|
||||
/** @type {Object.<number, import("@mail/discuss/call/common/rtc_session_model").RtcSession>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {Object} data
|
||||
* @returns {number, import("@mail/discuss/call/common/rtc_session_model").RtcSession}
|
||||
*/
|
||||
insert: (data) => this.env.services["discuss.rtc"].insertSession(data),
|
||||
};
|
||||
Thread = {
|
||||
/** @type {Object.<string, import("@mail/core/common/thread_model").Thread>} */
|
||||
records: {},
|
||||
/**
|
||||
* @param {Object} data
|
||||
* @returns {import("@mail/core/common/thread_model").Thread}
|
||||
*/
|
||||
insert: (data) => this.env.services["mail.thread"].insert(data),
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -54,9 +54,9 @@ export class SuggestionService {
|
||||
kwargs
|
||||
);
|
||||
suggestedPartners.map((data) => {
|
||||
this.personaService.insert({ ...data, type: "partner" });
|
||||
this.store.Persona.insert({ ...data, type: "partner" });
|
||||
if (data.persona?.channelMembers) {
|
||||
this.channelMemberService.insert(...data.persona.channelMembers);
|
||||
this.store.ChannelMember.insert(...data.persona.channelMembers);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -72,7 +72,7 @@ export class SuggestionService {
|
||||
{ search: term }
|
||||
);
|
||||
suggestedThreads.map((data) => {
|
||||
this.threadService.insert({
|
||||
this.store.Thread.insert({
|
||||
model: "discuss.channel",
|
||||
...data,
|
||||
});
|
||||
|
||||
@@ -53,13 +53,6 @@ export class ThreadService {
|
||||
this.ui = services.ui;
|
||||
this.personaService = services["mail.persona"];
|
||||
this.messageService = services["mail.message"];
|
||||
// this prevents cyclic dependencies between mail.thread and other services
|
||||
this.env.bus.addEventListener("mail.thread/insert", ({ detail }) => {
|
||||
const model = detail.model;
|
||||
const id = detail.id;
|
||||
const type = detail.type;
|
||||
this.insert({ model, id, type });
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -69,7 +62,7 @@ export class ThreadService {
|
||||
*/
|
||||
async fetchChannel(id) {
|
||||
const [channelData] = await this.rpc("/discuss/channel/info", { channel_id: id });
|
||||
return this.insert({
|
||||
return this.store.Thread.insert({
|
||||
...channelData,
|
||||
model: "discuss.channel",
|
||||
type: channelData.channel.channel_type,
|
||||
@@ -93,7 +86,7 @@ export class ThreadService {
|
||||
thread.memberCount = results["memberCount"];
|
||||
for (const channelMember of channelMembers) {
|
||||
if (channelMember.persona || channelMember.partner) {
|
||||
this.channelMemberService.insert({ ...channelMember, threadId: thread.id });
|
||||
this.store.ChannelMember.insert({ ...channelMember, threadId: thread.id });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,7 +211,7 @@ export class ThreadService {
|
||||
? markup(data.parentMessage.body)
|
||||
: data.parentMessage.body;
|
||||
}
|
||||
return this.messageService.insert(
|
||||
return this.store.Message.insert(
|
||||
Object.assign(data, { body: data.body ? markup(data.body) : data.body })
|
||||
);
|
||||
});
|
||||
@@ -324,7 +317,7 @@ export class ThreadService {
|
||||
if (message.parentMessage?.body) {
|
||||
message.parentMessage.body = markup(message.parentMessage.body);
|
||||
}
|
||||
return this.messageService.insert({
|
||||
return this.store.Message.insert({
|
||||
...message,
|
||||
body: message.body ? markup(message.body) : message.body,
|
||||
});
|
||||
@@ -361,7 +354,7 @@ export class ThreadService {
|
||||
const data = Object.assign(preview.last_message, {
|
||||
body: markup(preview.last_message.body),
|
||||
});
|
||||
const message = this.messageService.insert({
|
||||
const message = this.store.Message.insert({
|
||||
...data,
|
||||
res_id: thread.id,
|
||||
model: thread.model,
|
||||
@@ -520,7 +513,7 @@ export class ThreadService {
|
||||
}
|
||||
|
||||
if (partnerId) {
|
||||
const partner = this.personaService.insert({ id: partnerId, type: "partner" });
|
||||
const partner = this.store.Persona.insert({ id: partnerId, type: "partner" });
|
||||
if (!partner.user) {
|
||||
const [userId] = await this.orm.silent.search(
|
||||
"res.users",
|
||||
@@ -580,7 +573,7 @@ export class ThreadService {
|
||||
await this.orm.call("discuss.channel", "add_members", [[id]], {
|
||||
partner_ids: [this.store.user.id],
|
||||
});
|
||||
const thread = this.insert({
|
||||
const thread = this.store.Thread.insert({
|
||||
id,
|
||||
model: "discuss.channel",
|
||||
name,
|
||||
@@ -596,7 +589,7 @@ export class ThreadService {
|
||||
const data = await this.orm.call("discuss.channel", "channel_get", [], {
|
||||
partners_to: [id],
|
||||
});
|
||||
return this.insert({
|
||||
return this.store.Thread.insert({
|
||||
...data,
|
||||
model: "discuss.channel",
|
||||
type: "chat",
|
||||
@@ -737,7 +730,7 @@ export class ThreadService {
|
||||
for (const [command, membersData] of serverData.channel.channelMembers) {
|
||||
const members = Array.isArray(membersData) ? membersData : [membersData];
|
||||
for (const memberData of members) {
|
||||
const member = this.channelMemberService.insert([command, memberData]);
|
||||
const member = this.store.ChannelMember.insert([command, memberData]);
|
||||
if (thread.type !== "chat") {
|
||||
continue;
|
||||
}
|
||||
@@ -762,7 +755,7 @@ export class ThreadService {
|
||||
case "insert":
|
||||
if (members) {
|
||||
for (const member of members) {
|
||||
const record = this.channelMemberService.insert(member);
|
||||
const record = this.store.ChannelMember.insert(member);
|
||||
thread.invitedMemberIds.add(record.id);
|
||||
}
|
||||
}
|
||||
@@ -781,12 +774,12 @@ export class ThreadService {
|
||||
({ fetched_message_id, partner_id, seen_message_id }) => {
|
||||
return {
|
||||
lastFetchedMessage: fetched_message_id
|
||||
? this.messageService.insert({ id: fetched_message_id })
|
||||
? this.store.Message.insert({ id: fetched_message_id })
|
||||
: undefined,
|
||||
lastSeenMessage: seen_message_id
|
||||
? this.messageService.insert({ id: seen_message_id })
|
||||
? this.store.Message.insert({ id: seen_message_id })
|
||||
: undefined,
|
||||
partner: this.personaService.insert({
|
||||
partner: this.store.Persona.insert({
|
||||
id: partner_id,
|
||||
type: "partner",
|
||||
}),
|
||||
@@ -933,7 +926,7 @@ export class ThreadService {
|
||||
}
|
||||
}
|
||||
browser.localStorage.setItem("web.emoji.frequent", JSON.stringify(recentEmojis));
|
||||
tmpMsg = this.messageService.insert({
|
||||
tmpMsg = this.store.Message.insert({
|
||||
...tmpData,
|
||||
body: markup(prettyContent),
|
||||
res_id: thread.id,
|
||||
@@ -959,9 +952,7 @@ export class ThreadService {
|
||||
if (data.id in this.store.Message.records) {
|
||||
data.temporary_id = null;
|
||||
}
|
||||
const message = this.messageService.insert(
|
||||
Object.assign(data, { body: markup(data.body) })
|
||||
);
|
||||
const message = this.store.Message.insert(Object.assign(data, { body: markup(data.body) }));
|
||||
if (message.notIn(thread.messages)) {
|
||||
thread.messages.push(message);
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ export class ActivityService {
|
||||
_onBroadcastChannelMessage({ data }) {
|
||||
switch (data.type) {
|
||||
case "insert":
|
||||
this.insert(data.payload, { broadcast: false });
|
||||
this.store.Activity.insert(data.payload, { broadcast: false });
|
||||
break;
|
||||
case "delete":
|
||||
this.delete(data.payload, { broadcast: false });
|
||||
|
||||
@@ -140,7 +140,7 @@ export class Chatter extends Component {
|
||||
onPatched(this.scrollPosition.restore);
|
||||
onWillStart(() => {
|
||||
if (this.props.threadId) {
|
||||
this.state.thread = this.threadService.insert({
|
||||
this.state.thread = this.store.Thread.insert({
|
||||
id: this.props.threadId,
|
||||
model: this.props.threadModel,
|
||||
name: this.props.webRecord?.data?.display_name || undefined,
|
||||
|
||||
@@ -24,7 +24,7 @@ export class MailCoreWeb {
|
||||
this.messagingService.isReady.then(() => {
|
||||
this.rpc("/mail/load_message_failures", {}, { silent: true }).then((messages) => {
|
||||
messages.map((messageData) =>
|
||||
this.messageService.insert({
|
||||
this.store.Message.insert({
|
||||
...messageData,
|
||||
body: messageData.body ? markup(messageData.body) : messageData.body,
|
||||
// implicit: failures are sent by the server at
|
||||
@@ -71,7 +71,7 @@ export class MailCoreWeb {
|
||||
});
|
||||
this.busService.subscribe("mail.message/inbox", (payload) => {
|
||||
const data = Object.assign(payload, { body: markup(payload.body) });
|
||||
const message = this.messageService.insert(data);
|
||||
const message = this.store.Message.insert(data);
|
||||
const inbox = this.store.discuss.inbox;
|
||||
if (message.notIn(inbox.messages)) {
|
||||
inbox.messages.push(message);
|
||||
|
||||
@@ -57,7 +57,7 @@ patch(ThreadService.prototype, {
|
||||
if (activity.note) {
|
||||
activity.note = markup(activity.note);
|
||||
}
|
||||
existingIds.add(this.activityService.insert(activity).id);
|
||||
existingIds.add(this.store.Activity.insert(activity).id);
|
||||
}
|
||||
for (const activity of thread.activities) {
|
||||
if (!existingIds.has(activity.id)) {
|
||||
@@ -74,7 +74,7 @@ patch(ThreadService.prototype, {
|
||||
}
|
||||
if ("mainAttachment" in result) {
|
||||
thread.mainAttachment = result.mainAttachment.id
|
||||
? this.attachmentService.insert(result.mainAttachment)
|
||||
? this.store.Attachment.insert(result.mainAttachment)
|
||||
: undefined;
|
||||
}
|
||||
if (!thread.mainAttachment && thread.attachmentsInWebClientView.length > 0) {
|
||||
@@ -82,14 +82,14 @@ patch(ThreadService.prototype, {
|
||||
}
|
||||
if ("followers" in result) {
|
||||
if (result.selfFollower) {
|
||||
thread.selfFollower = this.insertFollower({
|
||||
thread.selfFollower = this.store.Follower.insert({
|
||||
followedThread: thread,
|
||||
...result.selfFollower,
|
||||
});
|
||||
}
|
||||
thread.followersCount = result.followersCount;
|
||||
for (const followerData of result.followers) {
|
||||
const follower = this.insertFollower({
|
||||
const follower = this.store.Follower.insert({
|
||||
followedThread: thread,
|
||||
...followerData,
|
||||
});
|
||||
@@ -128,7 +128,7 @@ patch(ThreadService.prototype, {
|
||||
res_id: thread.id,
|
||||
model: thread.model,
|
||||
};
|
||||
const message = this.messageService.insert(tmpData);
|
||||
const message = this.store.Message.insert(tmpData);
|
||||
thread.messages.push(message);
|
||||
}
|
||||
return thread;
|
||||
@@ -147,7 +147,7 @@ patch(ThreadService.prototype, {
|
||||
followedThread: data.followedThread,
|
||||
id: data.id,
|
||||
isActive: data.is_active,
|
||||
partner: this.personaService.insert({ ...data.partner, type: "partner" }),
|
||||
partner: this.store.Persona.insert({ ...data.partner, type: "partner" }),
|
||||
_store: this.store,
|
||||
});
|
||||
return follower;
|
||||
@@ -168,7 +168,7 @@ patch(ThreadService.prototype, {
|
||||
lang,
|
||||
reason,
|
||||
persona: partner_id
|
||||
? this.personaService.insert({
|
||||
? this.store.Persona.insert({
|
||||
type: "partner",
|
||||
id: partner_id,
|
||||
})
|
||||
@@ -193,7 +193,7 @@ patch(ThreadService.prototype, {
|
||||
Array.from(thread.followers).at(-1).id,
|
||||
]);
|
||||
for (const data of followers) {
|
||||
const follower = this.insertFollower({
|
||||
const follower = this.store.Follower.insert({
|
||||
followedThread: thread,
|
||||
...data,
|
||||
});
|
||||
@@ -248,7 +248,7 @@ patch(ThreadService.prototype, {
|
||||
super.unpin(...arguments);
|
||||
},
|
||||
_openChatWindow(thread, replaceNewMessageChatWindow) {
|
||||
const chatWindow = this.chatWindowService.insert({
|
||||
const chatWindow = this.store.ChatWindow.insert({
|
||||
folded: false,
|
||||
thread,
|
||||
replaceNewMessageChatWindow,
|
||||
|
||||
@@ -174,7 +174,7 @@ export class Rtc {
|
||||
"RTC-SERVICE:UPDATE_RTC_SESSIONS",
|
||||
({ detail: { commands = [], record, thread } }) => {
|
||||
if (record) {
|
||||
const session = this.insertSession(record);
|
||||
const session = this.store.RtcSession.insert(record);
|
||||
thread.rtcSessions[session.id] = session;
|
||||
}
|
||||
for (const command of commands) {
|
||||
@@ -187,7 +187,7 @@ export class Rtc {
|
||||
break;
|
||||
case "insert":
|
||||
for (const rtcSessionData of sessionsData) {
|
||||
const session = this.insertSession(rtcSessionData);
|
||||
const session = this.store.RtcSession.insert(rtcSessionData);
|
||||
thread.rtcSessions[session.id] = session;
|
||||
}
|
||||
break;
|
||||
@@ -898,7 +898,7 @@ export class Rtc {
|
||||
if (this.state.channel && rtcSessions) {
|
||||
const activeSessionsData = rtcSessions[0][1];
|
||||
for (const sessionData of activeSessionsData) {
|
||||
const session = this.insertSession(sessionData);
|
||||
const session = this.store.RtcSession.insert(sessionData);
|
||||
this.state.channel.rtcSessions[session.id] = session;
|
||||
}
|
||||
const outdatedSessionsData = rtcSessions[1][1];
|
||||
@@ -1420,7 +1420,7 @@ export class Rtc {
|
||||
session.channelId = channelMember.channel.id;
|
||||
}
|
||||
if (channelMember) {
|
||||
const channelMemberRecord = this.channelMemberService.insert(channelMember);
|
||||
const channelMemberRecord = this.store.ChannelMember.insert(channelMember);
|
||||
channelMemberRecord.rtcSessionId = session.id;
|
||||
session.channelMemberId = channelMemberRecord.id;
|
||||
if (channelMemberRecord.thread) {
|
||||
@@ -1520,7 +1520,7 @@ export class Rtc {
|
||||
break;
|
||||
case "insert":
|
||||
for (const sessionData of sessionsData) {
|
||||
const session = this.insertSession(sessionData);
|
||||
const session = this.store.RtcSession.insert(sessionData);
|
||||
channel.rtcSessions[session.id] = session;
|
||||
}
|
||||
break;
|
||||
@@ -1583,7 +1583,7 @@ export const rtcService = {
|
||||
});
|
||||
services["bus_service"].subscribe("mail.record/insert", (payload) => {
|
||||
if (payload.RtcSession) {
|
||||
rtc.insertSession(payload.RtcSession);
|
||||
rtc.store.RtcSession.insert(payload.RtcSession);
|
||||
}
|
||||
const { "res.users.settings.volumes": volumeSettings } = payload;
|
||||
if (volumeSettings) {
|
||||
|
||||
@@ -59,7 +59,7 @@ export class ChannelInvitation extends Component {
|
||||
const Partners = results["partners"];
|
||||
const selectablePartners = [];
|
||||
for (const selectablePartner of Partners) {
|
||||
const newPartner = this.personaService.insert({
|
||||
const newPartner = this.store.Persona.insert({
|
||||
type: "partner",
|
||||
...selectablePartner,
|
||||
});
|
||||
|
||||
@@ -36,7 +36,7 @@ export class DiscussCoreCommon {
|
||||
this.threadService.sortChannels();
|
||||
this.busService.subscribe("discuss.channel/joined", (payload) => {
|
||||
const { channel, invited_by_user_id: invitedByUserId } = payload;
|
||||
const thread = this.threadService.insert({
|
||||
const thread = this.store.Thread.insert({
|
||||
...channel,
|
||||
model: "discuss.channel",
|
||||
channel: channel.channel,
|
||||
@@ -60,7 +60,7 @@ export class DiscussCoreCommon {
|
||||
}
|
||||
});
|
||||
this.busService.subscribe("discuss.channel/leave", (payload) => {
|
||||
const thread = this.threadService.insert({
|
||||
const thread = this.store.Thread.insert({
|
||||
...payload,
|
||||
model: "discuss.channel",
|
||||
});
|
||||
@@ -73,7 +73,7 @@ export class DiscussCoreCommon {
|
||||
});
|
||||
});
|
||||
this.busService.subscribe("discuss.channel/legacy_insert", (payload) => {
|
||||
this.threadService.insert({
|
||||
this.store.Thread.insert({
|
||||
id: payload.channel.id,
|
||||
model: "discuss.channel",
|
||||
type: payload.channel.channel_type,
|
||||
@@ -157,7 +157,7 @@ export class DiscussCoreCommon {
|
||||
});
|
||||
this.busService.subscribe("mail.record/insert", (payload) => {
|
||||
if (payload.Channel) {
|
||||
this.threadService.insert({
|
||||
this.store.Thread.insert({
|
||||
id: payload.Channel.id,
|
||||
model: "discuss.channel",
|
||||
channel: payload.Channel,
|
||||
@@ -168,12 +168,12 @@ export class DiscussCoreCommon {
|
||||
}
|
||||
|
||||
/**
|
||||
* todo: merge this with ThreadService.insert() (?)
|
||||
* todo: merge this with store.Thread.insert() (?)
|
||||
*
|
||||
* @returns {Thread}
|
||||
*/
|
||||
createChannelThread(serverData) {
|
||||
const thread = this.threadService.insert({
|
||||
const thread = this.store.Thread.insert({
|
||||
...serverData,
|
||||
model: "discuss.channel",
|
||||
type: serverData.channel.channel_type,
|
||||
@@ -220,7 +220,7 @@ export class DiscussCoreCommon {
|
||||
let channel = this.store.Thread.records[createLocalId("discuss.channel", id)];
|
||||
if (!channel || !channel.type) {
|
||||
const [channelData] = await this.rpc("/discuss/channel/info", { channel_id: id });
|
||||
channel = this.threadService.insert({
|
||||
channel = this.store.Thread.insert({
|
||||
model: "discuss.channel",
|
||||
type: channelData.channel.channel_type,
|
||||
...channelData,
|
||||
@@ -238,7 +238,7 @@ export class DiscussCoreCommon {
|
||||
const data = Object.assign(messageData, {
|
||||
body: markup(messageData.body),
|
||||
});
|
||||
const message = this.messageService.insert({
|
||||
const message = this.store.Message.insert({
|
||||
...data,
|
||||
res_id: channel.id,
|
||||
model: channel.model,
|
||||
|
||||
@@ -44,7 +44,7 @@ export class DiscussPublic extends Component {
|
||||
}
|
||||
|
||||
get thread() {
|
||||
return this.threadService.insert({
|
||||
return this.store.Thread.insert({
|
||||
id: this.props.data.channelData.id,
|
||||
model: "discuss.channel",
|
||||
type: this.props.data.channelData.channel.channel_type,
|
||||
|
||||
@@ -123,7 +123,7 @@ export class ChannelSelector extends Component {
|
||||
const suggestions = this.suggestionService
|
||||
.sortPartnerSuggestions(results, cleanedTerm)
|
||||
.map((data) => {
|
||||
this.personaService.insert({ ...data, type: "partner" });
|
||||
this.store.Persona.insert({ ...data, type: "partner" });
|
||||
return {
|
||||
classList: "o-discuss-ChannelSelector-suggestion",
|
||||
label: data.name,
|
||||
|
||||
@@ -32,7 +32,7 @@ export class DiscussCoreWeb {
|
||||
channelData.state !== "closed" &&
|
||||
!this.ui.isSmall
|
||||
) {
|
||||
this.chatWindowService.insert({
|
||||
this.store.ChatWindow.insert({
|
||||
autofocus: 0,
|
||||
folded: channelData.state === "folded",
|
||||
thread,
|
||||
@@ -56,7 +56,7 @@ export class DiscussCoreWeb {
|
||||
this.store.odoobotOnboarding = false;
|
||||
return;
|
||||
}
|
||||
this.chatWindowService.insert({ thread: channel });
|
||||
this.store.ChatWindow.insert({ thread: channel });
|
||||
}
|
||||
);
|
||||
this.busService.subscribe("mail.record/insert", (payload) => {
|
||||
@@ -81,7 +81,7 @@ export class DiscussCoreWeb {
|
||||
this.notificationService.add(notification, { type: "info" });
|
||||
const chat = await this.threadService.getChat({ partnerId });
|
||||
if (chat && !this.ui.isSmall) {
|
||||
this.chatWindowService.insert({ thread: chat });
|
||||
this.store.ChatWindow.insert({ thread: chat });
|
||||
}
|
||||
});
|
||||
this.busService.subscribe("mail.record/insert", async (payload) => {
|
||||
@@ -98,7 +98,7 @@ export class DiscussCoreWeb {
|
||||
this.chatWindowService.close(chatWindow);
|
||||
}
|
||||
} else {
|
||||
this.chatWindowService.insert({
|
||||
this.store.ChatWindow.insert({
|
||||
thread,
|
||||
folded: thread.state === "folded",
|
||||
});
|
||||
|
||||
@@ -87,7 +87,7 @@ export class MessagePin {
|
||||
messageData.parentMessage.body = markup(messageData.parentMessage.body);
|
||||
}
|
||||
messageData.body = markup(messageData.body);
|
||||
this.messageService.insert(messageData);
|
||||
this.storeService.Message.insert(messageData);
|
||||
});
|
||||
this.loadStateByChannelId.set(channel.id, "loaded");
|
||||
} catch (e) {
|
||||
@@ -111,7 +111,7 @@ export class MessagePin {
|
||||
*/
|
||||
getPinnedMessages(channel) {
|
||||
return [...(this.messageIdsByChannelId.get(channel.id) ?? new Set())]
|
||||
.map((id) => this.messageService.insert({ id }))
|
||||
.map((id) => this.storeService.Message.insert({ id }))
|
||||
.sort((a, b) => {
|
||||
const aPinnedAt = this.pinnedAtByMessageId.get(a.id);
|
||||
const bPinnedAt = this.pinnedAtByMessageId.get(b.id);
|
||||
|
||||
@@ -30,7 +30,7 @@ export class Typing {
|
||||
|
||||
setup() {
|
||||
this.busService.subscribe("discuss.channel.member/typing_status", (payload) => {
|
||||
const member = this.channelMemberService.insert(payload);
|
||||
const member = this.storeService.ChannelMember.insert(payload);
|
||||
if (payload.isTyping) {
|
||||
this.addTypingMember(member);
|
||||
} else {
|
||||
@@ -61,7 +61,7 @@ export class Typing {
|
||||
*/
|
||||
getTypingMembers(channel) {
|
||||
return [...(this.memberIdsByChannelId.get(channel.id) ?? new Set())]
|
||||
.map((id) => this.channelMemberService.insert({ id }))
|
||||
.map((id) => this.storeService.ChannelMember.insert({ id }))
|
||||
.filter((member) => !member.persona?.eq(this.storeService.self));
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@ patch(FormRenderer.prototype, {
|
||||
/** @type {import("@mail/core/common/thread_model").Thread} */
|
||||
thread: undefined,
|
||||
});
|
||||
if (this.env.services["mail.thread"]) {
|
||||
this.threadService = useService("mail.thread");
|
||||
if (this.env.services["mail.store"]) {
|
||||
this.mailStore = useService("mail.store");
|
||||
}
|
||||
this.uiService = useService("ui");
|
||||
|
||||
@@ -36,10 +36,10 @@ patch(FormRenderer.prototype, {
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasFileViewer() {
|
||||
if (!this.threadService || this.uiService.size < SIZES.XXL || !this.props.record.resId) {
|
||||
if (!this.mailStore || this.uiService.size < SIZES.XXL || !this.props.record.resId) {
|
||||
return false;
|
||||
}
|
||||
this.messagingState.thread = this.threadService.insert({
|
||||
this.messagingState.thread = this.mailStore.Thread.insert({
|
||||
id: this.props.record.resId,
|
||||
model: this.props.record.resModel,
|
||||
type: "chatter",
|
||||
|
||||
@@ -7,7 +7,7 @@ import { useFileViewer } from "@web/core/file_viewer/file_viewer_hook";
|
||||
export class MrpDocumentsKanbanRecord extends KanbanRecord {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.attachmentService = useService("mail.attachment");
|
||||
this.store = useService("mail.store");
|
||||
this.fileViewer = useFileViewer();
|
||||
}
|
||||
/**
|
||||
@@ -23,7 +23,7 @@ export class MrpDocumentsKanbanRecord extends KanbanRecord {
|
||||
window.location = `/web/content/mrp.document/${this.props.record.resId}/datas?download=true`;
|
||||
return;
|
||||
} else if (ev.target.closest(".o_kanban_previewer")) {
|
||||
const attachment = this.attachmentService.insert({
|
||||
const attachment = this.store.Attachment.insert({
|
||||
id: this.props.record.data.ir_attachment_id[0],
|
||||
filename: this.props.record.data.name,
|
||||
name: this.props.record.data.name,
|
||||
|
||||
@@ -9,7 +9,7 @@ patch(ThreadService.prototype, {
|
||||
update(thread, data) {
|
||||
super.update(thread, data);
|
||||
if (data?.visitor) {
|
||||
thread.visitor = this.personaService.insert({
|
||||
thread.visitor = this.store.Persona.insert({
|
||||
...data.visitor,
|
||||
type: "visitor",
|
||||
});
|
||||
|
||||
@@ -3,23 +3,19 @@
|
||||
import { registry } from "@web/core/registry";
|
||||
|
||||
export const websiteLivechatNotifications = {
|
||||
dependencies: ["bus_service", "mail.chat_window", "mail.thread"],
|
||||
dependencies: ["bus_service", "mail.chat_window", "mail.store"],
|
||||
start(
|
||||
env,
|
||||
{
|
||||
bus_service: busService,
|
||||
"mail.chat_window": chatWindowService,
|
||||
"mail.thread": threadService,
|
||||
}
|
||||
{ bus_service: busService, "mail.chat_window": chatWindowService, "mail.store": store }
|
||||
) {
|
||||
busService.subscribe("website_livechat.send_chat_request", (payload) => {
|
||||
const channel = threadService.insert({
|
||||
const channel = store.Thread.insert({
|
||||
...payload,
|
||||
id: payload.id,
|
||||
model: "discuss.channel",
|
||||
type: payload.channel.channel_type,
|
||||
});
|
||||
const chatWindow = chatWindowService.insert({ thread: channel });
|
||||
const chatWindow = store.ChatWindow.insert({ thread: channel });
|
||||
chatWindowService.makeVisible(chatWindow);
|
||||
chatWindowService.focus(chatWindow);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user