The setup method of the OWL 'mail.Activity' component is re-implemented, in order to get the current user id.
The difficulty here seems to resides in the fact that the mail.Activity OWL component is based on OWL v1, and
that OWL v2 infrastructure is not available from OWL v1 components.
1. We can not use session.uid and session.user_id below as both are undefined
import { patch } from '@web/core/utils/patch';
import { Activity } from '@mail/core/web/activity';
import { Component } from '@odoo/owl';
import { session } from '@web/session';
patch(Activity.prototype, {
setup() {
super.setup();
this.currentUserId = session.uid;
// WRONG, will return undefined
this.currentUserId = session.user_id;
// WRONG, will return undefined
},
});
2. We can not use userService('user') as it is not available in this context (an OWL v1 component)
import { patch } from '@web/core/utils/patch';
import { Activity } from '@mail/core/web/activity';
import { Component } from '@odoo/owl';
import { session } from '@web/session';
patch(Activity.prototype, {
setup() {
super.setup();
this.user = useService("user");
// WRONG, will raise error useService user not available
this.currentUserId = this.user.userId;
},
});
3. Solution (this.env.model.config.context.uid)
import { patch } from '@web/core/utils/patch';
import { Activity } from '@mail/core/web/activity';
import { Component } from '@odoo/owl';
patch(Activity.prototype, {
setup() {
super.setup();
this.currentUserId = this.env.model.config.context.uid;
},
async isOwner(activity) {
return activity.user_id[0] === this.currentUserId;
}
});
The reason seems to be that the mail.Activity OWL component is v1, and OWL v2 infrastructure is not available from OWL v1 components.