odoo.define('mail/static/src/components/notification_group/notification_group.js', function (require) { 'use strict'; const useShouldUpdateBasedOnProps = require('mail/static/src/component_hooks/use_should_update_based_on_props/use_should_update_based_on_props.js'); const useStore = require('mail/static/src/component_hooks/use_store/use_store.js'); const { Component } = owl; const { useRef } = owl.hooks; class NotificationGroup extends Component { /** * @override */ constructor(...args) { super(...args); useShouldUpdateBasedOnProps(); useStore(props => { const group = this.env.models['mail.notification_group'].get(props.notificationGroupLocalId); return { group: group ? group.__state : undefined, }; }); /** * Reference of the "mark as read" button. Useful to disable the * top-level click handler when clicking on this specific button. */ this._markAsReadRef = useRef('markAsRead'); } //-------------------------------------------------------------------------- // Public //-------------------------------------------------------------------------- /** * @returns {mail.notification_group} */ get group() { return this.env.models['mail.notification_group'].get(this.props.notificationGroupLocalId); } /** * @returns {string|undefined} */ image() { if (this.group.notification_type === 'email') { return '/mail/static/src/img/smiley/mailfailure.jpg'; } } //-------------------------------------------------------------------------- // Handlers //-------------------------------------------------------------------------- /** * @private * @param {MouseEvent} ev */ _onClick(ev) { const markAsRead = this._markAsReadRef.el; if (markAsRead && markAsRead.contains(ev.target)) { // handled in `_onClickMarkAsRead` return; } this.group.openDocuments(); if (!this.env.messaging.device.isMobile) { this.env.messaging.messagingMenu.close(); } } /** * @private * @param {MouseEvent} ev */ _onClickMarkAsRead(ev) { this.group.openCancelAction(); if (!this.env.messaging.device.isMobile) { this.env.messaging.messagingMenu.close(); } } } Object.assign(NotificationGroup, { props: { notificationGroupLocalId: String, }, template: 'mail.NotificationGroup', }); return NotificationGroup; });