blob: 3ad9798f5b0137c2a9eddc82c0d38477afda1ef2 [file] [log] [blame]
Adrià Vilanova Martínez19f6a652023-11-15 19:38:50 +01001import MessageModel from '../../../../models/Message.js';
2
3import StatesExtraInfoService from './states.js';
4
5export default class MessageExtraInfoService {
6 static getMessageIdFromNode(messageNode) {
Adrià Vilanova Martínez80f1c732023-11-16 00:52:56 +01007 const isMainReply =
8 messageNode.tagName == 'SC-TAILWIND-THREAD-MESSAGE-MESSAGE-CARD';
9 const cardContentClass = isMainReply ?
10 '.scTailwindThreadMessageMessagecardcontent' :
11 '.scTailwindThreadMessageCommentcardnested-reply';
12 const id = messageNode.querySelector(cardContentClass)
13 ?.getAttribute?.('data-stats-id');
Adrià Vilanova Martínez19f6a652023-11-15 19:38:50 +010014 if (id === undefined)
15 throw new Error(`Couldn't retrieve message id from node.`);
16 return id;
17 }
18
19 static getMessageFromThreadModel(messageId, threadModel) {
20 for (const messageOrGap of threadModel.getMessageOrGapModels()) {
21 if (!(messageOrGap instanceof MessageModel)) continue;
22 if (messageOrGap.getId() == messageId) {
23 return messageOrGap;
24 } else {
25 for (const subMessageOrGap of messageOrGap.getCommentsAndGaps()) {
26 if (!(subMessageOrGap instanceof MessageModel)) continue;
27 if (subMessageOrGap.getId() == messageId) {
28 return subMessageOrGap;
29 }
30 }
31 }
32 }
33
34 throw new Error(`Couldn't find message ${messageId} in thread.`);
35 }
36
37 static getMessageChips(messageModel) {
38 const chips = [];
39 const tooltips = [];
40
41 const endPendingStateTimestampMicros =
42 messageModel.getEndPendingStateTimestampMicros();
43 const [pendingStateChip, pendingStateTooltip] =
44 StatesExtraInfoService.getPendingStateChip(
45 endPendingStateTimestampMicros);
46 if (pendingStateChip) chips.push(pendingStateChip);
47 if (pendingStateTooltip) tooltips.push(pendingStateTooltip);
48
49 const itemMetadata = messageModel.data?.[1]?.[5];
50 chips.push(...StatesExtraInfoService.getMetadataChips(itemMetadata));
51
52 const liveReviewStatus = messageModel.data?.[1]?.[36];
53 const [liveReviewChip, liveReviewTooltip] =
54 StatesExtraInfoService.getLiveReviewStatusChip(liveReviewStatus);
55 if (liveReviewChip) chips.push(liveReviewChip);
56 if (liveReviewTooltip) tooltips.push(liveReviewTooltip);
57
58 return [chips, tooltips];
59 }
60}