blob: d086f9d8828887ff9dc9c9e79098c42cb4aba0b7 [file] [log] [blame]
Adrià Vilanova Martínez19f6a652023-11-15 19:38:50 +01001import {MDCTooltip} from '@material/tooltip';
2
Adrià Vilanova Martínez80f1c732023-11-16 00:52:56 +01003import {shouldImplement} from '../../../../common/commonUtils.js';
Adrià Vilanova Martínez19f6a652023-11-15 19:38:50 +01004import ThreadModel from '../../../../models/Thread.js';
5import MessageExtraInfoService from '../services/message.js';
6
7import BaseExtraInfoInjection from './base.js';
8
Adrià Vilanova Martínez80f1c732023-11-16 00:52:56 +01009export default class BaseThreadMessageExtraInfoInjection extends
Adrià Vilanova Martínez19f6a652023-11-15 19:38:50 +010010 BaseExtraInfoInjection {
Adrià Vilanova Martínez80f1c732023-11-16 00:52:56 +010011 /**
12 * The class of the interactions root element.
13 */
14 getInteractionsRootClass() {
15 shouldImplement('getInteractionsRootClass');
16 }
17
18 /**
19 * The class of the interactions root element which signifies that it is
20 * non-empty.
21 */
22 getInteractionsRootNonEmptyClass() {
23 shouldImplement('getInteractionsRootNonEmptyClass');
24 }
25
Adrià Vilanova Martínez19f6a652023-11-15 19:38:50 +010026 inject(threadInfo, injectionDetails) {
27 const messageNode = injectionDetails.messageNode;
28 const message = this.#getMessage(threadInfo, messageNode);
29 const [chips, tooltips] = MessageExtraInfoService.getMessageChips(message);
30 this.#injectChips(chips, messageNode);
31 for (const tooltip of tooltips) new MDCTooltip(tooltip);
32 }
33
34 #getMessage(threadInfo, messageNode) {
35 const thread = new ThreadModel(threadInfo.body?.[1]);
36 const messageId = MessageExtraInfoService.getMessageIdFromNode(messageNode);
37 return MessageExtraInfoService.getMessageFromThreadModel(messageId, thread);
38 }
39
40 #injectChips(chips, messageNode) {
Adrià Vilanova Martínez80f1c732023-11-16 00:52:56 +010041 const interactionsElement =
42 messageNode.querySelector('.' + this.getInteractionsRootClass());
Adrià Vilanova Martínez19f6a652023-11-15 19:38:50 +010043 if (interactionsElement === null)
44 throw new Error(`Couldn't find interactions element.`);
45
46 this.#indicateInteractionsElementIsNonEmpty(interactionsElement);
47
48 this.addExtraInfoChips(
49 chips, interactionsElement, /* withContainer = */ true);
50 }
51
52 #indicateInteractionsElementIsNonEmpty(interactionsElement) {
Adrià Vilanova Martínez80f1c732023-11-16 00:52:56 +010053 interactionsElement.classList.add(this.getInteractionsRootNonEmptyClass());
Adrià Vilanova Martínez19f6a652023-11-15 19:38:50 +010054 }
55}