This repository has been archived on 2026-07-19. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
espocrm-base/client/src/views/stream/notes/post.js
T
Yuri Kuznetsov 21569e4025 ref
2023-07-26 16:13:22 +03:00

215 lines
6.4 KiB
JavaScript

/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
import NoteStreamView from 'views/stream/note';
class PostNoteStreamView extends NoteStreamView {
template = 'stream/notes/post'
messageName = 'post'
isEditable = true
isRemovable = true
data() {
let data = super.data();
data.showAttachments = !!(this.model.get('attachmentsIds') || []).length;
data.showPost = !!this.model.get('post');
data.isInternal = this.isInternal;
return data;
}
setup() {
this.createField('post', null, null, 'views/stream/fields/post');
this.createField('attachments', 'attachmentMultiple', {}, 'views/stream/fields/attachment-multiple', {
previewSize: this.options.isNotification ? 'small' : 'medium'
});
this.isInternal = this.model.get('isInternal');
if (!this.model.get('post') && this.model.get('parentId')) {
this.messageName = 'attach';
if (this.isThis) {
this.messageName += 'This';
}
}
this.listenTo(this.model, 'change', () => {
if (this.model.hasChanged('post') || this.model.hasChanged('attachmentsIds')) {
this.reRender();
}
});
if (this.model.get('parentId')) {
this.createMessage();
return;
}
if (this.model.get('isGlobal')) {
this.messageName = 'postTargetAll';
this.createMessage();
return;
}
if (this.model.has('teamsIds') && this.model.get('teamsIds').length) {
let teamIdList = this.model.get('teamsIds');
let teamNameHash = this.model.get('teamsNames') || {};
this.messageName = 'postTargetTeam';
if (teamIdList.length > 1) {
this.messageName = 'postTargetTeams';
}
let teamHtmlList = [];
teamIdList.forEach(teamId => {
let teamName = teamNameHash[teamId];
if (!teamName) {
return;
}
teamHtmlList.push(
$('<a>')
.attr('href', '#Team/view/' + teamId)
.text(teamName)
.get(0).outerHTML
);
});
this.messageData['html:target'] = teamHtmlList.join(', ');
this.createMessage();
return;
}
if (this.model.has('portalsIds') && this.model.get('portalsIds').length) {
let portalIdList = this.model.get('portalsIds');
let portalNameHash = this.model.get('portalsNames') || {};
this.messageName = 'postTargetPortal';
if (portalIdList.length > 1) {
this.messageName = 'postTargetPortals';
}
let portalHtmlList = [];
portalIdList.forEach(portalId =>{
let portalName = portalNameHash[portalId];
if (!portalName) {
return;
}
portalHtmlList.push(
$('<a>')
.attr('href', '#Portal/view/' + portalId)
.text(portalName)
.get(0).outerHTML
)
});
this.messageData['html:target'] = portalHtmlList.join(', ');
this.createMessage();
return;
}
if (!this.model.has('usersIds') || !this.model.get('usersIds').length) {
this.createMessage();
return;
}
let userIdList = this.model.get('usersIds');
let userNameHash = this.model.get('usersNames') || {};
this.messageName = 'postTarget';
if (userIdList.length === 1 && userIdList[0] === this.model.get('createdById')) {
this.messageName = 'postTargetSelf';
this.createMessage();
return;
}
let userHtmlList = [];
userIdList.forEach(userId => {
if (userId === this.getUser().id) {
this.messageName = 'postTargetYou';
if (userIdList.length > 1) {
if (userId === this.model.get('createdById')) {
this.messageName = 'postTargetSelfAndOthers';
} else {
this.messageName = 'postTargetYouAndOthers';
}
}
return;
}
if (userId === this.model.get('createdById')) {
this.messageName = 'postTargetSelfAndOthers';
return;
}
let userName = userNameHash[userId];
if (!userName) {
return;
}
userHtmlList.push(
$('<a>')
.attr('href', '#User/view/' + userId)
.attr('data-scope', 'User')
.attr('data-id', userId)
.text(userName)
.get(0).outerHTML
);
});
this.messageData['html:target'] = userHtmlList.join(', ');
this.createMessage();
}
}
export default PostNoteStreamView;