Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/v2/component/recent-list/src/ |
Upload File : |
import {Loc} from 'main.core'; import {EventEmitter} from 'main.core.events'; import {EventType} from 'im.v2.const'; export class EventHandler { static instance = null; store: Object = null; static init($Bitrix): void { if (this.instance) { return; } this.instance = new this($Bitrix); } constructor($Bitrix) { this.store = $Bitrix.Data.get('controller').store; this.subscribeToEvents(); } subscribeToEvents() { this.onSetCounterHandler = this.onSetCounter.bind(this); this.onSetMessageHandler = this.onSetMessage.bind(this); this.onHideChatHandler = this.onHideChat.bind(this); this.onLeaveChatHandler = this.onLeaveChat.bind(this); this.onClearLikeHandler = this.onClearLike.bind(this); this.onClearHistoryHandler = this.onClearHistory.bind(this); EventEmitter.subscribe(EventType.recent.setCounter, this.onSetCounterHandler); EventEmitter.subscribe(EventType.recent.setMessage, this.onSetMessageHandler); EventEmitter.subscribe(EventType.recent.hideChat, this.onHideChatHandler); EventEmitter.subscribe(EventType.recent.leaveChat, this.onLeaveChatHandler); EventEmitter.subscribe(EventType.recent.clearLike, this.onClearLikeHandler); EventEmitter.subscribe(EventType.dialog.clearHistory, this.onClearHistoryHandler); } onSetCounter({data: {dialogId, counter}}) { const recentItem = this.store.getters['recent/get'](dialogId); const dialog = this.store.getters['dialogues/get'](dialogId); if (!recentItem || !dialog) { return false; } this.store.dispatch('dialogues/update', { dialogId: dialogId, fields: { counter: counter } }); } onSetMessage({data: {id, dialogId, text, date}}) { const recentItem = this.store.getters['recent/get'](dialogId); const dialog = this.store.getters['dialogues/get'](dialogId); if (!recentItem || !dialog) { return false; } if (id && !id.toString().startsWith('temp') && id !== recentItem.message.id) { return false; } this.store.dispatch('recent/update', { id: dialogId, fields: { message: { id: id || 0, text: text, senderId: this.getCurrentUserId(), status: recentItem.message.status, date: date || recentItem.message.date, } } }); } onHideChat({data: {dialogId}}) { const recentItem = this.store.getters['recent/get'](dialogId); if (!recentItem) { return false; } this.store.dispatch('recent/delete', { id: dialogId }); } onLeaveChat({data: {dialogId}}) { this.onHideChat({data: {dialogId}}); } onClearLike({data: {dialogId}}) { const recentItem = this.store.getters['recent/get'](dialogId); if (!recentItem || !recentItem.liked) { return false; } this.store.dispatch('recent/like', { id: dialogId, liked: false }); } onClearHistory({data: {dialogId}}) { const recentItem = this.store.getters['recent/get'](dialogId); if (!recentItem) { return false; } this.store.dispatch('recent/update', { id: dialogId, fields: { message: { ...recentItem.message, text: Loc.getMessage('IM_RECENT_DELETED_MESSAGE'), } } }); } getCurrentUserId(): number { return this.store.state.application.common.userId; } destroy() { this.unsubscribeEvents(); } unsubscribeEvents() { EventEmitter.unsubscribe(EventType.recent.setCounter, this.onSetCounterHandler); EventEmitter.unsubscribe(EventType.recent.setMessage, this.onSetMessageHandler); EventEmitter.unsubscribe(EventType.recent.hideChat, this.onHideChatHandler); EventEmitter.unsubscribe(EventType.recent.leaveChat, this.onLeaveChatHandler); EventEmitter.unsubscribe(EventType.recent.clearLike, this.onClearLikeHandler); } }