Your IP : 18.222.188.218


Current Path : /var/www/axolotl/data/www/arhangelsk.axolotls.ru/a537b/
Upload File :
Current File : /var/www/axolotl/data/www/arhangelsk.axolotls.ru/a537b/model.tar

config.php000066400000000405147732346740006544 0ustar00<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
	die();
}

return [
	'js' => [
		'./dist/registry.bundle.js',
	],
	'rel' => [
		'main.polyfill.core',
		'im.const',
		'ui.vue',
		'ui.vue.vuex',
		'im.lib.utils',
	],
	'skip_core' => true,
];bundle.config.js000066400000000172147732346740007642 0ustar00module.exports = {
	input: './src/registry.js',
	output: './dist/registry.bundle.js',
	namespace: 'BX.Messenger.Model',
};src/registry.js000066400000000554147732346740007570 0ustar00import {ApplicationModel} from './application.js';
import {MessagesModel} from './messages.js';
import {DialoguesModel} from './dialogues.js';
import {UsersModel} from './users.js';
import {FilesModel} from './files.js';
import {RecentModel} from './recent.js';

export {
	ApplicationModel,
	MessagesModel,
	DialoguesModel,
	UsersModel,
	FilesModel,
	RecentModel
}src/application.js000066400000014524147732346740010225 0ustar00/**
 * Bitrix Messenger
 * Application model (Vuex Builder model)
 *
 * @package bitrix
 * @subpackage im
 * @copyright 2001-2019 Bitrix
 */

import {DeviceType, DeviceOrientation} from 'im.const';
import {VuexBuilderModel} from 'ui.vue.vuex';

class ApplicationModel extends VuexBuilderModel
{
	getName()
	{
		return 'application';
	}

	getState()
	{
		return {
			common:
			{
				host: this.getVariable('common.host', location.protocol+'//'+location.host),
				siteId: this.getVariable('common.siteId', 'default'),
				userId: this.getVariable('common.userId', 0),
				languageId: this.getVariable('common.languageId', 'en'),
			},
			dialog:
			{
				dialogId: this.getVariable('dialog.dialogId', '0'),
				chatId: this.getVariable('dialog.chatId', 0),
				diskFolderId: this.getVariable('dialog.diskFolderId', 0),
				messageLimit: this.getVariable('dialog.messageLimit', 20),
				enableReadMessages: this.getVariable('dialog.enableReadMessages', true),
				messageExtraCount: 0,
			},
			disk:
			{
				enabled: false,
				maxFileSize: 5242880,
			},
			mobile:
			{
				keyboardShow: false,
			},
			device:
			{
				type: this.getVariable('device.type', DeviceType.desktop),
				orientation: this.getVariable('device.orientation', DeviceOrientation.portrait),
			},
			options:
			{
				quoteEnable: this.getVariable('options.quoteEnable', true),
				quoteFromRight: this.getVariable('options.quoteFromRight', true),
				autoplayVideo: this.getVariable('options.autoplayVideo', true),
				darkBackground: this.getVariable('options.darkBackground', false),
				showSmiles: false
			},
			error:
			{
				active: false,
				code: '',
				description: '',
			},
		}
	}

	getStateSaveException()
	{
		return Object.assign({
			common: this.getVariable('saveException.common', null),
			dialog: this.getVariable('saveException.dialog', null),
			mobile: this.getVariable('saveException.mobile', null),
			device: this.getVariable('saveException.device', null),
			error: this.getVariable('saveException.error', null)
		});
	}

	getActions()
	{
		return {
			set: (store, payload) =>
			{
				store.commit('set', this.validate(payload));
			},
			showSmiles: (store, payload) =>
			{
				store.commit('showSmiles')
			},
			hideSmiles: (store, payload) =>
			{
				store.commit('hideSmiles');
			}
		}
	}

	getMutations()
	{
		return {
			set: (state, payload) =>
			{
				let hasChange = false;
				for (let group in payload)
				{
					if (!payload.hasOwnProperty(group))
					{
						continue;
					}

					for (let field in payload[group])
					{
						if (!payload[group].hasOwnProperty(field))
						{
							continue;
						}

						state[group][field] = payload[group][field];
						hasChange = true;
					}
				}

				if (hasChange && this.isSaveNeeded(payload))
				{
					this.saveState(state);
				}
			},
			increaseDialogExtraCount(state, payload = {})
			{
				let {count = 1} = payload;

				state.dialog.messageExtraCount += count;
			},
			decreaseDialogExtraCount(state, payload = {})
			{
				let {count = 1} = payload;

				let newCounter = state.dialog.messageExtraCount - count;
				if (newCounter <= 0)
				{
					newCounter = 0;
				}

				state.dialog.messageExtraCount = newCounter;
			},
			clearDialogExtraCount(state)
			{
				state.dialog.messageExtraCount = 0;
			},
			showSmiles(state)
			{
				state.options.showSmiles = true;
			},
			hideSmiles(state)
			{
				state.options.showSmiles = false;
			}
		}
	}

	validate(fields)
	{
		const result = {};

		if (typeof fields.common === 'object' && fields.common)
		{
			result.common = {};

			if (typeof fields.common.userId === 'number')
			{
				result.common.userId = fields.common.userId;
			}

			if (typeof fields.common.languageId === 'string')
			{
				result.common.languageId = fields.common.languageId;
			}
		}

		if (typeof fields.dialog === 'object' && fields.dialog)
		{
			result.dialog = {};

			if (typeof fields.dialog.dialogId === 'number')
			{
				result.dialog.dialogId = fields.dialog.dialogId.toString();
				result.dialog.chatId = 0;
			}
			else if (typeof fields.dialog.dialogId === 'string')
			{
				result.dialog.dialogId = fields.dialog.dialogId;

				if (typeof fields.dialog.chatId !== 'number')
				{
					let chatId = fields.dialog.dialogId;
					if (chatId.startsWith('chat'))
					{
						chatId = fields.dialog.dialogId.substr(4);
					}

					chatId = parseInt(chatId);

					result.dialog.chatId = !isNaN(chatId)? chatId: 0;
					fields.dialog.chatId = result.dialog.chatId;
				}
			}

			if (typeof fields.dialog.chatId === 'number')
			{
				result.dialog.chatId = fields.dialog.chatId;
			}

			if (typeof fields.dialog.diskFolderId === 'number')
			{
				result.dialog.diskFolderId = fields.dialog.diskFolderId;
			}

			if (typeof fields.dialog.messageLimit === 'number')
			{
				result.dialog.messageLimit = fields.dialog.messageLimit;
			}

			if (typeof fields.dialog.messageExtraCount === 'number')
			{
				result.dialog.messageExtraCount = fields.dialog.messageExtraCount;
			}

			if (typeof fields.dialog.enableReadMessages === 'boolean')
			{
				result.dialog.enableReadMessages = fields.dialog.enableReadMessages;
			}
		}

		if (typeof fields.disk === 'object' && fields.disk)
		{
			result.disk = {};

			if (typeof fields.disk.enabled === 'boolean')
			{
				result.disk.enabled = fields.disk.enabled;
			}

			if (typeof fields.disk.maxFileSize === 'number')
			{
				result.disk.maxFileSize = fields.disk.maxFileSize;
			}
		}

		if (typeof fields.mobile === 'object' && fields.mobile)
		{
			result.mobile = {};

			if (typeof fields.mobile.keyboardShow === 'boolean')
			{
				result.mobile.keyboardShow = fields.mobile.keyboardShow;
			}
		}

		if (typeof fields.device === 'object' && fields.device)
		{
			result.device = {};

			if (typeof fields.device.type === 'string' && typeof DeviceType[fields.device.type] !== 'undefined')
			{
				result.device.type = fields.device.type;
			}

			if (typeof fields.device.orientation === 'string' && typeof DeviceOrientation[fields.device.orientation] !== 'undefined')
			{
				result.device.orientation = fields.device.orientation;
			}
		}

		if (typeof fields.error === 'object' && fields.error)
		{
			if (typeof fields.error.active === 'boolean')
			{
				result.error = {
					active: fields.error.active,
					code: fields.error.code.toString() || '',
					description: fields.error.description.toString() || '',
				};
			}
		}

		return result;
	}
}

export {ApplicationModel};src/files.js000066400000032474147732346740007030 0ustar00/**
 * Bitrix Messenger
 * File model (Vuex Builder model)
 *
 * @package bitrix
 * @subpackage im
 * @copyright 2001-2019 Bitrix
 */


import {Vue} from 'ui.vue';
import {VuexBuilderModel} from 'ui.vue.vuex';
import {FileStatus, FileType, MutationType} from 'im.const';
import {Utils} from "im.lib.utils";

class FilesModel extends VuexBuilderModel
{
	getName()
	{
		return 'files';
	}

	getState()
	{
		return {
			created: 0,
			host: this.getVariable('host', location.protocol+'//'+location.host),
			collection: {},
			index: {},
		}
	}

	getElementState(params = {})
	{
		let {
			id = 0,
			chatId = 0,
			name = this.getVariable('default.name', ''),
		} = params;

		return {
			id,
			chatId,
			name,
			templateId: id,
			date: new Date(),
			type: 'file',
			extension: "",
			icon: "empty",
			size: 0,
			image: false,
			status: FileStatus.done,
			progress: 100,
			authorId: 0,
			authorName: "",
			urlPreview: "",
			urlShow: "",
			urlDownload: "",
			init: false
		};
	}

	getGetters()
	{
		return {
			get: state => (chatId, fileId, getTemporary = false) =>
			{
				if (!chatId || !fileId)
				{
					return null;
				}

				if (!state.index[chatId] || !state.index[chatId][fileId])
				{
					return null;
				}

				if (!getTemporary && !state.index[chatId][fileId].init)
				{
					return null;
				}

				return state.index[chatId][fileId];
			},
			getList: state => chatId =>
			{
				if (!state.index[chatId])
				{
					return null;
				}

				return state.index[chatId];
			},
			getBlank: state => params =>
			{
				return this.getElementState(params);
			}
		}
	}

	getActions()
	{
		return {
			add: (store, payload) =>
			{
				let result = this.validate(Object.assign({}, payload), {host: store.state.host});
				result.id = 'temporary' + (new Date).getTime() + store.state.created;
				result.templateId = result.id;
				result.init = true;

				store.commit('add', Object.assign({}, this.getElementState(), result));

				return result.id;
			},
			set: (store, payload) =>
			{
				if (payload instanceof Array)
				{
					payload = payload.map(file => {
						let result = this.validate(Object.assign({}, file), {host: store.state.host});
						result.templateId = result.id;
						return Object.assign({}, this.getElementState(), result, {init: true});
					});
				}
				else
				{
					let result = this.validate(Object.assign({}, payload), {host: store.state.host});
					result.templateId = result.id;
					payload = [];
					payload.push(
						Object.assign({}, this.getElementState(), result, {init: true})
					);
				}

				store.commit('set', {
					insertType : MutationType.setAfter,
					data : payload
				});
			},
			setBefore: (store, payload) =>
			{
				if (payload instanceof Array)
				{
					payload = payload.map(file => {
						let result = this.validate(Object.assign({}, file), {host: store.state.host});
						result.templateId = result.id;
						return Object.assign({}, this.getElementState(), result, {init: true});
					});
				}
				else
				{
					let result = this.validate(Object.assign({}, payload), {host: store.state.host});
					result.templateId = result.id;
					payload = [];
					payload.push(
						Object.assign({}, this.getElementState(), result, {init: true})
					);
				}

				store.commit('set', {
					actionName: 'setBefore',
					insertType : MutationType.setBefore,
					data : payload
				});
			},
			update: (store, payload) =>
			{
				let result = this.validate(Object.assign({}, payload.fields), {host: store.state.host});

				store.commit('initCollection', {chatId: payload.chatId});

				let index = store.state.collection[payload.chatId].findIndex(el => el.id === payload.id);
				if (index < 0)
				{
					return false;
				}

				store.commit('update', {
					id : payload.id,
					chatId : payload.chatId,
					index : index,
					fields : result
				});

				if (payload.fields.blink)
				{
					setTimeout(() => {
						store.commit('update', {
							id : payload.id ,
							chatId : payload.chatId,
							fields : {blink: false}
						});
					}, 1000);
				}

				return true;
			},
			delete: (store, payload) =>
			{
				store.commit('delete', {
					id : payload.id,
					chatId : payload.chatId
				});
				return true;
			},
			saveState: (store, payload) =>
			{
				store.commit('saveState', {});
				return true;
			},
		}
	}

	getMutations()
	{
		return {
			initCollection: (state, payload) =>
			{
				this.initCollection(state, payload);
			},
			add: (state, payload) =>
			{
				this.initCollection(state, payload);

				state.collection[payload.chatId].push(payload);
				state.index[payload.chatId][payload.id] = payload;

				state.created += 1;

				this.saveState(state);
			},
			set: (state, payload) =>
			{
				for (let element of payload.data)
				{
					this.initCollection(state, {chatId: element.chatId});

					let index = state.collection[element.chatId].findIndex(el => el.id === element.id);
					if (index > -1)
					{
						delete element.templateId;
						state.collection[element.chatId][index] = Object.assign(state.collection[element.chatId][index], element);
					}
					else if (payload.insertType === MutationType.setBefore)
					{
						state.collection[element.chatId].unshift(element);
					}
					else
					{
						state.collection[element.chatId].push(element);
					}

					state.index[element.chatId][element.id] = element;

					this.saveState(state);
				}
			},
			update: (state, payload) =>
			{
				this.initCollection(state, payload);

				let index = -1;
				if (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index])
				{
					index = payload.index;
				}
				else
				{
					index = state.collection[payload.chatId].findIndex(el => el.id === payload.id);
				}

				if (index >= 0)
				{
					delete payload.fields.templateId;
					let element = Object.assign(
						state.collection[payload.chatId][index],
						payload.fields
					);
					state.collection[payload.chatId][index] = element;
					state.index[payload.chatId][element.id] = element;

					this.saveState(state);
				}
			},
			delete: (state, payload) =>
			{
				this.initCollection(state, payload);

				state.collection[payload.chatId] = state.collection[payload.chatId].filter(element => element.id !== payload.id);
				delete state.index[payload.chatId][payload.id];

				this.saveState(state);
			},
			saveState: (state, payload) =>
			{
				this.saveState(state);
			},
		}
	}

	initCollection(state, payload)
	{
		if (typeof state.collection[payload.chatId] !== 'undefined')
		{
			return true;
		}

		Vue.set(state.collection, payload.chatId, []);
		Vue.set(state.index, payload.chatId, {});

		return true;
	}

	getLoadedState(state)
	{
		if (!state || typeof state !== 'object')
		{
			return state;
		}

		if (typeof state.collection !== 'object')
		{
			return state;
		}

		state.index = {};

		for (let chatId in state.collection)
		{
			if (!state.collection.hasOwnProperty(chatId))
			{
				continue;
			}

			state.index[chatId] = {};

			state.collection[chatId]
				.filter(file => file != null)
				.forEach(file => {
					state.index[chatId][file.id] = file;
			});
		}

		return state;
	}

	getSaveFileList()
	{
		if (!this.db)
		{
			return [];
		}

		if (!this.store.getters['messages/getSaveFileList'])
		{
			return [];
		}

		let list = this.store.getters['messages/getSaveFileList']();
		if (!list)
		{
			return [];
		}

		return list;
	}

	getSaveTimeout()
	{
		return 250;
	}

	saveState(state)
	{
		if (!this.isSaveAvailable())
		{
			return false;
		}

		super.saveState(() =>
		{
			let list = this.getSaveFileList();
			if (!list)
			{
				return false;
			}

			let storedState = {
				collection: {},
			};

			for (let chatId in list)
			{
				if (!list.hasOwnProperty(chatId))
				{
					continue;
				}

				list[chatId].forEach(fileId =>
				{
					if (!state.index[chatId])
					{
						return false;
					}

					if (!state.index[chatId][fileId])
					{
						return false;
					}

					if (!storedState.collection[chatId])
					{
						storedState.collection[chatId] = [];
					}

					storedState.collection[chatId].push(
						state.index[chatId][fileId]
					);
				});
			}

			return storedState;
		});
	}

	validate(fields, options = {})
	{
		const result = {};

		options.host = options.host || this.getState().host;

		if (typeof fields.id === "number")
		{
			result.id = fields.id;
		}
		else if (typeof fields.id === "string")
		{
			if (fields.id.startsWith('temporary'))
			{
				result.id = fields.id;
			}
			else
			{
				result.id = parseInt(fields.id);
			}
		}

		if (typeof fields.templateId === "number")
		{
			result.templateId = fields.templateId;
		}
		else if (typeof fields.templateId === "string")
		{
			if (fields.templateId.startsWith('temporary'))
			{
				result.templateId = fields.templateId;
			}
			else
			{
				result.templateId = parseInt(fields.templateId);
			}
		}

		if (typeof fields.chatId === "number" || typeof fields.chatId === "string")
		{
			result.chatId = parseInt(fields.chatId);
		}

		if (typeof fields.date !== "undefined")
		{
			result.date = Utils.date.cast(fields.date);
		}

		if (typeof fields.type === "string")
		{
			result.type = fields.type;
		}

		if (typeof fields.extension === "string")
		{
			result.extension = fields.extension.toString();

			if (result.type === 'image')
			{
				result.icon = 'img';
			}
			else if (result.type === 'video')
			{
				result.icon = 'mov';
			}
			else
			{
				result.icon = FilesModel.getIconType(result.extension);
			}
		}

		if (typeof fields.name === "string" || typeof fields.name === "number")
		{
			result.name = fields.name.toString();
		}


		if (typeof fields.size === "number" || typeof fields.size === "string")
		{
			result.size = parseInt(fields.size);
		}

		if (typeof fields.image === 'boolean')
		{
			result.image = false;
		}
		else if (typeof fields.image === 'object' && fields.image)
		{
			result.image = {
				width: 0,
				height: 0,
			};

			if (typeof fields.image.width === "string" || typeof fields.image.width === "number")
			{
				result.image.width = parseInt(fields.image.width);
			}
			if (typeof fields.image.height === "string" || typeof fields.image.height === "number")
			{
				result.image.height = parseInt(fields.image.height);
			}

			if (result.image.width <= 0 || result.image.height <= 0)
			{
				result.image = false;
			}
		}

		if (typeof fields.status === "string" && typeof FileStatus[fields.status] !== 'undefined')
		{
			result.status = fields.status;
		}

		if (typeof fields.progress === "number" || typeof fields.progress === "string")
		{
			result.progress = parseInt(fields.progress);
		}

		if (typeof fields.authorId === "number" || typeof fields.authorId === "string")
		{
			result.authorId = parseInt(fields.authorId);
		}

		if (typeof fields.authorName === "string" || typeof fields.authorName === "number")
		{
			result.authorName = fields.authorName.toString();
		}

		if (typeof fields.urlPreview === 'string')
		{
			if (
				!fields.urlPreview
				|| fields.urlPreview.startsWith('http')
				|| fields.urlPreview.startsWith('bx')
				|| fields.urlPreview.startsWith('file')
			)
			{
				result.urlPreview = fields.urlPreview;
			}
			else
			{
				result.urlPreview = options.host+fields.urlPreview;
			}
		}

		if (typeof fields.urlDownload === 'string')
		{
			if (
				!fields.urlDownload
				|| fields.urlDownload.startsWith('http')
				|| fields.urlDownload.startsWith('bx')
				|| fields.urlPreview.startsWith('file')
			)
			{
				result.urlDownload = fields.urlDownload;
			}
			else
			{
				result.urlDownload = options.host+fields.urlDownload;
			}
		}

		if (typeof fields.urlShow === 'string')
		{
			if (
				!fields.urlShow
				|| fields.urlShow.startsWith('http')
				|| fields.urlShow.startsWith('bx')
				|| fields.urlShow.startsWith('file')
			)
			{
				result.urlShow = fields.urlShow;
			}
			else
			{
				result.urlShow = options.host+fields.urlShow;
			}
		}

		return result;
	}

	static getType(type)
	{
		type = type.toString().toLowerCase().split('.').splice(-1)[0];

		switch(type)
		{
			case 'png':
			case 'jpe':
			case 'jpg':
			case 'jpeg':
			case 'gif':
			case 'heic':
			case 'bmp':
				return FileType.image;

			case 'mp4':
			case 'mkv':
			case 'webm':
			case 'mpeg':
			case 'hevc':
			case 'avi':
			case '3gp':
			case 'flv':
			case 'm4v':
			case 'ogg':
			case 'wmv':
			case 'mov':
				return FileType.video;

			case 'mp3':
				return FileType.audio;
		}

		return FileType.file
	}

	static getIconType(extension)
	{
		let icon = 'empty';

		switch(extension.toString())
		{
			case 'png':
			case 'jpe':
			case 'jpg':
			case 'jpeg':
			case 'gif':
			case 'heic':
			case 'bmp':
				icon = 'img';
				break;

			case 'mp4':
			case 'mkv':
			case 'webm':
			case 'mpeg':
			case 'hevc':
			case 'avi':
			case '3gp':
			case 'flv':
			case 'm4v':
			case 'ogg':
			case 'wmv':
			case 'mov':
				icon = 'mov';
				break;

			case 'txt':
				icon = 'txt';
				break;

			case 'doc':
			case 'docx':
				icon = 'doc';
				break;

			case 'xls':
			case 'xlsx':
				icon = 'xls';
				break;

			case 'php':
				icon = 'php';
				break;

			case 'pdf':
				icon = 'pdf';
				break;

			case 'ppt':
			case 'pptx':
				icon = 'ppt';
				break;

			case 'rar':
				icon = 'rar';
				break;

			case 'zip':
			case '7z':
			case 'tar':
			case 'gz':
			case 'gzip':
				icon = 'zip';
				break;

			case 'set':
				icon = 'set';
				break;

			case 'conf':
			case 'ini':
			case 'plist':
				icon = 'set';
				break;
		}

		return icon;
	}
}

export {FilesModel};src/messages.js000066400000110420147732346740007521 0ustar00/**
 * Bitrix Messenger
 * Message model (Vuex Builder model)
 *
 * @package bitrix
 * @subpackage im
 * @copyright 2001-2019 Bitrix
 */


import {Vue} from 'ui.vue';
import {VuexBuilderModel} from 'ui.vue.vuex';
import {MutationType, StorageLimit} from 'im.const';
import {Utils} from "im.lib.utils";

const IntersectionType = {
	empty: 'empty',
	equal: 'equal',
	none: 'none',
	found: 'found',
	foundReverse: 'foundReverse',
};

class MessagesModel extends VuexBuilderModel
{
	getName()
	{
		return 'messages';
	}

	getState()
	{
		return {
			created: 0,
			collection: {},
			mutationType: {},
			saveMessageList: {},
			saveFileList: {},
			saveUserList: {},
			host: this.getVariable('host', location.protocol+'//'+location.host),
		}
	}

	getElementState()
	{
		return {
			templateId: 0,
			templateType: 'message',

			id: 0,
			chatId: 0,
			authorId: 0,
			date: new Date(),
			text: "",
			textConverted: "",
			params: {
				TYPE : 'default',
				COMPONENT_ID : 'bx-im-view-message',
			},

			push: false,
			unread: false,
			sending: false,
			error: false,
			retry: false,
			blink: false,
		};
	}

	getGetters()
	{
		return {

			getMutationType: state => chatId =>
			{
				if (!state.mutationType[chatId])
				{
					return {initialType: MutationType.none, appliedType: MutationType.none};
				}

				return state.mutationType[chatId];
			},
			getLastId: state => chatId =>
			{
				if (!state.collection[chatId] || state.collection[chatId].length <= 0)
				{
					return null;
				}

				let lastId = 0;

				for (let i = 0; i < state.collection[chatId].length; i++)
				{
					let element = state.collection[chatId][i];
					if (
						element.push
						|| element.sending
						|| element.id.toString().startsWith('temporary')
					)
					{
						continue;
					}

					if (lastId < element.id)
					{
						lastId = element.id;
					}
				}

				return lastId? lastId: null;
			},
			getMessage: state => (chatId, messageId) =>
			{
				if (!state.collection[chatId] || state.collection[chatId].length <= 0)
				{
					return null;
				}

				for (let index = state.collection[chatId].length-1; index >= 0; index--)
				{
					if (state.collection[chatId][index].id === messageId)
					{
						return state.collection[chatId][index];
					}
				}

				return null;
			},
			get: state => chatId =>
			{
				if (!state.collection[chatId] || state.collection[chatId].length <= 0)
				{
					return [];
				}

				return state.collection[chatId];
			},
			getBlank: state => params =>
			{
				return this.getElementState();
			},
			getSaveFileList: state => params =>
			{
				return state.saveFileList;
			},
			getSaveUserList: state => params =>
			{
				return state.saveUserList;
			},
		}
	}

	getActions()
	{
		return {
			add: (store, payload) =>
			{
				let result = this.validate(Object.assign({}, payload));
				result.params = Object.assign({}, this.getElementState().params, result.params);
				result.id = 'temporary' + (new Date).getTime() + store.state.created;
				result.templateId = result.id;
				result.unread = false;

				store.commit('add', Object.assign({}, this.getElementState(), result));

				if (payload.sending !== false)
				{
					store.dispatch('actionStart', {
						id: result.id,
						chatId: result.chatId,
					});
				}

				return result.id;
			},
			actionStart: (store, payload) =>
			{
				if (/^\d+$/.test(payload.id))
				{
					payload.id = parseInt(payload.id);
				}

				payload.chatId = parseInt(payload.chatId);

				Vue.nextTick(() => {
					store.commit('update', {
						id : payload.id ,
						chatId : payload.chatId,
						fields : {sending: true}
					});
				});
			},
			actionError: (store, payload) =>
			{
				if (/^\d+$/.test(payload.id))
				{
					payload.id = parseInt(payload.id);
				}
				payload.chatId = parseInt(payload.chatId);

				Vue.nextTick(() => {
					store.commit('update', {
						id : payload.id ,
						chatId : payload.chatId,
						fields : {sending: false, error: true, retry: payload.retry !== false}
					});
				});
			},
			actionFinish: (store, payload) =>
			{
				if (/^\d+$/.test(payload.id))
				{
					payload.id = parseInt(payload.id);
				}
				payload.chatId = parseInt(payload.chatId);

				Vue.nextTick(() => {
					store.commit('update', {
						id : payload.id ,
						chatId : payload.chatId,
						fields : {sending: false, error: false, retry: false}
					});
				});
			},
			set: (store, payload) =>
			{
				if (payload instanceof Array)
				{
					payload = payload.map(message => this.prepareMessage(message, {host: store.state.host}));
				}
				else
				{
					let result = this.prepareMessage(payload, {host: store.state.host});
					(payload = []).push(result);
				}

				store.commit('set', {
					insertType : MutationType.set,
					data : payload
				});
			},
			setAfter: (store, payload) =>
			{
				if (payload instanceof Array)
				{
					payload = payload.map(message => this.prepareMessage(message));
				}
				else
				{
					let result = this.prepareMessage(payload);
					(payload = []).push(result);
				}

				store.commit('set', {
					insertType : MutationType.setAfter,
					data : payload
				});
			},
			setBefore: (store, payload) =>
			{
				if (payload instanceof Array)
				{
					payload = payload.map(message => this.prepareMessage(message));
				}
				else
				{
					let result = this.prepareMessage(payload);
					(payload = []).push(result);
				}

				store.commit('set', {
					insertType : MutationType.setBefore,
					data : payload
				});
			},
			update: (store, payload) =>
			{
				if (/^\d+$/.test(payload.id))
				{
					payload.id = parseInt(payload.id);
				}
				if (/^\d+$/.test(payload.chatId))
				{
					payload.chatId = parseInt(payload.chatId);
				}

				store.commit('initCollection', {chatId: payload.chatId});

				let index = store.state.collection[payload.chatId].findIndex(el => el.id === payload.id);
				if (index < 0)
				{
					return false;
				}

				let result = this.validate(Object.assign({}, payload.fields));

				if (result.params)
				{
					result.params = Object.assign(
						{},
						this.getElementState().params,
						store.state.collection[payload.chatId][index].params,
						result.params
					);
				}

				store.commit('update', {
					id : payload.id,
					chatId : payload.chatId,
					index : index,
					fields : result
				});

				if (payload.fields.blink)
				{
					setTimeout(() => {
						store.commit('update', {
							id : payload.id ,
							chatId : payload.chatId,
							fields : {blink: false}
						});
					}, 1000);
				}

				return true;
			},
			delete: (store, payload) =>
			{
				if (!(payload.id instanceof Array))
				{
					payload.id = [payload.id];
				}

				payload.id = payload.id.map(id => {
					if (/^\d+$/.test(id))
					{
						id = parseInt(id);
					}
					return id;
				});

				store.commit('delete', {
					chatId : payload.chatId,
					elements : payload.id,
				});

				return true;
			},
			clear: (store, payload) =>
			{
				payload.chatId = parseInt(payload.chatId);

				store.commit('clear', {
					chatId : payload.chatId
				});

				return true;
			},
			applyMutationType: (store, payload) =>
			{
				payload.chatId = parseInt(payload.chatId);

				store.commit('applyMutationType', {
					chatId : payload.chatId
				});

				return true;
			},
			readMessages: (store, payload) =>
			{
				payload.readId = parseInt(payload.readId) || 0;
				payload.chatId = parseInt(payload.chatId);

				if (typeof store.state.collection[payload.chatId] === 'undefined')
				{
					return {count: 0}
				}

				let count = 0;
				for (let index = store.state.collection[payload.chatId].length-1; index >= 0; index--)
				{
					let element = store.state.collection[payload.chatId][index];
					if (!element.unread)
						continue;

					if (payload.readId === 0 || element.id <= payload.readId)
					{
						count++;
					}
				}

				store.commit('readMessages', {
					chatId: payload.chatId,
					readId: payload.readId,
				});

				return {count};
			},
			unreadMessages: (store, payload) =>
			{
				payload.unreadId = parseInt(payload.unreadId) || 0;
				payload.chatId = parseInt(payload.chatId);

				if (typeof store.state.collection[payload.chatId] === 'undefined' || !payload.unreadId)
				{
					return {count: 0}
				}

				let count = 0;
				for (let index = store.state.collection[payload.chatId].length-1; index >= 0; index--)
				{
					let element = store.state.collection[payload.chatId][index];
					if (element.unread)
						continue;

					if (element.id >= payload.unreadId)
					{
						count++;
					}
				}

				store.commit('unreadMessages', {
					chatId: payload.chatId,
					unreadId: payload.unreadId,
				});

				return {count};
			},
		}
	}

	getMutations()
	{
		return {
			initCollection: (state, payload) =>
			{
				return this.initCollection(state, payload);
			},
			add: (state, payload) =>
			{
				this.initCollection(state, {chatId: payload.chatId});
				this.setMutationType(state, {chatId: payload.chatId, initialType: MutationType.add});

				state.collection[payload.chatId].push(payload);
				state.saveMessageList[payload.chatId].push(payload.id);

				state.created += 1;

				this.saveState(state, payload.chatId);
			},
			set: (state, payload) =>
			{
				let chats = [];
				let chatsSave = [];
				let mutationType = {};

				mutationType.initialType = payload.insertType;

				if (payload.insertType === MutationType.set)
				{
					payload.insertType = MutationType.setAfter;

					let elements = {};
					payload.data.forEach(element => {
						if (!elements[element.chatId])
						{
							elements[element.chatId] = [];
						}
						elements[element.chatId].push(element.id);
					});

					for (let chatId in elements)
					{
						if (!elements.hasOwnProperty(chatId))
							continue;

						this.initCollection(state, {chatId});

						if (
							state.saveMessageList[chatId].length > elements[chatId].length
							|| elements[chatId].length < StorageLimit.messages
						)
						{
							state.collection[chatId] = state.collection[chatId].filter(element => elements[chatId].includes(element.id));
							state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => elements[chatId].includes(id));
						}

						let intersection = this.manageCacheBeforeSet(
							[...state.saveMessageList[chatId].reverse()],
							elements[chatId]
						);
						if (intersection.type === IntersectionType.none)
						{
							if (intersection.foundElements.length > 0)
							{
								state.collection[chatId] = state.collection[chatId].filter(element => !intersection.foundElements.includes(element.id));
								state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => !intersection.foundElements.includes(id));
							}

							this.removeIntersectionCacheElements = state.collection[chatId].map(element => element.id);

							clearTimeout(this.removeIntersectionCacheTimeout);
							this.removeIntersectionCacheTimeout = setTimeout(() => {
								state.collection[chatId] = state.collection[chatId].filter(element => !this.removeIntersectionCacheElements.includes(element.id));
								state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => !this.removeIntersectionCacheElements.includes(id));
								this.removeIntersectionCacheElements = [];
							}, 1000);
						}
						else
						{
							if (intersection.type === IntersectionType.foundReverse)
							{
								payload.insertType = MutationType.setBefore;
								payload.data = payload.data.reverse();
							}
						}

						if (intersection.foundElements.length > 0)
						{
							if (intersection.type === IntersectionType.found && intersection.noneElements[0])
							{
								mutationType.scrollStickToTop = false;
								mutationType.scrollMessageId = intersection.foundElements[intersection.foundElements.length-1];
							}
							else
							{
								mutationType.scrollStickToTop = false;
								mutationType.scrollMessageId = 0;
							}
						}
						else if (intersection.type === IntersectionType.none)
						{
							mutationType.scrollStickToTop = false;
							mutationType.scrollMessageId = payload.data[0].id;
						}
					}
				}

				mutationType.appliedType = payload.insertType;

				for (let element of payload.data)
				{
					this.initCollection(state, {chatId: element.chatId});

					let index = state.collection[element.chatId].findIndex(el => el.id === element.id);
					if (index > -1)
					{
						delete element.templateId;

						state.collection[element.chatId][index] = Object.assign(
							state.collection[element.chatId][index],
							element
						);
					}
					else if (payload.insertType === MutationType.setBefore)
					{
						state.collection[element.chatId].unshift(element);
					}
					else if (payload.insertType === MutationType.setAfter)
					{
						state.collection[element.chatId].push(element);
					}

					chats.push(element.chatId);

					if (this.store.getters['dialogues/canSaveChat'] && this.store.getters['dialogues/canSaveChat'](element.chatId))
					{
						chatsSave.push(element.chatId);
					}
				}

				chats = [...new Set(chats)];
				chatsSave = [...new Set(chatsSave)];

				// check array for correct order of messages
				if (mutationType.initialType === MutationType.set)
				{
					chats.forEach(chatId =>
					{
						let lastElementId = 0;
						let needApplySort = false;
						for (let i = 0; i < state.collection[chatId].length; i++)
						{
							let element = state.collection[chatId][i];
							if (element.id < lastElementId)
							{
								needApplySort = true;
								break;
							}

							lastElementId = element.id;
						}
						if (needApplySort)
						{
							state.collection[chatId].sort((a, b) => a.id - b.id);
						}
					});
				}

				chats.forEach(chatId => {
					this.setMutationType(state, {chatId: chatId, ...mutationType});
				});

				if (mutationType.initialType !== MutationType.setBefore)
				{
					chatsSave.forEach(chatId => {
						this.saveState(state, chatId);
					});
				}
			},
			update: (state, payload) =>
			{
				this.initCollection(state, {chatId: payload.chatId});

				let index = -1;
				if (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index])
				{
					index = payload.index;
				}
				else
				{
					index = state.collection[payload.chatId].findIndex(el => el.id === payload.id);
				}

				if (index >= 0)
				{
					let isSaveState = (
						state.saveMessageList[payload.chatId].includes(state.collection[payload.chatId][index].id)
						|| payload.fields.id && !payload.fields.id.toString().startsWith('temporary') && state.collection[payload.chatId][index].id.toString().startsWith('temporary')
					);

					delete payload.fields.templateId;

					state.collection[payload.chatId][index] = Object.assign(
						state.collection[payload.chatId][index],
						payload.fields
					);

					if (isSaveState)
					{
						this.saveState(state, payload.chatId);
					}
				}
			},
			delete: (state, payload) =>
			{
				this.initCollection(state, {chatId: payload.chatId});
				this.setMutationType(state, {chatId: payload.chatId, initialType: MutationType.delete});

				state.collection[payload.chatId] = state.collection[payload.chatId].filter(element => !payload.elements.includes(element.id));

				if (state.saveMessageList[payload.chatId].length > 0)
				{
					for (let id of payload.elements)
					{
						if (state.saveMessageList[payload.chatId].includes(id))
						{
							this.saveState(state, payload.chatId);

							break;
						}
					}
				}
			},
			clear: (state, payload) =>
			{
				this.initCollection(state, {chatId: payload.chatId});
				this.setMutationType(state, {chatId: payload.chatId, initialType: 'clear'});

				state.collection[payload.chatId] = [];
				state.saveMessageList[payload.chatId] = [];
			},
			applyMutationType: (state, payload) =>
			{
				if (typeof state.mutationType[payload.chatId] === 'undefined')
				{
					Vue.set(state.mutationType, payload.chatId, {applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: 0, scrollMessageId: 0});
				}

				state.mutationType[payload.chatId].applied = true;
			},
			readMessages: (state, payload) =>
			{
				this.initCollection(state, {chatId: payload.chatId});

				let saveNeeded = false;
				for (let index = state.collection[payload.chatId].length-1; index >= 0; index--)
				{
					let element = state.collection[payload.chatId][index];
					if (!element.unread)
						continue;

					if (payload.readId === 0 || element.id <= payload.readId)
					{
						state.collection[payload.chatId][index] = Object.assign(
							state.collection[payload.chatId][index],
							{unread: false}
						);
						saveNeeded = true;
					}
				}
				if (saveNeeded)
				{
					this.saveState(state, payload.chatId);
				}
			},
			unreadMessages: (state, payload) =>
			{
				this.initCollection(state, {chatId: payload.chatId});

				let saveNeeded = false;
				for (let index = state.collection[payload.chatId].length-1; index >= 0; index--)
				{
					let element = state.collection[payload.chatId][index];
					if (element.unread)
						continue;

					if (element.id >= payload.unreadId)
					{
						state.collection[payload.chatId][index] = Object.assign(
							state.collection[payload.chatId][index],
							{unread: true}
						);
						saveNeeded = true;
					}
				}
				if (saveNeeded)
				{
					this.saveState(state, payload.chatId);
					this.updateSubordinateStates();
				}
			},
		}
	}

	initCollection(state, payload)
	{
		if (typeof payload.chatId === 'undefined')
		{
			return false;
		}

		if (
			typeof payload.chatId === 'undefined'
			|| typeof state.collection[payload.chatId] !== 'undefined'
		)
		{
			return true;
		}

		Vue.set(state.collection, payload.chatId, payload.messages? [].concat(payload.messages): []);
		Vue.set(state.mutationType, payload.chatId, {applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: 0, scrollMessageId: 0});
		Vue.set(state.saveMessageList, payload.chatId, []);
		Vue.set(state.saveFileList, payload.chatId, []);
		Vue.set(state.saveUserList, payload.chatId, []);

		return true;
	}

	setMutationType(state, payload)
	{
		let mutationType = {
			applied: false,
			initialType: MutationType.none,
			appliedType: MutationType.none,
			scrollStickToTop: false,
			scrollMessageId: 0
		};

		if (payload.initialType && !payload.appliedType)
		{
			payload.appliedType = payload.initialType;
		}

		if (typeof state.mutationType[payload.chatId] === 'undefined')
		{
			Vue.set(state.mutationType, payload.chatId, mutationType);
		}

		state.mutationType[payload.chatId] = {...mutationType, ...payload};

		return true;
	}

	prepareMessage(message, options = {})
	{
		let result = this.validate(Object.assign({}, message), options);

		result.params = Object.assign({}, this.getElementState().params, result.params);
		result.templateId = result.id;

		return Object.assign({}, this.getElementState(), result);
	}

	manageCacheBeforeSet(cache, elements, recursive = false)
	{
		let result = {
			type: IntersectionType.empty,
			foundElements: [],
			noneElements: []
		};

		if (!cache || cache.length <= 0)
		{
			return result;
		}

		for (let id of elements)
		{
			if (cache.includes(id))
			{
				if (result.type === IntersectionType.empty)
				{
					result.type = IntersectionType.found;
				}
				result.foundElements.push(id);
			}
			else
			{
				if (result.type === IntersectionType.empty)
				{
					result.type = IntersectionType.none;
				}
				result.noneElements.push(id);
			}
		}

		if (
			result.type === IntersectionType.found
			&& cache.length === elements.length
			&& result.foundElements.length === elements.length
		)
		{
			result.type = IntersectionType.equal;
		}
		else if (
			result.type === IntersectionType.none
			&& !recursive
			&& result.foundElements.length > 0
		)
		{
			let reverseResult = this.manageCacheBeforeSet(cache.reverse(), elements.reverse(), true);
			if (reverseResult.type === IntersectionType.found)
			{
				reverseResult.type = IntersectionType.foundReverse;
				return reverseResult;
			}
		}

		return result;
	}

	updateSaveLists(state, chatId)
	{
		if (!this.isSaveAvailable())
		{
			return true;
		}

		if (
			!chatId
			|| !this.store.getters['dialogues/canSaveChat']
			|| !this.store.getters['dialogues/canSaveChat'](chatId)
		)
		{
			return false;
		}

		this.initCollection(state, {chatId: chatId});

		let count = 0;
		let saveMessageList = [];
		let saveFileList = [];
		let saveUserList = [];

		let dialog = this.store.getters['dialogues/getByChatId'](chatId);
		if (dialog && dialog.type === 'private')
		{
			saveUserList.push(parseInt(dialog.dialogId));
		}

		for (let index = state.collection[chatId].length-1; index >= 0; index--)
		{
			if (state.collection[chatId][index].id.toString().startsWith('temporary'))
			{
				continue;
			}

			if (count >= StorageLimit.messages && !state.collection[chatId][index].unread)
			{
				break;
			}

			saveMessageList.unshift(state.collection[chatId][index].id);

			count++;
		}

		saveMessageList = saveMessageList.slice(0, StorageLimit.messages);

		state.collection[chatId].filter(element => saveMessageList.includes(element.id)).forEach(element =>
		{
			if (element.authorId > 0)
			{
				saveUserList.push(element.authorId);
			}

			if (element.params.FILE_ID instanceof Array)
			{
				saveFileList = element.params.FILE_ID.concat(saveFileList);
			}
		});

		state.saveMessageList[chatId] = saveMessageList;
		state.saveFileList[chatId] = [...new Set(saveFileList)];
		state.saveUserList[chatId] = [...new Set(saveUserList)];

		return true;
	}

	getSaveTimeout()
	{
		return 150;
	}

	saveState(state, chatId)
	{
		if (!this.updateSaveLists(state, chatId))
		{
			return false;
		}

		super.saveState(() =>
		{
			let storedState = {
				collection: {},
				saveMessageList: {},
				saveUserList: {},
				saveFileList: {},
			};

			for (let chatId in state.saveMessageList)
			{
				if (!state.saveMessageList.hasOwnProperty(chatId))
				{
					continue;
				}

				if (!state.collection[chatId])
				{
					continue;
				}

				if (!storedState.collection[chatId])
				{
					storedState.collection[chatId] = [];
				}

				state.collection[chatId]
					.filter(element => state.saveMessageList[chatId].includes(element.id))
					.forEach(element => storedState.collection[chatId].push(element))
				;

				storedState.saveMessageList[chatId] = state.saveMessageList[chatId];
				storedState.saveFileList[chatId] = state.saveFileList[chatId];
				storedState.saveUserList[chatId] = state.saveUserList[chatId];
			}

			return storedState;
		});
	}

	updateSubordinateStates()
	{
		this.store.dispatch('users/saveState');
		this.store.dispatch('files/saveState');
	}

	validate(fields, options)
	{
		const result = {};

		if (typeof fields.id === "number")
		{
			result.id = fields.id;
		}
		else if (typeof fields.id === "string")
		{
			if (fields.id.startsWith('temporary'))
			{
				result.id = fields.id;
			}
			else
			{
				result.id = parseInt(fields.id);
			}
		}

		if (typeof fields.templateId === "number")
		{
			result.templateId = fields.templateId;
		}
		else if (typeof fields.templateId === "string")
		{
			if (fields.templateId.startsWith('temporary'))
			{
				result.templateId = fields.templateId;
			}
			else
			{
				result.templateId = parseInt(fields.templateId);
			}
		}

		if (typeof fields.chat_id !== 'undefined')
		{
			fields.chatId = fields.chat_id;
		}
		if (typeof fields.chatId === "number" || typeof fields.chatId === "string")
		{
			result.chatId = parseInt(fields.chatId);
		}
		if (typeof fields.date !== "undefined")
		{
			result.date = Utils.date.cast(fields.date);
		}

		// previous P&P format
		if (typeof fields.textOriginal === "string" || typeof fields.textOriginal === "number")
		{
			result.text = fields.textOriginal.toString();

			if (typeof fields.text === "string" || typeof fields.text === "number")
			{
				result.textConverted = this.convertToHtml({
					text: fields.text.toString(),
					isConverted: true
				});
			}
		}
		else // modern format
		{
			if (typeof fields.text_converted !== 'undefined')
			{
				fields.textConverted = fields.text_converted;
			}
			if (typeof fields.textConverted === "string" || typeof fields.textConverted === "number")
			{
				result.textConverted = fields.textConverted.toString();
			}
			if (typeof fields.text === "string" || typeof fields.text === "number")
			{
				result.text = fields.text.toString();

				let isConverted = typeof result.textConverted !== 'undefined';

				result.textConverted = this.convertToHtml({
					text: isConverted? result.textConverted: result.text,
					isConverted
				});
			}
		}

		if (typeof fields.senderId !== 'undefined')
		{
			fields.authorId = fields.senderId;
		}
		else if (typeof fields.author_id !== 'undefined')
		{
			fields.authorId = fields.author_id;
		}
		if (typeof fields.authorId === "number" || typeof fields.authorId === "string")
		{
			if (fields.system === true || fields.system === 'Y')
			{
				result.authorId = 0;
			}
			else
			{
				result.authorId = parseInt(fields.authorId);
			}
		}

		if (typeof fields.params === "object" && fields.params !== null)
		{
			const params = this.validateParams(fields.params, options);
			if (params)
			{
				result.params = params;
			}
		}

		if (typeof fields.push === "boolean")
		{
			result.push = fields.push;
		}

		if (typeof fields.sending === "boolean")
		{
			result.sending = fields.sending;
		}

		if (typeof fields.unread === "boolean")
		{
			result.unread = fields.unread;
		}

		if (typeof fields.blink === "boolean")
		{
			result.blink = fields.blink;
		}

		if (typeof fields.error === "boolean" || typeof fields.error === "string")
		{
			result.error = fields.error;
		}

		if (typeof fields.retry === "boolean")
		{
			result.retry = fields.retry;
		}

		return result;
	}

	validateParams(params, options)
	{
		const result = {};
		try
		{
			for (let field in params)
			{
				if (!params.hasOwnProperty(field))
				{
					continue;
				}

				if (field === 'COMPONENT_ID')
				{
					if (typeof params[field] === "string" && BX.Vue.isComponent(params[field]))
					{
						result[field] = params[field];
					}
				}
				else if (field === 'LIKE')
				{
					if (params[field] instanceof Array)
					{
						result['REACTION'] = {like: params[field].map(element => parseInt(element))};
					}
				}
				else if (field === 'CHAT_LAST_DATE')
				{
					result[field] = Utils.date.cast(params[field]);
				}
				else if (field === 'AVATAR')
				{
					if (params[field])
					{
						result[field] = params[field].startsWith('http') ? params[field] : options.host + params[field];
					}
				}
				else if (field === 'NAME')
				{
					if (params[field])
					{
						result[field] = params[field];
					}
				}
				else
				{
					result[field] = params[field];
				}
			}
		}
		catch (e) {}

		let hasResultElements = false;
		for (let field in result)
		{
			if (!result.hasOwnProperty(field))
			{
				continue;
			}

			hasResultElements = true;
			break
		}

		return hasResultElements? result: null;
	}

	convertToHtml(params = {})
	{
		let {
			quote = true,
			image = true,
			text = '',
			highlightText = '',
			isConverted = false,
			enableBigSmile = true
		} = params;

		text = text.trim();

		if (!isConverted)
		{
			text = text.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
		}

		if (text.startsWith('/me'))
		{
			text = `<i>${text.substr(4)}</i>`;
		}
		else if (text.startsWith('/loud'))
		{
			text = `<b>${text.substr(6)}</b>`;
		}

		const quoteSign = "&gt;&gt;";
		if (quote && text.indexOf(quoteSign) >= 0)
		{
			let textPrepareFlag = false;
			let textPrepare = text.split(isConverted? "<br />": "\n");
			for (let i = 0; i < textPrepare.length; i++)
			{
				if (textPrepare[i].startsWith(quoteSign))
				{
					textPrepare[i] = textPrepare[i].replace(quoteSign, '<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap">');
					while (++i < textPrepare.length && textPrepare[i].startsWith(quoteSign))
					{
						textPrepare[i] = textPrepare[i].replace(quoteSign, '');
					}
					textPrepare[i - 1] += '</div></div><br>';
					textPrepareFlag = true;
				}
			}
			text = textPrepare.join("<br />");
		}

		text = text.replace(/\n/gi, '<br />');

		text = text.replace(/\t/gi, '&nbsp;&nbsp;&nbsp;&nbsp;');

		text = this.decodeBbCode(text, false, enableBigSmile);

		if (quote)
		{
			text = text.replace(/------------------------------------------------------<br \/>(.*?)\[(.*?)\]<br \/>(.*?)------------------------------------------------------(<br \/>)?/g, function (whole, p1, p2, p3, p4, offset) {
				return (offset > 0? '<br>': '') + "<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\"><div class=\"bx-im-message-content-quote-name\"><span class=\"bx-im-message-content-quote-name-text\">" + p1 + "</span><span class=\"bx-im-message-content-quote-name-time\">" + p2 + "</span></div>" + p3 + "</div></div><br />";
			});
			text = text.replace(/------------------------------------------------------<br \/>(.*?)------------------------------------------------------(<br \/>)?/g, function (whole, p1, p2, p3, offset) {
				return (offset > 0? '<br>': '') + "<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\">" + p1 + "</div></div><br />";
			});
		}

		if (image)
		{
			let changed = false;
			text = text.replace(/<a(.*?)>(http[s]{0,1}:\/\/.*?)<\/a>/ig, function(whole, aInner, text, offset)
			{
				if(!text.match(/(\.(jpg|jpeg|png|gif)\?|\.(jpg|jpeg|png|gif)$)/i) || text.indexOf("/docs/pub/") > 0 || text.indexOf("logout=yes") > 0)
				{
					return whole;
				}
				else
				{
					changed = true;
					return (offset > 0? '<br />':'')+'<a' +aInner+ ' target="_blank" class="bx-im-element-file-image"><img src="'+text+'" class="bx-im-element-file-image-source-text" onerror="BX.Messenger.Model.MessagesModel.hideErrorImage(this)"></a></span>';
				}
			});
			if (changed)
			{
				text = text.replace(/<\/span>(\n?)<br(\s\/?)>/ig, '</span>').replace(/<br(\s\/?)>(\n?)<br(\s\/?)>(\n?)<span/ig, '<br /><span');
			}
		}

		if (highlightText)
		{
			text = text.replace(new RegExp("(" + highlightText.replace(/[\-\[\]\/{}()*+?.\\^$|]/g, "\\$&") + ")", 'ig'), '<span class="bx-messenger-highlight">$1</span>');
		}

		if (enableBigSmile)
		{
			text = text.replace(
				/^(\s*<img\s+src=[^>]+?data-code=[^>]+?data-definition="UHD"[^>]+?style="width:)(\d+)(px[^>]+?height:)(\d+)(px[^>]+?class="bx-smile"\s*\/?>\s*)$/,
				function doubleSmileSize(match, start, width, middle, height, end) {
					return start + (parseInt(width, 10) * 1.7) + middle + (parseInt(height, 10) * 1.7) + end;
				}
			);
		}

		if (text.substr(-6) == '<br />')
		{
			text = text.substr(0, text.length - 6);
		}
		text = text.replace(/<br><br \/>/ig, '<br />');
		text = text.replace(/<br \/><br>/ig, '<br />');

		return text;
	};

	decodeBbCode(text, textOnly = false, enableBigSmile = true)
	{
		return MessagesModel.decodeBbCode({text, textOnly, enableBigSmile})
	}

	static decodeBbCode(params = {})
	{
		let {text, textOnly = false, enableBigSmile = true} = params;

		let codeReplacement = [];

		text = text.replace(/\[CODE\]\n?(.*?)\[\/CODE\]/sig, function(whole, text)
		{
			let id = codeReplacement.length;
			codeReplacement.push(text);
			return '####REPLACEMENT_MARK_'+id+'####';
		});

		text = text.replace(/\[LIKE\]/ig, '<span class="bx-smile bx-im-smile-like"></span>');
		text = text.replace(/\[DISLIKE\]/ig, '<span class="bx-smile bx-im-smile-dislike"></span>');

		text = text.replace(/\[USER=([0-9]{1,})\](.*?)\[\/USER\]/ig, (whole, userId, text) => '<span class="bx-im-mention" data-type="USER" data-value="'+userId+'">'+text+'</span>');

		text = text.replace(/\[CHAT=(imol\|)?([0-9]{1,})\](.*?)\[\/CHAT\]/ig, (whole, openlines, chatId, text) => openlines? text: '<span class="bx-im-mention" data-type="CHAT" data-value="chat'+chatId+'">'+text+'</span>'); // TODO tag CHAT

		if (false && Utils.device.isMobile())
		{
			let replacements = [];
			text = text.replace(/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/ig, (whole, number, text) => {
				let index = replacements.length;
				replacements.push({number, text});
				return `####REPLACEMENT_MARK_${index}####`;
			});

			text = text.replace(/[+]{0,1}(?:[-\/. ()\[\]~;#,]*[0-9]){10,}[^\n\r<][-\/. ()\[\]~;#,0-9^]*/g, (number) => {
				let pureNumber = number.replace(/\D/g, '');
				return `[CALL=${pureNumber}]${number}[/CALL]`;
			});

			replacements.forEach((item, index) => {
				text = text.replace(`####REPLACEMENT_MARK_${index}####`, `[CALL=${item.number}]${item.text}[/CALL]`)
			});
		}

		text = text.replace(/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/ig, (whole, number, text) => '<span class="bx-im-mention" data-type="CALL" data-value="'+Utils.text.htmlspecialchars(number)+'">'+text+'</span>'); // TODO tag CHAT


		text = text.replace(/\[PCH=([0-9]{1,})\](.*?)\[\/PCH\]/ig, (whole, historyId, text) => text); // TODO tag PCH

		text = text.replace(/\[SEND(?:=(.+?))?\](.+?)?\[\/SEND\]/ig, (whole, command, text) =>
		{
			let html = '';

			text = text? text: command;
			command = (command? command: text).replace('<br />', '\n');

			if (!textOnly && text)
			{
				text = text.replace(/<([\w]+)[^>]*>(.*?)<\\1>/i, "$2", text);
				text = text.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i, "$2", text);

				html = '<span class="bx-im-message-command-wrap">'+
					'<span class="bx-im-message-command" data-entity="send">'+text+'</span>'+
					'<span class="bx-im-message-command-data">'+command+'</span>'+
				'</span>';
			}
			else
			{
				html = text;
			}

			return html;
		});

		text = text.replace(/\[PUT(?:=(.+?))?\](.+?)?\[\/PUT\]/ig, (whole, command, text) =>
		{
			let html = '';

			text = text? text: command;
			command = (command? command: text).replace('<br />', '\n');

			if (!textOnly && text)
			{
				text = text.replace(/<([\w]+)[^>]*>(.*?)<\/\1>/i, "$2", text);
				text = text.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i, "$2", text);

				html = '<span class="bx-im-message-command" data-entity="put">'+text+'</span>';
				html += '<span class="bx-im-message-command-data">'+command+'</span>';
			}
			else
			{
				html = text;
			}

			return html;
		});

		let textElementSize = 0;
		if (enableBigSmile)
		{
			textElementSize = text.replace(/\[icon\=([^\]]*)\]/ig, '').trim().length;
		}

		text = text.replace(/\[icon\=([^\]]*)\]/ig, (whole) =>
		{
			let url = whole.match(/icon\=(\S+[^\s.,> )\];\'\"!?])/i);
			if (url && url[1])
			{
				url = url[1];
			}
			else
			{
				return '';
			}

			let attrs = {'src': url, 'border': 0};

			let size = whole.match(/size\=(\d+)/i);
			if (size && size[1])
			{
				attrs['width'] = size[1];
				attrs['height'] = size[1];
			}
			else
			{
				let width = whole.match(/width\=(\d+)/i);
				if (width && width[1])
				{
					attrs['width'] = width[1];
				}

				let height = whole.match(/height\=(\d+)/i);
				if (height && height[1])
				{
					attrs['height'] = height[1];
				}

				if (attrs['width'] && !attrs['height'])
				{
					attrs['height'] = attrs['width'];
				}
				else if (attrs['height'] && !attrs['width'])
				{
					attrs['width'] = attrs['height'];
				}
				else if (attrs['height'] && attrs['width'])
				{}
				else
				{
					attrs['width'] = 20;
					attrs['height'] = 20;
				}
			}

			attrs['width'] = attrs['width']>100? 100: attrs['width'];
			attrs['height'] = attrs['height']>100? 100: attrs['height'];

			if (enableBigSmile && textElementSize === 0 && attrs['width'] === attrs['height'] && attrs['width'] === 20)
			{
				attrs['width'] = 40;
				attrs['height'] = 40;
			}

			let title = whole.match(/title\=(.*[^\s\]])/i);
			if (title && title[1])
			{
				title = title[1];
				if (title.indexOf('width=') > -1)
				{
					title = title.substr(0, title.indexOf('width='))
				}
				if (title.indexOf('height=') > -1)
				{
					title = title.substr(0, title.indexOf('height='))
				}
				if (title.indexOf('size=') > -1)
				{
					title = title.substr(0, title.indexOf('size='))
				}
				if (title)
				{
					attrs['title'] = Utils.text.htmlspecialchars(title).trim();
					attrs['alt'] = attrs['title'];
				}
			}

			let attributes = '';
			for (let name in attrs)
			{
				if (attrs.hasOwnProperty(name))
				{
					attributes += name+'="'+attrs[name]+'" ';
				}
			}


			return '<img class="bx-smile bx-icon" '+attributes+'>';
		});

		codeReplacement.forEach((code, index) => {
			text = text.replace('####REPLACEMENT_MARK_'+index+'####',
				!textOnly? '<div class="bx-im-message-content-code">'+code+'</div>': code
			)
		});

		return text;
	}

	static hideErrorImage(element)
	{
		if (element.parentNode && element.parentNode)
		{
			element.parentNode.innerHTML = '<a href="'+element.src+'" target="_blank">'+element.src+'</a>';
		}
		return true;
	};
}

export {MessagesModel};src/recent.js000066400000024073147732346740007202 0ustar00/**
 * Bitrix Messenger
 * User model (Vuex Builder model)
 *
 * @package bitrix
 * @subpackage im
 * @copyright 2001-2019 Bitrix
 */

import {Vue} from 'ui.vue';
import {VuexBuilderModel} from 'ui.vue.vuex';
import {Utils} from "im.lib.utils";

class RecentModel extends VuexBuilderModel
{
	getName()
	{
		return 'recent';
	}

	getState()
	{
		return {
			host: this.getVariable('host', location.protocol+'//'+location.host),
			collection: {
				pinned: [],
				general: []
			}
		}
	}

	getElementState(params = {})
	{
		return {
			id: 0,
			templateId: '',
			template: 'item',
			chatType: 'chat',
			sectionCode: 'general',
			avatar: '',
			color: '#048bd0',
			title: '',
			message: {
				id: 0,
				text: '',
				date: new Date()
			},
			counter: 0,
			pinned: false,
			chatId: 0,
			userId: 0
		};
	}

	getGetters()
	{
		return {
			get: state => dialogId =>
			{
				return this.findItem(state.collection, dialogId);
			}
		};
	}

	getActions()
	{
		return {
			set: (store, payload) =>
			{
				let result = {};

				if (payload.pinned instanceof Array)
				{
					result.pinned = payload.pinned.map(
						recentItem => this.prepareItem(recentItem, { host: store.state.host, sectionCode: 'pinned' })
					);
				}
				else if (typeof payload.pinned !== 'undefined')
				{
					let pinned = [];
					pinned.push(this.prepareItem(payload.pinned, { host: store.state.host, sectionCode: 'pinned' }));

					result.pinned = pinned;
				}

				if (payload.general instanceof Array)
				{
					result.general = payload.general.map(
						recentItem => this.prepareItem(recentItem, { host: store.state.host })
					);
				}
				else if (typeof payload.general !== 'undefined')
				{
					let general = [];
					general.push(this.prepareItem(payload.general, { host: store.state.host }));

					result.general = general;
				}

				store.commit('set', result);
			},

			updatePlaceholders: (store, payload) =>
			{
				if (!(payload.items instanceof Array))
				{
					return false;
				}

				payload.items = payload.items.map(element => this.prepareItem(element));

				payload.items.forEach((element, index) => {
					let placeholderId = 'placeholder' + (payload.firstMessage + index);
					let existingPlaceholder = this.findItem(
						store.state.collection,
						placeholderId,
						'templateId'
					);

					let existingItem = this.findItem(store.state.collection, element.id);

					if (existingItem.element)
					{
						store.commit('update', {
							index: existingItem.index,
							fields: Object.assign({}, element),
							section: 'general'
						});

						store.commit('delete', {
							index: existingPlaceholder.index,
							section: 'general'
						});
					}
					else
					{
						store.commit('update', {
							index: existingPlaceholder.index,
							fields: Object.assign({}, element),
							section: 'general'
						});
					}
				});
			},

			update: (store, payload) =>
			{
				if (
					typeof payload !== 'object' ||
					payload instanceof Array ||
					!payload.id ||
					!payload.fields
				)
				{
					return false;
				}

				if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')
				{
					payload.id = parseInt(payload.id);
				}

				let existingItem = this.findItem(store.state.collection, payload.id);

				if (!existingItem.element)
				{
					return false;
				}

				store.commit('update', {
					index: existingItem.index,
					fields: Object.assign({}, this.validate(payload.fields)),
					section: existingItem.element.sectionCode
				});
			},

			pin: (store, payload) =>
			{
				if (
					typeof payload !== 'object' ||
					payload instanceof Array ||
					!payload.id ||
					typeof payload.action !== 'boolean'
				)
				{
					return false;
				}

				if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')
				{
					payload.id = parseInt(payload.id);
				}

				let existingItem = this.findItem(store.state.collection, payload.id, undefined, payload.action? 'general': 'pinned');

				if (!existingItem.element)
				{
					return true;
				}

				if (payload.action)
				{
					store.state.collection.pinned.push(
						Object.assign({}, existingItem.element, {
							sectionCode: 'pinned',
							pinned: true
						})
					);
					store.state.collection.pinned.sort(this.sortListByMessageDate);

					store.commit('delete', {
						index: existingItem.index,
						section: 'general'
					});
				}
				else
				{
					store.state.collection.general.push(
						Object.assign({}, existingItem.element, {
							sectionCode: 'general',
							pinned: false
						})
					);
					store.state.collection.general.sort(this.sortListByMessageDate);

					store.commit('delete', {
						index: existingItem.index,
						section: 'pinned'
					});
				}
			},

			clearPlaceholders: (store, payload) =>
			{
				store.state.collection.general = store.state.collection.general.filter(element => {
					return !element.id.toString().startsWith('placeholder');
				});
			},

			delete: (store, payload) =>
			{
				if (
					typeof payload !== 'object' ||
					payload instanceof Array ||
					!payload.id
				)
				{
					return false;
				}

				if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')
				{
					payload.id = parseInt(payload.id);
				}

				let existingItem = this.findItem(store.state.collection, payload.id);

				if (!existingItem.element)
				{
					return false;
				}

				store.commit('delete', {
					index: existingItem.index,
					section: existingItem.element.sectionCode
				});
			}
		}
	}

	getMutations()
	{
		return {
			set: (state, payload) => {
				if (payload.general instanceof Array)
				{
					payload.general.forEach(element => {
						let {index, alreadyExists} = this.initCollection(state, element, 'general');

						if (alreadyExists)
						{
							state.collection.general[index] = Object.assign(
								{},
								state.collection.general[index],
								element
							);
						}
					});
				}
				if (payload.pinned instanceof Array)
				{
					payload.pinned.forEach(element => {
						let {index, alreadyExists} = this.initCollection(state, element, 'pinned');
						if (alreadyExists)
						{
							state.collection.pinned[index] = Object.assign(
								{},
								state.collection.pinned[index],
								element
							);
						}
					});
				}
			},

			update: (state, payload) => {
				if (
					!payload ||
					payload instanceof Array ||
					typeof payload.fields !== 'object' ||
					typeof payload.index !== 'number' ||
					typeof payload.section !== 'string'
				)
				{
					return false;
				}

				state.collection[payload.section][payload.index] = Object.assign(
					{},
					state.collection[payload.section][payload.index],
					payload.fields
				);

				state.collection[payload.section].sort(this.sortListByMessageDate);
			},

			delete: (state, payload) => {
				if (
					!payload ||
					payload instanceof Array ||
					typeof payload.index !== 'number' ||
					typeof payload.section !== 'string'
				)
				{
					return false;
				}

				state.collection[payload.section].splice(payload.index, 1);
			}
		}
	}

	initCollection(state, payload, section)
	{
		let existingItem = this.findItem(state.collection, payload.id, undefined, section);

		if (existingItem.element)
		{
			return {index: existingItem.index, alreadyExists: true};
		}

		let newLength = state.collection[section].push(Object.assign(
			{},
			this.getElementState(),
			payload
		));

		return {index: newLength - 1, alreadyExists: false};
	}

	validate(fields, options = {})
	{
		const result = {};

		if (typeof fields.id === "number" || typeof fields.id === "string")
		{
			result.id = fields.id;
		}

		if (typeof fields.templateId === 'string')
		{
			result.templateId = fields.templateId;
		}

		if (typeof fields.template === 'string')
		{
			result.template = fields.template;
		}

		if (typeof fields.type === "string")
		{
			if (fields.type === 'chat')
			{
				if (fields.chat.type === 'open')
				{
					result.chatType = 'open';
				}
				else if (fields.chat.type === 'chat')
				{
					result.chatType = 'chat';
				}
			}
			else if (fields.type === 'user')
			{
				result.chatType = 'user';
			}
			else if (fields.type === 'notification')
			{
				result.chatType = 'notification';
				fields.title = 'Notifications';
			}
		}

		if (typeof fields.avatar === 'string')
		{
			let avatar;

			if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))
			{
				avatar = '';
			}
			else if (fields.avatar.startsWith('http'))
			{
				avatar = fields.avatar;
			}
			else
			{
				avatar = options.host + fields.avatar;
			}

			if (avatar)
			{
				result.avatar = encodeURI(avatar);
			}
		}

		if (typeof fields.color === 'string')
		{
			result.color = fields.color;
		}

		if (typeof fields.title === "string")
		{
			result.title = fields.title;
		}

		if (
			typeof fields.message === "object" &&
			!(fields.message instanceof Array) &&
			fields.message !== null)
		{
			result.message = fields.message;
		}

		if (typeof fields.counter === 'number')
		{
			result.counter = fields.counter;
		}

		if (typeof fields.pinned === 'boolean')
		{
			result.pinned = fields.pinned;
		}

		if (typeof fields.chatId === 'number')
		{
			result.chatId = fields.chatId;
		}

		if (typeof fields.userId === 'number')
		{
			result.userId = fields.userId;
		}

		return result;
	}

	sortListByMessageDate(a, b)
	{
		if (a.message && b.message)
		{
			let timestampA = new Date(a.message.date).getTime();
			let timestampB = new Date(b.message.date).getTime();

			return timestampB - timestampA;
		}
	}

	prepareItem(item, options = {})
	{
		let result = this.validate(Object.assign({}, item));

		return Object.assign({}, this.getElementState(), result, options);
	}

	findItem(store, value, key = 'id', section = 'general')
	{
		let result = {};
		if (typeof store[section] === undefined)
		{
			return result;
		}

		let elementIndex = store[section].findIndex((element, index) => {
			return element[key] === value;
		});

		if (elementIndex !== -1)
		{
			result.index = elementIndex;
			result.element = store[section][elementIndex];

			return result;
		}

		return result;
	}
}

export {RecentModel};src/dialogues.js000066400000043251147732346740007675 0ustar00
/**
 * Bitrix Messenger
 * Dialogues model (Vuex Builder model)
 *
 * @package bitrix
 * @subpackage im
 * @copyright 2001-2019 Bitrix
 */

import {Vue} from 'ui.vue';
import {VuexBuilderModel} from 'ui.vue.vuex';
import {StorageLimit} from "im.const";
import {Utils} from "im.lib.utils";

class DialoguesModel extends VuexBuilderModel
{
	getName()
	{
		return 'dialogues';
	}

	getState()
	{
		return {
			host: this.getVariable('host', location.protocol+'//'+location.host),
			collection: {},
			saveDialogList: [],
			saveChatList: [],
		}
	}

	getStateSaveException()
	{
		return {
			host: null
		}
	}

	getElementStateSaveException()
	{
		return {
			writingList: null,
			quoteId: null
		}
	}

	getElementState()
	{
		return {
			dialogId: '0',
			chatId: 0,
			counter: 0,
			unreadId: 0,
			unreadLastId: 0,
			managerList: [],
			readedList: [],
			writingList: [],
			textareaMessage: "",
			quoteId: 0,
			editId: 0,
			init: false,

			name: "",
			owner: 0,
			extranet: false,
			avatar: "",
			color: "#17A3EA",
			type: "chat",
			entityType: "",
			entityId: "",
			entityData1: "",
			entityData2: "",
			entityData3: "",
			dateCreate: new Date(),
			restrictions: {
				avatar: true,
				extend: true,
				leave: true,
				leaveOwner: true,
				rename: true
			}
		};
	}

	getGetters()
	{
		return {
			get: state => dialogId =>
			{
				if (!state.collection[dialogId])
				{
					return null;
				}

				return state.collection[dialogId];
			},
			getByChatId: state => chatId =>
			{
				chatId = parseInt(chatId);

				for (let dialogId in state.collection)
				{
					if (!state.collection.hasOwnProperty(dialogId))
					{
						continue;
					}

					if (state.collection[dialogId].chatId === chatId)
					{
						return state.collection[dialogId];
					}
				}

				return null;
			},
			getBlank: state => params =>
			{
				return this.getElementState();
			},
			getQuoteId: state => dialogId =>
			{
				if (!state.collection[dialogId])
				{
					return 0;
				}

				return state.collection[dialogId].quoteId;
			},
			getEditId: state => dialogId =>
			{
				if (!state.collection[dialogId])
				{
					return 0;
				}

				return state.collection[dialogId].editId;
			},
			canSaveChat: state => chatId =>
			{
				if (/^\d+$/.test(chatId))
				{
					chatId = parseInt(chatId);
				}
				return state.saveChatList.includes(parseInt(chatId));
			},
			canSaveDialog: state => dialogId =>
			{
				return state.saveDialogList.includes(dialogId.toString());
			},
			isPrivateDialog: state => dialogId =>
			{
				dialogId = dialogId.toString();
				return state.collection[dialogId.toString()] && state.collection[dialogId].type === 'private';
			},
		}
	}

	getActions()
	{
		return {
			set: (store, payload) =>
			{
				if (payload instanceof Array)
				{
					payload = payload.map(dialog => {
						return Object.assign(
							{},
							this.validate(Object.assign({}, dialog), {host: store.state.host}),
							{init: true}
						);
					});
				}
				else
				{
					let result = [];
					result.push(Object.assign(
						{},
						this.validate(Object.assign({}, payload), {host: store.state.host}),
						{init: true}
					));
					payload = result;
				}

				store.commit('set', payload);
			},

			update: (store, payload) =>
			{
				if (
					typeof store.state.collection[payload.dialogId] === 'undefined'
					|| store.state.collection[payload.dialogId].init === false
				)
				{
					return true;
				}
				store.commit('update', {
					dialogId : payload.dialogId,
					fields : this.validate(Object.assign({}, payload.fields), {host: store.state.host})
				});

				return true;
			},

			delete: (store, payload) =>
			{
				store.commit('delete', payload.dialogId);
				return true;
			},

			updateWriting: (store, payload) =>
			{
				if (
					typeof store.state.collection[payload.dialogId] === 'undefined'
					|| store.state.collection[payload.dialogId].init === false
				)
				{
					return true;
				}

				let index = store.state.collection[payload.dialogId].writingList.findIndex(el => el.userId === payload.userId);
				if (payload.action)
				{
					if (index >= 0)
					{
						return true;
					}
					else
					{
						let writingList = [].concat(store.state.collection[payload.dialogId].writingList);
						writingList.unshift({
							userId: payload.userId,
							userName: payload.userName,
						});

						store.commit('update', {
							actionName: 'updateWriting/1',
							dialogId : payload.dialogId,
							fields : this.validate({writingList}, {host: store.state.host})
						});
					}
				}
				else
				{
					if (index >= 0)
					{
						let writingList = store.state.collection[payload.dialogId].writingList.filter(el => el.userId !== payload.userId);
						store.commit('update', {
							actionName: 'updateWriting/2',
							dialogId : payload.dialogId,
							fields : this.validate({writingList}, {host: store.state.host})
						});

						return true;
					}
					else
					{
						return true;
					}
				}

				return false;
			},

			updateReaded: (store, payload) =>
			{
				if (
					typeof store.state.collection[payload.dialogId] === 'undefined'
					|| store.state.collection[payload.dialogId].init === false
				)
				{
					return true;
				}

				let readedList = store.state.collection[payload.dialogId].readedList.filter(el => el.userId !== payload.userId);

				if (payload.action)
				{
					readedList.push({
						userId: payload.userId,
						userName: payload.userName || '',
						messageId: payload.messageId,
						date: payload.date || (new Date()),
					});
				}

				store.commit('update', {
					actionName: 'updateReaded',
					dialogId : payload.dialogId,
					fields : this.validate({readedList}, {host: store.state.host})
				});

				return false;
			},

			increaseCounter: (store, payload) =>
			{
				if (
					typeof store.state.collection[payload.dialogId] === 'undefined'
					|| store.state.collection[payload.dialogId].init === false
				)
				{
					return true;
				}

				let counter = store.state.collection[payload.dialogId].counter;
				if (counter === 100)
				{
					return true;
				}

				let increasedCounter = counter + payload.count;
				if (increasedCounter > 100)
				{
					increasedCounter = 100;
				}

				let fields = {
					counter: increasedCounter
				};

				if (typeof payload.unreadLastId !== 'undefined')
				{
					fields.unreadLastId = payload.unreadLastId;
				}

				store.commit('update', {
					actionName: 'increaseCounter',
					dialogId : payload.dialogId,
					fields
				});

				return false;
			},

			decreaseCounter: (store, payload) =>
			{
				if (
					typeof store.state.collection[payload.dialogId] === 'undefined'
					|| store.state.collection[payload.dialogId].init === false
				)
				{
					return true;
				}

				let counter = store.state.collection[payload.dialogId].counter;
				if (counter === 100)
				{
					return true;
				}

				let decreasedCounter = counter - payload.count;
				if (decreasedCounter < 0)
				{
					decreasedCounter = 0;
				}

				let unreadId = payload.unreadId > store.state.collection[payload.dialogId].unreadId? payload.unreadId: store.state.collection[payload.dialogId].unreadId;

				if (
					store.state.collection[payload.dialogId].unreadId !== unreadId
					|| store.state.collection[payload.dialogId].counter !== decreasedCounter
				)
				{
					if (decreasedCounter === 0)
					{
						unreadId = 0;
					}

					store.commit('update', {
						actionName: 'decreaseCounter',
						dialogId : payload.dialogId,
						fields : {
							counter: decreasedCounter,
							unreadId: unreadId
						}
					});
				}

				return false;
			},

			saveDialog: (store, payload) =>
			{
				if (
					typeof store.state.collection[payload.dialogId] === 'undefined'
					|| store.state.collection[payload.dialogId].init === false
				)
				{
					return true;
				}

				store.commit('saveDialog', {
					dialogId : payload.dialogId,
					chatId : payload.chatId
				});

				return false;
			},
		};
	}

	getMutations()
	{
		return {
			initCollection: (state, payload) =>
			{
				this.initCollection(state, payload);
			},
			saveDialog: (state, payload) =>
			{
				// TODO if payload.dialogId is IMOL, skip update this flag
				if (!(payload.chatId > 0 && payload.dialogId.length > 0))
				{
					return false;
				}

				let saveDialogList = state.saveDialogList.filter(function(element) {
					return element !== payload.dialogId;
				});

				saveDialogList.unshift(payload.dialogId);

				saveDialogList = saveDialogList.slice(0, StorageLimit.dialogues);

				if (state.saveDialogList.join(',') === saveDialogList.join(','))
				{
					return true;
				}

				state.saveDialogList = saveDialogList;


				let saveChatList = state.saveChatList.filter(function(element) {
					return element !== payload.chatId;
				});

				saveChatList.unshift(payload.chatId);

				state.saveChatList = saveChatList.slice(0, StorageLimit.dialogues);

				this.saveState(state);
			},
			set: (state, payload) =>
			{
				for (let element of payload)
				{
					this.initCollection(state, {dialogId: element.dialogId});

					state.collection[element.dialogId] = Object.assign(
						this.getElementState(),
						state.collection[element.dialogId],
						element
					);
				}

				// TODO if payload.dialogId is IMOL, skip update cache
				this.saveState(state);
			},
			update: (state, payload) =>
			{
				this.initCollection(state, payload);

				state.collection[payload.dialogId] = Object.assign(
					state.collection[payload.dialogId],
					payload.fields
				);

				// TODO if payload.dialogId is IMOL, skip update cache
				this.saveState(state);
			},
			delete: (state, payload) =>
			{
				delete state.collection[payload.dialogId];

				// TODO if payload.dialogId is IMOL, skip update cache
				this.saveState(state);
			}
		};
	}

	initCollection(state, payload)
	{
		if (typeof state.collection[payload.dialogId] !== 'undefined')
		{
			return true
		}

		Vue.set(state.collection, payload.dialogId, this.getElementState());

		if (payload.fields)
		{
			state.collection[payload.dialogId] = Object.assign(
				state.collection[payload.dialogId],
				this.validate(Object.assign({}, payload.fields), {host: state.host})
			);
		}

		return true;
	}

	getSaveTimeout()
	{
		return 100;
	}

	saveState(state = {})
	{
		if (!this.isSaveAvailable())
		{
			return true;
		}

		super.saveState(() =>
		{
			let storedState = {
				collection: {},
				saveDialogList: [].concat(state.saveDialogList),
				saveChatList: [].concat(state.saveChatList),
			};

			state.saveDialogList.forEach(dialogId => {
				if (!state.collection[dialogId])
					return false;

				storedState.collection[dialogId] = Object.assign(
					this.getElementState(),
					this.cloneState(state.collection[dialogId], this.getElementStateSaveException())
				);
			});

			return storedState;
		});
	}

	validate(fields, options = {})
	{
		const result = {};

		options.host = options.host || this.getState().host;

		if (typeof fields.dialog_id !== 'undefined')
		{
			fields.dialogId = fields.dialog_id;
		}
		if (typeof fields.dialogId === "number" || typeof fields.dialogId === "string")
		{
			result.dialogId = fields.dialogId.toString();
		}

		if (typeof fields.chat_id !== 'undefined')
		{
			fields.chatId = fields.chat_id;
		}
		else if (typeof fields.id !== 'undefined')
		{
			fields.chatId = fields.id;
		}
		if (typeof fields.chatId === "number" || typeof fields.chatId === "string")
		{
			result.chatId = parseInt(fields.chatId);
		}
		if (typeof fields.quoteId === "number")
		{
			result.quoteId = parseInt(fields.quoteId);
		}
		if (typeof fields.editId === "number")
		{
			result.editId = parseInt(fields.editId);
		}

		if (typeof fields.counter === "number" || typeof fields.counter === "string")
		{
			result.counter = parseInt(fields.counter);
		}

		if (typeof fields.unread_id !== 'undefined')
		{
			fields.unreadId = fields.unread_id;
		}
		if (typeof fields.unreadId === "number" || typeof fields.unreadId === "string")
		{
			result.unreadId = parseInt(fields.unreadId);
		}

		if (typeof fields.unread_last_id !== 'undefined')
		{
			fields.unreadLastId = fields.unread_last_id;
		}
		if (typeof fields.unreadLastId === "number" || typeof fields.unreadLastId === "string")
		{
			result.unreadLastId = parseInt(fields.unreadLastId);
		}

		if (typeof fields.readed_list !== 'undefined')
		{
			fields.readedList = fields.readed_list;
		}
		if (typeof fields.readedList !== 'undefined')
		{
			result.readedList = [];

			if (fields.readedList instanceof Array)
			{
				fields.readedList.forEach(element =>
				{
					let record = {};
					if (typeof element.user_id !== 'undefined')
					{
						element.userId = element.user_id;
					}
					if (typeof element.user_name !== 'undefined')
					{
						element.userName = element.user_name;
					}
					if (typeof element.message_id !== 'undefined')
					{
						element.messageId = element.message_id;
					}

					if (!element.userId || !element.userName || !element.messageId)
					{
						return false;
					}

					record.userId = parseInt(element.userId);
					record.userName = element.userName.toString();
					record.messageId = parseInt(element.messageId);

					record.date = Utils.date.cast(element.date);

					result.readedList.push(record);
				})
			}
		}

		if (typeof fields.writing_list !== 'undefined')
		{
			fields.writingList = fields.writing_list;
		}
		if (typeof fields.writingList !== 'undefined')
		{
			result.writingList = [];

			if (fields.writingList instanceof Array)
			{
				fields.writingList.forEach(element =>
				{
					let record = {};

					if (!element.userId)
					{
						return false;
					}

					record.userId = parseInt(element.userId);
					record.userName = element.userName;

					result.writingList.push(record);
				})
			}
		}

		if (typeof fields.manager_list !== 'undefined')
		{
			fields.managerList = fields.manager_list;
		}
		if (typeof fields.managerList !== 'undefined')
		{
			result.managerList = [];

			if (fields.managerList instanceof Array)
			{
				fields.managerList.forEach(userId =>
				{
					userId = parseInt(userId);
					if (userId > 0)
					{
						result.managerList.push(userId);
					}
				});
			}
		}

		if (typeof fields.mute_list !== 'undefined')
		{
			fields.muteList = fields.mute_list;
		}
		if (typeof fields.muteList !== 'undefined')
		{
			result.muteList = [];

			if (fields.muteList instanceof Array)
			{
				fields.muteList.forEach(userId =>
				{
					userId = parseInt(userId);
					if (userId > 0)
					{
						result.muteList.push(userId);
					}
				});
			}
		}

		if (typeof fields.textareaMessage !== 'undefined')
		{
			result.textareaMessage = fields.textareaMessage.toString();
		}

		if (typeof fields.title !== 'undefined')
		{
			fields.name = fields.title;
		}
		if (typeof fields.name === "string" || typeof fields.name === "number")
		{
			result.name = fields.name.toString();
		}

		if (typeof fields.owner !== 'undefined')
		{
			fields.ownerId = fields.owner;
		}
		if (typeof fields.ownerId === "number" || typeof fields.ownerId === "string")
		{
			result.ownerId = parseInt(fields.ownerId);
		}

		if (typeof fields.extranet === "boolean")
		{
			result.extranet = fields.extranet;
		}

		if (typeof fields.avatar === 'string')
		{
			let avatar;

			if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))
			{
				avatar = '';
			}
			else if (fields.avatar.startsWith('http'))
			{
				avatar = fields.avatar;
			}
			else
			{
				avatar = options.host + fields.avatar;
			}

			if (avatar)
			{
				result.avatar = encodeURI(avatar);
			}
		}

		if (typeof fields.color === "string")
		{
			result.color = fields.color.toString();
		}

		if (typeof fields.type === "string")
		{
			result.type = fields.type.toString();
		}

		if (typeof fields.entity_type !== 'undefined')
		{
			fields.entityType = fields.entity_type;
		}
		if (typeof fields.entityType === "string")
		{
			result.entityType = fields.entityType.toString();
		}
		if (typeof fields.entity_id !== 'undefined')
		{
			fields.entityId = fields.entity_id;
		}
		if (typeof fields.entityId === "string" || typeof fields.entityId === "number")
		{
			result.entityId = fields.entityId.toString();
		}

		if (typeof fields.entity_data_1 !== 'undefined')
		{
			fields.entityData1 = fields.entity_data_1;
		}
		if (typeof fields.entityData1 === "string")
		{
			result.entityData1 = fields.entityData1.toString();
		}

		if (typeof fields.entity_data_2 !== 'undefined')
		{
			fields.entityData2 = fields.entity_data_2;
		}
		if (typeof fields.entityData2 === "string")
		{
			result.entityData2 = fields.entityData2.toString();
		}

		if (typeof fields.entity_data_3 !== 'undefined')
		{
			fields.entityData3 = fields.entity_data_3;
		}
		if (typeof fields.entityData3 === "string")
		{
			result.entityData3 = fields.entityData3.toString();
		}

		if (typeof fields.date_create !== 'undefined')
		{
			fields.dateCreate = fields.date_create;
		}

		if (typeof fields.dateCreate !== "undefined")
		{
			result.dateCreate = Utils.date.cast(fields.dateCreate);
		}

		if (typeof fields.dateLastOpen !== "undefined")
		{
			result.dateLastOpen = Utils.date.cast(fields.dateLastOpen);
		}

		if (typeof fields.restrictions === 'object' && fields.restrictions)
		{
			result.restrictions = {};

			if (typeof fields.restrictions.AVATAR === 'boolean')
			{
				result.restrictions.avatar = fields.restrictions.AVATAR;
			}

			if (typeof fields.restrictions.EXTEND === 'boolean')
			{
				result.restrictions.extend = fields.restrictions.EXTEND;
			}

			if (typeof fields.restrictions.LEAVE === 'boolean')
			{
				result.restrictions.leave = fields.restrictions.LEAVE;
			}

			if (typeof fields.restrictions.LEAVE_OWNER === 'boolean')
			{
				result.restrictions.leaveOwner = fields.restrictions.LEAVE_OWNER;
			}

			if (typeof fields.restrictions.RENAME === 'boolean')
			{
				result.restrictions.rename = fields.restrictions.RENAME;
			}
		}

		return result;
	}
}

export {DialoguesModel};src/users.js000066400000034256147732346740007067 0ustar00/**
 * Bitrix Messenger
 * User model (Vuex Builder model)
 *
 * @package bitrix
 * @subpackage im
 * @copyright 2001-2019 Bitrix
 */

import {Vue} from 'ui.vue';
import {VuexBuilderModel} from 'ui.vue.vuex';
import {Utils} from "im.lib.utils";

class UsersModel extends VuexBuilderModel
{
	getName()
	{
		return 'users';
	}

	getState()
	{
		this.startOnlineCheckInterval();

		return {
			host: this.getVariable('host', location.protocol+'//'+location.host),
			collection: {},
			onlineList: [],
			mobileOnlineList: [],
			absentList: []
		}
	}

	getElementState(params = {})
	{
		let {
			id = 0,
			name = this.getVariable('default.name', ''),
			firstName = this.getVariable('default.name', ''),
			lastName = '',
		} = params;

		return {
			id,
			name,
			firstName,
			lastName,
			workPosition: "",
			color: "#048bd0",
			avatar: "",
			gender: "M",
			birthday: false,
			isBirthday: false,
			extranet: false,
			network: false,
			bot: false,
			connector: false,
			externalAuthId: "default",
			status: "online",
			idle: false,
			lastActivityDate: false,
			mobileLastDate: false,
			isOnline: false,
			isMobileOnline: false,
			absent: false,
			isAbsent: false,
			departments: [],
			phones: {
				workPhone: "",
				personalMobile: "",
				personalPhone: "",
				innerPhone: "",
			},
			init: false
		};
	}

	getGetters()
	{
		return {
			get: state => (userId, getTemporary = false) =>
			{
				userId = parseInt(userId);

				if (userId <= 0)
				{
					if (getTemporary)
					{
						userId = 0;
					}
					else
					{
						return null;
					}
				}

				if (
					!getTemporary
					&& (!state.collection[userId] || !state.collection[userId].init)
				)
				{
					return null;
				}

				if (!state.collection[userId])
				{
					return this.getElementState({id: userId});
				}

				return state.collection[userId];
			},
			getBlank: state => params =>
			{
				return this.getElementState(params);
			}
		}
	}

	getActions()
	{
		return {
			set: (store, payload) =>
			{
				if (payload instanceof Array)
				{
					payload = payload.map(user => {
						return Object.assign(
							{},
							this.getElementState(),
							this.validate(Object.assign({}, user), {host: store.state.host}),
							{init: true}
						);
					});
				}
				else
				{
					let result = [];
					result.push(Object.assign(
						{},
						this.getElementState(),
						this.validate(Object.assign({}, payload), {host: store.state.host}),
						{init: true}
					));
					payload = result;
				}

				store.commit('set', payload);
			},
			update: (store, payload) =>
			{
				payload.id = parseInt(payload.id);

				if (
					typeof store.state.collection[payload.id] === 'undefined'
					|| store.state.collection[payload.id].init === false
				)
				{
					return true;
				}

				store.commit('update', {
					id : payload.id,
					fields : this.validate(Object.assign({}, payload.fields), {host: store.state.host})
				});

				return true;
			},
			delete: (store, payload) =>
			{
				store.commit('delete', payload.id);
				return true;
			},
			saveState: (store, payload) =>
			{
				store.commit('saveState', {});
				return true;
			},
		}
	}

	getMutations()
	{
		return {
			set: (state, payload) =>
			{
				for (let element of payload)
				{
					this.initCollection(state, {id: element.id});

					state.collection[element.id] = element;

					let status = Utils.user.getOnlineStatus(element);
					if (status.isOnline)
					{
						state.collection[element.id].isOnline = true;
						this.addToOnlineList(state, element.id);
					}

					let mobileStatus = Utils.user.isMobileActive(element);
					if (mobileStatus)
					{
						state.collection[element.id].isMobileOnline = true;
						this.addToMobileOnlineList(state, element.id);
					}

					if (element.birthday)
					{
						let today = Utils.date.format(new Date(), "d-m");
						if (element.birthday === today)
						{
							state.collection[element.id].isBirthday = true;

							let timeToNextMidnight = this.getTimeToNextMidnight();
							setTimeout(() => {
								state.collection[element.id].isBirthday = false;
							}, timeToNextMidnight);
						}
					}

					if (element.absent)
					{
						element.isAbsent = true;

						if (!state.absentList.includes(element.id))
						{
							this.addToAbsentList(state, element.id);

							let timeToNextMidnight = this.getTimeToNextMidnight();
							let timeToNextDay = 1000*60*60*24;
							setTimeout(() => {
								setInterval(() => this.startAbsentCheckInterval(state), timeToNextDay);
							}, timeToNextMidnight);
						}
					}

					this.saveState(state);
				}
			},
			update: (state, payload) =>
			{
				this.initCollection(state, payload);

				let lastActivityDate = state.collection[payload.id].lastActivityDate.getTime();
				let newActivityDate = payload.fields.lastActivityDate.getTime();

				if (newActivityDate > lastActivityDate)
				{
					let status = Utils.user.getOnlineStatus(payload.fields);
					if (status.isOnline)
					{
						state.collection[payload.id].isOnline = true;
						this.addToOnlineList(state, payload.fields.id);
					}
				}

				if (state.collection[payload.id].mobileLastDate !== payload.fields.mobileLastDate)
				{
					let mobileStatus = Utils.user.isMobileActive(payload.fields);
					if (mobileStatus)
					{
						state.collection[payload.id].isMobileOnline = true;
						this.addToMobileOnlineList(state, payload.fields.id);
					}
				}

				state.collection[payload.id] = Object.assign(
					state.collection[payload.id],
					payload.fields
				);

				this.saveState(state);
			},
			delete: (state, payload) =>
			{
				delete state.collection[payload.id];
				this.saveState(state);
			},
			saveState: (state, payload) =>
			{
				this.saveState(state);
			},
		}
	}

	initCollection(state, payload)
	{
		if (typeof state.collection[payload.id] !== 'undefined')
		{
			return true;
		}

		Vue.set(state.collection, payload.id, this.getElementState());

		return true;
	}

	getSaveUserList()
	{
		if (!this.db)
		{
			return [];
		}

		if (!this.store.getters['messages/getSaveUserList'])
		{
			return [];
		}

		let list = this.store.getters['messages/getSaveUserList']();
		if (!list)
		{
			return [];
		}

		return list;
	}

	getSaveTimeout()
	{
		return 250;
	}

	saveState(state)
	{
		if (!this.isSaveAvailable())
		{
			return false;
		}

		super.saveState(() =>
		{
			let list = this.getSaveUserList();
			if (!list)
			{
				return false;
			}

			let storedState = {
				collection: {},
			};

			let exceptionList = {
				absent: true,
				idle: true,
				mobileLastDate: true,
				lastActivityDate: true,
			};

			for (let chatId in list)
			{
				if (!list.hasOwnProperty(chatId))
				{
					continue;
				}

				list[chatId].forEach(userId =>
				{
					if (!state.collection[userId])
					{
						return false;
					}

					storedState.collection[userId] = this.cloneState(state.collection[userId], exceptionList);
				});
			}

			return storedState;
		});
	}

	validate(fields, options = {})
	{
		const result = {};

		options.host = options.host || this.getState().host;

		if (typeof fields.id === "number" || typeof fields.id === "string")
		{
			result.id = parseInt(fields.id);
		}

		if (typeof fields.first_name !== "undefined")
		{
			fields.firstName = fields.first_name;
		}
		if (typeof fields.last_name !== "undefined")
		{
			fields.lastName = fields.last_name;
		}
		if (typeof fields.name === "string" || typeof fields.name === "number")
		{
			result.name = fields.name.toString();

			if (typeof fields.firstName !== "undefined" && !fields.firstName)
			{
				let elementsOfName = fields.name.split(' ');
				if (elementsOfName.length > 1)
				{
					delete elementsOfName[elementsOfName.length-1];
					fields.firstName = elementsOfName.join(' ').trim();
				}
				else
				{
					fields.firstName = result.name;
				}
			}

			if (typeof fields.lastName !== "undefined" && !fields.lastName)
			{
				let elementsOfName = fields.name.split(' ');
				if (elementsOfName.length > 1)
				{
					fields.lastName = elementsOfName[elementsOfName.length-1];
				}
				else
				{
					fields.lastName = '';
				}
			}
		}

		if (typeof fields.firstName === "string" || typeof fields.name === "number")
		{
			result.firstName = fields.firstName.toString();
		}
		if (typeof fields.lastName === "string" || typeof fields.name === "number")
		{
			result.lastName = fields.lastName.toString();
		}

		if (typeof fields.work_position !== "undefined")
		{
			fields.workPosition = fields.work_position;
		}
		if (typeof fields.workPosition === "string" || typeof fields.workPosition === "number")
		{
			result.workPosition = fields.workPosition.toString();
		}

		if (typeof fields.color === "string")
		{
			result.color = fields.color;
		}

		if (typeof fields.avatar === 'string')
		{
			let avatar;

			if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))
			{
				avatar = '';
			}
			else if (fields.avatar.startsWith('http'))
			{
				avatar = fields.avatar;
			}
			else
			{
				avatar = options.host + fields.avatar;
			}

			if (avatar)
			{
				result.avatar = encodeURI(avatar);
			}
		}

		if (typeof fields.gender !== 'undefined')
		{
			result.gender = fields.gender === 'F'? 'F': 'M';
		}

		if (typeof fields.birthday === "string")
		{
			result.birthday = fields.birthday;
		}

		if (typeof fields.extranet === "boolean")
		{
			result.extranet = fields.extranet;
		}

		if (typeof fields.network === "boolean")
		{
			result.network = fields.network;
		}

		if (typeof fields.bot === "boolean")
		{
			result.bot = fields.bot;
		}

		if (typeof fields.connector === "boolean")
		{
			result.connector = fields.connector;
		}

		if (typeof fields.external_auth_id !== "undefined")
		{
			fields.externalAuthId = fields.external_auth_id;
		}
		if (typeof fields.externalAuthId === "string" && fields.externalAuthId)
		{
			result.externalAuthId = fields.externalAuthId;
		}

		if (typeof fields.status === "string")
		{
			result.status = fields.status;
		}

		if (typeof fields.idle !== "undefined")
		{
			result.idle = Utils.date.cast(fields.idle, false);
		}
		if (typeof fields.last_activity_date !== "undefined")
		{
			fields.lastActivityDate = fields.last_activity_date;
		}
		if (typeof fields.lastActivityDate !== "undefined")
		{
			result.lastActivityDate = Utils.date.cast(fields.lastActivityDate, false);
		}
		if (typeof fields.mobile_last_date !== "undefined")
		{
			fields.mobileLastDate = fields.mobile_last_date;
		}
		if (typeof fields.mobileLastDate !== "undefined")
		{
			result.mobileLastDate = Utils.date.cast(fields.mobileLastDate, false);
		}

		if (typeof fields.absent !== "undefined")
		{
			result.absent = Utils.date.cast(fields.absent, false);
		}

		if (typeof fields.departments !== 'undefined')
		{
			result.departments = [];

			if (fields.departments instanceof Array)
			{
				fields.departments.forEach(departmentId =>
				{
					departmentId = parseInt(departmentId);
					if (departmentId > 0)
					{
						result.departments.push(departmentId);
					}
				});
			}
		}

		if (typeof fields.phones === 'object' && fields.phones)
		{
			result.phones = {};

			if (typeof fields.phones.work_phone !== "undefined")
			{
				fields.phones.workPhone = fields.phones.work_phone;
			}
			if (typeof fields.phones.workPhone === 'string' || typeof fields.phones.workPhone === 'number')
			{
				result.phones.workPhone = fields.phones.workPhone.toString();
			}

			if (typeof fields.phones.personal_mobile !== "undefined")
			{
				fields.phones.personalMobile = fields.phones.personal_mobile;
			}
			if (typeof fields.phones.personalMobile === 'string' || typeof fields.phones.personalMobile === 'number')
			{
				result.phones.personalMobile = fields.phones.personalMobile.toString();
			}

			if (typeof fields.phones.personal_phone !== "undefined")
			{
				fields.phones.personalPhone = fields.phones.personal_phone;
			}
			if (typeof fields.phones.personalPhone === 'string' || typeof fields.phones.personalPhone === 'number')
			{
				result.phones.personalPhone = fields.phones.personalPhone.toString();
			}

			if (typeof fields.phones.inner_phone !== "undefined")
			{
				fields.phones.innerPhone = fields.phones.inner_phone;
			}
			if (typeof fields.phones.innerPhone === 'string' || typeof fields.phones.innerPhone === 'number')
			{
				result.phones.innerPhone = fields.phones.innerPhone.toString();
			}
		}

		return result;
	}

	addToOnlineList(state, id)
	{
		if (!state.onlineList.includes(id))
		{
			state.onlineList.push(id);
		}
	}

	addToMobileOnlineList(state, id)
	{
		if (!state.mobileOnlineList.includes(id))
		{
			state.mobileOnlineList.push(id);
		}
	}

	addToAbsentList(state, id)
	{
		if (!state.absentList.includes(id))
		{
			state.absentList.push(id);
		}
	}

	getTimeToNextMidnight()
	{
		let nextMidnight = new Date(new Date().setHours(24,0,0)).getTime();
		return nextMidnight - new Date();
	}

	startAbsentCheckInterval(state)
	{
		for (let userId of state.absentList)
		{
			let user = state.collection[userId];

			if (!user)
			{
				continue;
			}
			let currentTime = new Date().getTime();
			let absentEnd = new Date(state.collection[userId].absent).getTime();

			if (absentEnd <= currentTime)
			{
				state.absentList = state.absentList.filter(element => {
					return element !== userId;
				});
				user.isAbsent = false;
			}
		}
	}

	startOnlineCheckInterval()
	{
		const intervalTime = 60000;

		setInterval(() => {
			for (let userId of this.store.state.users.onlineList)
			{
				let user = this.store.state.users.collection[userId];

				if (!user)
				{
					continue;
				}

				let status = Utils.user.getOnlineStatus(user);
				if (status.isOnline)
				{
					user.isOnline = true;
				}
				else
				{
					user.isOnline = false;
					this.store.state.users.onlineList = this.store.state.users.onlineList.filter(element => {
						return element !== userId
					});
				}
			}

			for (let userId of this.store.state.users.mobileOnlineList)
			{
				let user = this.store.state.users.collection[userId];

				if (!user)
				{
					continue;
				}

				let mobileStatus = Utils.user.isMobileActive(user);
				if (mobileStatus)
				{
					user.isMobileOnline = true;
				}
				else
				{
					user.isMobileOnline = false;
					this.store.state.users.mobileOnlineList = this.store.state.users.mobileOnlineList.filter(element => {
						return element !== userId
					});
				}
			}
		}, intervalTime);
	}
}

export {UsersModel};dist/registry.bundle.js.map000066400000752157147732346740012005 0ustar00{"version":3,"file":"registry.bundle.js","sources":["../src/application.js","../src/messages.js","../src/dialogues.js","../src/users.js","../src/files.js","../src/recent.js"],"sourcesContent":["/**\n * Bitrix Messenger\n * Application model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport {DeviceType, DeviceOrientation} from 'im.const';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\n\nclass ApplicationModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'application';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\tcommon:\n\t\t\t{\n\t\t\t\thost: this.getVariable('common.host', location.protocol+'//'+location.host),\n\t\t\t\tsiteId: this.getVariable('common.siteId', 'default'),\n\t\t\t\tuserId: this.getVariable('common.userId', 0),\n\t\t\t\tlanguageId: this.getVariable('common.languageId', 'en'),\n\t\t\t},\n\t\t\tdialog:\n\t\t\t{\n\t\t\t\tdialogId: this.getVariable('dialog.dialogId', '0'),\n\t\t\t\tchatId: this.getVariable('dialog.chatId', 0),\n\t\t\t\tdiskFolderId: this.getVariable('dialog.diskFolderId', 0),\n\t\t\t\tmessageLimit: this.getVariable('dialog.messageLimit', 20),\n\t\t\t\tenableReadMessages: this.getVariable('dialog.enableReadMessages', true),\n\t\t\t\tmessageExtraCount: 0,\n\t\t\t},\n\t\t\tdisk:\n\t\t\t{\n\t\t\t\tenabled: false,\n\t\t\t\tmaxFileSize: 5242880,\n\t\t\t},\n\t\t\tmobile:\n\t\t\t{\n\t\t\t\tkeyboardShow: false,\n\t\t\t},\n\t\t\tdevice:\n\t\t\t{\n\t\t\t\ttype: this.getVariable('device.type', DeviceType.desktop),\n\t\t\t\torientation: this.getVariable('device.orientation', DeviceOrientation.portrait),\n\t\t\t},\n\t\t\toptions:\n\t\t\t{\n\t\t\t\tquoteEnable: this.getVariable('options.quoteEnable', true),\n\t\t\t\tquoteFromRight: this.getVariable('options.quoteFromRight', true),\n\t\t\t\tautoplayVideo: this.getVariable('options.autoplayVideo', true),\n\t\t\t\tdarkBackground: this.getVariable('options.darkBackground', false),\n\t\t\t\tshowSmiles: false\n\t\t\t},\n\t\t\terror:\n\t\t\t{\n\t\t\t\tactive: false,\n\t\t\t\tcode: '',\n\t\t\t\tdescription: '',\n\t\t\t},\n\t\t}\n\t}\n\n\tgetStateSaveException()\n\t{\n\t\treturn Object.assign({\n\t\t\tcommon: this.getVariable('saveException.common', null),\n\t\t\tdialog: this.getVariable('saveException.dialog', null),\n\t\t\tmobile: this.getVariable('saveException.mobile', null),\n\t\t\tdevice: this.getVariable('saveException.device', null),\n\t\t\terror: this.getVariable('saveException.error', null)\n\t\t});\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('set', this.validate(payload));\n\t\t\t},\n\t\t\tshowSmiles: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('showSmiles')\n\t\t\t},\n\t\t\thideSmiles: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('hideSmiles');\n\t\t\t}\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tlet hasChange = false;\n\t\t\t\tfor (let group in payload)\n\t\t\t\t{\n\t\t\t\t\tif (!payload.hasOwnProperty(group))\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let field in payload[group])\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!payload[group].hasOwnProperty(field))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate[group][field] = payload[group][field];\n\t\t\t\t\t\thasChange = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasChange && this.isSaveNeeded(payload))\n\t\t\t\t{\n\t\t\t\t\tthis.saveState(state);\n\t\t\t\t}\n\t\t\t},\n\t\t\tincreaseDialogExtraCount(state, payload = {})\n\t\t\t{\n\t\t\t\tlet {count = 1} = payload;\n\n\t\t\t\tstate.dialog.messageExtraCount += count;\n\t\t\t},\n\t\t\tdecreaseDialogExtraCount(state, payload = {})\n\t\t\t{\n\t\t\t\tlet {count = 1} = payload;\n\n\t\t\t\tlet newCounter = state.dialog.messageExtraCount - count;\n\t\t\t\tif (newCounter <= 0)\n\t\t\t\t{\n\t\t\t\t\tnewCounter = 0;\n\t\t\t\t}\n\n\t\t\t\tstate.dialog.messageExtraCount = newCounter;\n\t\t\t},\n\t\t\tclearDialogExtraCount(state)\n\t\t\t{\n\t\t\t\tstate.dialog.messageExtraCount = 0;\n\t\t\t},\n\t\t\tshowSmiles(state)\n\t\t\t{\n\t\t\t\tstate.options.showSmiles = true;\n\t\t\t},\n\t\t\thideSmiles(state)\n\t\t\t{\n\t\t\t\tstate.options.showSmiles = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidate(fields)\n\t{\n\t\tconst result = {};\n\n\t\tif (typeof fields.common === 'object' && fields.common)\n\t\t{\n\t\t\tresult.common = {};\n\n\t\t\tif (typeof fields.common.userId === 'number')\n\t\t\t{\n\t\t\t\tresult.common.userId = fields.common.userId;\n\t\t\t}\n\n\t\t\tif (typeof fields.common.languageId === 'string')\n\t\t\t{\n\t\t\t\tresult.common.languageId = fields.common.languageId;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.dialog === 'object' && fields.dialog)\n\t\t{\n\t\t\tresult.dialog = {};\n\n\t\t\tif (typeof fields.dialog.dialogId === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.dialogId = fields.dialog.dialogId.toString();\n\t\t\t\tresult.dialog.chatId = 0;\n\t\t\t}\n\t\t\telse if (typeof fields.dialog.dialogId === 'string')\n\t\t\t{\n\t\t\t\tresult.dialog.dialogId = fields.dialog.dialogId;\n\n\t\t\t\tif (typeof fields.dialog.chatId !== 'number')\n\t\t\t\t{\n\t\t\t\t\tlet chatId = fields.dialog.dialogId;\n\t\t\t\t\tif (chatId.startsWith('chat'))\n\t\t\t\t\t{\n\t\t\t\t\t\tchatId = fields.dialog.dialogId.substr(4);\n\t\t\t\t\t}\n\n\t\t\t\t\tchatId = parseInt(chatId);\n\n\t\t\t\t\tresult.dialog.chatId = !isNaN(chatId)? chatId: 0;\n\t\t\t\t\tfields.dialog.chatId = result.dialog.chatId;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.chatId === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.chatId = fields.dialog.chatId;\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.diskFolderId === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.diskFolderId = fields.dialog.diskFolderId;\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.messageLimit === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.messageLimit = fields.dialog.messageLimit;\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.messageExtraCount === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.messageExtraCount = fields.dialog.messageExtraCount;\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.enableReadMessages === 'boolean')\n\t\t\t{\n\t\t\t\tresult.dialog.enableReadMessages = fields.dialog.enableReadMessages;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.disk === 'object' && fields.disk)\n\t\t{\n\t\t\tresult.disk = {};\n\n\t\t\tif (typeof fields.disk.enabled === 'boolean')\n\t\t\t{\n\t\t\t\tresult.disk.enabled = fields.disk.enabled;\n\t\t\t}\n\n\t\t\tif (typeof fields.disk.maxFileSize === 'number')\n\t\t\t{\n\t\t\t\tresult.disk.maxFileSize = fields.disk.maxFileSize;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.mobile === 'object' && fields.mobile)\n\t\t{\n\t\t\tresult.mobile = {};\n\n\t\t\tif (typeof fields.mobile.keyboardShow === 'boolean')\n\t\t\t{\n\t\t\t\tresult.mobile.keyboardShow = fields.mobile.keyboardShow;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.device === 'object' && fields.device)\n\t\t{\n\t\t\tresult.device = {};\n\n\t\t\tif (typeof fields.device.type === 'string' && typeof DeviceType[fields.device.type] !== 'undefined')\n\t\t\t{\n\t\t\t\tresult.device.type = fields.device.type;\n\t\t\t}\n\n\t\t\tif (typeof fields.device.orientation === 'string' && typeof DeviceOrientation[fields.device.orientation] !== 'undefined')\n\t\t\t{\n\t\t\t\tresult.device.orientation = fields.device.orientation;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.error === 'object' && fields.error)\n\t\t{\n\t\t\tif (typeof fields.error.active === 'boolean')\n\t\t\t{\n\t\t\t\tresult.error = {\n\t\t\t\t\tactive: fields.error.active,\n\t\t\t\t\tcode: fields.error.code.toString() || '',\n\t\t\t\t\tdescription: fields.error.description.toString() || '',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport {ApplicationModel};","/**\n * Bitrix Messenger\n * Message model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {MutationType, StorageLimit} from 'im.const';\nimport {Utils} from \"im.lib.utils\";\n\nconst IntersectionType = {\n\tempty: 'empty',\n\tequal: 'equal',\n\tnone: 'none',\n\tfound: 'found',\n\tfoundReverse: 'foundReverse',\n};\n\nclass MessagesModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'messages';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\tcreated: 0,\n\t\t\tcollection: {},\n\t\t\tmutationType: {},\n\t\t\tsaveMessageList: {},\n\t\t\tsaveFileList: {},\n\t\t\tsaveUserList: {},\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t}\n\t}\n\n\tgetElementState()\n\t{\n\t\treturn {\n\t\t\ttemplateId: 0,\n\t\t\ttemplateType: 'message',\n\n\t\t\tid: 0,\n\t\t\tchatId: 0,\n\t\t\tauthorId: 0,\n\t\t\tdate: new Date(),\n\t\t\ttext: \"\",\n\t\t\ttextConverted: \"\",\n\t\t\tparams: {\n\t\t\t\tTYPE : 'default',\n\t\t\t\tCOMPONENT_ID : 'bx-im-view-message',\n\t\t\t},\n\n\t\t\tpush: false,\n\t\t\tunread: false,\n\t\t\tsending: false,\n\t\t\terror: false,\n\t\t\tretry: false,\n\t\t\tblink: false,\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\n\t\t\tgetMutationType: state => chatId =>\n\t\t\t{\n\t\t\t\tif (!state.mutationType[chatId])\n\t\t\t\t{\n\t\t\t\t\treturn {initialType: MutationType.none, appliedType: MutationType.none};\n\t\t\t\t}\n\n\t\t\t\treturn state.mutationType[chatId];\n\t\t\t},\n\t\t\tgetLastId: state => chatId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[chatId] || state.collection[chatId].length <= 0)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tlet lastId = 0;\n\n\t\t\t\tfor (let i = 0; i < state.collection[chatId].length; i++)\n\t\t\t\t{\n\t\t\t\t\tlet element = state.collection[chatId][i];\n\t\t\t\t\tif (\n\t\t\t\t\t\telement.push\n\t\t\t\t\t\t|| element.sending\n\t\t\t\t\t\t|| element.id.toString().startsWith('temporary')\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (lastId < element.id)\n\t\t\t\t\t{\n\t\t\t\t\t\tlastId = element.id;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn lastId? lastId: null;\n\t\t\t},\n\t\t\tgetMessage: state => (chatId, messageId) =>\n\t\t\t{\n\t\t\t\tif (!state.collection[chatId] || state.collection[chatId].length <= 0)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tfor (let index = state.collection[chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tif (state.collection[chatId][index].id === messageId)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn state.collection[chatId][index];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tget: state => chatId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[chatId] || state.collection[chatId].length <= 0)\n\t\t\t\t{\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[chatId];\n\t\t\t},\n\t\t\tgetBlank: state => params =>\n\t\t\t{\n\t\t\t\treturn this.getElementState();\n\t\t\t},\n\t\t\tgetSaveFileList: state => params =>\n\t\t\t{\n\t\t\t\treturn state.saveFileList;\n\t\t\t},\n\t\t\tgetSaveUserList: state => params =>\n\t\t\t{\n\t\t\t\treturn state.saveUserList;\n\t\t\t},\n\t\t}\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tadd: (store, payload) =>\n\t\t\t{\n\t\t\t\tlet result = this.validate(Object.assign({}, payload));\n\t\t\t\tresult.params = Object.assign({}, this.getElementState().params, result.params);\n\t\t\t\tresult.id = 'temporary' + (new Date).getTime() + store.state.created;\n\t\t\t\tresult.templateId = result.id;\n\t\t\t\tresult.unread = false;\n\n\t\t\t\tstore.commit('add', Object.assign({}, this.getElementState(), result));\n\n\t\t\t\tif (payload.sending !== false)\n\t\t\t\t{\n\t\t\t\t\tstore.dispatch('actionStart', {\n\t\t\t\t\t\tid: result.id,\n\t\t\t\t\t\tchatId: result.chatId,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn result.id;\n\t\t\t},\n\t\t\tactionStart: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(payload.id))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\tfields : {sending: true}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tactionError: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(payload.id))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\tfields : {sending: false, error: true, retry: payload.retry !== false}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tactionFinish: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(payload.id))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\tfields : {sending: false, error: false, retry: false}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(message => this.prepareMessage(message, {host: store.state.host}));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = this.prepareMessage(payload, {host: store.state.host});\n\t\t\t\t\t(payload = []).push(result);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tinsertType : MutationType.set,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetAfter: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(message => this.prepareMessage(message));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = this.prepareMessage(payload);\n\t\t\t\t\t(payload = []).push(result);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tinsertType : MutationType.setAfter,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetBefore: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(message => this.prepareMessage(message));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = this.prepareMessage(payload);\n\t\t\t\t\t(payload = []).push(result);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tinsertType : MutationType.setBefore,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(payload.id))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\t\t\t\tif (/^\\d+$/.test(payload.chatId))\n\t\t\t\t{\n\t\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('initCollection', {chatId: payload.chatId});\n\n\t\t\t\tlet index = store.state.collection[payload.chatId].findIndex(el => el.id === payload.id);\n\t\t\t\tif (index < 0)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tlet result = this.validate(Object.assign({}, payload.fields));\n\n\t\t\t\tif (result.params)\n\t\t\t\t{\n\t\t\t\t\tresult.params = Object.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tthis.getElementState().params,\n\t\t\t\t\t\tstore.state.collection[payload.chatId][index].params,\n\t\t\t\t\t\tresult.params\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tid : payload.id,\n\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\tindex : index,\n\t\t\t\t\tfields : result\n\t\t\t\t});\n\n\t\t\t\tif (payload.fields.blink)\n\t\t\t\t{\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\t\tfields : {blink: false}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (!(payload.id instanceof Array))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = [payload.id];\n\t\t\t\t}\n\n\t\t\t\tpayload.id = payload.id.map(id => {\n\t\t\t\t\tif (/^\\d+$/.test(id))\n\t\t\t\t\t{\n\t\t\t\t\t\tid = parseInt(id);\n\t\t\t\t\t}\n\t\t\t\t\treturn id;\n\t\t\t\t});\n\n\t\t\t\tstore.commit('delete', {\n\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\telements : payload.id,\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tclear: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tstore.commit('clear', {\n\t\t\t\t\tchatId : payload.chatId\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tapplyMutationType: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tstore.commit('applyMutationType', {\n\t\t\t\t\tchatId : payload.chatId\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\treadMessages: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.readId = parseInt(payload.readId) || 0;\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tif (typeof store.state.collection[payload.chatId] === 'undefined')\n\t\t\t\t{\n\t\t\t\t\treturn {count: 0}\n\t\t\t\t}\n\n\t\t\t\tlet count = 0;\n\t\t\t\tfor (let index = store.state.collection[payload.chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tlet element = store.state.collection[payload.chatId][index];\n\t\t\t\t\tif (!element.unread)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (payload.readId === 0 || element.id <= payload.readId)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstore.commit('readMessages', {\n\t\t\t\t\tchatId: payload.chatId,\n\t\t\t\t\treadId: payload.readId,\n\t\t\t\t});\n\n\t\t\t\treturn {count};\n\t\t\t},\n\t\t\tunreadMessages: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.unreadId = parseInt(payload.unreadId) || 0;\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tif (typeof store.state.collection[payload.chatId] === 'undefined' || !payload.unreadId)\n\t\t\t\t{\n\t\t\t\t\treturn {count: 0}\n\t\t\t\t}\n\n\t\t\t\tlet count = 0;\n\t\t\t\tfor (let index = store.state.collection[payload.chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tlet element = store.state.collection[payload.chatId][index];\n\t\t\t\t\tif (element.unread)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (element.id >= payload.unreadId)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstore.commit('unreadMessages', {\n\t\t\t\t\tchatId: payload.chatId,\n\t\t\t\t\tunreadId: payload.unreadId,\n\t\t\t\t});\n\n\t\t\t\treturn {count};\n\t\t\t},\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tinitCollection: (state, payload) =>\n\t\t\t{\n\t\t\t\treturn this.initCollection(state, payload);\n\t\t\t},\n\t\t\tadd: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\t\t\t\tthis.setMutationType(state, {chatId: payload.chatId, initialType: MutationType.add});\n\n\t\t\t\tstate.collection[payload.chatId].push(payload);\n\t\t\t\tstate.saveMessageList[payload.chatId].push(payload.id);\n\n\t\t\t\tstate.created += 1;\n\n\t\t\t\tthis.saveState(state, payload.chatId);\n\t\t\t},\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tlet chats = [];\n\t\t\t\tlet chatsSave = [];\n\t\t\t\tlet mutationType = {};\n\n\t\t\t\tmutationType.initialType = payload.insertType;\n\n\t\t\t\tif (payload.insertType === MutationType.set)\n\t\t\t\t{\n\t\t\t\t\tpayload.insertType = MutationType.setAfter;\n\n\t\t\t\t\tlet elements = {};\n\t\t\t\t\tpayload.data.forEach(element => {\n\t\t\t\t\t\tif (!elements[element.chatId])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\telements[element.chatId] = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telements[element.chatId].push(element.id);\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let chatId in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!elements.hasOwnProperty(chatId))\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tthis.initCollection(state, {chatId});\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tstate.saveMessageList[chatId].length > elements[chatId].length\n\t\t\t\t\t\t\t|| elements[chatId].length < StorageLimit.messages\n\t\t\t\t\t\t)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection[chatId] = state.collection[chatId].filter(element => elements[chatId].includes(element.id));\n\t\t\t\t\t\t\tstate.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => elements[chatId].includes(id));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet intersection = this.manageCacheBeforeSet(\n\t\t\t\t\t\t\t[...state.saveMessageList[chatId].reverse()],\n\t\t\t\t\t\t\telements[chatId]\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (intersection.type === IntersectionType.none)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (intersection.foundElements.length > 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstate.collection[chatId] = state.collection[chatId].filter(element => !intersection.foundElements.includes(element.id));\n\t\t\t\t\t\t\t\tstate.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => !intersection.foundElements.includes(id));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.removeIntersectionCacheElements = state.collection[chatId].map(element => element.id);\n\n\t\t\t\t\t\t\tclearTimeout(this.removeIntersectionCacheTimeout);\n\t\t\t\t\t\t\tthis.removeIntersectionCacheTimeout = setTimeout(() => {\n\t\t\t\t\t\t\t\tstate.collection[chatId] = state.collection[chatId].filter(element => !this.removeIntersectionCacheElements.includes(element.id));\n\t\t\t\t\t\t\t\tstate.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => !this.removeIntersectionCacheElements.includes(id));\n\t\t\t\t\t\t\t\tthis.removeIntersectionCacheElements = [];\n\t\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (intersection.type === IntersectionType.foundReverse)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpayload.insertType = MutationType.setBefore;\n\t\t\t\t\t\t\t\tpayload.data = payload.data.reverse();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (intersection.foundElements.length > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (intersection.type === IntersectionType.found && intersection.noneElements[0])\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmutationType.scrollStickToTop = false;\n\t\t\t\t\t\t\t\tmutationType.scrollMessageId = intersection.foundElements[intersection.foundElements.length-1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmutationType.scrollStickToTop = false;\n\t\t\t\t\t\t\t\tmutationType.scrollMessageId = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (intersection.type === IntersectionType.none)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmutationType.scrollStickToTop = false;\n\t\t\t\t\t\t\tmutationType.scrollMessageId = payload.data[0].id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmutationType.appliedType = payload.insertType;\n\n\t\t\t\tfor (let element of payload.data)\n\t\t\t\t{\n\t\t\t\t\tthis.initCollection(state, {chatId: element.chatId});\n\n\t\t\t\t\tlet index = state.collection[element.chatId].findIndex(el => el.id === element.id);\n\t\t\t\t\tif (index > -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tdelete element.templateId;\n\n\t\t\t\t\t\tstate.collection[element.chatId][index] = Object.assign(\n\t\t\t\t\t\t\tstate.collection[element.chatId][index],\n\t\t\t\t\t\t\telement\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.insertType === MutationType.setBefore)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.chatId].unshift(element);\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.insertType === MutationType.setAfter)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.chatId].push(element);\n\t\t\t\t\t}\n\n\t\t\t\t\tchats.push(element.chatId);\n\n\t\t\t\t\tif (this.store.getters['dialogues/canSaveChat'] && this.store.getters['dialogues/canSaveChat'](element.chatId))\n\t\t\t\t\t{\n\t\t\t\t\t\tchatsSave.push(element.chatId);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tchats = [...new Set(chats)];\n\t\t\t\tchatsSave = [...new Set(chatsSave)];\n\n\t\t\t\t// check array for correct order of messages\n\t\t\t\tif (mutationType.initialType === MutationType.set)\n\t\t\t\t{\n\t\t\t\t\tchats.forEach(chatId =>\n\t\t\t\t\t{\n\t\t\t\t\t\tlet lastElementId = 0;\n\t\t\t\t\t\tlet needApplySort = false;\n\t\t\t\t\t\tfor (let i = 0; i < state.collection[chatId].length; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet element = state.collection[chatId][i];\n\t\t\t\t\t\t\tif (element.id < lastElementId)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tneedApplySort = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlastElementId = element.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (needApplySort)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection[chatId].sort((a, b) => a.id - b.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tchats.forEach(chatId => {\n\t\t\t\t\tthis.setMutationType(state, {chatId: chatId, ...mutationType});\n\t\t\t\t});\n\n\t\t\t\tif (mutationType.initialType !== MutationType.setBefore)\n\t\t\t\t{\n\t\t\t\t\tchatsSave.forEach(chatId => {\n\t\t\t\t\t\tthis.saveState(state, chatId);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tupdate: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\n\t\t\t\tlet index = -1;\n\t\t\t\tif (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index])\n\t\t\t\t{\n\t\t\t\t\tindex = payload.index;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tindex = state.collection[payload.chatId].findIndex(el => el.id === payload.id);\n\t\t\t\t}\n\n\t\t\t\tif (index >= 0)\n\t\t\t\t{\n\t\t\t\t\tlet isSaveState = (\n\t\t\t\t\t\tstate.saveMessageList[payload.chatId].includes(state.collection[payload.chatId][index].id)\n\t\t\t\t\t\t|| payload.fields.id && !payload.fields.id.toString().startsWith('temporary') && state.collection[payload.chatId][index].id.toString().startsWith('temporary')\n\t\t\t\t\t);\n\n\t\t\t\t\tdelete payload.fields.templateId;\n\n\t\t\t\t\tstate.collection[payload.chatId][index] = Object.assign(\n\t\t\t\t\t\tstate.collection[payload.chatId][index],\n\t\t\t\t\t\tpayload.fields\n\t\t\t\t\t);\n\n\t\t\t\t\tif (isSaveState)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.saveState(state, payload.chatId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\t\t\t\tthis.setMutationType(state, {chatId: payload.chatId, initialType: MutationType.delete});\n\n\t\t\t\tstate.collection[payload.chatId] = state.collection[payload.chatId].filter(element => !payload.elements.includes(element.id));\n\n\t\t\t\tif (state.saveMessageList[payload.chatId].length > 0)\n\t\t\t\t{\n\t\t\t\t\tfor (let id of payload.elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (state.saveMessageList[payload.chatId].includes(id))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.saveState(state, payload.chatId);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tclear: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\t\t\t\tthis.setMutationType(state, {chatId: payload.chatId, initialType: 'clear'});\n\n\t\t\t\tstate.collection[payload.chatId] = [];\n\t\t\t\tstate.saveMessageList[payload.chatId] = [];\n\t\t\t},\n\t\t\tapplyMutationType: (state, payload) =>\n\t\t\t{\n\t\t\t\tif (typeof state.mutationType[payload.chatId] === 'undefined')\n\t\t\t\t{\n\t\t\t\t\tVue.set(state.mutationType, payload.chatId, {applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: 0, scrollMessageId: 0});\n\t\t\t\t}\n\n\t\t\t\tstate.mutationType[payload.chatId].applied = true;\n\t\t\t},\n\t\t\treadMessages: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\n\t\t\t\tlet saveNeeded = false;\n\t\t\t\tfor (let index = state.collection[payload.chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tlet element = state.collection[payload.chatId][index];\n\t\t\t\t\tif (!element.unread)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (payload.readId === 0 || element.id <= payload.readId)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[payload.chatId][index] = Object.assign(\n\t\t\t\t\t\t\tstate.collection[payload.chatId][index],\n\t\t\t\t\t\t\t{unread: false}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsaveNeeded = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (saveNeeded)\n\t\t\t\t{\n\t\t\t\t\tthis.saveState(state, payload.chatId);\n\t\t\t\t}\n\t\t\t},\n\t\t\tunreadMessages: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\n\t\t\t\tlet saveNeeded = false;\n\t\t\t\tfor (let index = state.collection[payload.chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tlet element = state.collection[payload.chatId][index];\n\t\t\t\t\tif (element.unread)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (element.id >= payload.unreadId)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[payload.chatId][index] = Object.assign(\n\t\t\t\t\t\t\tstate.collection[payload.chatId][index],\n\t\t\t\t\t\t\t{unread: true}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsaveNeeded = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (saveNeeded)\n\t\t\t\t{\n\t\t\t\t\tthis.saveState(state, payload.chatId);\n\t\t\t\t\tthis.updateSubordinateStates();\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\tinitCollection(state, payload)\n\t{\n\t\tif (typeof payload.chatId === 'undefined')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\ttypeof payload.chatId === 'undefined'\n\t\t\t|| typeof state.collection[payload.chatId] !== 'undefined'\n\t\t)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tVue.set(state.collection, payload.chatId, payload.messages? [].concat(payload.messages): []);\n\t\tVue.set(state.mutationType, payload.chatId, {applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: 0, scrollMessageId: 0});\n\t\tVue.set(state.saveMessageList, payload.chatId, []);\n\t\tVue.set(state.saveFileList, payload.chatId, []);\n\t\tVue.set(state.saveUserList, payload.chatId, []);\n\n\t\treturn true;\n\t}\n\n\tsetMutationType(state, payload)\n\t{\n\t\tlet mutationType = {\n\t\t\tapplied: false,\n\t\t\tinitialType: MutationType.none,\n\t\t\tappliedType: MutationType.none,\n\t\t\tscrollStickToTop: false,\n\t\t\tscrollMessageId: 0\n\t\t};\n\n\t\tif (payload.initialType && !payload.appliedType)\n\t\t{\n\t\t\tpayload.appliedType = payload.initialType;\n\t\t}\n\n\t\tif (typeof state.mutationType[payload.chatId] === 'undefined')\n\t\t{\n\t\t\tVue.set(state.mutationType, payload.chatId, mutationType);\n\t\t}\n\n\t\tstate.mutationType[payload.chatId] = {...mutationType, ...payload};\n\n\t\treturn true;\n\t}\n\n\tprepareMessage(message, options = {})\n\t{\n\t\tlet result = this.validate(Object.assign({}, message), options);\n\n\t\tresult.params = Object.assign({}, this.getElementState().params, result.params);\n\t\tresult.templateId = result.id;\n\n\t\treturn Object.assign({}, this.getElementState(), result);\n\t}\n\n\tmanageCacheBeforeSet(cache, elements, recursive = false)\n\t{\n\t\tlet result = {\n\t\t\ttype: IntersectionType.empty,\n\t\t\tfoundElements: [],\n\t\t\tnoneElements: []\n\t\t};\n\n\t\tif (!cache || cache.length <= 0)\n\t\t{\n\t\t\treturn result;\n\t\t}\n\n\t\tfor (let id of elements)\n\t\t{\n\t\t\tif (cache.includes(id))\n\t\t\t{\n\t\t\t\tif (result.type === IntersectionType.empty)\n\t\t\t\t{\n\t\t\t\t\tresult.type = IntersectionType.found;\n\t\t\t\t}\n\t\t\t\tresult.foundElements.push(id);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (result.type === IntersectionType.empty)\n\t\t\t\t{\n\t\t\t\t\tresult.type = IntersectionType.none;\n\t\t\t\t}\n\t\t\t\tresult.noneElements.push(id);\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tresult.type === IntersectionType.found\n\t\t\t&& cache.length === elements.length\n\t\t\t&& result.foundElements.length === elements.length\n\t\t)\n\t\t{\n\t\t\tresult.type = IntersectionType.equal;\n\t\t}\n\t\telse if (\n\t\t\tresult.type === IntersectionType.none\n\t\t\t&& !recursive\n\t\t\t&& result.foundElements.length > 0\n\t\t)\n\t\t{\n\t\t\tlet reverseResult = this.manageCacheBeforeSet(cache.reverse(), elements.reverse(), true);\n\t\t\tif (reverseResult.type === IntersectionType.found)\n\t\t\t{\n\t\t\t\treverseResult.type = IntersectionType.foundReverse;\n\t\t\t\treturn reverseResult;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tupdateSaveLists(state, chatId)\n\t{\n\t\tif (!this.isSaveAvailable())\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tif (\n\t\t\t!chatId\n\t\t\t|| !this.store.getters['dialogues/canSaveChat']\n\t\t\t|| !this.store.getters['dialogues/canSaveChat'](chatId)\n\t\t)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.initCollection(state, {chatId: chatId});\n\n\t\tlet count = 0;\n\t\tlet saveMessageList = [];\n\t\tlet saveFileList = [];\n\t\tlet saveUserList = [];\n\n\t\tlet dialog = this.store.getters['dialogues/getByChatId'](chatId);\n\t\tif (dialog && dialog.type === 'private')\n\t\t{\n\t\t\tsaveUserList.push(parseInt(dialog.dialogId));\n\t\t}\n\n\t\tfor (let index = state.collection[chatId].length-1; index >= 0; index--)\n\t\t{\n\t\t\tif (state.collection[chatId][index].id.toString().startsWith('temporary'))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (count >= StorageLimit.messages && !state.collection[chatId][index].unread)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tsaveMessageList.unshift(state.collection[chatId][index].id);\n\n\t\t\tcount++;\n\t\t}\n\n\t\tsaveMessageList = saveMessageList.slice(0, StorageLimit.messages);\n\n\t\tstate.collection[chatId].filter(element => saveMessageList.includes(element.id)).forEach(element =>\n\t\t{\n\t\t\tif (element.authorId > 0)\n\t\t\t{\n\t\t\t\tsaveUserList.push(element.authorId);\n\t\t\t}\n\n\t\t\tif (element.params.FILE_ID instanceof Array)\n\t\t\t{\n\t\t\t\tsaveFileList = element.params.FILE_ID.concat(saveFileList);\n\t\t\t}\n\t\t});\n\n\t\tstate.saveMessageList[chatId] = saveMessageList;\n\t\tstate.saveFileList[chatId] = [...new Set(saveFileList)];\n\t\tstate.saveUserList[chatId] = [...new Set(saveUserList)];\n\n\t\treturn true;\n\t}\n\n\tgetSaveTimeout()\n\t{\n\t\treturn 150;\n\t}\n\n\tsaveState(state, chatId)\n\t{\n\t\tif (!this.updateSaveLists(state, chatId))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tsuper.saveState(() =>\n\t\t{\n\t\t\tlet storedState = {\n\t\t\t\tcollection: {},\n\t\t\t\tsaveMessageList: {},\n\t\t\t\tsaveUserList: {},\n\t\t\t\tsaveFileList: {},\n\t\t\t};\n\n\t\t\tfor (let chatId in state.saveMessageList)\n\t\t\t{\n\t\t\t\tif (!state.saveMessageList.hasOwnProperty(chatId))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!state.collection[chatId])\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!storedState.collection[chatId])\n\t\t\t\t{\n\t\t\t\t\tstoredState.collection[chatId] = [];\n\t\t\t\t}\n\n\t\t\t\tstate.collection[chatId]\n\t\t\t\t\t.filter(element => state.saveMessageList[chatId].includes(element.id))\n\t\t\t\t\t.forEach(element => storedState.collection[chatId].push(element))\n\t\t\t\t;\n\n\t\t\t\tstoredState.saveMessageList[chatId] = state.saveMessageList[chatId];\n\t\t\t\tstoredState.saveFileList[chatId] = state.saveFileList[chatId];\n\t\t\t\tstoredState.saveUserList[chatId] = state.saveUserList[chatId];\n\t\t\t}\n\n\t\t\treturn storedState;\n\t\t});\n\t}\n\n\tupdateSubordinateStates()\n\t{\n\t\tthis.store.dispatch('users/saveState');\n\t\tthis.store.dispatch('files/saveState');\n\t}\n\n\tvalidate(fields, options)\n\t{\n\t\tconst result = {};\n\n\t\tif (typeof fields.id === \"number\")\n\t\t{\n\t\t\tresult.id = fields.id;\n\t\t}\n\t\telse if (typeof fields.id === \"string\")\n\t\t{\n\t\t\tif (fields.id.startsWith('temporary'))\n\t\t\t{\n\t\t\t\tresult.id = fields.id;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.id = parseInt(fields.id);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.templateId === \"number\")\n\t\t{\n\t\t\tresult.templateId = fields.templateId;\n\t\t}\n\t\telse if (typeof fields.templateId === \"string\")\n\t\t{\n\t\t\tif (fields.templateId.startsWith('temporary'))\n\t\t\t{\n\t\t\t\tresult.templateId = fields.templateId;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.templateId = parseInt(fields.templateId);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.chat_id !== 'undefined')\n\t\t{\n\t\t\tfields.chatId = fields.chat_id;\n\t\t}\n\t\tif (typeof fields.chatId === \"number\" || typeof fields.chatId === \"string\")\n\t\t{\n\t\t\tresult.chatId = parseInt(fields.chatId);\n\t\t}\n\t\tif (typeof fields.date !== \"undefined\")\n\t\t{\n\t\t\tresult.date = Utils.date.cast(fields.date);\n\t\t}\n\n\t\t// previous P&P format\n\t\tif (typeof fields.textOriginal === \"string\" || typeof fields.textOriginal === \"number\")\n\t\t{\n\t\t\tresult.text = fields.textOriginal.toString();\n\n\t\t\tif (typeof fields.text === \"string\" || typeof fields.text === \"number\")\n\t\t\t{\n\t\t\t\tresult.textConverted = this.convertToHtml({\n\t\t\t\t\ttext: fields.text.toString(),\n\t\t\t\t\tisConverted: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse // modern format\n\t\t{\n\t\t\tif (typeof fields.text_converted !== 'undefined')\n\t\t\t{\n\t\t\t\tfields.textConverted = fields.text_converted;\n\t\t\t}\n\t\t\tif (typeof fields.textConverted === \"string\" || typeof fields.textConverted === \"number\")\n\t\t\t{\n\t\t\t\tresult.textConverted = fields.textConverted.toString();\n\t\t\t}\n\t\t\tif (typeof fields.text === \"string\" || typeof fields.text === \"number\")\n\t\t\t{\n\t\t\t\tresult.text = fields.text.toString();\n\n\t\t\t\tlet isConverted = typeof result.textConverted !== 'undefined';\n\n\t\t\t\tresult.textConverted = this.convertToHtml({\n\t\t\t\t\ttext: isConverted? result.textConverted: result.text,\n\t\t\t\t\tisConverted\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.senderId !== 'undefined')\n\t\t{\n\t\t\tfields.authorId = fields.senderId;\n\t\t}\n\t\telse if (typeof fields.author_id !== 'undefined')\n\t\t{\n\t\t\tfields.authorId = fields.author_id;\n\t\t}\n\t\tif (typeof fields.authorId === \"number\" || typeof fields.authorId === \"string\")\n\t\t{\n\t\t\tif (fields.system === true || fields.system === 'Y')\n\t\t\t{\n\t\t\t\tresult.authorId = 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.authorId = parseInt(fields.authorId);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.params === \"object\" && fields.params !== null)\n\t\t{\n\t\t\tconst params = this.validateParams(fields.params, options);\n\t\t\tif (params)\n\t\t\t{\n\t\t\t\tresult.params = params;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.push === \"boolean\")\n\t\t{\n\t\t\tresult.push = fields.push;\n\t\t}\n\n\t\tif (typeof fields.sending === \"boolean\")\n\t\t{\n\t\t\tresult.sending = fields.sending;\n\t\t}\n\n\t\tif (typeof fields.unread === \"boolean\")\n\t\t{\n\t\t\tresult.unread = fields.unread;\n\t\t}\n\n\t\tif (typeof fields.blink === \"boolean\")\n\t\t{\n\t\t\tresult.blink = fields.blink;\n\t\t}\n\n\t\tif (typeof fields.error === \"boolean\" || typeof fields.error === \"string\")\n\t\t{\n\t\t\tresult.error = fields.error;\n\t\t}\n\n\t\tif (typeof fields.retry === \"boolean\")\n\t\t{\n\t\t\tresult.retry = fields.retry;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tvalidateParams(params, options)\n\t{\n\t\tconst result = {};\n\t\ttry\n\t\t{\n\t\t\tfor (let field in params)\n\t\t\t{\n\t\t\t\tif (!params.hasOwnProperty(field))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (field === 'COMPONENT_ID')\n\t\t\t\t{\n\t\t\t\t\tif (typeof params[field] === \"string\" && BX.Vue.isComponent(params[field]))\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[field] = params[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (field === 'LIKE')\n\t\t\t\t{\n\t\t\t\t\tif (params[field] instanceof Array)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult['REACTION'] = {like: params[field].map(element => parseInt(element))};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (field === 'CHAT_LAST_DATE')\n\t\t\t\t{\n\t\t\t\t\tresult[field] = Utils.date.cast(params[field]);\n\t\t\t\t}\n\t\t\t\telse if (field === 'AVATAR')\n\t\t\t\t{\n\t\t\t\t\tif (params[field])\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[field] = params[field].startsWith('http') ? params[field] : options.host + params[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (field === 'NAME')\n\t\t\t\t{\n\t\t\t\t\tif (params[field])\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[field] = params[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tresult[field] = params[field];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {}\n\n\t\tlet hasResultElements = false;\n\t\tfor (let field in result)\n\t\t{\n\t\t\tif (!result.hasOwnProperty(field))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\thasResultElements = true;\n\t\t\tbreak\n\t\t}\n\n\t\treturn hasResultElements? result: null;\n\t}\n\n\tconvertToHtml(params = {})\n\t{\n\t\tlet {\n\t\t\tquote = true,\n\t\t\timage = true,\n\t\t\ttext = '',\n\t\t\thighlightText = '',\n\t\t\tisConverted = false,\n\t\t\tenableBigSmile = true\n\t\t} = params;\n\n\t\ttext = text.trim();\n\n\t\tif (!isConverted)\n\t\t{\n\t\t\ttext = text.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\t\t}\n\n\t\tif (text.startsWith('/me'))\n\t\t{\n\t\t\ttext = `<i>${text.substr(4)}</i>`;\n\t\t}\n\t\telse if (text.startsWith('/loud'))\n\t\t{\n\t\t\ttext = `<b>${text.substr(6)}</b>`;\n\t\t}\n\n\t\tconst quoteSign = \"&gt;&gt;\";\n\t\tif (quote && text.indexOf(quoteSign) >= 0)\n\t\t{\n\t\t\tlet textPrepareFlag = false;\n\t\t\tlet textPrepare = text.split(isConverted? \"<br />\": \"\\n\");\n\t\t\tfor (let i = 0; i < textPrepare.length; i++)\n\t\t\t{\n\t\t\t\tif (textPrepare[i].startsWith(quoteSign))\n\t\t\t\t{\n\t\t\t\t\ttextPrepare[i] = textPrepare[i].replace(quoteSign, '<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\">');\n\t\t\t\t\twhile (++i < textPrepare.length && textPrepare[i].startsWith(quoteSign))\n\t\t\t\t\t{\n\t\t\t\t\t\ttextPrepare[i] = textPrepare[i].replace(quoteSign, '');\n\t\t\t\t\t}\n\t\t\t\t\ttextPrepare[i - 1] += '</div></div><br>';\n\t\t\t\t\ttextPrepareFlag = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttext = textPrepare.join(\"<br />\");\n\t\t}\n\n\t\ttext = text.replace(/\\n/gi, '<br />');\n\n\t\ttext = text.replace(/\\t/gi, '&nbsp;&nbsp;&nbsp;&nbsp;');\n\n\t\ttext = this.decodeBbCode(text, false, enableBigSmile);\n\n\t\tif (quote)\n\t\t{\n\t\t\ttext = text.replace(/------------------------------------------------------<br \\/>(.*?)\\[(.*?)\\]<br \\/>(.*?)------------------------------------------------------(<br \\/>)?/g, function (whole, p1, p2, p3, p4, offset) {\n\t\t\t\treturn (offset > 0? '<br>': '') + \"<div class=\\\"bx-im-message-content-quote\\\"><div class=\\\"bx-im-message-content-quote-wrap\\\"><div class=\\\"bx-im-message-content-quote-name\\\"><span class=\\\"bx-im-message-content-quote-name-text\\\">\" + p1 + \"</span><span class=\\\"bx-im-message-content-quote-name-time\\\">\" + p2 + \"</span></div>\" + p3 + \"</div></div><br />\";\n\t\t\t});\n\t\t\ttext = text.replace(/------------------------------------------------------<br \\/>(.*?)------------------------------------------------------(<br \\/>)?/g, function (whole, p1, p2, p3, offset) {\n\t\t\t\treturn (offset > 0? '<br>': '') + \"<div class=\\\"bx-im-message-content-quote\\\"><div class=\\\"bx-im-message-content-quote-wrap\\\">\" + p1 + \"</div></div><br />\";\n\t\t\t});\n\t\t}\n\n\t\tif (image)\n\t\t{\n\t\t\tlet changed = false;\n\t\t\ttext = text.replace(/<a(.*?)>(http[s]{0,1}:\\/\\/.*?)<\\/a>/ig, function(whole, aInner, text, offset)\n\t\t\t{\n\t\t\t\tif(!text.match(/(\\.(jpg|jpeg|png|gif)\\?|\\.(jpg|jpeg|png|gif)$)/i) || text.indexOf(\"/docs/pub/\") > 0 || text.indexOf(\"logout=yes\") > 0)\n\t\t\t\t{\n\t\t\t\t\treturn whole;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tchanged = true;\n\t\t\t\t\treturn (offset > 0? '<br />':'')+'<a' +aInner+ ' target=\"_blank\" class=\"bx-im-element-file-image\"><img src=\"'+text+'\" class=\"bx-im-element-file-image-source-text\" onerror=\"BX.Messenger.Model.MessagesModel.hideErrorImage(this)\"></a></span>';\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (changed)\n\t\t\t{\n\t\t\t\ttext = text.replace(/<\\/span>(\\n?)<br(\\s\\/?)>/ig, '</span>').replace(/<br(\\s\\/?)>(\\n?)<br(\\s\\/?)>(\\n?)<span/ig, '<br /><span');\n\t\t\t}\n\t\t}\n\n\t\tif (highlightText)\n\t\t{\n\t\t\ttext = text.replace(new RegExp(\"(\" + highlightText.replace(/[\\-\\[\\]\\/{}()*+?.\\\\^$|]/g, \"\\\\$&\") + \")\", 'ig'), '<span class=\"bx-messenger-highlight\">$1</span>');\n\t\t}\n\n\t\tif (enableBigSmile)\n\t\t{\n\t\t\ttext = text.replace(\n\t\t\t\t/^(\\s*<img\\s+src=[^>]+?data-code=[^>]+?data-definition=\"UHD\"[^>]+?style=\"width:)(\\d+)(px[^>]+?height:)(\\d+)(px[^>]+?class=\"bx-smile\"\\s*\\/?>\\s*)$/,\n\t\t\t\tfunction doubleSmileSize(match, start, width, middle, height, end) {\n\t\t\t\t\treturn start + (parseInt(width, 10) * 1.7) + middle + (parseInt(height, 10) * 1.7) + end;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (text.substr(-6) == '<br />')\n\t\t{\n\t\t\ttext = text.substr(0, text.length - 6);\n\t\t}\n\t\ttext = text.replace(/<br><br \\/>/ig, '<br />');\n\t\ttext = text.replace(/<br \\/><br>/ig, '<br />');\n\n\t\treturn text;\n\t};\n\n\tdecodeBbCode(text, textOnly = false, enableBigSmile = true)\n\t{\n\t\treturn MessagesModel.decodeBbCode({text, textOnly, enableBigSmile})\n\t}\n\n\tstatic decodeBbCode(params = {})\n\t{\n\t\tlet {text, textOnly = false, enableBigSmile = true} = params;\n\n\t\tlet codeReplacement = [];\n\n\t\ttext = text.replace(/\\[CODE\\]\\n?(.*?)\\[\\/CODE\\]/sig, function(whole, text)\n\t\t{\n\t\t\tlet id = codeReplacement.length;\n\t\t\tcodeReplacement.push(text);\n\t\t\treturn '####REPLACEMENT_MARK_'+id+'####';\n\t\t});\n\n\t\ttext = text.replace(/\\[LIKE\\]/ig, '<span class=\"bx-smile bx-im-smile-like\"></span>');\n\t\ttext = text.replace(/\\[DISLIKE\\]/ig, '<span class=\"bx-smile bx-im-smile-dislike\"></span>');\n\n\t\ttext = text.replace(/\\[USER=([0-9]{1,})\\](.*?)\\[\\/USER\\]/ig, (whole, userId, text) => '<span class=\"bx-im-mention\" data-type=\"USER\" data-value=\"'+userId+'\">'+text+'</span>');\n\n\t\ttext = text.replace(/\\[CHAT=(imol\\|)?([0-9]{1,})\\](.*?)\\[\\/CHAT\\]/ig, (whole, openlines, chatId, text) => openlines? text: '<span class=\"bx-im-mention\" data-type=\"CHAT\" data-value=\"chat'+chatId+'\">'+text+'</span>'); // TODO tag CHAT\n\n\t\tif (false && Utils.device.isMobile())\n\t\t{\n\t\t\tlet replacements = [];\n\t\t\ttext = text.replace(/\\[CALL(?:=(.+?))?\\](.+?)?\\[\\/CALL\\]/ig, (whole, number, text) => {\n\t\t\t\tlet index = replacements.length;\n\t\t\t\treplacements.push({number, text});\n\t\t\t\treturn `####REPLACEMENT_MARK_${index}####`;\n\t\t\t});\n\n\t\t\ttext = text.replace(/[+]{0,1}(?:[-\\/. ()\\[\\]~;#,]*[0-9]){10,}[^\\n\\r<][-\\/. ()\\[\\]~;#,0-9^]*/g, (number) => {\n\t\t\t\tlet pureNumber = number.replace(/\\D/g, '');\n\t\t\t\treturn `[CALL=${pureNumber}]${number}[/CALL]`;\n\t\t\t});\n\n\t\t\treplacements.forEach((item, index) => {\n\t\t\t\ttext = text.replace(`####REPLACEMENT_MARK_${index}####`, `[CALL=${item.number}]${item.text}[/CALL]`)\n\t\t\t});\n\t\t}\n\n\t\ttext = text.replace(/\\[CALL(?:=(.+?))?\\](.+?)?\\[\\/CALL\\]/ig, (whole, number, text) => '<span class=\"bx-im-mention\" data-type=\"CALL\" data-value=\"'+Utils.text.htmlspecialchars(number)+'\">'+text+'</span>'); // TODO tag CHAT\n\n\n\t\ttext = text.replace(/\\[PCH=([0-9]{1,})\\](.*?)\\[\\/PCH\\]/ig, (whole, historyId, text) => text); // TODO tag PCH\n\n\t\ttext = text.replace(/\\[SEND(?:=(.+?))?\\](.+?)?\\[\\/SEND\\]/ig, (whole, command, text) =>\n\t\t{\n\t\t\tlet html = '';\n\n\t\t\ttext = text? text: command;\n\t\t\tcommand = (command? command: text).replace('<br />', '\\n');\n\n\t\t\tif (!textOnly && text)\n\t\t\t{\n\t\t\t\ttext = text.replace(/<([\\w]+)[^>]*>(.*?)<\\\\1>/i, \"$2\", text);\n\t\t\t\ttext = text.replace(/\\[([\\w]+)[^\\]]*\\](.*?)\\[\\/\\1\\]/i, \"$2\", text);\n\n\t\t\t\thtml = '<span class=\"bx-im-message-command-wrap\">'+\n\t\t\t\t\t'<span class=\"bx-im-message-command\" data-entity=\"send\">'+text+'</span>'+\n\t\t\t\t\t'<span class=\"bx-im-message-command-data\">'+command+'</span>'+\n\t\t\t\t'</span>';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thtml = text;\n\t\t\t}\n\n\t\t\treturn html;\n\t\t});\n\n\t\ttext = text.replace(/\\[PUT(?:=(.+?))?\\](.+?)?\\[\\/PUT\\]/ig, (whole, command, text) =>\n\t\t{\n\t\t\tlet html = '';\n\n\t\t\ttext = text? text: command;\n\t\t\tcommand = (command? command: text).replace('<br />', '\\n');\n\n\t\t\tif (!textOnly && text)\n\t\t\t{\n\t\t\t\ttext = text.replace(/<([\\w]+)[^>]*>(.*?)<\\/\\1>/i, \"$2\", text);\n\t\t\t\ttext = text.replace(/\\[([\\w]+)[^\\]]*\\](.*?)\\[\\/\\1\\]/i, \"$2\", text);\n\n\t\t\t\thtml = '<span class=\"bx-im-message-command\" data-entity=\"put\">'+text+'</span>';\n\t\t\t\thtml += '<span class=\"bx-im-message-command-data\">'+command+'</span>';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thtml = text;\n\t\t\t}\n\n\t\t\treturn html;\n\t\t});\n\n\t\tlet textElementSize = 0;\n\t\tif (enableBigSmile)\n\t\t{\n\t\t\ttextElementSize = text.replace(/\\[icon\\=([^\\]]*)\\]/ig, '').trim().length;\n\t\t}\n\n\t\ttext = text.replace(/\\[icon\\=([^\\]]*)\\]/ig, (whole) =>\n\t\t{\n\t\t\tlet url = whole.match(/icon\\=(\\S+[^\\s.,> )\\];\\'\\\"!?])/i);\n\t\t\tif (url && url[1])\n\t\t\t{\n\t\t\t\turl = url[1];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tlet attrs = {'src': url, 'border': 0};\n\n\t\t\tlet size = whole.match(/size\\=(\\d+)/i);\n\t\t\tif (size && size[1])\n\t\t\t{\n\t\t\t\tattrs['width'] = size[1];\n\t\t\t\tattrs['height'] = size[1];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet width = whole.match(/width\\=(\\d+)/i);\n\t\t\t\tif (width && width[1])\n\t\t\t\t{\n\t\t\t\t\tattrs['width'] = width[1];\n\t\t\t\t}\n\n\t\t\t\tlet height = whole.match(/height\\=(\\d+)/i);\n\t\t\t\tif (height && height[1])\n\t\t\t\t{\n\t\t\t\t\tattrs['height'] = height[1];\n\t\t\t\t}\n\n\t\t\t\tif (attrs['width'] && !attrs['height'])\n\t\t\t\t{\n\t\t\t\t\tattrs['height'] = attrs['width'];\n\t\t\t\t}\n\t\t\t\telse if (attrs['height'] && !attrs['width'])\n\t\t\t\t{\n\t\t\t\t\tattrs['width'] = attrs['height'];\n\t\t\t\t}\n\t\t\t\telse if (attrs['height'] && attrs['width'])\n\t\t\t\t{}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tattrs['width'] = 20;\n\t\t\t\t\tattrs['height'] = 20;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tattrs['width'] = attrs['width']>100? 100: attrs['width'];\n\t\t\tattrs['height'] = attrs['height']>100? 100: attrs['height'];\n\n\t\t\tif (enableBigSmile && textElementSize === 0 && attrs['width'] === attrs['height'] && attrs['width'] === 20)\n\t\t\t{\n\t\t\t\tattrs['width'] = 40;\n\t\t\t\tattrs['height'] = 40;\n\t\t\t}\n\n\t\t\tlet title = whole.match(/title\\=(.*[^\\s\\]])/i);\n\t\t\tif (title && title[1])\n\t\t\t{\n\t\t\t\ttitle = title[1];\n\t\t\t\tif (title.indexOf('width=') > -1)\n\t\t\t\t{\n\t\t\t\t\ttitle = title.substr(0, title.indexOf('width='))\n\t\t\t\t}\n\t\t\t\tif (title.indexOf('height=') > -1)\n\t\t\t\t{\n\t\t\t\t\ttitle = title.substr(0, title.indexOf('height='))\n\t\t\t\t}\n\t\t\t\tif (title.indexOf('size=') > -1)\n\t\t\t\t{\n\t\t\t\t\ttitle = title.substr(0, title.indexOf('size='))\n\t\t\t\t}\n\t\t\t\tif (title)\n\t\t\t\t{\n\t\t\t\t\tattrs['title'] = Utils.text.htmlspecialchars(title).trim();\n\t\t\t\t\tattrs['alt'] = attrs['title'];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet attributes = '';\n\t\t\tfor (let name in attrs)\n\t\t\t{\n\t\t\t\tif (attrs.hasOwnProperty(name))\n\t\t\t\t{\n\t\t\t\t\tattributes += name+'=\"'+attrs[name]+'\" ';\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\treturn '<img class=\"bx-smile bx-icon\" '+attributes+'>';\n\t\t});\n\n\t\tcodeReplacement.forEach((code, index) => {\n\t\t\ttext = text.replace('####REPLACEMENT_MARK_'+index+'####',\n\t\t\t\t!textOnly? '<div class=\"bx-im-message-content-code\">'+code+'</div>': code\n\t\t\t)\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tstatic hideErrorImage(element)\n\t{\n\t\tif (element.parentNode && element.parentNode)\n\t\t{\n\t\t\telement.parentNode.innerHTML = '<a href=\"'+element.src+'\" target=\"_blank\">'+element.src+'</a>';\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport {MessagesModel};","\n/**\n * Bitrix Messenger\n * Dialogues model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {StorageLimit} from \"im.const\";\nimport {Utils} from \"im.lib.utils\";\n\nclass DialoguesModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'dialogues';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t\tcollection: {},\n\t\t\tsaveDialogList: [],\n\t\t\tsaveChatList: [],\n\t\t}\n\t}\n\n\tgetStateSaveException()\n\t{\n\t\treturn {\n\t\t\thost: null\n\t\t}\n\t}\n\n\tgetElementStateSaveException()\n\t{\n\t\treturn {\n\t\t\twritingList: null,\n\t\t\tquoteId: null\n\t\t}\n\t}\n\n\tgetElementState()\n\t{\n\t\treturn {\n\t\t\tdialogId: '0',\n\t\t\tchatId: 0,\n\t\t\tcounter: 0,\n\t\t\tunreadId: 0,\n\t\t\tunreadLastId: 0,\n\t\t\tmanagerList: [],\n\t\t\treadedList: [],\n\t\t\twritingList: [],\n\t\t\ttextareaMessage: \"\",\n\t\t\tquoteId: 0,\n\t\t\teditId: 0,\n\t\t\tinit: false,\n\n\t\t\tname: \"\",\n\t\t\towner: 0,\n\t\t\textranet: false,\n\t\t\tavatar: \"\",\n\t\t\tcolor: \"#17A3EA\",\n\t\t\ttype: \"chat\",\n\t\t\tentityType: \"\",\n\t\t\tentityId: \"\",\n\t\t\tentityData1: \"\",\n\t\t\tentityData2: \"\",\n\t\t\tentityData3: \"\",\n\t\t\tdateCreate: new Date(),\n\t\t\trestrictions: {\n\t\t\t\tavatar: true,\n\t\t\t\textend: true,\n\t\t\t\tleave: true,\n\t\t\t\tleaveOwner: true,\n\t\t\t\trename: true\n\t\t\t}\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\t\t\tget: state => dialogId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[dialogId])\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[dialogId];\n\t\t\t},\n\t\t\tgetByChatId: state => chatId =>\n\t\t\t{\n\t\t\t\tchatId = parseInt(chatId);\n\n\t\t\t\tfor (let dialogId in state.collection)\n\t\t\t\t{\n\t\t\t\t\tif (!state.collection.hasOwnProperty(dialogId))\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (state.collection[dialogId].chatId === chatId)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn state.collection[dialogId];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tgetBlank: state => params =>\n\t\t\t{\n\t\t\t\treturn this.getElementState();\n\t\t\t},\n\t\t\tgetQuoteId: state => dialogId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[dialogId])\n\t\t\t\t{\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[dialogId].quoteId;\n\t\t\t},\n\t\t\tgetEditId: state => dialogId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[dialogId])\n\t\t\t\t{\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[dialogId].editId;\n\t\t\t},\n\t\t\tcanSaveChat: state => chatId =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(chatId))\n\t\t\t\t{\n\t\t\t\t\tchatId = parseInt(chatId);\n\t\t\t\t}\n\t\t\t\treturn state.saveChatList.includes(parseInt(chatId));\n\t\t\t},\n\t\t\tcanSaveDialog: state => dialogId =>\n\t\t\t{\n\t\t\t\treturn state.saveDialogList.includes(dialogId.toString());\n\t\t\t},\n\t\t\tisPrivateDialog: state => dialogId =>\n\t\t\t{\n\t\t\t\tdialogId = dialogId.toString();\n\t\t\t\treturn state.collection[dialogId.toString()] && state.collection[dialogId].type === 'private';\n\t\t\t},\n\t\t}\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(dialog => {\n\t\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tthis.validate(Object.assign({}, dialog), {host: store.state.host}),\n\t\t\t\t\t\t\t{init: true}\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = [];\n\t\t\t\t\tresult.push(Object.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tthis.validate(Object.assign({}, payload), {host: store.state.host}),\n\t\t\t\t\t\t{init: true}\n\t\t\t\t\t));\n\t\t\t\t\tpayload = result;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', payload);\n\t\t\t},\n\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\tfields : this.validate(Object.assign({}, payload.fields), {host: store.state.host})\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('delete', payload.dialogId);\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tupdateWriting: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet index = store.state.collection[payload.dialogId].writingList.findIndex(el => el.userId === payload.userId);\n\t\t\t\tif (payload.action)\n\t\t\t\t{\n\t\t\t\t\tif (index >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tlet writingList = [].concat(store.state.collection[payload.dialogId].writingList);\n\t\t\t\t\t\twritingList.unshift({\n\t\t\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\t\t\tuserName: payload.userName,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tactionName: 'updateWriting/1',\n\t\t\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\t\t\tfields : this.validate({writingList}, {host: store.state.host})\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (index >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet writingList = store.state.collection[payload.dialogId].writingList.filter(el => el.userId !== payload.userId);\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tactionName: 'updateWriting/2',\n\t\t\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\t\t\tfields : this.validate({writingList}, {host: store.state.host})\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tupdateReaded: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet readedList = store.state.collection[payload.dialogId].readedList.filter(el => el.userId !== payload.userId);\n\n\t\t\t\tif (payload.action)\n\t\t\t\t{\n\t\t\t\t\treadedList.push({\n\t\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\t\tuserName: payload.userName || '',\n\t\t\t\t\t\tmessageId: payload.messageId,\n\t\t\t\t\t\tdate: payload.date || (new Date()),\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tactionName: 'updateReaded',\n\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\tfields : this.validate({readedList}, {host: store.state.host})\n\t\t\t\t});\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tincreaseCounter: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet counter = store.state.collection[payload.dialogId].counter;\n\t\t\t\tif (counter === 100)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet increasedCounter = counter + payload.count;\n\t\t\t\tif (increasedCounter > 100)\n\t\t\t\t{\n\t\t\t\t\tincreasedCounter = 100;\n\t\t\t\t}\n\n\t\t\t\tlet fields = {\n\t\t\t\t\tcounter: increasedCounter\n\t\t\t\t};\n\n\t\t\t\tif (typeof payload.unreadLastId !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tfields.unreadLastId = payload.unreadLastId;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tactionName: 'increaseCounter',\n\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\tfields\n\t\t\t\t});\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tdecreaseCounter: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet counter = store.state.collection[payload.dialogId].counter;\n\t\t\t\tif (counter === 100)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet decreasedCounter = counter - payload.count;\n\t\t\t\tif (decreasedCounter < 0)\n\t\t\t\t{\n\t\t\t\t\tdecreasedCounter = 0;\n\t\t\t\t}\n\n\t\t\t\tlet unreadId = payload.unreadId > store.state.collection[payload.dialogId].unreadId? payload.unreadId: store.state.collection[payload.dialogId].unreadId;\n\n\t\t\t\tif (\n\t\t\t\t\tstore.state.collection[payload.dialogId].unreadId !== unreadId\n\t\t\t\t\t|| store.state.collection[payload.dialogId].counter !== decreasedCounter\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tif (decreasedCounter === 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tunreadId = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\tactionName: 'decreaseCounter',\n\t\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\t\tfields : {\n\t\t\t\t\t\t\tcounter: decreasedCounter,\n\t\t\t\t\t\t\tunreadId: unreadId\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tsaveDialog: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('saveDialog', {\n\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\tchatId : payload.chatId\n\t\t\t\t});\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tinitCollection: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\t\t\t},\n\t\t\tsaveDialog: (state, payload) =>\n\t\t\t{\n\t\t\t\t// TODO if payload.dialogId is IMOL, skip update this flag\n\t\t\t\tif (!(payload.chatId > 0 && payload.dialogId.length > 0))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tlet saveDialogList = state.saveDialogList.filter(function(element) {\n\t\t\t\t\treturn element !== payload.dialogId;\n\t\t\t\t});\n\n\t\t\t\tsaveDialogList.unshift(payload.dialogId);\n\n\t\t\t\tsaveDialogList = saveDialogList.slice(0, StorageLimit.dialogues);\n\n\t\t\t\tif (state.saveDialogList.join(',') === saveDialogList.join(','))\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tstate.saveDialogList = saveDialogList;\n\n\n\t\t\t\tlet saveChatList = state.saveChatList.filter(function(element) {\n\t\t\t\t\treturn element !== payload.chatId;\n\t\t\t\t});\n\n\t\t\t\tsaveChatList.unshift(payload.chatId);\n\n\t\t\t\tstate.saveChatList = saveChatList.slice(0, StorageLimit.dialogues);\n\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tfor (let element of payload)\n\t\t\t\t{\n\t\t\t\t\tthis.initCollection(state, {dialogId: element.dialogId});\n\n\t\t\t\t\tstate.collection[element.dialogId] = Object.assign(\n\t\t\t\t\t\tthis.getElementState(),\n\t\t\t\t\t\tstate.collection[element.dialogId],\n\t\t\t\t\t\telement\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// TODO if payload.dialogId is IMOL, skip update cache\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tupdate: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tstate.collection[payload.dialogId] = Object.assign(\n\t\t\t\t\tstate.collection[payload.dialogId],\n\t\t\t\t\tpayload.fields\n\t\t\t\t);\n\n\t\t\t\t// TODO if payload.dialogId is IMOL, skip update cache\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tdelete: (state, payload) =>\n\t\t\t{\n\t\t\t\tdelete state.collection[payload.dialogId];\n\n\t\t\t\t// TODO if payload.dialogId is IMOL, skip update cache\n\t\t\t\tthis.saveState(state);\n\t\t\t}\n\t\t};\n\t}\n\n\tinitCollection(state, payload)\n\t{\n\t\tif (typeof state.collection[payload.dialogId] !== 'undefined')\n\t\t{\n\t\t\treturn true\n\t\t}\n\n\t\tVue.set(state.collection, payload.dialogId, this.getElementState());\n\n\t\tif (payload.fields)\n\t\t{\n\t\t\tstate.collection[payload.dialogId] = Object.assign(\n\t\t\t\tstate.collection[payload.dialogId],\n\t\t\t\tthis.validate(Object.assign({}, payload.fields), {host: state.host})\n\t\t\t);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tgetSaveTimeout()\n\t{\n\t\treturn 100;\n\t}\n\n\tsaveState(state = {})\n\t{\n\t\tif (!this.isSaveAvailable())\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tsuper.saveState(() =>\n\t\t{\n\t\t\tlet storedState = {\n\t\t\t\tcollection: {},\n\t\t\t\tsaveDialogList: [].concat(state.saveDialogList),\n\t\t\t\tsaveChatList: [].concat(state.saveChatList),\n\t\t\t};\n\n\t\t\tstate.saveDialogList.forEach(dialogId => {\n\t\t\t\tif (!state.collection[dialogId])\n\t\t\t\t\treturn false;\n\n\t\t\t\tstoredState.collection[dialogId] = Object.assign(\n\t\t\t\t\tthis.getElementState(),\n\t\t\t\t\tthis.cloneState(state.collection[dialogId], this.getElementStateSaveException())\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn storedState;\n\t\t});\n\t}\n\n\tvalidate(fields, options = {})\n\t{\n\t\tconst result = {};\n\n\t\toptions.host = options.host || this.getState().host;\n\n\t\tif (typeof fields.dialog_id !== 'undefined')\n\t\t{\n\t\t\tfields.dialogId = fields.dialog_id;\n\t\t}\n\t\tif (typeof fields.dialogId === \"number\" || typeof fields.dialogId === \"string\")\n\t\t{\n\t\t\tresult.dialogId = fields.dialogId.toString();\n\t\t}\n\n\t\tif (typeof fields.chat_id !== 'undefined')\n\t\t{\n\t\t\tfields.chatId = fields.chat_id;\n\t\t}\n\t\telse if (typeof fields.id !== 'undefined')\n\t\t{\n\t\t\tfields.chatId = fields.id;\n\t\t}\n\t\tif (typeof fields.chatId === \"number\" || typeof fields.chatId === \"string\")\n\t\t{\n\t\t\tresult.chatId = parseInt(fields.chatId);\n\t\t}\n\t\tif (typeof fields.quoteId === \"number\")\n\t\t{\n\t\t\tresult.quoteId = parseInt(fields.quoteId);\n\t\t}\n\t\tif (typeof fields.editId === \"number\")\n\t\t{\n\t\t\tresult.editId = parseInt(fields.editId);\n\t\t}\n\n\t\tif (typeof fields.counter === \"number\" || typeof fields.counter === \"string\")\n\t\t{\n\t\t\tresult.counter = parseInt(fields.counter);\n\t\t}\n\n\t\tif (typeof fields.unread_id !== 'undefined')\n\t\t{\n\t\t\tfields.unreadId = fields.unread_id;\n\t\t}\n\t\tif (typeof fields.unreadId === \"number\" || typeof fields.unreadId === \"string\")\n\t\t{\n\t\t\tresult.unreadId = parseInt(fields.unreadId);\n\t\t}\n\n\t\tif (typeof fields.unread_last_id !== 'undefined')\n\t\t{\n\t\t\tfields.unreadLastId = fields.unread_last_id;\n\t\t}\n\t\tif (typeof fields.unreadLastId === \"number\" || typeof fields.unreadLastId === \"string\")\n\t\t{\n\t\t\tresult.unreadLastId = parseInt(fields.unreadLastId);\n\t\t}\n\n\t\tif (typeof fields.readed_list !== 'undefined')\n\t\t{\n\t\t\tfields.readedList = fields.readed_list;\n\t\t}\n\t\tif (typeof fields.readedList !== 'undefined')\n\t\t{\n\t\t\tresult.readedList = [];\n\n\t\t\tif (fields.readedList instanceof Array)\n\t\t\t{\n\t\t\t\tfields.readedList.forEach(element =>\n\t\t\t\t{\n\t\t\t\t\tlet record = {};\n\t\t\t\t\tif (typeof element.user_id !== 'undefined')\n\t\t\t\t\t{\n\t\t\t\t\t\telement.userId = element.user_id;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof element.user_name !== 'undefined')\n\t\t\t\t\t{\n\t\t\t\t\t\telement.userName = element.user_name;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof element.message_id !== 'undefined')\n\t\t\t\t\t{\n\t\t\t\t\t\telement.messageId = element.message_id;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!element.userId || !element.userName || !element.messageId)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\trecord.userId = parseInt(element.userId);\n\t\t\t\t\trecord.userName = element.userName.toString();\n\t\t\t\t\trecord.messageId = parseInt(element.messageId);\n\n\t\t\t\t\trecord.date = Utils.date.cast(element.date);\n\n\t\t\t\t\tresult.readedList.push(record);\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.writing_list !== 'undefined')\n\t\t{\n\t\t\tfields.writingList = fields.writing_list;\n\t\t}\n\t\tif (typeof fields.writingList !== 'undefined')\n\t\t{\n\t\t\tresult.writingList = [];\n\n\t\t\tif (fields.writingList instanceof Array)\n\t\t\t{\n\t\t\t\tfields.writingList.forEach(element =>\n\t\t\t\t{\n\t\t\t\t\tlet record = {};\n\n\t\t\t\t\tif (!element.userId)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\trecord.userId = parseInt(element.userId);\n\t\t\t\t\trecord.userName = element.userName;\n\n\t\t\t\t\tresult.writingList.push(record);\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.manager_list !== 'undefined')\n\t\t{\n\t\t\tfields.managerList = fields.manager_list;\n\t\t}\n\t\tif (typeof fields.managerList !== 'undefined')\n\t\t{\n\t\t\tresult.managerList = [];\n\n\t\t\tif (fields.managerList instanceof Array)\n\t\t\t{\n\t\t\t\tfields.managerList.forEach(userId =>\n\t\t\t\t{\n\t\t\t\t\tuserId = parseInt(userId);\n\t\t\t\t\tif (userId > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult.managerList.push(userId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.mute_list !== 'undefined')\n\t\t{\n\t\t\tfields.muteList = fields.mute_list;\n\t\t}\n\t\tif (typeof fields.muteList !== 'undefined')\n\t\t{\n\t\t\tresult.muteList = [];\n\n\t\t\tif (fields.muteList instanceof Array)\n\t\t\t{\n\t\t\t\tfields.muteList.forEach(userId =>\n\t\t\t\t{\n\t\t\t\t\tuserId = parseInt(userId);\n\t\t\t\t\tif (userId > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult.muteList.push(userId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.textareaMessage !== 'undefined')\n\t\t{\n\t\t\tresult.textareaMessage = fields.textareaMessage.toString();\n\t\t}\n\n\t\tif (typeof fields.title !== 'undefined')\n\t\t{\n\t\t\tfields.name = fields.title;\n\t\t}\n\t\tif (typeof fields.name === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.name = fields.name.toString();\n\t\t}\n\n\t\tif (typeof fields.owner !== 'undefined')\n\t\t{\n\t\t\tfields.ownerId = fields.owner;\n\t\t}\n\t\tif (typeof fields.ownerId === \"number\" || typeof fields.ownerId === \"string\")\n\t\t{\n\t\t\tresult.ownerId = parseInt(fields.ownerId);\n\t\t}\n\n\t\tif (typeof fields.extranet === \"boolean\")\n\t\t{\n\t\t\tresult.extranet = fields.extranet;\n\t\t}\n\n\t\tif (typeof fields.avatar === 'string')\n\t\t{\n\t\t\tlet avatar;\n\n\t\t\tif (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))\n\t\t\t{\n\t\t\t\tavatar = '';\n\t\t\t}\n\t\t\telse if (fields.avatar.startsWith('http'))\n\t\t\t{\n\t\t\t\tavatar = fields.avatar;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tavatar = options.host + fields.avatar;\n\t\t\t}\n\n\t\t\tif (avatar)\n\t\t\t{\n\t\t\t\tresult.avatar = encodeURI(avatar);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.color === \"string\")\n\t\t{\n\t\t\tresult.color = fields.color.toString();\n\t\t}\n\n\t\tif (typeof fields.type === \"string\")\n\t\t{\n\t\t\tresult.type = fields.type.toString();\n\t\t}\n\n\t\tif (typeof fields.entity_type !== 'undefined')\n\t\t{\n\t\t\tfields.entityType = fields.entity_type;\n\t\t}\n\t\tif (typeof fields.entityType === \"string\")\n\t\t{\n\t\t\tresult.entityType = fields.entityType.toString();\n\t\t}\n\t\tif (typeof fields.entity_id !== 'undefined')\n\t\t{\n\t\t\tfields.entityId = fields.entity_id;\n\t\t}\n\t\tif (typeof fields.entityId === \"string\" || typeof fields.entityId === \"number\")\n\t\t{\n\t\t\tresult.entityId = fields.entityId.toString();\n\t\t}\n\n\t\tif (typeof fields.entity_data_1 !== 'undefined')\n\t\t{\n\t\t\tfields.entityData1 = fields.entity_data_1;\n\t\t}\n\t\tif (typeof fields.entityData1 === \"string\")\n\t\t{\n\t\t\tresult.entityData1 = fields.entityData1.toString();\n\t\t}\n\n\t\tif (typeof fields.entity_data_2 !== 'undefined')\n\t\t{\n\t\t\tfields.entityData2 = fields.entity_data_2;\n\t\t}\n\t\tif (typeof fields.entityData2 === \"string\")\n\t\t{\n\t\t\tresult.entityData2 = fields.entityData2.toString();\n\t\t}\n\n\t\tif (typeof fields.entity_data_3 !== 'undefined')\n\t\t{\n\t\t\tfields.entityData3 = fields.entity_data_3;\n\t\t}\n\t\tif (typeof fields.entityData3 === \"string\")\n\t\t{\n\t\t\tresult.entityData3 = fields.entityData3.toString();\n\t\t}\n\n\t\tif (typeof fields.date_create !== 'undefined')\n\t\t{\n\t\t\tfields.dateCreate = fields.date_create;\n\t\t}\n\n\t\tif (typeof fields.dateCreate !== \"undefined\")\n\t\t{\n\t\t\tresult.dateCreate = Utils.date.cast(fields.dateCreate);\n\t\t}\n\n\t\tif (typeof fields.dateLastOpen !== \"undefined\")\n\t\t{\n\t\t\tresult.dateLastOpen = Utils.date.cast(fields.dateLastOpen);\n\t\t}\n\n\t\tif (typeof fields.restrictions === 'object' && fields.restrictions)\n\t\t{\n\t\t\tresult.restrictions = {};\n\n\t\t\tif (typeof fields.restrictions.AVATAR === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.avatar = fields.restrictions.AVATAR;\n\t\t\t}\n\n\t\t\tif (typeof fields.restrictions.EXTEND === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.extend = fields.restrictions.EXTEND;\n\t\t\t}\n\n\t\t\tif (typeof fields.restrictions.LEAVE === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.leave = fields.restrictions.LEAVE;\n\t\t\t}\n\n\t\t\tif (typeof fields.restrictions.LEAVE_OWNER === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.leaveOwner = fields.restrictions.LEAVE_OWNER;\n\t\t\t}\n\n\t\t\tif (typeof fields.restrictions.RENAME === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.rename = fields.restrictions.RENAME;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport {DialoguesModel};","/**\n * Bitrix Messenger\n * User model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {Utils} from \"im.lib.utils\";\n\nclass UsersModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'users';\n\t}\n\n\tgetState()\n\t{\n\t\tthis.startOnlineCheckInterval();\n\n\t\treturn {\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t\tcollection: {},\n\t\t\tonlineList: [],\n\t\t\tmobileOnlineList: [],\n\t\t\tabsentList: []\n\t\t}\n\t}\n\n\tgetElementState(params = {})\n\t{\n\t\tlet {\n\t\t\tid = 0,\n\t\t\tname = this.getVariable('default.name', ''),\n\t\t\tfirstName = this.getVariable('default.name', ''),\n\t\t\tlastName = '',\n\t\t} = params;\n\n\t\treturn {\n\t\t\tid,\n\t\t\tname,\n\t\t\tfirstName,\n\t\t\tlastName,\n\t\t\tworkPosition: \"\",\n\t\t\tcolor: \"#048bd0\",\n\t\t\tavatar: \"\",\n\t\t\tgender: \"M\",\n\t\t\tbirthday: false,\n\t\t\tisBirthday: false,\n\t\t\textranet: false,\n\t\t\tnetwork: false,\n\t\t\tbot: false,\n\t\t\tconnector: false,\n\t\t\texternalAuthId: \"default\",\n\t\t\tstatus: \"online\",\n\t\t\tidle: false,\n\t\t\tlastActivityDate: false,\n\t\t\tmobileLastDate: false,\n\t\t\tisOnline: false,\n\t\t\tisMobileOnline: false,\n\t\t\tabsent: false,\n\t\t\tisAbsent: false,\n\t\t\tdepartments: [],\n\t\t\tphones: {\n\t\t\t\tworkPhone: \"\",\n\t\t\t\tpersonalMobile: \"\",\n\t\t\t\tpersonalPhone: \"\",\n\t\t\t\tinnerPhone: \"\",\n\t\t\t},\n\t\t\tinit: false\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\t\t\tget: state => (userId, getTemporary = false) =>\n\t\t\t{\n\t\t\t\tuserId = parseInt(userId);\n\n\t\t\t\tif (userId <= 0)\n\t\t\t\t{\n\t\t\t\t\tif (getTemporary)\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!getTemporary\n\t\t\t\t\t&& (!state.collection[userId] || !state.collection[userId].init)\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (!state.collection[userId])\n\t\t\t\t{\n\t\t\t\t\treturn this.getElementState({id: userId});\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[userId];\n\t\t\t},\n\t\t\tgetBlank: state => params =>\n\t\t\t{\n\t\t\t\treturn this.getElementState(params);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(user => {\n\t\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tthis.getElementState(),\n\t\t\t\t\t\t\tthis.validate(Object.assign({}, user), {host: store.state.host}),\n\t\t\t\t\t\t\t{init: true}\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = [];\n\t\t\t\t\tresult.push(Object.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tthis.getElementState(),\n\t\t\t\t\t\tthis.validate(Object.assign({}, payload), {host: store.state.host}),\n\t\t\t\t\t\t{init: true}\n\t\t\t\t\t));\n\t\t\t\t\tpayload = result;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', payload);\n\t\t\t},\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.id = parseInt(payload.id);\n\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.id] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.id].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tid : payload.id,\n\t\t\t\t\tfields : this.validate(Object.assign({}, payload.fields), {host: store.state.host})\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('delete', payload.id);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tsaveState: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('saveState', {});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tfor (let element of payload)\n\t\t\t\t{\n\t\t\t\t\tthis.initCollection(state, {id: element.id});\n\n\t\t\t\t\tstate.collection[element.id] = element;\n\n\t\t\t\t\tlet status = Utils.user.getOnlineStatus(element);\n\t\t\t\t\tif (status.isOnline)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.id].isOnline = true;\n\t\t\t\t\t\tthis.addToOnlineList(state, element.id);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet mobileStatus = Utils.user.isMobileActive(element);\n\t\t\t\t\tif (mobileStatus)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.id].isMobileOnline = true;\n\t\t\t\t\t\tthis.addToMobileOnlineList(state, element.id);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.birthday)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet today = Utils.date.format(new Date(), \"d-m\");\n\t\t\t\t\t\tif (element.birthday === today)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection[element.id].isBirthday = true;\n\n\t\t\t\t\t\t\tlet timeToNextMidnight = this.getTimeToNextMidnight();\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tstate.collection[element.id].isBirthday = false;\n\t\t\t\t\t\t\t}, timeToNextMidnight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.absent)\n\t\t\t\t\t{\n\t\t\t\t\t\telement.isAbsent = true;\n\n\t\t\t\t\t\tif (!state.absentList.includes(element.id))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.addToAbsentList(state, element.id);\n\n\t\t\t\t\t\t\tlet timeToNextMidnight = this.getTimeToNextMidnight();\n\t\t\t\t\t\t\tlet timeToNextDay = 1000*60*60*24;\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tsetInterval(() => this.startAbsentCheckInterval(state), timeToNextDay);\n\t\t\t\t\t\t\t}, timeToNextMidnight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.saveState(state);\n\t\t\t\t}\n\t\t\t},\n\t\t\tupdate: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tlet lastActivityDate = state.collection[payload.id].lastActivityDate.getTime();\n\t\t\t\tlet newActivityDate = payload.fields.lastActivityDate.getTime();\n\n\t\t\t\tif (newActivityDate > lastActivityDate)\n\t\t\t\t{\n\t\t\t\t\tlet status = Utils.user.getOnlineStatus(payload.fields);\n\t\t\t\t\tif (status.isOnline)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[payload.id].isOnline = true;\n\t\t\t\t\t\tthis.addToOnlineList(state, payload.fields.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (state.collection[payload.id].mobileLastDate !== payload.fields.mobileLastDate)\n\t\t\t\t{\n\t\t\t\t\tlet mobileStatus = Utils.user.isMobileActive(payload.fields);\n\t\t\t\t\tif (mobileStatus)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[payload.id].isMobileOnline = true;\n\t\t\t\t\t\tthis.addToMobileOnlineList(state, payload.fields.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstate.collection[payload.id] = Object.assign(\n\t\t\t\t\tstate.collection[payload.id],\n\t\t\t\t\tpayload.fields\n\t\t\t\t);\n\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tdelete: (state, payload) =>\n\t\t\t{\n\t\t\t\tdelete state.collection[payload.id];\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tsaveState: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t}\n\t}\n\n\tinitCollection(state, payload)\n\t{\n\t\tif (typeof state.collection[payload.id] !== 'undefined')\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tVue.set(state.collection, payload.id, this.getElementState());\n\n\t\treturn true;\n\t}\n\n\tgetSaveUserList()\n\t{\n\t\tif (!this.db)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!this.store.getters['messages/getSaveUserList'])\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tlet list = this.store.getters['messages/getSaveUserList']();\n\t\tif (!list)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\treturn list;\n\t}\n\n\tgetSaveTimeout()\n\t{\n\t\treturn 250;\n\t}\n\n\tsaveState(state)\n\t{\n\t\tif (!this.isSaveAvailable())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tsuper.saveState(() =>\n\t\t{\n\t\t\tlet list = this.getSaveUserList();\n\t\t\tif (!list)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet storedState = {\n\t\t\t\tcollection: {},\n\t\t\t};\n\n\t\t\tlet exceptionList = {\n\t\t\t\tabsent: true,\n\t\t\t\tidle: true,\n\t\t\t\tmobileLastDate: true,\n\t\t\t\tlastActivityDate: true,\n\t\t\t};\n\n\t\t\tfor (let chatId in list)\n\t\t\t{\n\t\t\t\tif (!list.hasOwnProperty(chatId))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlist[chatId].forEach(userId =>\n\t\t\t\t{\n\t\t\t\t\tif (!state.collection[userId])\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tstoredState.collection[userId] = this.cloneState(state.collection[userId], exceptionList);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn storedState;\n\t\t});\n\t}\n\n\tvalidate(fields, options = {})\n\t{\n\t\tconst result = {};\n\n\t\toptions.host = options.host || this.getState().host;\n\n\t\tif (typeof fields.id === \"number\" || typeof fields.id === \"string\")\n\t\t{\n\t\t\tresult.id = parseInt(fields.id);\n\t\t}\n\n\t\tif (typeof fields.first_name !== \"undefined\")\n\t\t{\n\t\t\tfields.firstName = fields.first_name;\n\t\t}\n\t\tif (typeof fields.last_name !== \"undefined\")\n\t\t{\n\t\t\tfields.lastName = fields.last_name;\n\t\t}\n\t\tif (typeof fields.name === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.name = fields.name.toString();\n\n\t\t\tif (typeof fields.firstName !== \"undefined\" && !fields.firstName)\n\t\t\t{\n\t\t\t\tlet elementsOfName = fields.name.split(' ');\n\t\t\t\tif (elementsOfName.length > 1)\n\t\t\t\t{\n\t\t\t\t\tdelete elementsOfName[elementsOfName.length-1];\n\t\t\t\t\tfields.firstName = elementsOfName.join(' ').trim();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfields.firstName = result.name;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof fields.lastName !== \"undefined\" && !fields.lastName)\n\t\t\t{\n\t\t\t\tlet elementsOfName = fields.name.split(' ');\n\t\t\t\tif (elementsOfName.length > 1)\n\t\t\t\t{\n\t\t\t\t\tfields.lastName = elementsOfName[elementsOfName.length-1];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfields.lastName = '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.firstName === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.firstName = fields.firstName.toString();\n\t\t}\n\t\tif (typeof fields.lastName === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.lastName = fields.lastName.toString();\n\t\t}\n\n\t\tif (typeof fields.work_position !== \"undefined\")\n\t\t{\n\t\t\tfields.workPosition = fields.work_position;\n\t\t}\n\t\tif (typeof fields.workPosition === \"string\" || typeof fields.workPosition === \"number\")\n\t\t{\n\t\t\tresult.workPosition = fields.workPosition.toString();\n\t\t}\n\n\t\tif (typeof fields.color === \"string\")\n\t\t{\n\t\t\tresult.color = fields.color;\n\t\t}\n\n\t\tif (typeof fields.avatar === 'string')\n\t\t{\n\t\t\tlet avatar;\n\n\t\t\tif (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))\n\t\t\t{\n\t\t\t\tavatar = '';\n\t\t\t}\n\t\t\telse if (fields.avatar.startsWith('http'))\n\t\t\t{\n\t\t\t\tavatar = fields.avatar;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tavatar = options.host + fields.avatar;\n\t\t\t}\n\n\t\t\tif (avatar)\n\t\t\t{\n\t\t\t\tresult.avatar = encodeURI(avatar);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.gender !== 'undefined')\n\t\t{\n\t\t\tresult.gender = fields.gender === 'F'? 'F': 'M';\n\t\t}\n\n\t\tif (typeof fields.birthday === \"string\")\n\t\t{\n\t\t\tresult.birthday = fields.birthday;\n\t\t}\n\n\t\tif (typeof fields.extranet === \"boolean\")\n\t\t{\n\t\t\tresult.extranet = fields.extranet;\n\t\t}\n\n\t\tif (typeof fields.network === \"boolean\")\n\t\t{\n\t\t\tresult.network = fields.network;\n\t\t}\n\n\t\tif (typeof fields.bot === \"boolean\")\n\t\t{\n\t\t\tresult.bot = fields.bot;\n\t\t}\n\n\t\tif (typeof fields.connector === \"boolean\")\n\t\t{\n\t\t\tresult.connector = fields.connector;\n\t\t}\n\n\t\tif (typeof fields.external_auth_id !== \"undefined\")\n\t\t{\n\t\t\tfields.externalAuthId = fields.external_auth_id;\n\t\t}\n\t\tif (typeof fields.externalAuthId === \"string\" && fields.externalAuthId)\n\t\t{\n\t\t\tresult.externalAuthId = fields.externalAuthId;\n\t\t}\n\n\t\tif (typeof fields.status === \"string\")\n\t\t{\n\t\t\tresult.status = fields.status;\n\t\t}\n\n\t\tif (typeof fields.idle !== \"undefined\")\n\t\t{\n\t\t\tresult.idle = Utils.date.cast(fields.idle, false);\n\t\t}\n\t\tif (typeof fields.last_activity_date !== \"undefined\")\n\t\t{\n\t\t\tfields.lastActivityDate = fields.last_activity_date;\n\t\t}\n\t\tif (typeof fields.lastActivityDate !== \"undefined\")\n\t\t{\n\t\t\tresult.lastActivityDate = Utils.date.cast(fields.lastActivityDate, false);\n\t\t}\n\t\tif (typeof fields.mobile_last_date !== \"undefined\")\n\t\t{\n\t\t\tfields.mobileLastDate = fields.mobile_last_date;\n\t\t}\n\t\tif (typeof fields.mobileLastDate !== \"undefined\")\n\t\t{\n\t\t\tresult.mobileLastDate = Utils.date.cast(fields.mobileLastDate, false);\n\t\t}\n\n\t\tif (typeof fields.absent !== \"undefined\")\n\t\t{\n\t\t\tresult.absent = Utils.date.cast(fields.absent, false);\n\t\t}\n\n\t\tif (typeof fields.departments !== 'undefined')\n\t\t{\n\t\t\tresult.departments = [];\n\n\t\t\tif (fields.departments instanceof Array)\n\t\t\t{\n\t\t\t\tfields.departments.forEach(departmentId =>\n\t\t\t\t{\n\t\t\t\t\tdepartmentId = parseInt(departmentId);\n\t\t\t\t\tif (departmentId > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult.departments.push(departmentId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.phones === 'object' && fields.phones)\n\t\t{\n\t\t\tresult.phones = {};\n\n\t\t\tif (typeof fields.phones.work_phone !== \"undefined\")\n\t\t\t{\n\t\t\t\tfields.phones.workPhone = fields.phones.work_phone;\n\t\t\t}\n\t\t\tif (typeof fields.phones.workPhone === 'string' || typeof fields.phones.workPhone === 'number')\n\t\t\t{\n\t\t\t\tresult.phones.workPhone = fields.phones.workPhone.toString();\n\t\t\t}\n\n\t\t\tif (typeof fields.phones.personal_mobile !== \"undefined\")\n\t\t\t{\n\t\t\t\tfields.phones.personalMobile = fields.phones.personal_mobile;\n\t\t\t}\n\t\t\tif (typeof fields.phones.personalMobile === 'string' || typeof fields.phones.personalMobile === 'number')\n\t\t\t{\n\t\t\t\tresult.phones.personalMobile = fields.phones.personalMobile.toString();\n\t\t\t}\n\n\t\t\tif (typeof fields.phones.personal_phone !== \"undefined\")\n\t\t\t{\n\t\t\t\tfields.phones.personalPhone = fields.phones.personal_phone;\n\t\t\t}\n\t\t\tif (typeof fields.phones.personalPhone === 'string' || typeof fields.phones.personalPhone === 'number')\n\t\t\t{\n\t\t\t\tresult.phones.personalPhone = fields.phones.personalPhone.toString();\n\t\t\t}\n\n\t\t\tif (typeof fields.phones.inner_phone !== \"undefined\")\n\t\t\t{\n\t\t\t\tfields.phones.innerPhone = fields.phones.inner_phone;\n\t\t\t}\n\t\t\tif (typeof fields.phones.innerPhone === 'string' || typeof fields.phones.innerPhone === 'number')\n\t\t\t{\n\t\t\t\tresult.phones.innerPhone = fields.phones.innerPhone.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\taddToOnlineList(state, id)\n\t{\n\t\tif (!state.onlineList.includes(id))\n\t\t{\n\t\t\tstate.onlineList.push(id);\n\t\t}\n\t}\n\n\taddToMobileOnlineList(state, id)\n\t{\n\t\tif (!state.mobileOnlineList.includes(id))\n\t\t{\n\t\t\tstate.mobileOnlineList.push(id);\n\t\t}\n\t}\n\n\taddToAbsentList(state, id)\n\t{\n\t\tif (!state.absentList.includes(id))\n\t\t{\n\t\t\tstate.absentList.push(id);\n\t\t}\n\t}\n\n\tgetTimeToNextMidnight()\n\t{\n\t\tlet nextMidnight = new Date(new Date().setHours(24,0,0)).getTime();\n\t\treturn nextMidnight - new Date();\n\t}\n\n\tstartAbsentCheckInterval(state)\n\t{\n\t\tfor (let userId of state.absentList)\n\t\t{\n\t\t\tlet user = state.collection[userId];\n\n\t\t\tif (!user)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet currentTime = new Date().getTime();\n\t\t\tlet absentEnd = new Date(state.collection[userId].absent).getTime();\n\n\t\t\tif (absentEnd <= currentTime)\n\t\t\t{\n\t\t\t\tstate.absentList = state.absentList.filter(element => {\n\t\t\t\t\treturn element !== userId;\n\t\t\t\t});\n\t\t\t\tuser.isAbsent = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tstartOnlineCheckInterval()\n\t{\n\t\tconst intervalTime = 60000;\n\n\t\tsetInterval(() => {\n\t\t\tfor (let userId of this.store.state.users.onlineList)\n\t\t\t{\n\t\t\t\tlet user = this.store.state.users.collection[userId];\n\n\t\t\t\tif (!user)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet status = Utils.user.getOnlineStatus(user);\n\t\t\t\tif (status.isOnline)\n\t\t\t\t{\n\t\t\t\t\tuser.isOnline = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tuser.isOnline = false;\n\t\t\t\t\tthis.store.state.users.onlineList = this.store.state.users.onlineList.filter(element => {\n\t\t\t\t\t\treturn element !== userId\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let userId of this.store.state.users.mobileOnlineList)\n\t\t\t{\n\t\t\t\tlet user = this.store.state.users.collection[userId];\n\n\t\t\t\tif (!user)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet mobileStatus = Utils.user.isMobileActive(user);\n\t\t\t\tif (mobileStatus)\n\t\t\t\t{\n\t\t\t\t\tuser.isMobileOnline = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tuser.isMobileOnline = false;\n\t\t\t\t\tthis.store.state.users.mobileOnlineList = this.store.state.users.mobileOnlineList.filter(element => {\n\t\t\t\t\t\treturn element !== userId\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}, intervalTime);\n\t}\n}\n\nexport {UsersModel};","/**\n * Bitrix Messenger\n * File model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {FileStatus, FileType, MutationType} from 'im.const';\nimport {Utils} from \"im.lib.utils\";\n\nclass FilesModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'files';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\tcreated: 0,\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t\tcollection: {},\n\t\t\tindex: {},\n\t\t}\n\t}\n\n\tgetElementState(params = {})\n\t{\n\t\tlet {\n\t\t\tid = 0,\n\t\t\tchatId = 0,\n\t\t\tname = this.getVariable('default.name', ''),\n\t\t} = params;\n\n\t\treturn {\n\t\t\tid,\n\t\t\tchatId,\n\t\t\tname,\n\t\t\ttemplateId: id,\n\t\t\tdate: new Date(),\n\t\t\ttype: 'file',\n\t\t\textension: \"\",\n\t\t\ticon: \"empty\",\n\t\t\tsize: 0,\n\t\t\timage: false,\n\t\t\tstatus: FileStatus.done,\n\t\t\tprogress: 100,\n\t\t\tauthorId: 0,\n\t\t\tauthorName: \"\",\n\t\t\turlPreview: \"\",\n\t\t\turlShow: \"\",\n\t\t\turlDownload: \"\",\n\t\t\tinit: false\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\t\t\tget: state => (chatId, fileId, getTemporary = false) =>\n\t\t\t{\n\t\t\t\tif (!chatId || !fileId)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (!state.index[chatId] || !state.index[chatId][fileId])\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (!getTemporary && !state.index[chatId][fileId].init)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn state.index[chatId][fileId];\n\t\t\t},\n\t\t\tgetList: state => chatId =>\n\t\t\t{\n\t\t\t\tif (!state.index[chatId])\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn state.index[chatId];\n\t\t\t},\n\t\t\tgetBlank: state => params =>\n\t\t\t{\n\t\t\t\treturn this.getElementState(params);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tadd: (store, payload) =>\n\t\t\t{\n\t\t\t\tlet result = this.validate(Object.assign({}, payload), {host: store.state.host});\n\t\t\t\tresult.id = 'temporary' + (new Date).getTime() + store.state.created;\n\t\t\t\tresult.templateId = result.id;\n\t\t\t\tresult.init = true;\n\n\t\t\t\tstore.commit('add', Object.assign({}, this.getElementState(), result));\n\n\t\t\t\treturn result.id;\n\t\t\t},\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(file => {\n\t\t\t\t\t\tlet result = this.validate(Object.assign({}, file), {host: store.state.host});\n\t\t\t\t\t\tresult.templateId = result.id;\n\t\t\t\t\t\treturn Object.assign({}, this.getElementState(), result, {init: true});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = this.validate(Object.assign({}, payload), {host: store.state.host});\n\t\t\t\t\tresult.templateId = result.id;\n\t\t\t\t\tpayload = [];\n\t\t\t\t\tpayload.push(\n\t\t\t\t\t\tObject.assign({}, this.getElementState(), result, {init: true})\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tinsertType : MutationType.setAfter,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetBefore: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(file => {\n\t\t\t\t\t\tlet result = this.validate(Object.assign({}, file), {host: store.state.host});\n\t\t\t\t\t\tresult.templateId = result.id;\n\t\t\t\t\t\treturn Object.assign({}, this.getElementState(), result, {init: true});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = this.validate(Object.assign({}, payload), {host: store.state.host});\n\t\t\t\t\tresult.templateId = result.id;\n\t\t\t\t\tpayload = [];\n\t\t\t\t\tpayload.push(\n\t\t\t\t\t\tObject.assign({}, this.getElementState(), result, {init: true})\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tactionName: 'setBefore',\n\t\t\t\t\tinsertType : MutationType.setBefore,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tlet result = this.validate(Object.assign({}, payload.fields), {host: store.state.host});\n\n\t\t\t\tstore.commit('initCollection', {chatId: payload.chatId});\n\n\t\t\t\tlet index = store.state.collection[payload.chatId].findIndex(el => el.id === payload.id);\n\t\t\t\tif (index < 0)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tid : payload.id,\n\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\tindex : index,\n\t\t\t\t\tfields : result\n\t\t\t\t});\n\n\t\t\t\tif (payload.fields.blink)\n\t\t\t\t{\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\t\tfields : {blink: false}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('delete', {\n\t\t\t\t\tid : payload.id,\n\t\t\t\t\tchatId : payload.chatId\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tsaveState: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('saveState', {});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tinitCollection: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\t\t\t},\n\t\t\tadd: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tstate.collection[payload.chatId].push(payload);\n\t\t\t\tstate.index[payload.chatId][payload.id] = payload;\n\n\t\t\t\tstate.created += 1;\n\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tfor (let element of payload.data)\n\t\t\t\t{\n\t\t\t\t\tthis.initCollection(state, {chatId: element.chatId});\n\n\t\t\t\t\tlet index = state.collection[element.chatId].findIndex(el => el.id === element.id);\n\t\t\t\t\tif (index > -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tdelete element.templateId;\n\t\t\t\t\t\tstate.collection[element.chatId][index] = Object.assign(state.collection[element.chatId][index], element);\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.insertType === MutationType.setBefore)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.chatId].unshift(element);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.chatId].push(element);\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.index[element.chatId][element.id] = element;\n\n\t\t\t\t\tthis.saveState(state);\n\t\t\t\t}\n\t\t\t},\n\t\t\tupdate: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tlet index = -1;\n\t\t\t\tif (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index])\n\t\t\t\t{\n\t\t\t\t\tindex = payload.index;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tindex = state.collection[payload.chatId].findIndex(el => el.id === payload.id);\n\t\t\t\t}\n\n\t\t\t\tif (index >= 0)\n\t\t\t\t{\n\t\t\t\t\tdelete payload.fields.templateId;\n\t\t\t\t\tlet element = Object.assign(\n\t\t\t\t\t\tstate.collection[payload.chatId][index],\n\t\t\t\t\t\tpayload.fields\n\t\t\t\t\t);\n\t\t\t\t\tstate.collection[payload.chatId][index] = element;\n\t\t\t\t\tstate.index[payload.chatId][element.id] = element;\n\n\t\t\t\t\tthis.saveState(state);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tstate.collection[payload.chatId] = state.collection[payload.chatId].filter(element => element.id !== payload.id);\n\t\t\t\tdelete state.index[payload.chatId][payload.id];\n\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tsaveState: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t}\n\t}\n\n\tinitCollection(state, payload)\n\t{\n\t\tif (typeof state.collection[payload.chatId] !== 'undefined')\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tVue.set(state.collection, payload.chatId, []);\n\t\tVue.set(state.index, payload.chatId, {});\n\n\t\treturn true;\n\t}\n\n\tgetLoadedState(state)\n\t{\n\t\tif (!state || typeof state !== 'object')\n\t\t{\n\t\t\treturn state;\n\t\t}\n\n\t\tif (typeof state.collection !== 'object')\n\t\t{\n\t\t\treturn state;\n\t\t}\n\n\t\tstate.index = {};\n\n\t\tfor (let chatId in state.collection)\n\t\t{\n\t\t\tif (!state.collection.hasOwnProperty(chatId))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tstate.index[chatId] = {};\n\n\t\t\tstate.collection[chatId]\n\t\t\t\t.filter(file => file != null)\n\t\t\t\t.forEach(file => {\n\t\t\t\t\tstate.index[chatId][file.id] = file;\n\t\t\t});\n\t\t}\n\n\t\treturn state;\n\t}\n\n\tgetSaveFileList()\n\t{\n\t\tif (!this.db)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!this.store.getters['messages/getSaveFileList'])\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tlet list = this.store.getters['messages/getSaveFileList']();\n\t\tif (!list)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\treturn list;\n\t}\n\n\tgetSaveTimeout()\n\t{\n\t\treturn 250;\n\t}\n\n\tsaveState(state)\n\t{\n\t\tif (!this.isSaveAvailable())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tsuper.saveState(() =>\n\t\t{\n\t\t\tlet list = this.getSaveFileList();\n\t\t\tif (!list)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet storedState = {\n\t\t\t\tcollection: {},\n\t\t\t};\n\n\t\t\tfor (let chatId in list)\n\t\t\t{\n\t\t\t\tif (!list.hasOwnProperty(chatId))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlist[chatId].forEach(fileId =>\n\t\t\t\t{\n\t\t\t\t\tif (!state.index[chatId])\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!state.index[chatId][fileId])\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!storedState.collection[chatId])\n\t\t\t\t\t{\n\t\t\t\t\t\tstoredState.collection[chatId] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tstoredState.collection[chatId].push(\n\t\t\t\t\t\tstate.index[chatId][fileId]\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn storedState;\n\t\t});\n\t}\n\n\tvalidate(fields, options = {})\n\t{\n\t\tconst result = {};\n\n\t\toptions.host = options.host || this.getState().host;\n\n\t\tif (typeof fields.id === \"number\")\n\t\t{\n\t\t\tresult.id = fields.id;\n\t\t}\n\t\telse if (typeof fields.id === \"string\")\n\t\t{\n\t\t\tif (fields.id.startsWith('temporary'))\n\t\t\t{\n\t\t\t\tresult.id = fields.id;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.id = parseInt(fields.id);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.templateId === \"number\")\n\t\t{\n\t\t\tresult.templateId = fields.templateId;\n\t\t}\n\t\telse if (typeof fields.templateId === \"string\")\n\t\t{\n\t\t\tif (fields.templateId.startsWith('temporary'))\n\t\t\t{\n\t\t\t\tresult.templateId = fields.templateId;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.templateId = parseInt(fields.templateId);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.chatId === \"number\" || typeof fields.chatId === \"string\")\n\t\t{\n\t\t\tresult.chatId = parseInt(fields.chatId);\n\t\t}\n\n\t\tif (typeof fields.date !== \"undefined\")\n\t\t{\n\t\t\tresult.date = Utils.date.cast(fields.date);\n\t\t}\n\n\t\tif (typeof fields.type === \"string\")\n\t\t{\n\t\t\tresult.type = fields.type;\n\t\t}\n\n\t\tif (typeof fields.extension === \"string\")\n\t\t{\n\t\t\tresult.extension = fields.extension.toString();\n\n\t\t\tif (result.type === 'image')\n\t\t\t{\n\t\t\t\tresult.icon = 'img';\n\t\t\t}\n\t\t\telse if (result.type === 'video')\n\t\t\t{\n\t\t\t\tresult.icon = 'mov';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.icon = FilesModel.getIconType(result.extension);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.name === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.name = fields.name.toString();\n\t\t}\n\n\n\t\tif (typeof fields.size === \"number\" || typeof fields.size === \"string\")\n\t\t{\n\t\t\tresult.size = parseInt(fields.size);\n\t\t}\n\n\t\tif (typeof fields.image === 'boolean')\n\t\t{\n\t\t\tresult.image = false;\n\t\t}\n\t\telse if (typeof fields.image === 'object' && fields.image)\n\t\t{\n\t\t\tresult.image = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t};\n\n\t\t\tif (typeof fields.image.width === \"string\" || typeof fields.image.width === \"number\")\n\t\t\t{\n\t\t\t\tresult.image.width = parseInt(fields.image.width);\n\t\t\t}\n\t\t\tif (typeof fields.image.height === \"string\" || typeof fields.image.height === \"number\")\n\t\t\t{\n\t\t\t\tresult.image.height = parseInt(fields.image.height);\n\t\t\t}\n\n\t\t\tif (result.image.width <= 0 || result.image.height <= 0)\n\t\t\t{\n\t\t\t\tresult.image = false;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.status === \"string\" && typeof FileStatus[fields.status] !== 'undefined')\n\t\t{\n\t\t\tresult.status = fields.status;\n\t\t}\n\n\t\tif (typeof fields.progress === \"number\" || typeof fields.progress === \"string\")\n\t\t{\n\t\t\tresult.progress = parseInt(fields.progress);\n\t\t}\n\n\t\tif (typeof fields.authorId === \"number\" || typeof fields.authorId === \"string\")\n\t\t{\n\t\t\tresult.authorId = parseInt(fields.authorId);\n\t\t}\n\n\t\tif (typeof fields.authorName === \"string\" || typeof fields.authorName === \"number\")\n\t\t{\n\t\t\tresult.authorName = fields.authorName.toString();\n\t\t}\n\n\t\tif (typeof fields.urlPreview === 'string')\n\t\t{\n\t\t\tif (\n\t\t\t\t!fields.urlPreview\n\t\t\t\t|| fields.urlPreview.startsWith('http')\n\t\t\t\t|| fields.urlPreview.startsWith('bx')\n\t\t\t\t|| fields.urlPreview.startsWith('file')\n\t\t\t)\n\t\t\t{\n\t\t\t\tresult.urlPreview = fields.urlPreview;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.urlPreview = options.host+fields.urlPreview;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.urlDownload === 'string')\n\t\t{\n\t\t\tif (\n\t\t\t\t!fields.urlDownload\n\t\t\t\t|| fields.urlDownload.startsWith('http')\n\t\t\t\t|| fields.urlDownload.startsWith('bx')\n\t\t\t\t|| fields.urlPreview.startsWith('file')\n\t\t\t)\n\t\t\t{\n\t\t\t\tresult.urlDownload = fields.urlDownload;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.urlDownload = options.host+fields.urlDownload;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.urlShow === 'string')\n\t\t{\n\t\t\tif (\n\t\t\t\t!fields.urlShow\n\t\t\t\t|| fields.urlShow.startsWith('http')\n\t\t\t\t|| fields.urlShow.startsWith('bx')\n\t\t\t\t|| fields.urlShow.startsWith('file')\n\t\t\t)\n\t\t\t{\n\t\t\t\tresult.urlShow = fields.urlShow;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.urlShow = options.host+fields.urlShow;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tstatic getType(type)\n\t{\n\t\ttype = type.toString().toLowerCase().split('.').splice(-1)[0];\n\n\t\tswitch(type)\n\t\t{\n\t\t\tcase 'png':\n\t\t\tcase 'jpe':\n\t\t\tcase 'jpg':\n\t\t\tcase 'jpeg':\n\t\t\tcase 'gif':\n\t\t\tcase 'heic':\n\t\t\tcase 'bmp':\n\t\t\t\treturn FileType.image;\n\n\t\t\tcase 'mp4':\n\t\t\tcase 'mkv':\n\t\t\tcase 'webm':\n\t\t\tcase 'mpeg':\n\t\t\tcase 'hevc':\n\t\t\tcase 'avi':\n\t\t\tcase '3gp':\n\t\t\tcase 'flv':\n\t\t\tcase 'm4v':\n\t\t\tcase 'ogg':\n\t\t\tcase 'wmv':\n\t\t\tcase 'mov':\n\t\t\t\treturn FileType.video;\n\n\t\t\tcase 'mp3':\n\t\t\t\treturn FileType.audio;\n\t\t}\n\n\t\treturn FileType.file\n\t}\n\n\tstatic getIconType(extension)\n\t{\n\t\tlet icon = 'empty';\n\n\t\tswitch(extension.toString())\n\t\t{\n\t\t\tcase 'png':\n\t\t\tcase 'jpe':\n\t\t\tcase 'jpg':\n\t\t\tcase 'jpeg':\n\t\t\tcase 'gif':\n\t\t\tcase 'heic':\n\t\t\tcase 'bmp':\n\t\t\t\ticon = 'img';\n\t\t\t\tbreak;\n\n\t\t\tcase 'mp4':\n\t\t\tcase 'mkv':\n\t\t\tcase 'webm':\n\t\t\tcase 'mpeg':\n\t\t\tcase 'hevc':\n\t\t\tcase 'avi':\n\t\t\tcase '3gp':\n\t\t\tcase 'flv':\n\t\t\tcase 'm4v':\n\t\t\tcase 'ogg':\n\t\t\tcase 'wmv':\n\t\t\tcase 'mov':\n\t\t\t\ticon = 'mov';\n\t\t\t\tbreak;\n\n\t\t\tcase 'txt':\n\t\t\t\ticon = 'txt';\n\t\t\t\tbreak;\n\n\t\t\tcase 'doc':\n\t\t\tcase 'docx':\n\t\t\t\ticon = 'doc';\n\t\t\t\tbreak;\n\n\t\t\tcase 'xls':\n\t\t\tcase 'xlsx':\n\t\t\t\ticon = 'xls';\n\t\t\t\tbreak;\n\n\t\t\tcase 'php':\n\t\t\t\ticon = 'php';\n\t\t\t\tbreak;\n\n\t\t\tcase 'pdf':\n\t\t\t\ticon = 'pdf';\n\t\t\t\tbreak;\n\n\t\t\tcase 'ppt':\n\t\t\tcase 'pptx':\n\t\t\t\ticon = 'ppt';\n\t\t\t\tbreak;\n\n\t\t\tcase 'rar':\n\t\t\t\ticon = 'rar';\n\t\t\t\tbreak;\n\n\t\t\tcase 'zip':\n\t\t\tcase '7z':\n\t\t\tcase 'tar':\n\t\t\tcase 'gz':\n\t\t\tcase 'gzip':\n\t\t\t\ticon = 'zip';\n\t\t\t\tbreak;\n\n\t\t\tcase 'set':\n\t\t\t\ticon = 'set';\n\t\t\t\tbreak;\n\n\t\t\tcase 'conf':\n\t\t\tcase 'ini':\n\t\t\tcase 'plist':\n\t\t\t\ticon = 'set';\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn icon;\n\t}\n}\n\nexport {FilesModel};","/**\n * Bitrix Messenger\n * User model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {Utils} from \"im.lib.utils\";\n\nclass RecentModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'recent';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t\tcollection: {\n\t\t\t\tpinned: [],\n\t\t\t\tgeneral: []\n\t\t\t}\n\t\t}\n\t}\n\n\tgetElementState(params = {})\n\t{\n\t\treturn {\n\t\t\tid: 0,\n\t\t\ttemplateId: '',\n\t\t\ttemplate: 'item',\n\t\t\tchatType: 'chat',\n\t\t\tsectionCode: 'general',\n\t\t\tavatar: '',\n\t\t\tcolor: '#048bd0',\n\t\t\ttitle: '',\n\t\t\tmessage: {\n\t\t\t\tid: 0,\n\t\t\t\ttext: '',\n\t\t\t\tdate: new Date()\n\t\t\t},\n\t\t\tcounter: 0,\n\t\t\tpinned: false,\n\t\t\tchatId: 0,\n\t\t\tuserId: 0\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\t\t\tget: state => dialogId =>\n\t\t\t{\n\t\t\t\treturn this.findItem(state.collection, dialogId);\n\t\t\t}\n\t\t};\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tlet result = {};\n\n\t\t\t\tif (payload.pinned instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tresult.pinned = payload.pinned.map(\n\t\t\t\t\t\trecentItem => this.prepareItem(recentItem, { host: store.state.host, sectionCode: 'pinned' })\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse if (typeof payload.pinned !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tlet pinned = [];\n\t\t\t\t\tpinned.push(this.prepareItem(payload.pinned, { host: store.state.host, sectionCode: 'pinned' }));\n\n\t\t\t\t\tresult.pinned = pinned;\n\t\t\t\t}\n\n\t\t\t\tif (payload.general instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tresult.general = payload.general.map(\n\t\t\t\t\t\trecentItem => this.prepareItem(recentItem, { host: store.state.host })\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse if (typeof payload.general !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tlet general = [];\n\t\t\t\t\tgeneral.push(this.prepareItem(payload.general, { host: store.state.host }));\n\n\t\t\t\t\tresult.general = general;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', result);\n\t\t\t},\n\n\t\t\tupdatePlaceholders: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (!(payload.items instanceof Array))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tpayload.items = payload.items.map(element => this.prepareItem(element));\n\n\t\t\t\tpayload.items.forEach((element, index) => {\n\t\t\t\t\tlet placeholderId = 'placeholder' + (payload.firstMessage + index);\n\t\t\t\t\tlet existingPlaceholder = this.findItem(\n\t\t\t\t\t\tstore.state.collection,\n\t\t\t\t\t\tplaceholderId,\n\t\t\t\t\t\t'templateId'\n\t\t\t\t\t);\n\n\t\t\t\t\tlet existingItem = this.findItem(store.state.collection, element.id);\n\n\t\t\t\t\tif (existingItem.element)\n\t\t\t\t\t{\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\t\t\tfields: Object.assign({}, element),\n\t\t\t\t\t\t\tsection: 'general'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tstore.commit('delete', {\n\t\t\t\t\t\t\tindex: existingPlaceholder.index,\n\t\t\t\t\t\t\tsection: 'general'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tindex: existingPlaceholder.index,\n\t\t\t\t\t\t\tfields: Object.assign({}, element),\n\t\t\t\t\t\t\tsection: 'general'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof payload !== 'object' ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\t!payload.id ||\n\t\t\t\t\t!payload.fields\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\n\t\t\t\tlet existingItem = this.findItem(store.state.collection, payload.id);\n\n\t\t\t\tif (!existingItem.element)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\tfields: Object.assign({}, this.validate(payload.fields)),\n\t\t\t\t\tsection: existingItem.element.sectionCode\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tpin: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof payload !== 'object' ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\t!payload.id ||\n\t\t\t\t\ttypeof payload.action !== 'boolean'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\n\t\t\t\tlet existingItem = this.findItem(store.state.collection, payload.id, undefined, payload.action? 'general': 'pinned');\n\n\t\t\t\tif (!existingItem.element)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (payload.action)\n\t\t\t\t{\n\t\t\t\t\tstore.state.collection.pinned.push(\n\t\t\t\t\t\tObject.assign({}, existingItem.element, {\n\t\t\t\t\t\t\tsectionCode: 'pinned',\n\t\t\t\t\t\t\tpinned: true\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t\tstore.state.collection.pinned.sort(this.sortListByMessageDate);\n\n\t\t\t\t\tstore.commit('delete', {\n\t\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\t\tsection: 'general'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tstore.state.collection.general.push(\n\t\t\t\t\t\tObject.assign({}, existingItem.element, {\n\t\t\t\t\t\t\tsectionCode: 'general',\n\t\t\t\t\t\t\tpinned: false\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t\tstore.state.collection.general.sort(this.sortListByMessageDate);\n\n\t\t\t\t\tstore.commit('delete', {\n\t\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\t\tsection: 'pinned'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tclearPlaceholders: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.state.collection.general = store.state.collection.general.filter(element => {\n\t\t\t\t\treturn !element.id.toString().startsWith('placeholder');\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof payload !== 'object' ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\t!payload.id\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\n\t\t\t\tlet existingItem = this.findItem(store.state.collection, payload.id);\n\n\t\t\t\tif (!existingItem.element)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('delete', {\n\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\tsection: existingItem.element.sectionCode\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tset: (state, payload) => {\n\t\t\t\tif (payload.general instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload.general.forEach(element => {\n\t\t\t\t\t\tlet {index, alreadyExists} = this.initCollection(state, element, 'general');\n\n\t\t\t\t\t\tif (alreadyExists)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection.general[index] = Object.assign(\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tstate.collection.general[index],\n\t\t\t\t\t\t\t\telement\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (payload.pinned instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload.pinned.forEach(element => {\n\t\t\t\t\t\tlet {index, alreadyExists} = this.initCollection(state, element, 'pinned');\n\t\t\t\t\t\tif (alreadyExists)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection.pinned[index] = Object.assign(\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tstate.collection.pinned[index],\n\t\t\t\t\t\t\t\telement\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tupdate: (state, payload) => {\n\t\t\t\tif (\n\t\t\t\t\t!payload ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\ttypeof payload.fields !== 'object' ||\n\t\t\t\t\ttypeof payload.index !== 'number' ||\n\t\t\t\t\ttypeof payload.section !== 'string'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstate.collection[payload.section][payload.index] = Object.assign(\n\t\t\t\t\t{},\n\t\t\t\t\tstate.collection[payload.section][payload.index],\n\t\t\t\t\tpayload.fields\n\t\t\t\t);\n\n\t\t\t\tstate.collection[payload.section].sort(this.sortListByMessageDate);\n\t\t\t},\n\n\t\t\tdelete: (state, payload) => {\n\t\t\t\tif (\n\t\t\t\t\t!payload ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\ttypeof payload.index !== 'number' ||\n\t\t\t\t\ttypeof payload.section !== 'string'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstate.collection[payload.section].splice(payload.index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tinitCollection(state, payload, section)\n\t{\n\t\tlet existingItem = this.findItem(state.collection, payload.id, undefined, section);\n\n\t\tif (existingItem.element)\n\t\t{\n\t\t\treturn {index: existingItem.index, alreadyExists: true};\n\t\t}\n\n\t\tlet newLength = state.collection[section].push(Object.assign(\n\t\t\t{},\n\t\t\tthis.getElementState(),\n\t\t\tpayload\n\t\t));\n\n\t\treturn {index: newLength - 1, alreadyExists: false};\n\t}\n\n\tvalidate(fields, options = {})\n\t{\n\t\tconst result = {};\n\n\t\tif (typeof fields.id === \"number\" || typeof fields.id === \"string\")\n\t\t{\n\t\t\tresult.id = fields.id;\n\t\t}\n\n\t\tif (typeof fields.templateId === 'string')\n\t\t{\n\t\t\tresult.templateId = fields.templateId;\n\t\t}\n\n\t\tif (typeof fields.template === 'string')\n\t\t{\n\t\t\tresult.template = fields.template;\n\t\t}\n\n\t\tif (typeof fields.type === \"string\")\n\t\t{\n\t\t\tif (fields.type === 'chat')\n\t\t\t{\n\t\t\t\tif (fields.chat.type === 'open')\n\t\t\t\t{\n\t\t\t\t\tresult.chatType = 'open';\n\t\t\t\t}\n\t\t\t\telse if (fields.chat.type === 'chat')\n\t\t\t\t{\n\t\t\t\t\tresult.chatType = 'chat';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (fields.type === 'user')\n\t\t\t{\n\t\t\t\tresult.chatType = 'user';\n\t\t\t}\n\t\t\telse if (fields.type === 'notification')\n\t\t\t{\n\t\t\t\tresult.chatType = 'notification';\n\t\t\t\tfields.title = 'Notifications';\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.avatar === 'string')\n\t\t{\n\t\t\tlet avatar;\n\n\t\t\tif (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))\n\t\t\t{\n\t\t\t\tavatar = '';\n\t\t\t}\n\t\t\telse if (fields.avatar.startsWith('http'))\n\t\t\t{\n\t\t\t\tavatar = fields.avatar;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tavatar = options.host + fields.avatar;\n\t\t\t}\n\n\t\t\tif (avatar)\n\t\t\t{\n\t\t\t\tresult.avatar = encodeURI(avatar);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.color === 'string')\n\t\t{\n\t\t\tresult.color = fields.color;\n\t\t}\n\n\t\tif (typeof fields.title === \"string\")\n\t\t{\n\t\t\tresult.title = fields.title;\n\t\t}\n\n\t\tif (\n\t\t\ttypeof fields.message === \"object\" &&\n\t\t\t!(fields.message instanceof Array) &&\n\t\t\tfields.message !== null)\n\t\t{\n\t\t\tresult.message = fields.message;\n\t\t}\n\n\t\tif (typeof fields.counter === 'number')\n\t\t{\n\t\t\tresult.counter = fields.counter;\n\t\t}\n\n\t\tif (typeof fields.pinned === 'boolean')\n\t\t{\n\t\t\tresult.pinned = fields.pinned;\n\t\t}\n\n\t\tif (typeof fields.chatId === 'number')\n\t\t{\n\t\t\tresult.chatId = fields.chatId;\n\t\t}\n\n\t\tif (typeof fields.userId === 'number')\n\t\t{\n\t\t\tresult.userId = fields.userId;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tsortListByMessageDate(a, b)\n\t{\n\t\tif (a.message && b.message)\n\t\t{\n\t\t\tlet timestampA = new Date(a.message.date).getTime();\n\t\t\tlet timestampB = new Date(b.message.date).getTime();\n\n\t\t\treturn timestampB - timestampA;\n\t\t}\n\t}\n\n\tprepareItem(item, options = {})\n\t{\n\t\tlet result = this.validate(Object.assign({}, item));\n\n\t\treturn Object.assign({}, this.getElementState(), result, options);\n\t}\n\n\tfindItem(store, value, key = 'id', section = 'general')\n\t{\n\t\tlet result = {};\n\t\tif (typeof store[section] === undefined)\n\t\t{\n\t\t\treturn result;\n\t\t}\n\n\t\tlet elementIndex = store[section].findIndex((element, index) => {\n\t\t\treturn element[key] === value;\n\t\t});\n\n\t\tif (elementIndex !== -1)\n\t\t{\n\t\t\tresult.index = elementIndex;\n\t\t\tresult.element = store[section][elementIndex];\n\n\t\t\treturn result;\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport {RecentModel};"],"names":["ApplicationModel","common","host","getVariable","location","protocol","siteId","userId","languageId","dialog","dialogId","chatId","diskFolderId","messageLimit","enableReadMessages","messageExtraCount","disk","enabled","maxFileSize","mobile","keyboardShow","device","type","DeviceType","desktop","orientation","DeviceOrientation","portrait","options","quoteEnable","quoteFromRight","autoplayVideo","darkBackground","showSmiles","error","active","code","description","Object","assign","set","store","payload","commit","validate","hideSmiles","state","hasChange","group","hasOwnProperty","field","isSaveNeeded","saveState","increaseDialogExtraCount","count","decreaseDialogExtraCount","newCounter","clearDialogExtraCount","fields","result","toString","startsWith","substr","parseInt","isNaN","VuexBuilderModel","IntersectionType","empty","equal","none","found","foundReverse","MessagesModel","created","collection","mutationType","saveMessageList","saveFileList","saveUserList","templateId","templateType","id","authorId","date","Date","text","textConverted","params","TYPE","COMPONENT_ID","push","unread","sending","retry","blink","getMutationType","initialType","MutationType","appliedType","getLastId","length","lastId","i","element","getMessage","messageId","index","get","getBlank","getElementState","getSaveFileList","getSaveUserList","add","getTime","dispatch","actionStart","test","Vue","nextTick","actionError","actionFinish","Array","map","message","prepareMessage","insertType","data","setAfter","setBefore","update","findIndex","el","setTimeout","delete","elements","clear","applyMutationType","readMessages","readId","unreadMessages","unreadId","initCollection","setMutationType","chats","chatsSave","forEach","StorageLimit","messages","filter","includes","intersection","manageCacheBeforeSet","reverse","foundElements","removeIntersectionCacheElements","clearTimeout","removeIntersectionCacheTimeout","noneElements","scrollStickToTop","scrollMessageId","unshift","getters","Set","lastElementId","needApplySort","sort","a","b","isSaveState","applied","saveNeeded","updateSubordinateStates","concat","cache","recursive","reverseResult","isSaveAvailable","slice","FILE_ID","updateSaveLists","storedState","chat_id","Utils","cast","textOriginal","convertToHtml","isConverted","text_converted","senderId","author_id","system","validateParams","BX","isComponent","like","e","hasResultElements","quote","image","highlightText","enableBigSmile","trim","replace","quoteSign","indexOf","textPrepare","split","textPrepareFlag","join","decodeBbCode","whole","p1","p2","p3","p4","offset","changed","aInner","match","RegExp","doubleSmileSize","start","width","middle","height","end","textOnly","codeReplacement","openlines","number","htmlspecialchars","historyId","command","html","textElementSize","url","attrs","size","title","attributes","name","parentNode","innerHTML","src","DialoguesModel","saveDialogList","saveChatList","writingList","quoteId","counter","unreadLastId","managerList","readedList","textareaMessage","editId","init","owner","extranet","avatar","color","entityType","entityId","entityData1","entityData2","entityData3","dateCreate","restrictions","extend","leave","leaveOwner","rename","getByChatId","getQuoteId","getEditId","canSaveChat","canSaveDialog","isPrivateDialog","updateWriting","action","userName","actionName","updateReaded","increaseCounter","increasedCounter","decreaseCounter","decreasedCounter","saveDialog","dialogues","cloneState","getElementStateSaveException","getState","dialog_id","unread_id","unread_last_id","readed_list","record","user_id","user_name","message_id","writing_list","manager_list","mute_list","muteList","ownerId","endsWith","encodeURI","entity_type","entity_id","entity_data_1","entity_data_2","entity_data_3","date_create","dateLastOpen","AVATAR","EXTEND","LEAVE","LEAVE_OWNER","RENAME","UsersModel","startOnlineCheckInterval","onlineList","mobileOnlineList","absentList","firstName","lastName","workPosition","gender","birthday","isBirthday","network","bot","connector","externalAuthId","status","idle","lastActivityDate","mobileLastDate","isOnline","isMobileOnline","absent","isAbsent","departments","phones","workPhone","personalMobile","personalPhone","innerPhone","getTemporary","user","getOnlineStatus","addToOnlineList","mobileStatus","isMobileActive","addToMobileOnlineList","today","format","timeToNextMidnight","getTimeToNextMidnight","addToAbsentList","timeToNextDay","setInterval","startAbsentCheckInterval","newActivityDate","db","list","exceptionList","first_name","last_name","elementsOfName","work_position","external_auth_id","last_activity_date","mobile_last_date","departmentId","work_phone","personal_mobile","personal_phone","inner_phone","nextMidnight","setHours","currentTime","absentEnd","intervalTime","users","FilesModel","extension","icon","FileStatus","done","progress","authorName","urlPreview","urlShow","urlDownload","fileId","getList","file","getIconType","toLowerCase","splice","FileType","video","audio","RecentModel","pinned","general","template","chatType","sectionCode","findItem","recentItem","prepareItem","updatePlaceholders","items","placeholderId","firstMessage","existingPlaceholder","existingItem","section","pin","undefined","sortListByMessageDate","clearPlaceholders","alreadyExists","newLength","chat","timestampA","timestampB","item","value","key","elementIndex"],"mappings":"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"}dist/registry.bundle.map.js000066400000232167147732346740011777 0ustar00{"version":3,"sources":["registry.bundle.js"],"names":["this","BX","Messenger","exports","im_const","ui_vue","ui_vue_vuex","im_lib_utils","ApplicationModel","_VuexBuilderModel","babelHelpers","inherits","classCallCheck","possibleConstructorReturn","getPrototypeOf","apply","arguments","createClass","key","value","getName","getState","common","host","getVariable","location","protocol","siteId","userId","languageId","dialog","dialogId","chatId","diskFolderId","messageLimit","enableReadMessages","messageExtraCount","disk","enabled","maxFileSize","mobile","keyboardShow","device","type","DeviceType","desktop","orientation","DeviceOrientation","portrait","options","quoteEnable","quoteFromRight","autoplayVideo","darkBackground","showSmiles","error","active","code","description","getStateSaveException","Object","assign","getActions","_this","set","store","payload","commit","validate","hideSmiles","getMutations","_this2","state","hasChange","group","hasOwnProperty","field","isSaveNeeded","saveState","increaseDialogExtraCount","length","undefined","_payload$count","count","decreaseDialogExtraCount","_payload$count2","newCounter","clearDialogExtraCount","fields","result","typeof","toString","startsWith","substr","parseInt","isNaN","VuexBuilderModel","IntersectionType","empty","equal","none","found","foundReverse","MessagesModel","created","collection","mutationType","saveMessageList","saveFileList","saveUserList","getElementState","templateId","templateType","id","authorId","date","Date","text","textConverted","params","TYPE","COMPONENT_ID","push","unread","sending","retry","blink","getGetters","getMutationType","initialType","MutationType","appliedType","getLastId","lastId","i","element","getMessage","messageId","index","get","getBlank","getSaveFileList","getSaveUserList","add","getTime","dispatch","actionStart","test","Vue","nextTick","actionError","actionFinish","Array","map","message","prepareMessage","insertType","data","setAfter","setBefore","update","findIndex","el","setTimeout","delete","_delete","elements","clear","applyMutationType","readMessages","readId","unreadMessages","unreadId","_this3","initCollection","setMutationType","chats","chatsSave","forEach","_loop","StorageLimit","messages","filter","includes","intersection","manageCacheBeforeSet","toConsumableArray","reverse","foundElements","removeIntersectionCacheElements","clearTimeout","removeIntersectionCacheTimeout","noneElements","scrollStickToTop","scrollMessageId","_ret","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_loop2","_step","unshift","getters","_iterator","Symbol","iterator","next","done","err","return","Set","lastElementId","needApplySort","sort","a","b","objectSpread","isSaveState","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","applied","saveNeeded","updateSubordinateStates","concat","cache","recursive","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_iterator3","_step3","reverseResult","updateSaveLists","isSaveAvailable","slice","FILE_ID","getSaveTimeout","prototype","call","storedState","_loop3","_chatId","_ret2","chat_id","Utils","cast","textOriginal","convertToHtml","isConverted","text_converted","senderId","author_id","system","validateParams","isComponent","like","e","hasResultElements","_field","_params$quote","quote","_params$image","image","_params$text","_params$highlightText","highlightText","_params$isConverted","_params$enableBigSmil","enableBigSmile","trim","replace","quoteSign","indexOf","textPrepare","split","join","decodeBbCode","whole","p1","p2","p3","p4","offset","changed","aInner","match","RegExp","doubleSmileSize","start","width","middle","height","end","textOnly","_params$textOnly","_params$enableBigSmil2","codeReplacement","openlines","number","htmlspecialchars","historyId","command","html","textElementSize","url","attrs","src","border","size","title","attributes","name","hideErrorImage","parentNode","innerHTML","DialoguesModel","saveDialogList","saveChatList","getElementStateSaveException","writingList","quoteId","counter","unreadLastId","managerList","readedList","textareaMessage","editId","init","owner","extranet","avatar","color","entityType","entityId","entityData1","entityData2","entityData3","dateCreate","restrictions","extend","leave","leaveOwner","rename","getByChatId","getQuoteId","getEditId","canSaveChat","canSaveDialog","isPrivateDialog","updateWriting","action","userName","actionName","_writingList","updateReaded","increaseCounter","increasedCounter","decreaseCounter","decreasedCounter","saveDialog","dialogues","_this4","cloneState","dialog_id","unread_id","unread_last_id","readed_list","record","user_id","user_name","message_id","writing_list","manager_list","mute_list","muteList","ownerId","endsWith","encodeURI","entity_type","entity_id","entity_data_1","entity_data_2","entity_data_3","date_create","dateLastOpen","AVATAR","EXTEND","LEAVE","LEAVE_OWNER","RENAME","UsersModel","startOnlineCheckInterval","onlineList","mobileOnlineList","absentList","_params$id","_params$name","_params$firstName","firstName","_params$lastName","lastName","workPosition","gender","birthday","isBirthday","network","bot","connector","externalAuthId","status","idle","lastActivityDate","mobileLastDate","isOnline","isMobileOnline","absent","isAbsent","departments","phones","workPhone","personalMobile","personalPhone","innerPhone","getTemporary","user","getOnlineStatus","addToOnlineList","mobileStatus","isMobileActive","addToMobileOnlineList","today","format","timeToNextMidnight","getTimeToNextMidnight","addToAbsentList","_timeToNextMidnight","timeToNextDay","setInterval","startAbsentCheckInterval","newActivityDate","db","list","exceptionList","first_name","last_name","elementsOfName","_elementsOfName","work_position","external_auth_id","last_activity_date","mobile_last_date","departmentId","work_phone","personal_mobile","personal_phone","inner_phone","nextMidnight","setHours","currentTime","absentEnd","_this5","intervalTime","users","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_loop4","_step4","_iterator4","_ret3","FilesModel","_params$chatId","extension","icon","FileStatus","progress","authorName","urlPreview","urlShow","urlDownload","fileId","getList","file","getLoadedState","getIconType","getType","toLowerCase","splice","FileType","video","audio","RecentModel","pinned","general","template","chatType","sectionCode","findItem","recentItem","prepareItem","updatePlaceholders","items","placeholderId","firstMessage","existingPlaceholder","existingItem","section","pin","sortListByMessageDate","clearPlaceholders","_this3$initCollection","alreadyExists","_this3$initCollection2","newLength","chat","timestampA","timestampB","item","elementIndex","Model","Const","Lib"],"mappings":"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","file":"registry.bundle.map.js"}dist/registry.bundle.js000066400000425073147732346740011223 0ustar00this.BX = this.BX || {};
this.BX.Messenger = this.BX.Messenger || {};
(function (exports,im_const,ui_vue,ui_vue_vuex,im_lib_utils) {
	'use strict';

	/**
	 * Bitrix Messenger
	 * Application model (Vuex Builder model)
	 *
	 * @package bitrix
	 * @subpackage im
	 * @copyright 2001-2019 Bitrix
	 */

	var ApplicationModel =
	/*#__PURE__*/
	function (_VuexBuilderModel) {
	  babelHelpers.inherits(ApplicationModel, _VuexBuilderModel);

	  function ApplicationModel() {
	    babelHelpers.classCallCheck(this, ApplicationModel);
	    return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(ApplicationModel).apply(this, arguments));
	  }

	  babelHelpers.createClass(ApplicationModel, [{
	    key: "getName",
	    value: function getName() {
	      return 'application';
	    }
	  }, {
	    key: "getState",
	    value: function getState() {
	      return {
	        common: {
	          host: this.getVariable('common.host', location.protocol + '//' + location.host),
	          siteId: this.getVariable('common.siteId', 'default'),
	          userId: this.getVariable('common.userId', 0),
	          languageId: this.getVariable('common.languageId', 'en')
	        },
	        dialog: {
	          dialogId: this.getVariable('dialog.dialogId', '0'),
	          chatId: this.getVariable('dialog.chatId', 0),
	          diskFolderId: this.getVariable('dialog.diskFolderId', 0),
	          messageLimit: this.getVariable('dialog.messageLimit', 20),
	          enableReadMessages: this.getVariable('dialog.enableReadMessages', true),
	          messageExtraCount: 0
	        },
	        disk: {
	          enabled: false,
	          maxFileSize: 5242880
	        },
	        mobile: {
	          keyboardShow: false
	        },
	        device: {
	          type: this.getVariable('device.type', im_const.DeviceType.desktop),
	          orientation: this.getVariable('device.orientation', im_const.DeviceOrientation.portrait)
	        },
	        options: {
	          quoteEnable: this.getVariable('options.quoteEnable', true),
	          quoteFromRight: this.getVariable('options.quoteFromRight', true),
	          autoplayVideo: this.getVariable('options.autoplayVideo', true),
	          darkBackground: this.getVariable('options.darkBackground', false),
	          showSmiles: false
	        },
	        error: {
	          active: false,
	          code: '',
	          description: ''
	        }
	      };
	    }
	  }, {
	    key: "getStateSaveException",
	    value: function getStateSaveException() {
	      return Object.assign({
	        common: this.getVariable('saveException.common', null),
	        dialog: this.getVariable('saveException.dialog', null),
	        mobile: this.getVariable('saveException.mobile', null),
	        device: this.getVariable('saveException.device', null),
	        error: this.getVariable('saveException.error', null)
	      });
	    }
	  }, {
	    key: "getActions",
	    value: function getActions() {
	      var _this = this;

	      return {
	        set: function set(store, payload) {
	          store.commit('set', _this.validate(payload));
	        },
	        showSmiles: function showSmiles(store, payload) {
	          store.commit('showSmiles');
	        },
	        hideSmiles: function hideSmiles(store, payload) {
	          store.commit('hideSmiles');
	        }
	      };
	    }
	  }, {
	    key: "getMutations",
	    value: function getMutations() {
	      var _this2 = this;

	      return {
	        set: function set(state, payload) {
	          var hasChange = false;

	          for (var group in payload) {
	            if (!payload.hasOwnProperty(group)) {
	              continue;
	            }

	            for (var field in payload[group]) {
	              if (!payload[group].hasOwnProperty(field)) {
	                continue;
	              }

	              state[group][field] = payload[group][field];
	              hasChange = true;
	            }
	          }

	          if (hasChange && _this2.isSaveNeeded(payload)) {
	            _this2.saveState(state);
	          }
	        },
	        increaseDialogExtraCount: function increaseDialogExtraCount(state) {
	          var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	          var _payload$count = payload.count,
	              count = _payload$count === void 0 ? 1 : _payload$count;
	          state.dialog.messageExtraCount += count;
	        },
	        decreaseDialogExtraCount: function decreaseDialogExtraCount(state) {
	          var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	          var _payload$count2 = payload.count,
	              count = _payload$count2 === void 0 ? 1 : _payload$count2;
	          var newCounter = state.dialog.messageExtraCount - count;

	          if (newCounter <= 0) {
	            newCounter = 0;
	          }

	          state.dialog.messageExtraCount = newCounter;
	        },
	        clearDialogExtraCount: function clearDialogExtraCount(state) {
	          state.dialog.messageExtraCount = 0;
	        },
	        showSmiles: function showSmiles(state) {
	          state.options.showSmiles = true;
	        },
	        hideSmiles: function hideSmiles(state) {
	          state.options.showSmiles = false;
	        }
	      };
	    }
	  }, {
	    key: "validate",
	    value: function validate(fields) {
	      var result = {};

	      if (babelHelpers.typeof(fields.common) === 'object' && fields.common) {
	        result.common = {};

	        if (typeof fields.common.userId === 'number') {
	          result.common.userId = fields.common.userId;
	        }

	        if (typeof fields.common.languageId === 'string') {
	          result.common.languageId = fields.common.languageId;
	        }
	      }

	      if (babelHelpers.typeof(fields.dialog) === 'object' && fields.dialog) {
	        result.dialog = {};

	        if (typeof fields.dialog.dialogId === 'number') {
	          result.dialog.dialogId = fields.dialog.dialogId.toString();
	          result.dialog.chatId = 0;
	        } else if (typeof fields.dialog.dialogId === 'string') {
	          result.dialog.dialogId = fields.dialog.dialogId;

	          if (typeof fields.dialog.chatId !== 'number') {
	            var chatId = fields.dialog.dialogId;

	            if (chatId.startsWith('chat')) {
	              chatId = fields.dialog.dialogId.substr(4);
	            }

	            chatId = parseInt(chatId);
	            result.dialog.chatId = !isNaN(chatId) ? chatId : 0;
	            fields.dialog.chatId = result.dialog.chatId;
	          }
	        }

	        if (typeof fields.dialog.chatId === 'number') {
	          result.dialog.chatId = fields.dialog.chatId;
	        }

	        if (typeof fields.dialog.diskFolderId === 'number') {
	          result.dialog.diskFolderId = fields.dialog.diskFolderId;
	        }

	        if (typeof fields.dialog.messageLimit === 'number') {
	          result.dialog.messageLimit = fields.dialog.messageLimit;
	        }

	        if (typeof fields.dialog.messageExtraCount === 'number') {
	          result.dialog.messageExtraCount = fields.dialog.messageExtraCount;
	        }

	        if (typeof fields.dialog.enableReadMessages === 'boolean') {
	          result.dialog.enableReadMessages = fields.dialog.enableReadMessages;
	        }
	      }

	      if (babelHelpers.typeof(fields.disk) === 'object' && fields.disk) {
	        result.disk = {};

	        if (typeof fields.disk.enabled === 'boolean') {
	          result.disk.enabled = fields.disk.enabled;
	        }

	        if (typeof fields.disk.maxFileSize === 'number') {
	          result.disk.maxFileSize = fields.disk.maxFileSize;
	        }
	      }

	      if (babelHelpers.typeof(fields.mobile) === 'object' && fields.mobile) {
	        result.mobile = {};

	        if (typeof fields.mobile.keyboardShow === 'boolean') {
	          result.mobile.keyboardShow = fields.mobile.keyboardShow;
	        }
	      }

	      if (babelHelpers.typeof(fields.device) === 'object' && fields.device) {
	        result.device = {};

	        if (typeof fields.device.type === 'string' && typeof im_const.DeviceType[fields.device.type] !== 'undefined') {
	          result.device.type = fields.device.type;
	        }

	        if (typeof fields.device.orientation === 'string' && typeof im_const.DeviceOrientation[fields.device.orientation] !== 'undefined') {
	          result.device.orientation = fields.device.orientation;
	        }
	      }

	      if (babelHelpers.typeof(fields.error) === 'object' && fields.error) {
	        if (typeof fields.error.active === 'boolean') {
	          result.error = {
	            active: fields.error.active,
	            code: fields.error.code.toString() || '',
	            description: fields.error.description.toString() || ''
	          };
	        }
	      }

	      return result;
	    }
	  }]);
	  return ApplicationModel;
	}(ui_vue_vuex.VuexBuilderModel);

	/**
	 * Bitrix Messenger
	 * Message model (Vuex Builder model)
	 *
	 * @package bitrix
	 * @subpackage im
	 * @copyright 2001-2019 Bitrix
	 */
	var IntersectionType = {
	  empty: 'empty',
	  equal: 'equal',
	  none: 'none',
	  found: 'found',
	  foundReverse: 'foundReverse'
	};

	var MessagesModel =
	/*#__PURE__*/
	function (_VuexBuilderModel) {
	  babelHelpers.inherits(MessagesModel, _VuexBuilderModel);

	  function MessagesModel() {
	    babelHelpers.classCallCheck(this, MessagesModel);
	    return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(MessagesModel).apply(this, arguments));
	  }

	  babelHelpers.createClass(MessagesModel, [{
	    key: "getName",
	    value: function getName() {
	      return 'messages';
	    }
	  }, {
	    key: "getState",
	    value: function getState() {
	      return {
	        created: 0,
	        collection: {},
	        mutationType: {},
	        saveMessageList: {},
	        saveFileList: {},
	        saveUserList: {},
	        host: this.getVariable('host', location.protocol + '//' + location.host)
	      };
	    }
	  }, {
	    key: "getElementState",
	    value: function getElementState() {
	      return {
	        templateId: 0,
	        templateType: 'message',
	        id: 0,
	        chatId: 0,
	        authorId: 0,
	        date: new Date(),
	        text: "",
	        textConverted: "",
	        params: {
	          TYPE: 'default',
	          COMPONENT_ID: 'bx-im-view-message'
	        },
	        push: false,
	        unread: false,
	        sending: false,
	        error: false,
	        retry: false,
	        blink: false
	      };
	    }
	  }, {
	    key: "getGetters",
	    value: function getGetters() {
	      var _this = this;

	      return {
	        getMutationType: function getMutationType(state) {
	          return function (chatId) {
	            if (!state.mutationType[chatId]) {
	              return {
	                initialType: im_const.MutationType.none,
	                appliedType: im_const.MutationType.none
	              };
	            }

	            return state.mutationType[chatId];
	          };
	        },
	        getLastId: function getLastId(state) {
	          return function (chatId) {
	            if (!state.collection[chatId] || state.collection[chatId].length <= 0) {
	              return null;
	            }

	            var lastId = 0;

	            for (var i = 0; i < state.collection[chatId].length; i++) {
	              var element = state.collection[chatId][i];

	              if (element.push || element.sending || element.id.toString().startsWith('temporary')) {
	                continue;
	              }

	              if (lastId < element.id) {
	                lastId = element.id;
	              }
	            }

	            return lastId ? lastId : null;
	          };
	        },
	        getMessage: function getMessage(state) {
	          return function (chatId, messageId) {
	            if (!state.collection[chatId] || state.collection[chatId].length <= 0) {
	              return null;
	            }

	            for (var index = state.collection[chatId].length - 1; index >= 0; index--) {
	              if (state.collection[chatId][index].id === messageId) {
	                return state.collection[chatId][index];
	              }
	            }

	            return null;
	          };
	        },
	        get: function get(state) {
	          return function (chatId) {
	            if (!state.collection[chatId] || state.collection[chatId].length <= 0) {
	              return [];
	            }

	            return state.collection[chatId];
	          };
	        },
	        getBlank: function getBlank(state) {
	          return function (params) {
	            return _this.getElementState();
	          };
	        },
	        getSaveFileList: function getSaveFileList(state) {
	          return function (params) {
	            return state.saveFileList;
	          };
	        },
	        getSaveUserList: function getSaveUserList(state) {
	          return function (params) {
	            return state.saveUserList;
	          };
	        }
	      };
	    }
	  }, {
	    key: "getActions",
	    value: function getActions() {
	      var _this2 = this;

	      return {
	        add: function add(store, payload) {
	          var result = _this2.validate(Object.assign({}, payload));

	          result.params = Object.assign({}, _this2.getElementState().params, result.params);
	          result.id = 'temporary' + new Date().getTime() + store.state.created;
	          result.templateId = result.id;
	          result.unread = false;
	          store.commit('add', Object.assign({}, _this2.getElementState(), result));

	          if (payload.sending !== false) {
	            store.dispatch('actionStart', {
	              id: result.id,
	              chatId: result.chatId
	            });
	          }

	          return result.id;
	        },
	        actionStart: function actionStart(store, payload) {
	          if (/^\d+$/.test(payload.id)) {
	            payload.id = parseInt(payload.id);
	          }

	          payload.chatId = parseInt(payload.chatId);
	          ui_vue.Vue.nextTick(function () {
	            store.commit('update', {
	              id: payload.id,
	              chatId: payload.chatId,
	              fields: {
	                sending: true
	              }
	            });
	          });
	        },
	        actionError: function actionError(store, payload) {
	          if (/^\d+$/.test(payload.id)) {
	            payload.id = parseInt(payload.id);
	          }

	          payload.chatId = parseInt(payload.chatId);
	          ui_vue.Vue.nextTick(function () {
	            store.commit('update', {
	              id: payload.id,
	              chatId: payload.chatId,
	              fields: {
	                sending: false,
	                error: true,
	                retry: payload.retry !== false
	              }
	            });
	          });
	        },
	        actionFinish: function actionFinish(store, payload) {
	          if (/^\d+$/.test(payload.id)) {
	            payload.id = parseInt(payload.id);
	          }

	          payload.chatId = parseInt(payload.chatId);
	          ui_vue.Vue.nextTick(function () {
	            store.commit('update', {
	              id: payload.id,
	              chatId: payload.chatId,
	              fields: {
	                sending: false,
	                error: false,
	                retry: false
	              }
	            });
	          });
	        },
	        set: function set(store, payload) {
	          if (payload instanceof Array) {
	            payload = payload.map(function (message) {
	              return _this2.prepareMessage(message, {
	                host: store.state.host
	              });
	            });
	          } else {
	            var result = _this2.prepareMessage(payload, {
	              host: store.state.host
	            });

	            (payload = []).push(result);
	          }

	          store.commit('set', {
	            insertType: im_const.MutationType.set,
	            data: payload
	          });
	        },
	        setAfter: function setAfter(store, payload) {
	          if (payload instanceof Array) {
	            payload = payload.map(function (message) {
	              return _this2.prepareMessage(message);
	            });
	          } else {
	            var result = _this2.prepareMessage(payload);

	            (payload = []).push(result);
	          }

	          store.commit('set', {
	            insertType: im_const.MutationType.setAfter,
	            data: payload
	          });
	        },
	        setBefore: function setBefore(store, payload) {
	          if (payload instanceof Array) {
	            payload = payload.map(function (message) {
	              return _this2.prepareMessage(message);
	            });
	          } else {
	            var result = _this2.prepareMessage(payload);

	            (payload = []).push(result);
	          }

	          store.commit('set', {
	            insertType: im_const.MutationType.setBefore,
	            data: payload
	          });
	        },
	        update: function update(store, payload) {
	          if (/^\d+$/.test(payload.id)) {
	            payload.id = parseInt(payload.id);
	          }

	          if (/^\d+$/.test(payload.chatId)) {
	            payload.chatId = parseInt(payload.chatId);
	          }

	          store.commit('initCollection', {
	            chatId: payload.chatId
	          });
	          var index = store.state.collection[payload.chatId].findIndex(function (el) {
	            return el.id === payload.id;
	          });

	          if (index < 0) {
	            return false;
	          }

	          var result = _this2.validate(Object.assign({}, payload.fields));

	          if (result.params) {
	            result.params = Object.assign({}, _this2.getElementState().params, store.state.collection[payload.chatId][index].params, result.params);
	          }

	          store.commit('update', {
	            id: payload.id,
	            chatId: payload.chatId,
	            index: index,
	            fields: result
	          });

	          if (payload.fields.blink) {
	            setTimeout(function () {
	              store.commit('update', {
	                id: payload.id,
	                chatId: payload.chatId,
	                fields: {
	                  blink: false
	                }
	              });
	            }, 1000);
	          }

	          return true;
	        },
	        delete: function _delete(store, payload) {
	          if (!(payload.id instanceof Array)) {
	            payload.id = [payload.id];
	          }

	          payload.id = payload.id.map(function (id) {
	            if (/^\d+$/.test(id)) {
	              id = parseInt(id);
	            }

	            return id;
	          });
	          store.commit('delete', {
	            chatId: payload.chatId,
	            elements: payload.id
	          });
	          return true;
	        },
	        clear: function clear(store, payload) {
	          payload.chatId = parseInt(payload.chatId);
	          store.commit('clear', {
	            chatId: payload.chatId
	          });
	          return true;
	        },
	        applyMutationType: function applyMutationType(store, payload) {
	          payload.chatId = parseInt(payload.chatId);
	          store.commit('applyMutationType', {
	            chatId: payload.chatId
	          });
	          return true;
	        },
	        readMessages: function readMessages(store, payload) {
	          payload.readId = parseInt(payload.readId) || 0;
	          payload.chatId = parseInt(payload.chatId);

	          if (typeof store.state.collection[payload.chatId] === 'undefined') {
	            return {
	              count: 0
	            };
	          }

	          var count = 0;

	          for (var index = store.state.collection[payload.chatId].length - 1; index >= 0; index--) {
	            var element = store.state.collection[payload.chatId][index];
	            if (!element.unread) continue;

	            if (payload.readId === 0 || element.id <= payload.readId) {
	              count++;
	            }
	          }

	          store.commit('readMessages', {
	            chatId: payload.chatId,
	            readId: payload.readId
	          });
	          return {
	            count: count
	          };
	        },
	        unreadMessages: function unreadMessages(store, payload) {
	          payload.unreadId = parseInt(payload.unreadId) || 0;
	          payload.chatId = parseInt(payload.chatId);

	          if (typeof store.state.collection[payload.chatId] === 'undefined' || !payload.unreadId) {
	            return {
	              count: 0
	            };
	          }

	          var count = 0;

	          for (var index = store.state.collection[payload.chatId].length - 1; index >= 0; index--) {
	            var element = store.state.collection[payload.chatId][index];
	            if (element.unread) continue;

	            if (element.id >= payload.unreadId) {
	              count++;
	            }
	          }

	          store.commit('unreadMessages', {
	            chatId: payload.chatId,
	            unreadId: payload.unreadId
	          });
	          return {
	            count: count
	          };
	        }
	      };
	    }
	  }, {
	    key: "getMutations",
	    value: function getMutations() {
	      var _this3 = this;

	      return {
	        initCollection: function initCollection(state, payload) {
	          return _this3.initCollection(state, payload);
	        },
	        add: function add(state, payload) {
	          _this3.initCollection(state, {
	            chatId: payload.chatId
	          });

	          _this3.setMutationType(state, {
	            chatId: payload.chatId,
	            initialType: im_const.MutationType.add
	          });

	          state.collection[payload.chatId].push(payload);
	          state.saveMessageList[payload.chatId].push(payload.id);
	          state.created += 1;

	          _this3.saveState(state, payload.chatId);
	        },
	        set: function set(state, payload) {
	          var chats = [];
	          var chatsSave = [];
	          var mutationType = {};
	          mutationType.initialType = payload.insertType;

	          if (payload.insertType === im_const.MutationType.set) {
	            (function () {
	              payload.insertType = im_const.MutationType.setAfter;
	              var elements = {};
	              payload.data.forEach(function (element) {
	                if (!elements[element.chatId]) {
	                  elements[element.chatId] = [];
	                }

	                elements[element.chatId].push(element.id);
	              });

	              var _loop = function _loop(chatId) {
	                if (!elements.hasOwnProperty(chatId)) return "continue";

	                _this3.initCollection(state, {
	                  chatId: chatId
	                });

	                if (state.saveMessageList[chatId].length > elements[chatId].length || elements[chatId].length < im_const.StorageLimit.messages) {
	                  state.collection[chatId] = state.collection[chatId].filter(function (element) {
	                    return elements[chatId].includes(element.id);
	                  });
	                  state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(function (id) {
	                    return elements[chatId].includes(id);
	                  });
	                }

	                var intersection = _this3.manageCacheBeforeSet(babelHelpers.toConsumableArray(state.saveMessageList[chatId].reverse()), elements[chatId]);

	                if (intersection.type === IntersectionType.none) {
	                  if (intersection.foundElements.length > 0) {
	                    state.collection[chatId] = state.collection[chatId].filter(function (element) {
	                      return !intersection.foundElements.includes(element.id);
	                    });
	                    state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(function (id) {
	                      return !intersection.foundElements.includes(id);
	                    });
	                  }

	                  _this3.removeIntersectionCacheElements = state.collection[chatId].map(function (element) {
	                    return element.id;
	                  });
	                  clearTimeout(_this3.removeIntersectionCacheTimeout);
	                  _this3.removeIntersectionCacheTimeout = setTimeout(function () {
	                    state.collection[chatId] = state.collection[chatId].filter(function (element) {
	                      return !_this3.removeIntersectionCacheElements.includes(element.id);
	                    });
	                    state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(function (id) {
	                      return !_this3.removeIntersectionCacheElements.includes(id);
	                    });
	                    _this3.removeIntersectionCacheElements = [];
	                  }, 1000);
	                } else {
	                  if (intersection.type === IntersectionType.foundReverse) {
	                    payload.insertType = im_const.MutationType.setBefore;
	                    payload.data = payload.data.reverse();
	                  }
	                }

	                if (intersection.foundElements.length > 0) {
	                  if (intersection.type === IntersectionType.found && intersection.noneElements[0]) {
	                    mutationType.scrollStickToTop = false;
	                    mutationType.scrollMessageId = intersection.foundElements[intersection.foundElements.length - 1];
	                  } else {
	                    mutationType.scrollStickToTop = false;
	                    mutationType.scrollMessageId = 0;
	                  }
	                } else if (intersection.type === IntersectionType.none) {
	                  mutationType.scrollStickToTop = false;
	                  mutationType.scrollMessageId = payload.data[0].id;
	                }
	              };

	              for (var chatId in elements) {
	                var _ret = _loop(chatId);

	                if (_ret === "continue") continue;
	              }
	            })();
	          }

	          mutationType.appliedType = payload.insertType;
	          var _iteratorNormalCompletion = true;
	          var _didIteratorError = false;
	          var _iteratorError = undefined;

	          try {
	            var _loop2 = function _loop2() {
	              var element = _step.value;

	              _this3.initCollection(state, {
	                chatId: element.chatId
	              });

	              var index = state.collection[element.chatId].findIndex(function (el) {
	                return el.id === element.id;
	              });

	              if (index > -1) {
	                delete element.templateId;
	                state.collection[element.chatId][index] = Object.assign(state.collection[element.chatId][index], element);
	              } else if (payload.insertType === im_const.MutationType.setBefore) {
	                state.collection[element.chatId].unshift(element);
	              } else if (payload.insertType === im_const.MutationType.setAfter) {
	                state.collection[element.chatId].push(element);
	              }

	              chats.push(element.chatId);

	              if (_this3.store.getters['dialogues/canSaveChat'] && _this3.store.getters['dialogues/canSaveChat'](element.chatId)) {
	                chatsSave.push(element.chatId);
	              }
	            };

	            for (var _iterator = payload.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
	              _loop2();
	            }
	          } catch (err) {
	            _didIteratorError = true;
	            _iteratorError = err;
	          } finally {
	            try {
	              if (!_iteratorNormalCompletion && _iterator.return != null) {
	                _iterator.return();
	              }
	            } finally {
	              if (_didIteratorError) {
	                throw _iteratorError;
	              }
	            }
	          }

	          chats = babelHelpers.toConsumableArray(new Set(chats));
	          chatsSave = babelHelpers.toConsumableArray(new Set(chatsSave)); // check array for correct order of messages

	          if (mutationType.initialType === im_const.MutationType.set) {
	            chats.forEach(function (chatId) {
	              var lastElementId = 0;
	              var needApplySort = false;

	              for (var i = 0; i < state.collection[chatId].length; i++) {
	                var element = state.collection[chatId][i];

	                if (element.id < lastElementId) {
	                  needApplySort = true;
	                  break;
	                }

	                lastElementId = element.id;
	              }

	              if (needApplySort) {
	                state.collection[chatId].sort(function (a, b) {
	                  return a.id - b.id;
	                });
	              }
	            });
	          }

	          chats.forEach(function (chatId) {
	            _this3.setMutationType(state, babelHelpers.objectSpread({
	              chatId: chatId
	            }, mutationType));
	          });

	          if (mutationType.initialType !== im_const.MutationType.setBefore) {
	            chatsSave.forEach(function (chatId) {
	              _this3.saveState(state, chatId);
	            });
	          }
	        },
	        update: function update(state, payload) {
	          _this3.initCollection(state, {
	            chatId: payload.chatId
	          });

	          var index = -1;

	          if (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index]) {
	            index = payload.index;
	          } else {
	            index = state.collection[payload.chatId].findIndex(function (el) {
	              return el.id === payload.id;
	            });
	          }

	          if (index >= 0) {
	            var isSaveState = state.saveMessageList[payload.chatId].includes(state.collection[payload.chatId][index].id) || payload.fields.id && !payload.fields.id.toString().startsWith('temporary') && state.collection[payload.chatId][index].id.toString().startsWith('temporary');
	            delete payload.fields.templateId;
	            state.collection[payload.chatId][index] = Object.assign(state.collection[payload.chatId][index], payload.fields);

	            if (isSaveState) {
	              _this3.saveState(state, payload.chatId);
	            }
	          }
	        },
	        delete: function _delete(state, payload) {
	          _this3.initCollection(state, {
	            chatId: payload.chatId
	          });

	          _this3.setMutationType(state, {
	            chatId: payload.chatId,
	            initialType: im_const.MutationType.delete
	          });

	          state.collection[payload.chatId] = state.collection[payload.chatId].filter(function (element) {
	            return !payload.elements.includes(element.id);
	          });

	          if (state.saveMessageList[payload.chatId].length > 0) {
	            var _iteratorNormalCompletion2 = true;
	            var _didIteratorError2 = false;
	            var _iteratorError2 = undefined;

	            try {
	              for (var _iterator2 = payload.elements[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
	                var id = _step2.value;

	                if (state.saveMessageList[payload.chatId].includes(id)) {
	                  _this3.saveState(state, payload.chatId);

	                  break;
	                }
	              }
	            } catch (err) {
	              _didIteratorError2 = true;
	              _iteratorError2 = err;
	            } finally {
	              try {
	                if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
	                  _iterator2.return();
	                }
	              } finally {
	                if (_didIteratorError2) {
	                  throw _iteratorError2;
	                }
	              }
	            }
	          }
	        },
	        clear: function clear(state, payload) {
	          _this3.initCollection(state, {
	            chatId: payload.chatId
	          });

	          _this3.setMutationType(state, {
	            chatId: payload.chatId,
	            initialType: 'clear'
	          });

	          state.collection[payload.chatId] = [];
	          state.saveMessageList[payload.chatId] = [];
	        },
	        applyMutationType: function applyMutationType(state, payload) {
	          if (typeof state.mutationType[payload.chatId] === 'undefined') {
	            ui_vue.Vue.set(state.mutationType, payload.chatId, {
	              applied: false,
	              initialType: im_const.MutationType.none,
	              appliedType: im_const.MutationType.none,
	              scrollStickToTop: 0,
	              scrollMessageId: 0
	            });
	          }

	          state.mutationType[payload.chatId].applied = true;
	        },
	        readMessages: function readMessages(state, payload) {
	          _this3.initCollection(state, {
	            chatId: payload.chatId
	          });

	          var saveNeeded = false;

	          for (var index = state.collection[payload.chatId].length - 1; index >= 0; index--) {
	            var element = state.collection[payload.chatId][index];
	            if (!element.unread) continue;

	            if (payload.readId === 0 || element.id <= payload.readId) {
	              state.collection[payload.chatId][index] = Object.assign(state.collection[payload.chatId][index], {
	                unread: false
	              });
	              saveNeeded = true;
	            }
	          }

	          if (saveNeeded) {
	            _this3.saveState(state, payload.chatId);
	          }
	        },
	        unreadMessages: function unreadMessages(state, payload) {
	          _this3.initCollection(state, {
	            chatId: payload.chatId
	          });

	          var saveNeeded = false;

	          for (var index = state.collection[payload.chatId].length - 1; index >= 0; index--) {
	            var element = state.collection[payload.chatId][index];
	            if (element.unread) continue;

	            if (element.id >= payload.unreadId) {
	              state.collection[payload.chatId][index] = Object.assign(state.collection[payload.chatId][index], {
	                unread: true
	              });
	              saveNeeded = true;
	            }
	          }

	          if (saveNeeded) {
	            _this3.saveState(state, payload.chatId);

	            _this3.updateSubordinateStates();
	          }
	        }
	      };
	    }
	  }, {
	    key: "initCollection",
	    value: function initCollection(state, payload) {
	      if (typeof payload.chatId === 'undefined') {
	        return false;
	      }

	      if (typeof payload.chatId === 'undefined' || typeof state.collection[payload.chatId] !== 'undefined') {
	        return true;
	      }

	      ui_vue.Vue.set(state.collection, payload.chatId, payload.messages ? [].concat(payload.messages) : []);
	      ui_vue.Vue.set(state.mutationType, payload.chatId, {
	        applied: false,
	        initialType: im_const.MutationType.none,
	        appliedType: im_const.MutationType.none,
	        scrollStickToTop: 0,
	        scrollMessageId: 0
	      });
	      ui_vue.Vue.set(state.saveMessageList, payload.chatId, []);
	      ui_vue.Vue.set(state.saveFileList, payload.chatId, []);
	      ui_vue.Vue.set(state.saveUserList, payload.chatId, []);
	      return true;
	    }
	  }, {
	    key: "setMutationType",
	    value: function setMutationType(state, payload) {
	      var mutationType = {
	        applied: false,
	        initialType: im_const.MutationType.none,
	        appliedType: im_const.MutationType.none,
	        scrollStickToTop: false,
	        scrollMessageId: 0
	      };

	      if (payload.initialType && !payload.appliedType) {
	        payload.appliedType = payload.initialType;
	      }

	      if (typeof state.mutationType[payload.chatId] === 'undefined') {
	        ui_vue.Vue.set(state.mutationType, payload.chatId, mutationType);
	      }

	      state.mutationType[payload.chatId] = babelHelpers.objectSpread({}, mutationType, payload);
	      return true;
	    }
	  }, {
	    key: "prepareMessage",
	    value: function prepareMessage(message) {
	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	      var result = this.validate(Object.assign({}, message), options);
	      result.params = Object.assign({}, this.getElementState().params, result.params);
	      result.templateId = result.id;
	      return Object.assign({}, this.getElementState(), result);
	    }
	  }, {
	    key: "manageCacheBeforeSet",
	    value: function manageCacheBeforeSet(cache, elements) {
	      var recursive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
	      var result = {
	        type: IntersectionType.empty,
	        foundElements: [],
	        noneElements: []
	      };

	      if (!cache || cache.length <= 0) {
	        return result;
	      }

	      var _iteratorNormalCompletion3 = true;
	      var _didIteratorError3 = false;
	      var _iteratorError3 = undefined;

	      try {
	        for (var _iterator3 = elements[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
	          var id = _step3.value;

	          if (cache.includes(id)) {
	            if (result.type === IntersectionType.empty) {
	              result.type = IntersectionType.found;
	            }

	            result.foundElements.push(id);
	          } else {
	            if (result.type === IntersectionType.empty) {
	              result.type = IntersectionType.none;
	            }

	            result.noneElements.push(id);
	          }
	        }
	      } catch (err) {
	        _didIteratorError3 = true;
	        _iteratorError3 = err;
	      } finally {
	        try {
	          if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
	            _iterator3.return();
	          }
	        } finally {
	          if (_didIteratorError3) {
	            throw _iteratorError3;
	          }
	        }
	      }

	      if (result.type === IntersectionType.found && cache.length === elements.length && result.foundElements.length === elements.length) {
	        result.type = IntersectionType.equal;
	      } else if (result.type === IntersectionType.none && !recursive && result.foundElements.length > 0) {
	        var reverseResult = this.manageCacheBeforeSet(cache.reverse(), elements.reverse(), true);

	        if (reverseResult.type === IntersectionType.found) {
	          reverseResult.type = IntersectionType.foundReverse;
	          return reverseResult;
	        }
	      }

	      return result;
	    }
	  }, {
	    key: "updateSaveLists",
	    value: function updateSaveLists(state, chatId) {
	      if (!this.isSaveAvailable()) {
	        return true;
	      }

	      if (!chatId || !this.store.getters['dialogues/canSaveChat'] || !this.store.getters['dialogues/canSaveChat'](chatId)) {
	        return false;
	      }

	      this.initCollection(state, {
	        chatId: chatId
	      });
	      var count = 0;
	      var saveMessageList = [];
	      var saveFileList = [];
	      var saveUserList = [];
	      var dialog = this.store.getters['dialogues/getByChatId'](chatId);

	      if (dialog && dialog.type === 'private') {
	        saveUserList.push(parseInt(dialog.dialogId));
	      }

	      for (var index = state.collection[chatId].length - 1; index >= 0; index--) {
	        if (state.collection[chatId][index].id.toString().startsWith('temporary')) {
	          continue;
	        }

	        if (count >= im_const.StorageLimit.messages && !state.collection[chatId][index].unread) {
	          break;
	        }

	        saveMessageList.unshift(state.collection[chatId][index].id);
	        count++;
	      }

	      saveMessageList = saveMessageList.slice(0, im_const.StorageLimit.messages);
	      state.collection[chatId].filter(function (element) {
	        return saveMessageList.includes(element.id);
	      }).forEach(function (element) {
	        if (element.authorId > 0) {
	          saveUserList.push(element.authorId);
	        }

	        if (element.params.FILE_ID instanceof Array) {
	          saveFileList = element.params.FILE_ID.concat(saveFileList);
	        }
	      });
	      state.saveMessageList[chatId] = saveMessageList;
	      state.saveFileList[chatId] = babelHelpers.toConsumableArray(new Set(saveFileList));
	      state.saveUserList[chatId] = babelHelpers.toConsumableArray(new Set(saveUserList));
	      return true;
	    }
	  }, {
	    key: "getSaveTimeout",
	    value: function getSaveTimeout() {
	      return 150;
	    }
	  }, {
	    key: "saveState",
	    value: function saveState(state, chatId) {
	      if (!this.updateSaveLists(state, chatId)) {
	        return false;
	      }

	      babelHelpers.get(babelHelpers.getPrototypeOf(MessagesModel.prototype), "saveState", this).call(this, function () {
	        var storedState = {
	          collection: {},
	          saveMessageList: {},
	          saveUserList: {},
	          saveFileList: {}
	        };

	        var _loop3 = function _loop3(_chatId) {
	          if (!state.saveMessageList.hasOwnProperty(_chatId)) {
	            return "continue";
	          }

	          if (!state.collection[_chatId]) {
	            return "continue";
	          }

	          if (!storedState.collection[_chatId]) {
	            storedState.collection[_chatId] = [];
	          }

	          state.collection[_chatId].filter(function (element) {
	            return state.saveMessageList[_chatId].includes(element.id);
	          }).forEach(function (element) {
	            return storedState.collection[_chatId].push(element);
	          });

	          storedState.saveMessageList[_chatId] = state.saveMessageList[_chatId];
	          storedState.saveFileList[_chatId] = state.saveFileList[_chatId];
	          storedState.saveUserList[_chatId] = state.saveUserList[_chatId];
	        };

	        for (var _chatId in state.saveMessageList) {
	          var _ret2 = _loop3(_chatId);

	          if (_ret2 === "continue") continue;
	        }

	        return storedState;
	      });
	    }
	  }, {
	    key: "updateSubordinateStates",
	    value: function updateSubordinateStates() {
	      this.store.dispatch('users/saveState');
	      this.store.dispatch('files/saveState');
	    }
	  }, {
	    key: "validate",
	    value: function validate(fields, options) {
	      var result = {};

	      if (typeof fields.id === "number") {
	        result.id = fields.id;
	      } else if (typeof fields.id === "string") {
	        if (fields.id.startsWith('temporary')) {
	          result.id = fields.id;
	        } else {
	          result.id = parseInt(fields.id);
	        }
	      }

	      if (typeof fields.templateId === "number") {
	        result.templateId = fields.templateId;
	      } else if (typeof fields.templateId === "string") {
	        if (fields.templateId.startsWith('temporary')) {
	          result.templateId = fields.templateId;
	        } else {
	          result.templateId = parseInt(fields.templateId);
	        }
	      }

	      if (typeof fields.chat_id !== 'undefined') {
	        fields.chatId = fields.chat_id;
	      }

	      if (typeof fields.chatId === "number" || typeof fields.chatId === "string") {
	        result.chatId = parseInt(fields.chatId);
	      }

	      if (typeof fields.date !== "undefined") {
	        result.date = im_lib_utils.Utils.date.cast(fields.date);
	      } // previous P&P format


	      if (typeof fields.textOriginal === "string" || typeof fields.textOriginal === "number") {
	        result.text = fields.textOriginal.toString();

	        if (typeof fields.text === "string" || typeof fields.text === "number") {
	          result.textConverted = this.convertToHtml({
	            text: fields.text.toString(),
	            isConverted: true
	          });
	        }
	      } else // modern format
	        {
	          if (typeof fields.text_converted !== 'undefined') {
	            fields.textConverted = fields.text_converted;
	          }

	          if (typeof fields.textConverted === "string" || typeof fields.textConverted === "number") {
	            result.textConverted = fields.textConverted.toString();
	          }

	          if (typeof fields.text === "string" || typeof fields.text === "number") {
	            result.text = fields.text.toString();
	            var isConverted = typeof result.textConverted !== 'undefined';
	            result.textConverted = this.convertToHtml({
	              text: isConverted ? result.textConverted : result.text,
	              isConverted: isConverted
	            });
	          }
	        }

	      if (typeof fields.senderId !== 'undefined') {
	        fields.authorId = fields.senderId;
	      } else if (typeof fields.author_id !== 'undefined') {
	        fields.authorId = fields.author_id;
	      }

	      if (typeof fields.authorId === "number" || typeof fields.authorId === "string") {
	        if (fields.system === true || fields.system === 'Y') {
	          result.authorId = 0;
	        } else {
	          result.authorId = parseInt(fields.authorId);
	        }
	      }

	      if (babelHelpers.typeof(fields.params) === "object" && fields.params !== null) {
	        var params = this.validateParams(fields.params, options);

	        if (params) {
	          result.params = params;
	        }
	      }

	      if (typeof fields.push === "boolean") {
	        result.push = fields.push;
	      }

	      if (typeof fields.sending === "boolean") {
	        result.sending = fields.sending;
	      }

	      if (typeof fields.unread === "boolean") {
	        result.unread = fields.unread;
	      }

	      if (typeof fields.blink === "boolean") {
	        result.blink = fields.blink;
	      }

	      if (typeof fields.error === "boolean" || typeof fields.error === "string") {
	        result.error = fields.error;
	      }

	      if (typeof fields.retry === "boolean") {
	        result.retry = fields.retry;
	      }

	      return result;
	    }
	  }, {
	    key: "validateParams",
	    value: function validateParams(params, options) {
	      var result = {};

	      try {
	        for (var field in params) {
	          if (!params.hasOwnProperty(field)) {
	            continue;
	          }

	          if (field === 'COMPONENT_ID') {
	            if (typeof params[field] === "string" && BX.Vue.isComponent(params[field])) {
	              result[field] = params[field];
	            }
	          } else if (field === 'LIKE') {
	            if (params[field] instanceof Array) {
	              result['REACTION'] = {
	                like: params[field].map(function (element) {
	                  return parseInt(element);
	                })
	              };
	            }
	          } else if (field === 'CHAT_LAST_DATE') {
	            result[field] = im_lib_utils.Utils.date.cast(params[field]);
	          } else if (field === 'AVATAR') {
	            if (params[field]) {
	              result[field] = params[field].startsWith('http') ? params[field] : options.host + params[field];
	            }
	          } else if (field === 'NAME') {
	            if (params[field]) {
	              result[field] = params[field];
	            }
	          } else {
	            result[field] = params[field];
	          }
	        }
	      } catch (e) {}

	      var hasResultElements = false;

	      for (var _field in result) {
	        if (!result.hasOwnProperty(_field)) {
	          continue;
	        }

	        hasResultElements = true;
	        break;
	      }

	      return hasResultElements ? result : null;
	    }
	  }, {
	    key: "convertToHtml",
	    value: function convertToHtml() {
	      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	      var _params$quote = params.quote,
	          quote = _params$quote === void 0 ? true : _params$quote,
	          _params$image = params.image,
	          image = _params$image === void 0 ? true : _params$image,
	          _params$text = params.text,
	          text = _params$text === void 0 ? '' : _params$text,
	          _params$highlightText = params.highlightText,
	          highlightText = _params$highlightText === void 0 ? '' : _params$highlightText,
	          _params$isConverted = params.isConverted,
	          isConverted = _params$isConverted === void 0 ? false : _params$isConverted,
	          _params$enableBigSmil = params.enableBigSmile,
	          enableBigSmile = _params$enableBigSmil === void 0 ? true : _params$enableBigSmil;
	      text = text.trim();

	      if (!isConverted) {
	        text = text.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
	      }

	      if (text.startsWith('/me')) {
	        text = "<i>".concat(text.substr(4), "</i>");
	      } else if (text.startsWith('/loud')) {
	        text = "<b>".concat(text.substr(6), "</b>");
	      }

	      var quoteSign = "&gt;&gt;";

	      if (quote && text.indexOf(quoteSign) >= 0) {
	        var textPrepare = text.split(isConverted ? "<br />" : "\n");

	        for (var i = 0; i < textPrepare.length; i++) {
	          if (textPrepare[i].startsWith(quoteSign)) {
	            textPrepare[i] = textPrepare[i].replace(quoteSign, '<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap">');

	            while (++i < textPrepare.length && textPrepare[i].startsWith(quoteSign)) {
	              textPrepare[i] = textPrepare[i].replace(quoteSign, '');
	            }

	            textPrepare[i - 1] += '</div></div><br>';
	          }
	        }

	        text = textPrepare.join("<br />");
	      }

	      text = text.replace(/\n/gi, '<br />');
	      text = text.replace(/\t/gi, '&nbsp;&nbsp;&nbsp;&nbsp;');
	      text = this.decodeBbCode(text, false, enableBigSmile);

	      if (quote) {
	        text = text.replace(/------------------------------------------------------<br \/>(.*?)\[(.*?)\]<br \/>(.*?)------------------------------------------------------(<br \/>)?/g, function (whole, p1, p2, p3, p4, offset) {
	          return (offset > 0 ? '<br>' : '') + "<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\"><div class=\"bx-im-message-content-quote-name\"><span class=\"bx-im-message-content-quote-name-text\">" + p1 + "</span><span class=\"bx-im-message-content-quote-name-time\">" + p2 + "</span></div>" + p3 + "</div></div><br />";
	        });
	        text = text.replace(/------------------------------------------------------<br \/>(.*?)------------------------------------------------------(<br \/>)?/g, function (whole, p1, p2, p3, offset) {
	          return (offset > 0 ? '<br>' : '') + "<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\">" + p1 + "</div></div><br />";
	        });
	      }

	      if (image) {
	        var changed = false;
	        text = text.replace(/<a(.*?)>(http[s]{0,1}:\/\/.*?)<\/a>/ig, function (whole, aInner, text, offset) {
	          if (!text.match(/(\.(jpg|jpeg|png|gif)\?|\.(jpg|jpeg|png|gif)$)/i) || text.indexOf("/docs/pub/") > 0 || text.indexOf("logout=yes") > 0) {
	            return whole;
	          } else {
	            changed = true;
	            return (offset > 0 ? '<br />' : '') + '<a' + aInner + ' target="_blank" class="bx-im-element-file-image"><img src="' + text + '" class="bx-im-element-file-image-source-text" onerror="BX.Messenger.Model.MessagesModel.hideErrorImage(this)"></a></span>';
	          }
	        });

	        if (changed) {
	          text = text.replace(/<\/span>(\n?)<br(\s\/?)>/ig, '</span>').replace(/<br(\s\/?)>(\n?)<br(\s\/?)>(\n?)<span/ig, '<br /><span');
	        }
	      }

	      if (highlightText) {
	        text = text.replace(new RegExp("(" + highlightText.replace(/[\-\[\]\/{}()*+?.\\^$|]/g, "\\$&") + ")", 'ig'), '<span class="bx-messenger-highlight">$1</span>');
	      }

	      if (enableBigSmile) {
	        text = text.replace(/^(\s*<img\s+src=[^>]+?data-code=[^>]+?data-definition="UHD"[^>]+?style="width:)(\d+)(px[^>]+?height:)(\d+)(px[^>]+?class="bx-smile"\s*\/?>\s*)$/, function doubleSmileSize(match, start, width, middle, height, end) {
	          return start + parseInt(width, 10) * 1.7 + middle + parseInt(height, 10) * 1.7 + end;
	        });
	      }

	      if (text.substr(-6) == '<br />') {
	        text = text.substr(0, text.length - 6);
	      }

	      text = text.replace(/<br><br \/>/ig, '<br />');
	      text = text.replace(/<br \/><br>/ig, '<br />');
	      return text;
	    }
	  }, {
	    key: "decodeBbCode",
	    value: function decodeBbCode(text) {
	      var textOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
	      var enableBigSmile = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
	      return MessagesModel.decodeBbCode({
	        text: text,
	        textOnly: textOnly,
	        enableBigSmile: enableBigSmile
	      });
	    }
	  }], [{
	    key: "decodeBbCode",
	    value: function decodeBbCode() {
	      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	      var text = params.text,
	          _params$textOnly = params.textOnly,
	          textOnly = _params$textOnly === void 0 ? false : _params$textOnly,
	          _params$enableBigSmil2 = params.enableBigSmile,
	          enableBigSmile = _params$enableBigSmil2 === void 0 ? true : _params$enableBigSmil2;
	      var codeReplacement = [];
	      text = text.replace(/\[CODE\]\n?([\s\S]*?)\[\/CODE\]/ig, function (whole, text) {
	        var id = codeReplacement.length;
	        codeReplacement.push(text);
	        return '####REPLACEMENT_MARK_' + id + '####';
	      });
	      text = text.replace(/\[LIKE\]/ig, '<span class="bx-smile bx-im-smile-like"></span>');
	      text = text.replace(/\[DISLIKE\]/ig, '<span class="bx-smile bx-im-smile-dislike"></span>');
	      text = text.replace(/\[USER=([0-9]{1,})\](.*?)\[\/USER\]/ig, function (whole, userId, text) {
	        return '<span class="bx-im-mention" data-type="USER" data-value="' + userId + '">' + text + '</span>';
	      });
	      text = text.replace(/\[CHAT=(imol\|)?([0-9]{1,})\](.*?)\[\/CHAT\]/ig, function (whole, openlines, chatId, text) {
	        return openlines ? text : '<span class="bx-im-mention" data-type="CHAT" data-value="chat' + chatId + '">' + text + '</span>';
	      }); // TODO tag CHAT

	      text = text.replace(/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/ig, function (whole, number, text) {
	        return '<span class="bx-im-mention" data-type="CALL" data-value="' + im_lib_utils.Utils.text.htmlspecialchars(number) + '">' + text + '</span>';
	      }); // TODO tag CHAT

	      text = text.replace(/\[PCH=([0-9]{1,})\](.*?)\[\/PCH\]/ig, function (whole, historyId, text) {
	        return text;
	      }); // TODO tag PCH

	      text = text.replace(/\[SEND(?:=(.+?))?\](.+?)?\[\/SEND\]/ig, function (whole, command, text) {
	        var html = '';
	        text = text ? text : command;
	        command = (command ? command : text).replace('<br />', '\n');

	        if (!textOnly && text) {
	          text = text.replace(/<([\w]+)[^>]*>(.*?)<\\1>/i, "$2", text);
	          text = text.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i, "$2", text);
	          html = '<span class="bx-im-message-command-wrap">' + '<span class="bx-im-message-command" data-entity="send">' + text + '</span>' + '<span class="bx-im-message-command-data">' + command + '</span>' + '</span>';
	        } else {
	          html = text;
	        }

	        return html;
	      });
	      text = text.replace(/\[PUT(?:=(.+?))?\](.+?)?\[\/PUT\]/ig, function (whole, command, text) {
	        var html = '';
	        text = text ? text : command;
	        command = (command ? command : text).replace('<br />', '\n');

	        if (!textOnly && text) {
	          text = text.replace(/<([\w]+)[^>]*>(.*?)<\/\1>/i, "$2", text);
	          text = text.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i, "$2", text);
	          html = '<span class="bx-im-message-command" data-entity="put">' + text + '</span>';
	          html += '<span class="bx-im-message-command-data">' + command + '</span>';
	        } else {
	          html = text;
	        }

	        return html;
	      });
	      var textElementSize = 0;

	      if (enableBigSmile) {
	        textElementSize = text.replace(/\[icon\=([^\]]*)\]/ig, '').trim().length;
	      }

	      text = text.replace(/\[icon\=([^\]]*)\]/ig, function (whole) {
	        var url = whole.match(/icon\=(\S+[^\s.,> )\];\'\"!?])/i);

	        if (url && url[1]) {
	          url = url[1];
	        } else {
	          return '';
	        }

	        var attrs = {
	          'src': url,
	          'border': 0
	        };
	        var size = whole.match(/size\=(\d+)/i);

	        if (size && size[1]) {
	          attrs['width'] = size[1];
	          attrs['height'] = size[1];
	        } else {
	          var width = whole.match(/width\=(\d+)/i);

	          if (width && width[1]) {
	            attrs['width'] = width[1];
	          }

	          var height = whole.match(/height\=(\d+)/i);

	          if (height && height[1]) {
	            attrs['height'] = height[1];
	          }

	          if (attrs['width'] && !attrs['height']) {
	            attrs['height'] = attrs['width'];
	          } else if (attrs['height'] && !attrs['width']) {
	            attrs['width'] = attrs['height'];
	          } else if (attrs['height'] && attrs['width']) ; else {
	            attrs['width'] = 20;
	            attrs['height'] = 20;
	          }
	        }

	        attrs['width'] = attrs['width'] > 100 ? 100 : attrs['width'];
	        attrs['height'] = attrs['height'] > 100 ? 100 : attrs['height'];

	        if (enableBigSmile && textElementSize === 0 && attrs['width'] === attrs['height'] && attrs['width'] === 20) {
	          attrs['width'] = 40;
	          attrs['height'] = 40;
	        }

	        var title = whole.match(/title\=(.*[^\s\]])/i);

	        if (title && title[1]) {
	          title = title[1];

	          if (title.indexOf('width=') > -1) {
	            title = title.substr(0, title.indexOf('width='));
	          }

	          if (title.indexOf('height=') > -1) {
	            title = title.substr(0, title.indexOf('height='));
	          }

	          if (title.indexOf('size=') > -1) {
	            title = title.substr(0, title.indexOf('size='));
	          }

	          if (title) {
	            attrs['title'] = im_lib_utils.Utils.text.htmlspecialchars(title).trim();
	            attrs['alt'] = attrs['title'];
	          }
	        }

	        var attributes = '';

	        for (var name in attrs) {
	          if (attrs.hasOwnProperty(name)) {
	            attributes += name + '="' + attrs[name] + '" ';
	          }
	        }

	        return '<img class="bx-smile bx-icon" ' + attributes + '>';
	      });
	      codeReplacement.forEach(function (code, index) {
	        text = text.replace('####REPLACEMENT_MARK_' + index + '####', !textOnly ? '<div class="bx-im-message-content-code">' + code + '</div>' : code);
	      });
	      return text;
	    }
	  }, {
	    key: "hideErrorImage",
	    value: function hideErrorImage(element) {
	      if (element.parentNode && element.parentNode) {
	        element.parentNode.innerHTML = '<a href="' + element.src + '" target="_blank">' + element.src + '</a>';
	      }

	      return true;
	    }
	  }]);
	  return MessagesModel;
	}(ui_vue_vuex.VuexBuilderModel);

	/**
	 * Bitrix Messenger
	 * Dialogues model (Vuex Builder model)
	 *
	 * @package bitrix
	 * @subpackage im
	 * @copyright 2001-2019 Bitrix
	 */

	var DialoguesModel =
	/*#__PURE__*/
	function (_VuexBuilderModel) {
	  babelHelpers.inherits(DialoguesModel, _VuexBuilderModel);

	  function DialoguesModel() {
	    babelHelpers.classCallCheck(this, DialoguesModel);
	    return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(DialoguesModel).apply(this, arguments));
	  }

	  babelHelpers.createClass(DialoguesModel, [{
	    key: "getName",
	    value: function getName() {
	      return 'dialogues';
	    }
	  }, {
	    key: "getState",
	    value: function getState() {
	      return {
	        host: this.getVariable('host', location.protocol + '//' + location.host),
	        collection: {},
	        saveDialogList: [],
	        saveChatList: []
	      };
	    }
	  }, {
	    key: "getStateSaveException",
	    value: function getStateSaveException() {
	      return {
	        host: null
	      };
	    }
	  }, {
	    key: "getElementStateSaveException",
	    value: function getElementStateSaveException() {
	      return {
	        writingList: null,
	        quoteId: null
	      };
	    }
	  }, {
	    key: "getElementState",
	    value: function getElementState() {
	      return {
	        dialogId: '0',
	        chatId: 0,
	        counter: 0,
	        unreadId: 0,
	        unreadLastId: 0,
	        managerList: [],
	        readedList: [],
	        writingList: [],
	        textareaMessage: "",
	        quoteId: 0,
	        editId: 0,
	        init: false,
	        name: "",
	        owner: 0,
	        extranet: false,
	        avatar: "",
	        color: "#17A3EA",
	        type: "chat",
	        entityType: "",
	        entityId: "",
	        entityData1: "",
	        entityData2: "",
	        entityData3: "",
	        dateCreate: new Date(),
	        restrictions: {
	          avatar: true,
	          extend: true,
	          leave: true,
	          leaveOwner: true,
	          rename: true
	        }
	      };
	    }
	  }, {
	    key: "getGetters",
	    value: function getGetters() {
	      var _this = this;

	      return {
	        get: function get(state) {
	          return function (dialogId) {
	            if (!state.collection[dialogId]) {
	              return null;
	            }

	            return state.collection[dialogId];
	          };
	        },
	        getByChatId: function getByChatId(state) {
	          return function (chatId) {
	            chatId = parseInt(chatId);

	            for (var dialogId in state.collection) {
	              if (!state.collection.hasOwnProperty(dialogId)) {
	                continue;
	              }

	              if (state.collection[dialogId].chatId === chatId) {
	                return state.collection[dialogId];
	              }
	            }

	            return null;
	          };
	        },
	        getBlank: function getBlank(state) {
	          return function (params) {
	            return _this.getElementState();
	          };
	        },
	        getQuoteId: function getQuoteId(state) {
	          return function (dialogId) {
	            if (!state.collection[dialogId]) {
	              return 0;
	            }

	            return state.collection[dialogId].quoteId;
	          };
	        },
	        getEditId: function getEditId(state) {
	          return function (dialogId) {
	            if (!state.collection[dialogId]) {
	              return 0;
	            }

	            return state.collection[dialogId].editId;
	          };
	        },
	        canSaveChat: function canSaveChat(state) {
	          return function (chatId) {
	            if (/^\d+$/.test(chatId)) {
	              chatId = parseInt(chatId);
	            }

	            return state.saveChatList.includes(parseInt(chatId));
	          };
	        },
	        canSaveDialog: function canSaveDialog(state) {
	          return function (dialogId) {
	            return state.saveDialogList.includes(dialogId.toString());
	          };
	        },
	        isPrivateDialog: function isPrivateDialog(state) {
	          return function (dialogId) {
	            dialogId = dialogId.toString();
	            return state.collection[dialogId.toString()] && state.collection[dialogId].type === 'private';
	          };
	        }
	      };
	    }
	  }, {
	    key: "getActions",
	    value: function getActions() {
	      var _this2 = this;

	      return {
	        set: function set(store, payload) {
	          if (payload instanceof Array) {
	            payload = payload.map(function (dialog) {
	              return Object.assign({}, _this2.validate(Object.assign({}, dialog), {
	                host: store.state.host
	              }), {
	                init: true
	              });
	            });
	          } else {
	            var result = [];
	            result.push(Object.assign({}, _this2.validate(Object.assign({}, payload), {
	              host: store.state.host
	            }), {
	              init: true
	            }));
	            payload = result;
	          }

	          store.commit('set', payload);
	        },
	        update: function update(store, payload) {
	          if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) {
	            return true;
	          }

	          store.commit('update', {
	            dialogId: payload.dialogId,
	            fields: _this2.validate(Object.assign({}, payload.fields), {
	              host: store.state.host
	            })
	          });
	          return true;
	        },
	        delete: function _delete(store, payload) {
	          store.commit('delete', payload.dialogId);
	          return true;
	        },
	        updateWriting: function updateWriting(store, payload) {
	          if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) {
	            return true;
	          }

	          var index = store.state.collection[payload.dialogId].writingList.findIndex(function (el) {
	            return el.userId === payload.userId;
	          });

	          if (payload.action) {
	            if (index >= 0) {
	              return true;
	            } else {
	              var writingList = [].concat(store.state.collection[payload.dialogId].writingList);
	              writingList.unshift({
	                userId: payload.userId,
	                userName: payload.userName
	              });
	              store.commit('update', {
	                actionName: 'updateWriting/1',
	                dialogId: payload.dialogId,
	                fields: _this2.validate({
	                  writingList: writingList
	                }, {
	                  host: store.state.host
	                })
	              });
	            }
	          } else {
	            if (index >= 0) {
	              var _writingList = store.state.collection[payload.dialogId].writingList.filter(function (el) {
	                return el.userId !== payload.userId;
	              });

	              store.commit('update', {
	                actionName: 'updateWriting/2',
	                dialogId: payload.dialogId,
	                fields: _this2.validate({
	                  writingList: _writingList
	                }, {
	                  host: store.state.host
	                })
	              });
	              return true;
	            } else {
	              return true;
	            }
	          }

	          return false;
	        },
	        updateReaded: function updateReaded(store, payload) {
	          if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) {
	            return true;
	          }

	          var readedList = store.state.collection[payload.dialogId].readedList.filter(function (el) {
	            return el.userId !== payload.userId;
	          });

	          if (payload.action) {
	            readedList.push({
	              userId: payload.userId,
	              userName: payload.userName || '',
	              messageId: payload.messageId,
	              date: payload.date || new Date()
	            });
	          }

	          store.commit('update', {
	            actionName: 'updateReaded',
	            dialogId: payload.dialogId,
	            fields: _this2.validate({
	              readedList: readedList
	            }, {
	              host: store.state.host
	            })
	          });
	          return false;
	        },
	        increaseCounter: function increaseCounter(store, payload) {
	          if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) {
	            return true;
	          }

	          var counter = store.state.collection[payload.dialogId].counter;

	          if (counter === 100) {
	            return true;
	          }

	          var increasedCounter = counter + payload.count;

	          if (increasedCounter > 100) {
	            increasedCounter = 100;
	          }

	          var fields = {
	            counter: increasedCounter
	          };

	          if (typeof payload.unreadLastId !== 'undefined') {
	            fields.unreadLastId = payload.unreadLastId;
	          }

	          store.commit('update', {
	            actionName: 'increaseCounter',
	            dialogId: payload.dialogId,
	            fields: fields
	          });
	          return false;
	        },
	        decreaseCounter: function decreaseCounter(store, payload) {
	          if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) {
	            return true;
	          }

	          var counter = store.state.collection[payload.dialogId].counter;

	          if (counter === 100) {
	            return true;
	          }

	          var decreasedCounter = counter - payload.count;

	          if (decreasedCounter < 0) {
	            decreasedCounter = 0;
	          }

	          var unreadId = payload.unreadId > store.state.collection[payload.dialogId].unreadId ? payload.unreadId : store.state.collection[payload.dialogId].unreadId;

	          if (store.state.collection[payload.dialogId].unreadId !== unreadId || store.state.collection[payload.dialogId].counter !== decreasedCounter) {
	            if (decreasedCounter === 0) {
	              unreadId = 0;
	            }

	            store.commit('update', {
	              actionName: 'decreaseCounter',
	              dialogId: payload.dialogId,
	              fields: {
	                counter: decreasedCounter,
	                unreadId: unreadId
	              }
	            });
	          }

	          return false;
	        },
	        saveDialog: function saveDialog(store, payload) {
	          if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) {
	            return true;
	          }

	          store.commit('saveDialog', {
	            dialogId: payload.dialogId,
	            chatId: payload.chatId
	          });
	          return false;
	        }
	      };
	    }
	  }, {
	    key: "getMutations",
	    value: function getMutations() {
	      var _this3 = this;

	      return {
	        initCollection: function initCollection(state, payload) {
	          _this3.initCollection(state, payload);
	        },
	        saveDialog: function saveDialog(state, payload) {
	          // TODO if payload.dialogId is IMOL, skip update this flag
	          if (!(payload.chatId > 0 && payload.dialogId.length > 0)) {
	            return false;
	          }

	          var saveDialogList = state.saveDialogList.filter(function (element) {
	            return element !== payload.dialogId;
	          });
	          saveDialogList.unshift(payload.dialogId);
	          saveDialogList = saveDialogList.slice(0, im_const.StorageLimit.dialogues);

	          if (state.saveDialogList.join(',') === saveDialogList.join(',')) {
	            return true;
	          }

	          state.saveDialogList = saveDialogList;
	          var saveChatList = state.saveChatList.filter(function (element) {
	            return element !== payload.chatId;
	          });
	          saveChatList.unshift(payload.chatId);
	          state.saveChatList = saveChatList.slice(0, im_const.StorageLimit.dialogues);

	          _this3.saveState(state);
	        },
	        set: function set(state, payload) {
	          var _iteratorNormalCompletion = true;
	          var _didIteratorError = false;
	          var _iteratorError = undefined;

	          try {
	            for (var _iterator = payload[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
	              var element = _step.value;

	              _this3.initCollection(state, {
	                dialogId: element.dialogId
	              });

	              state.collection[element.dialogId] = Object.assign(_this3.getElementState(), state.collection[element.dialogId], element);
	            } // TODO if payload.dialogId is IMOL, skip update cache

	          } catch (err) {
	            _didIteratorError = true;
	            _iteratorError = err;
	          } finally {
	            try {
	              if (!_iteratorNormalCompletion && _iterator.return != null) {
	                _iterator.return();
	              }
	            } finally {
	              if (_didIteratorError) {
	                throw _iteratorError;
	              }
	            }
	          }

	          _this3.saveState(state);
	        },
	        update: function update(state, payload) {
	          _this3.initCollection(state, payload);

	          state.collection[payload.dialogId] = Object.assign(state.collection[payload.dialogId], payload.fields); // TODO if payload.dialogId is IMOL, skip update cache

	          _this3.saveState(state);
	        },
	        delete: function _delete(state, payload) {
	          delete state.collection[payload.dialogId]; // TODO if payload.dialogId is IMOL, skip update cache

	          _this3.saveState(state);
	        }
	      };
	    }
	  }, {
	    key: "initCollection",
	    value: function initCollection(state, payload) {
	      if (typeof state.collection[payload.dialogId] !== 'undefined') {
	        return true;
	      }

	      ui_vue.Vue.set(state.collection, payload.dialogId, this.getElementState());

	      if (payload.fields) {
	        state.collection[payload.dialogId] = Object.assign(state.collection[payload.dialogId], this.validate(Object.assign({}, payload.fields), {
	          host: state.host
	        }));
	      }

	      return true;
	    }
	  }, {
	    key: "getSaveTimeout",
	    value: function getSaveTimeout() {
	      return 100;
	    }
	  }, {
	    key: "saveState",
	    value: function saveState() {
	      var _this4 = this;

	      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

	      if (!this.isSaveAvailable()) {
	        return true;
	      }

	      babelHelpers.get(babelHelpers.getPrototypeOf(DialoguesModel.prototype), "saveState", this).call(this, function () {
	        var storedState = {
	          collection: {},
	          saveDialogList: [].concat(state.saveDialogList),
	          saveChatList: [].concat(state.saveChatList)
	        };
	        state.saveDialogList.forEach(function (dialogId) {
	          if (!state.collection[dialogId]) return false;
	          storedState.collection[dialogId] = Object.assign(_this4.getElementState(), _this4.cloneState(state.collection[dialogId], _this4.getElementStateSaveException()));
	        });
	        return storedState;
	      });
	    }
	  }, {
	    key: "validate",
	    value: function validate(fields) {
	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	      var result = {};
	      options.host = options.host || this.getState().host;

	      if (typeof fields.dialog_id !== 'undefined') {
	        fields.dialogId = fields.dialog_id;
	      }

	      if (typeof fields.dialogId === "number" || typeof fields.dialogId === "string") {
	        result.dialogId = fields.dialogId.toString();
	      }

	      if (typeof fields.chat_id !== 'undefined') {
	        fields.chatId = fields.chat_id;
	      } else if (typeof fields.id !== 'undefined') {
	        fields.chatId = fields.id;
	      }

	      if (typeof fields.chatId === "number" || typeof fields.chatId === "string") {
	        result.chatId = parseInt(fields.chatId);
	      }

	      if (typeof fields.quoteId === "number") {
	        result.quoteId = parseInt(fields.quoteId);
	      }

	      if (typeof fields.editId === "number") {
	        result.editId = parseInt(fields.editId);
	      }

	      if (typeof fields.counter === "number" || typeof fields.counter === "string") {
	        result.counter = parseInt(fields.counter);
	      }

	      if (typeof fields.unread_id !== 'undefined') {
	        fields.unreadId = fields.unread_id;
	      }

	      if (typeof fields.unreadId === "number" || typeof fields.unreadId === "string") {
	        result.unreadId = parseInt(fields.unreadId);
	      }

	      if (typeof fields.unread_last_id !== 'undefined') {
	        fields.unreadLastId = fields.unread_last_id;
	      }

	      if (typeof fields.unreadLastId === "number" || typeof fields.unreadLastId === "string") {
	        result.unreadLastId = parseInt(fields.unreadLastId);
	      }

	      if (typeof fields.readed_list !== 'undefined') {
	        fields.readedList = fields.readed_list;
	      }

	      if (typeof fields.readedList !== 'undefined') {
	        result.readedList = [];

	        if (fields.readedList instanceof Array) {
	          fields.readedList.forEach(function (element) {
	            var record = {};

	            if (typeof element.user_id !== 'undefined') {
	              element.userId = element.user_id;
	            }

	            if (typeof element.user_name !== 'undefined') {
	              element.userName = element.user_name;
	            }

	            if (typeof element.message_id !== 'undefined') {
	              element.messageId = element.message_id;
	            }

	            if (!element.userId || !element.userName || !element.messageId) {
	              return false;
	            }

	            record.userId = parseInt(element.userId);
	            record.userName = element.userName.toString();
	            record.messageId = parseInt(element.messageId);
	            record.date = im_lib_utils.Utils.date.cast(element.date);
	            result.readedList.push(record);
	          });
	        }
	      }

	      if (typeof fields.writing_list !== 'undefined') {
	        fields.writingList = fields.writing_list;
	      }

	      if (typeof fields.writingList !== 'undefined') {
	        result.writingList = [];

	        if (fields.writingList instanceof Array) {
	          fields.writingList.forEach(function (element) {
	            var record = {};

	            if (!element.userId) {
	              return false;
	            }

	            record.userId = parseInt(element.userId);
	            record.userName = element.userName;
	            result.writingList.push(record);
	          });
	        }
	      }

	      if (typeof fields.manager_list !== 'undefined') {
	        fields.managerList = fields.manager_list;
	      }

	      if (typeof fields.managerList !== 'undefined') {
	        result.managerList = [];

	        if (fields.managerList instanceof Array) {
	          fields.managerList.forEach(function (userId) {
	            userId = parseInt(userId);

	            if (userId > 0) {
	              result.managerList.push(userId);
	            }
	          });
	        }
	      }

	      if (typeof fields.mute_list !== 'undefined') {
	        fields.muteList = fields.mute_list;
	      }

	      if (typeof fields.muteList !== 'undefined') {
	        result.muteList = [];

	        if (fields.muteList instanceof Array) {
	          fields.muteList.forEach(function (userId) {
	            userId = parseInt(userId);

	            if (userId > 0) {
	              result.muteList.push(userId);
	            }
	          });
	        }
	      }

	      if (typeof fields.textareaMessage !== 'undefined') {
	        result.textareaMessage = fields.textareaMessage.toString();
	      }

	      if (typeof fields.title !== 'undefined') {
	        fields.name = fields.title;
	      }

	      if (typeof fields.name === "string" || typeof fields.name === "number") {
	        result.name = fields.name.toString();
	      }

	      if (typeof fields.owner !== 'undefined') {
	        fields.ownerId = fields.owner;
	      }

	      if (typeof fields.ownerId === "number" || typeof fields.ownerId === "string") {
	        result.ownerId = parseInt(fields.ownerId);
	      }

	      if (typeof fields.extranet === "boolean") {
	        result.extranet = fields.extranet;
	      }

	      if (typeof fields.avatar === 'string') {
	        var avatar;

	        if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) {
	          avatar = '';
	        } else if (fields.avatar.startsWith('http')) {
	          avatar = fields.avatar;
	        } else {
	          avatar = options.host + fields.avatar;
	        }

	        if (avatar) {
	          result.avatar = encodeURI(avatar);
	        }
	      }

	      if (typeof fields.color === "string") {
	        result.color = fields.color.toString();
	      }

	      if (typeof fields.type === "string") {
	        result.type = fields.type.toString();
	      }

	      if (typeof fields.entity_type !== 'undefined') {
	        fields.entityType = fields.entity_type;
	      }

	      if (typeof fields.entityType === "string") {
	        result.entityType = fields.entityType.toString();
	      }

	      if (typeof fields.entity_id !== 'undefined') {
	        fields.entityId = fields.entity_id;
	      }

	      if (typeof fields.entityId === "string" || typeof fields.entityId === "number") {
	        result.entityId = fields.entityId.toString();
	      }

	      if (typeof fields.entity_data_1 !== 'undefined') {
	        fields.entityData1 = fields.entity_data_1;
	      }

	      if (typeof fields.entityData1 === "string") {
	        result.entityData1 = fields.entityData1.toString();
	      }

	      if (typeof fields.entity_data_2 !== 'undefined') {
	        fields.entityData2 = fields.entity_data_2;
	      }

	      if (typeof fields.entityData2 === "string") {
	        result.entityData2 = fields.entityData2.toString();
	      }

	      if (typeof fields.entity_data_3 !== 'undefined') {
	        fields.entityData3 = fields.entity_data_3;
	      }

	      if (typeof fields.entityData3 === "string") {
	        result.entityData3 = fields.entityData3.toString();
	      }

	      if (typeof fields.date_create !== 'undefined') {
	        fields.dateCreate = fields.date_create;
	      }

	      if (typeof fields.dateCreate !== "undefined") {
	        result.dateCreate = im_lib_utils.Utils.date.cast(fields.dateCreate);
	      }

	      if (typeof fields.dateLastOpen !== "undefined") {
	        result.dateLastOpen = im_lib_utils.Utils.date.cast(fields.dateLastOpen);
	      }

	      if (babelHelpers.typeof(fields.restrictions) === 'object' && fields.restrictions) {
	        result.restrictions = {};

	        if (typeof fields.restrictions.AVATAR === 'boolean') {
	          result.restrictions.avatar = fields.restrictions.AVATAR;
	        }

	        if (typeof fields.restrictions.EXTEND === 'boolean') {
	          result.restrictions.extend = fields.restrictions.EXTEND;
	        }

	        if (typeof fields.restrictions.LEAVE === 'boolean') {
	          result.restrictions.leave = fields.restrictions.LEAVE;
	        }

	        if (typeof fields.restrictions.LEAVE_OWNER === 'boolean') {
	          result.restrictions.leaveOwner = fields.restrictions.LEAVE_OWNER;
	        }

	        if (typeof fields.restrictions.RENAME === 'boolean') {
	          result.restrictions.rename = fields.restrictions.RENAME;
	        }
	      }

	      return result;
	    }
	  }]);
	  return DialoguesModel;
	}(ui_vue_vuex.VuexBuilderModel);

	/**
	 * Bitrix Messenger
	 * User model (Vuex Builder model)
	 *
	 * @package bitrix
	 * @subpackage im
	 * @copyright 2001-2019 Bitrix
	 */

	var UsersModel =
	/*#__PURE__*/
	function (_VuexBuilderModel) {
	  babelHelpers.inherits(UsersModel, _VuexBuilderModel);

	  function UsersModel() {
	    babelHelpers.classCallCheck(this, UsersModel);
	    return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(UsersModel).apply(this, arguments));
	  }

	  babelHelpers.createClass(UsersModel, [{
	    key: "getName",
	    value: function getName() {
	      return 'users';
	    }
	  }, {
	    key: "getState",
	    value: function getState() {
	      this.startOnlineCheckInterval();
	      return {
	        host: this.getVariable('host', location.protocol + '//' + location.host),
	        collection: {},
	        onlineList: [],
	        mobileOnlineList: [],
	        absentList: []
	      };
	    }
	  }, {
	    key: "getElementState",
	    value: function getElementState() {
	      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	      var _params$id = params.id,
	          id = _params$id === void 0 ? 0 : _params$id,
	          _params$name = params.name,
	          name = _params$name === void 0 ? this.getVariable('default.name', '') : _params$name,
	          _params$firstName = params.firstName,
	          firstName = _params$firstName === void 0 ? this.getVariable('default.name', '') : _params$firstName,
	          _params$lastName = params.lastName,
	          lastName = _params$lastName === void 0 ? '' : _params$lastName;
	      return {
	        id: id,
	        name: name,
	        firstName: firstName,
	        lastName: lastName,
	        workPosition: "",
	        color: "#048bd0",
	        avatar: "",
	        gender: "M",
	        birthday: false,
	        isBirthday: false,
	        extranet: false,
	        network: false,
	        bot: false,
	        connector: false,
	        externalAuthId: "default",
	        status: "online",
	        idle: false,
	        lastActivityDate: false,
	        mobileLastDate: false,
	        isOnline: false,
	        isMobileOnline: false,
	        absent: false,
	        isAbsent: false,
	        departments: [],
	        phones: {
	          workPhone: "",
	          personalMobile: "",
	          personalPhone: "",
	          innerPhone: ""
	        },
	        init: false
	      };
	    }
	  }, {
	    key: "getGetters",
	    value: function getGetters() {
	      var _this = this;

	      return {
	        get: function get(state) {
	          return function (userId) {
	            var getTemporary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
	            userId = parseInt(userId);

	            if (userId <= 0) {
	              if (getTemporary) {
	                userId = 0;
	              } else {
	                return null;
	              }
	            }

	            if (!getTemporary && (!state.collection[userId] || !state.collection[userId].init)) {
	              return null;
	            }

	            if (!state.collection[userId]) {
	              return _this.getElementState({
	                id: userId
	              });
	            }

	            return state.collection[userId];
	          };
	        },
	        getBlank: function getBlank(state) {
	          return function (params) {
	            return _this.getElementState(params);
	          };
	        }
	      };
	    }
	  }, {
	    key: "getActions",
	    value: function getActions() {
	      var _this2 = this;

	      return {
	        set: function set(store, payload) {
	          if (payload instanceof Array) {
	            payload = payload.map(function (user) {
	              return Object.assign({}, _this2.getElementState(), _this2.validate(Object.assign({}, user), {
	                host: store.state.host
	              }), {
	                init: true
	              });
	            });
	          } else {
	            var result = [];
	            result.push(Object.assign({}, _this2.getElementState(), _this2.validate(Object.assign({}, payload), {
	              host: store.state.host
	            }), {
	              init: true
	            }));
	            payload = result;
	          }

	          store.commit('set', payload);
	        },
	        update: function update(store, payload) {
	          payload.id = parseInt(payload.id);

	          if (typeof store.state.collection[payload.id] === 'undefined' || store.state.collection[payload.id].init === false) {
	            return true;
	          }

	          store.commit('update', {
	            id: payload.id,
	            fields: _this2.validate(Object.assign({}, payload.fields), {
	              host: store.state.host
	            })
	          });
	          return true;
	        },
	        delete: function _delete(store, payload) {
	          store.commit('delete', payload.id);
	          return true;
	        },
	        saveState: function saveState(store, payload) {
	          store.commit('saveState', {});
	          return true;
	        }
	      };
	    }
	  }, {
	    key: "getMutations",
	    value: function getMutations() {
	      var _this3 = this;

	      return {
	        set: function set(state, payload) {
	          var _iteratorNormalCompletion = true;
	          var _didIteratorError = false;
	          var _iteratorError = undefined;

	          try {
	            var _loop = function _loop() {
	              var element = _step.value;

	              _this3.initCollection(state, {
	                id: element.id
	              });

	              state.collection[element.id] = element;
	              var status = im_lib_utils.Utils.user.getOnlineStatus(element);

	              if (status.isOnline) {
	                state.collection[element.id].isOnline = true;

	                _this3.addToOnlineList(state, element.id);
	              }

	              var mobileStatus = im_lib_utils.Utils.user.isMobileActive(element);

	              if (mobileStatus) {
	                state.collection[element.id].isMobileOnline = true;

	                _this3.addToMobileOnlineList(state, element.id);
	              }

	              if (element.birthday) {
	                var today = im_lib_utils.Utils.date.format(new Date(), "d-m");

	                if (element.birthday === today) {
	                  state.collection[element.id].isBirthday = true;

	                  var timeToNextMidnight = _this3.getTimeToNextMidnight();

	                  setTimeout(function () {
	                    state.collection[element.id].isBirthday = false;
	                  }, timeToNextMidnight);
	                }
	              }

	              if (element.absent) {
	                element.isAbsent = true;

	                if (!state.absentList.includes(element.id)) {
	                  _this3.addToAbsentList(state, element.id);

	                  var _timeToNextMidnight = _this3.getTimeToNextMidnight();

	                  var timeToNextDay = 1000 * 60 * 60 * 24;
	                  setTimeout(function () {
	                    setInterval(function () {
	                      return _this3.startAbsentCheckInterval(state);
	                    }, timeToNextDay);
	                  }, _timeToNextMidnight);
	                }
	              }

	              _this3.saveState(state);
	            };

	            for (var _iterator = payload[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
	              _loop();
	            }
	          } catch (err) {
	            _didIteratorError = true;
	            _iteratorError = err;
	          } finally {
	            try {
	              if (!_iteratorNormalCompletion && _iterator.return != null) {
	                _iterator.return();
	              }
	            } finally {
	              if (_didIteratorError) {
	                throw _iteratorError;
	              }
	            }
	          }
	        },
	        update: function update(state, payload) {
	          _this3.initCollection(state, payload);

	          var lastActivityDate = state.collection[payload.id].lastActivityDate.getTime();
	          var newActivityDate = payload.fields.lastActivityDate.getTime();

	          if (newActivityDate > lastActivityDate) {
	            var status = im_lib_utils.Utils.user.getOnlineStatus(payload.fields);

	            if (status.isOnline) {
	              state.collection[payload.id].isOnline = true;

	              _this3.addToOnlineList(state, payload.fields.id);
	            }
	          }

	          if (state.collection[payload.id].mobileLastDate !== payload.fields.mobileLastDate) {
	            var mobileStatus = im_lib_utils.Utils.user.isMobileActive(payload.fields);

	            if (mobileStatus) {
	              state.collection[payload.id].isMobileOnline = true;

	              _this3.addToMobileOnlineList(state, payload.fields.id);
	            }
	          }

	          state.collection[payload.id] = Object.assign(state.collection[payload.id], payload.fields);

	          _this3.saveState(state);
	        },
	        delete: function _delete(state, payload) {
	          delete state.collection[payload.id];

	          _this3.saveState(state);
	        },
	        saveState: function saveState(state, payload) {
	          _this3.saveState(state);
	        }
	      };
	    }
	  }, {
	    key: "initCollection",
	    value: function initCollection(state, payload) {
	      if (typeof state.collection[payload.id] !== 'undefined') {
	        return true;
	      }

	      ui_vue.Vue.set(state.collection, payload.id, this.getElementState());
	      return true;
	    }
	  }, {
	    key: "getSaveUserList",
	    value: function getSaveUserList() {
	      if (!this.db) {
	        return [];
	      }

	      if (!this.store.getters['messages/getSaveUserList']) {
	        return [];
	      }

	      var list = this.store.getters['messages/getSaveUserList']();

	      if (!list) {
	        return [];
	      }

	      return list;
	    }
	  }, {
	    key: "getSaveTimeout",
	    value: function getSaveTimeout() {
	      return 250;
	    }
	  }, {
	    key: "saveState",
	    value: function saveState(state) {
	      var _this4 = this;

	      if (!this.isSaveAvailable()) {
	        return false;
	      }

	      babelHelpers.get(babelHelpers.getPrototypeOf(UsersModel.prototype), "saveState", this).call(this, function () {
	        var list = _this4.getSaveUserList();

	        if (!list) {
	          return false;
	        }

	        var storedState = {
	          collection: {}
	        };
	        var exceptionList = {
	          absent: true,
	          idle: true,
	          mobileLastDate: true,
	          lastActivityDate: true
	        };

	        for (var chatId in list) {
	          if (!list.hasOwnProperty(chatId)) {
	            continue;
	          }

	          list[chatId].forEach(function (userId) {
	            if (!state.collection[userId]) {
	              return false;
	            }

	            storedState.collection[userId] = _this4.cloneState(state.collection[userId], exceptionList);
	          });
	        }

	        return storedState;
	      });
	    }
	  }, {
	    key: "validate",
	    value: function validate(fields) {
	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	      var result = {};
	      options.host = options.host || this.getState().host;

	      if (typeof fields.id === "number" || typeof fields.id === "string") {
	        result.id = parseInt(fields.id);
	      }

	      if (typeof fields.first_name !== "undefined") {
	        fields.firstName = fields.first_name;
	      }

	      if (typeof fields.last_name !== "undefined") {
	        fields.lastName = fields.last_name;
	      }

	      if (typeof fields.name === "string" || typeof fields.name === "number") {
	        result.name = fields.name.toString();

	        if (typeof fields.firstName !== "undefined" && !fields.firstName) {
	          var elementsOfName = fields.name.split(' ');

	          if (elementsOfName.length > 1) {
	            delete elementsOfName[elementsOfName.length - 1];
	            fields.firstName = elementsOfName.join(' ').trim();
	          } else {
	            fields.firstName = result.name;
	          }
	        }

	        if (typeof fields.lastName !== "undefined" && !fields.lastName) {
	          var _elementsOfName = fields.name.split(' ');

	          if (_elementsOfName.length > 1) {
	            fields.lastName = _elementsOfName[_elementsOfName.length - 1];
	          } else {
	            fields.lastName = '';
	          }
	        }
	      }

	      if (typeof fields.firstName === "string" || typeof fields.name === "number") {
	        result.firstName = fields.firstName.toString();
	      }

	      if (typeof fields.lastName === "string" || typeof fields.name === "number") {
	        result.lastName = fields.lastName.toString();
	      }

	      if (typeof fields.work_position !== "undefined") {
	        fields.workPosition = fields.work_position;
	      }

	      if (typeof fields.workPosition === "string" || typeof fields.workPosition === "number") {
	        result.workPosition = fields.workPosition.toString();
	      }

	      if (typeof fields.color === "string") {
	        result.color = fields.color;
	      }

	      if (typeof fields.avatar === 'string') {
	        var avatar;

	        if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) {
	          avatar = '';
	        } else if (fields.avatar.startsWith('http')) {
	          avatar = fields.avatar;
	        } else {
	          avatar = options.host + fields.avatar;
	        }

	        if (avatar) {
	          result.avatar = encodeURI(avatar);
	        }
	      }

	      if (typeof fields.gender !== 'undefined') {
	        result.gender = fields.gender === 'F' ? 'F' : 'M';
	      }

	      if (typeof fields.birthday === "string") {
	        result.birthday = fields.birthday;
	      }

	      if (typeof fields.extranet === "boolean") {
	        result.extranet = fields.extranet;
	      }

	      if (typeof fields.network === "boolean") {
	        result.network = fields.network;
	      }

	      if (typeof fields.bot === "boolean") {
	        result.bot = fields.bot;
	      }

	      if (typeof fields.connector === "boolean") {
	        result.connector = fields.connector;
	      }

	      if (typeof fields.external_auth_id !== "undefined") {
	        fields.externalAuthId = fields.external_auth_id;
	      }

	      if (typeof fields.externalAuthId === "string" && fields.externalAuthId) {
	        result.externalAuthId = fields.externalAuthId;
	      }

	      if (typeof fields.status === "string") {
	        result.status = fields.status;
	      }

	      if (typeof fields.idle !== "undefined") {
	        result.idle = im_lib_utils.Utils.date.cast(fields.idle, false);
	      }

	      if (typeof fields.last_activity_date !== "undefined") {
	        fields.lastActivityDate = fields.last_activity_date;
	      }

	      if (typeof fields.lastActivityDate !== "undefined") {
	        result.lastActivityDate = im_lib_utils.Utils.date.cast(fields.lastActivityDate, false);
	      }

	      if (typeof fields.mobile_last_date !== "undefined") {
	        fields.mobileLastDate = fields.mobile_last_date;
	      }

	      if (typeof fields.mobileLastDate !== "undefined") {
	        result.mobileLastDate = im_lib_utils.Utils.date.cast(fields.mobileLastDate, false);
	      }

	      if (typeof fields.absent !== "undefined") {
	        result.absent = im_lib_utils.Utils.date.cast(fields.absent, false);
	      }

	      if (typeof fields.departments !== 'undefined') {
	        result.departments = [];

	        if (fields.departments instanceof Array) {
	          fields.departments.forEach(function (departmentId) {
	            departmentId = parseInt(departmentId);

	            if (departmentId > 0) {
	              result.departments.push(departmentId);
	            }
	          });
	        }
	      }

	      if (babelHelpers.typeof(fields.phones) === 'object' && fields.phones) {
	        result.phones = {};

	        if (typeof fields.phones.work_phone !== "undefined") {
	          fields.phones.workPhone = fields.phones.work_phone;
	        }

	        if (typeof fields.phones.workPhone === 'string' || typeof fields.phones.workPhone === 'number') {
	          result.phones.workPhone = fields.phones.workPhone.toString();
	        }

	        if (typeof fields.phones.personal_mobile !== "undefined") {
	          fields.phones.personalMobile = fields.phones.personal_mobile;
	        }

	        if (typeof fields.phones.personalMobile === 'string' || typeof fields.phones.personalMobile === 'number') {
	          result.phones.personalMobile = fields.phones.personalMobile.toString();
	        }

	        if (typeof fields.phones.personal_phone !== "undefined") {
	          fields.phones.personalPhone = fields.phones.personal_phone;
	        }

	        if (typeof fields.phones.personalPhone === 'string' || typeof fields.phones.personalPhone === 'number') {
	          result.phones.personalPhone = fields.phones.personalPhone.toString();
	        }

	        if (typeof fields.phones.inner_phone !== "undefined") {
	          fields.phones.innerPhone = fields.phones.inner_phone;
	        }

	        if (typeof fields.phones.innerPhone === 'string' || typeof fields.phones.innerPhone === 'number') {
	          result.phones.innerPhone = fields.phones.innerPhone.toString();
	        }
	      }

	      return result;
	    }
	  }, {
	    key: "addToOnlineList",
	    value: function addToOnlineList(state, id) {
	      if (!state.onlineList.includes(id)) {
	        state.onlineList.push(id);
	      }
	    }
	  }, {
	    key: "addToMobileOnlineList",
	    value: function addToMobileOnlineList(state, id) {
	      if (!state.mobileOnlineList.includes(id)) {
	        state.mobileOnlineList.push(id);
	      }
	    }
	  }, {
	    key: "addToAbsentList",
	    value: function addToAbsentList(state, id) {
	      if (!state.absentList.includes(id)) {
	        state.absentList.push(id);
	      }
	    }
	  }, {
	    key: "getTimeToNextMidnight",
	    value: function getTimeToNextMidnight() {
	      var nextMidnight = new Date(new Date().setHours(24, 0, 0)).getTime();
	      return nextMidnight - new Date();
	    }
	  }, {
	    key: "startAbsentCheckInterval",
	    value: function startAbsentCheckInterval(state) {
	      var _iteratorNormalCompletion2 = true;
	      var _didIteratorError2 = false;
	      var _iteratorError2 = undefined;

	      try {
	        var _loop2 = function _loop2() {
	          var userId = _step2.value;
	          var user = state.collection[userId];

	          if (!user) {
	            return "continue";
	          }

	          var currentTime = new Date().getTime();
	          var absentEnd = new Date(state.collection[userId].absent).getTime();

	          if (absentEnd <= currentTime) {
	            state.absentList = state.absentList.filter(function (element) {
	              return element !== userId;
	            });
	            user.isAbsent = false;
	          }
	        };

	        for (var _iterator2 = state.absentList[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
	          var _ret = _loop2();

	          if (_ret === "continue") continue;
	        }
	      } catch (err) {
	        _didIteratorError2 = true;
	        _iteratorError2 = err;
	      } finally {
	        try {
	          if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
	            _iterator2.return();
	          }
	        } finally {
	          if (_didIteratorError2) {
	            throw _iteratorError2;
	          }
	        }
	      }
	    }
	  }, {
	    key: "startOnlineCheckInterval",
	    value: function startOnlineCheckInterval() {
	      var _this5 = this;

	      var intervalTime = 60000;
	      setInterval(function () {
	        var _iteratorNormalCompletion3 = true;
	        var _didIteratorError3 = false;
	        var _iteratorError3 = undefined;

	        try {
	          var _loop3 = function _loop3() {
	            var userId = _step3.value;
	            var user = _this5.store.state.users.collection[userId];

	            if (!user) {
	              return "continue";
	            }

	            var status = im_lib_utils.Utils.user.getOnlineStatus(user);

	            if (status.isOnline) {
	              user.isOnline = true;
	            } else {
	              user.isOnline = false;
	              _this5.store.state.users.onlineList = _this5.store.state.users.onlineList.filter(function (element) {
	                return element !== userId;
	              });
	            }
	          };

	          for (var _iterator3 = _this5.store.state.users.onlineList[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
	            var _ret2 = _loop3();

	            if (_ret2 === "continue") continue;
	          }
	        } catch (err) {
	          _didIteratorError3 = true;
	          _iteratorError3 = err;
	        } finally {
	          try {
	            if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
	              _iterator3.return();
	            }
	          } finally {
	            if (_didIteratorError3) {
	              throw _iteratorError3;
	            }
	          }
	        }

	        var _iteratorNormalCompletion4 = true;
	        var _didIteratorError4 = false;
	        var _iteratorError4 = undefined;

	        try {
	          var _loop4 = function _loop4() {
	            var userId = _step4.value;
	            var user = _this5.store.state.users.collection[userId];

	            if (!user) {
	              return "continue";
	            }

	            var mobileStatus = im_lib_utils.Utils.user.isMobileActive(user);

	            if (mobileStatus) {
	              user.isMobileOnline = true;
	            } else {
	              user.isMobileOnline = false;
	              _this5.store.state.users.mobileOnlineList = _this5.store.state.users.mobileOnlineList.filter(function (element) {
	                return element !== userId;
	              });
	            }
	          };

	          for (var _iterator4 = _this5.store.state.users.mobileOnlineList[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
	            var _ret3 = _loop4();

	            if (_ret3 === "continue") continue;
	          }
	        } catch (err) {
	          _didIteratorError4 = true;
	          _iteratorError4 = err;
	        } finally {
	          try {
	            if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
	              _iterator4.return();
	            }
	          } finally {
	            if (_didIteratorError4) {
	              throw _iteratorError4;
	            }
	          }
	        }
	      }, intervalTime);
	    }
	  }]);
	  return UsersModel;
	}(ui_vue_vuex.VuexBuilderModel);

	/**
	 * Bitrix Messenger
	 * File model (Vuex Builder model)
	 *
	 * @package bitrix
	 * @subpackage im
	 * @copyright 2001-2019 Bitrix
	 */

	var FilesModel =
	/*#__PURE__*/
	function (_VuexBuilderModel) {
	  babelHelpers.inherits(FilesModel, _VuexBuilderModel);

	  function FilesModel() {
	    babelHelpers.classCallCheck(this, FilesModel);
	    return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(FilesModel).apply(this, arguments));
	  }

	  babelHelpers.createClass(FilesModel, [{
	    key: "getName",
	    value: function getName() {
	      return 'files';
	    }
	  }, {
	    key: "getState",
	    value: function getState() {
	      return {
	        created: 0,
	        host: this.getVariable('host', location.protocol + '//' + location.host),
	        collection: {},
	        index: {}
	      };
	    }
	  }, {
	    key: "getElementState",
	    value: function getElementState() {
	      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	      var _params$id = params.id,
	          id = _params$id === void 0 ? 0 : _params$id,
	          _params$chatId = params.chatId,
	          chatId = _params$chatId === void 0 ? 0 : _params$chatId,
	          _params$name = params.name,
	          name = _params$name === void 0 ? this.getVariable('default.name', '') : _params$name;
	      return {
	        id: id,
	        chatId: chatId,
	        name: name,
	        templateId: id,
	        date: new Date(),
	        type: 'file',
	        extension: "",
	        icon: "empty",
	        size: 0,
	        image: false,
	        status: im_const.FileStatus.done,
	        progress: 100,
	        authorId: 0,
	        authorName: "",
	        urlPreview: "",
	        urlShow: "",
	        urlDownload: "",
	        init: false
	      };
	    }
	  }, {
	    key: "getGetters",
	    value: function getGetters() {
	      var _this = this;

	      return {
	        get: function get(state) {
	          return function (chatId, fileId) {
	            var getTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

	            if (!chatId || !fileId) {
	              return null;
	            }

	            if (!state.index[chatId] || !state.index[chatId][fileId]) {
	              return null;
	            }

	            if (!getTemporary && !state.index[chatId][fileId].init) {
	              return null;
	            }

	            return state.index[chatId][fileId];
	          };
	        },
	        getList: function getList(state) {
	          return function (chatId) {
	            if (!state.index[chatId]) {
	              return null;
	            }

	            return state.index[chatId];
	          };
	        },
	        getBlank: function getBlank(state) {
	          return function (params) {
	            return _this.getElementState(params);
	          };
	        }
	      };
	    }
	  }, {
	    key: "getActions",
	    value: function getActions() {
	      var _this2 = this;

	      return {
	        add: function add(store, payload) {
	          var result = _this2.validate(Object.assign({}, payload), {
	            host: store.state.host
	          });

	          result.id = 'temporary' + new Date().getTime() + store.state.created;
	          result.templateId = result.id;
	          result.init = true;
	          store.commit('add', Object.assign({}, _this2.getElementState(), result));
	          return result.id;
	        },
	        set: function set(store, payload) {
	          if (payload instanceof Array) {
	            payload = payload.map(function (file) {
	              var result = _this2.validate(Object.assign({}, file), {
	                host: store.state.host
	              });

	              result.templateId = result.id;
	              return Object.assign({}, _this2.getElementState(), result, {
	                init: true
	              });
	            });
	          } else {
	            var result = _this2.validate(Object.assign({}, payload), {
	              host: store.state.host
	            });

	            result.templateId = result.id;
	            payload = [];
	            payload.push(Object.assign({}, _this2.getElementState(), result, {
	              init: true
	            }));
	          }

	          store.commit('set', {
	            insertType: im_const.MutationType.setAfter,
	            data: payload
	          });
	        },
	        setBefore: function setBefore(store, payload) {
	          if (payload instanceof Array) {
	            payload = payload.map(function (file) {
	              var result = _this2.validate(Object.assign({}, file), {
	                host: store.state.host
	              });

	              result.templateId = result.id;
	              return Object.assign({}, _this2.getElementState(), result, {
	                init: true
	              });
	            });
	          } else {
	            var result = _this2.validate(Object.assign({}, payload), {
	              host: store.state.host
	            });

	            result.templateId = result.id;
	            payload = [];
	            payload.push(Object.assign({}, _this2.getElementState(), result, {
	              init: true
	            }));
	          }

	          store.commit('set', {
	            actionName: 'setBefore',
	            insertType: im_const.MutationType.setBefore,
	            data: payload
	          });
	        },
	        update: function update(store, payload) {
	          var result = _this2.validate(Object.assign({}, payload.fields), {
	            host: store.state.host
	          });

	          store.commit('initCollection', {
	            chatId: payload.chatId
	          });
	          var index = store.state.collection[payload.chatId].findIndex(function (el) {
	            return el.id === payload.id;
	          });

	          if (index < 0) {
	            return false;
	          }

	          store.commit('update', {
	            id: payload.id,
	            chatId: payload.chatId,
	            index: index,
	            fields: result
	          });

	          if (payload.fields.blink) {
	            setTimeout(function () {
	              store.commit('update', {
	                id: payload.id,
	                chatId: payload.chatId,
	                fields: {
	                  blink: false
	                }
	              });
	            }, 1000);
	          }

	          return true;
	        },
	        delete: function _delete(store, payload) {
	          store.commit('delete', {
	            id: payload.id,
	            chatId: payload.chatId
	          });
	          return true;
	        },
	        saveState: function saveState(store, payload) {
	          store.commit('saveState', {});
	          return true;
	        }
	      };
	    }
	  }, {
	    key: "getMutations",
	    value: function getMutations() {
	      var _this3 = this;

	      return {
	        initCollection: function initCollection(state, payload) {
	          _this3.initCollection(state, payload);
	        },
	        add: function add(state, payload) {
	          _this3.initCollection(state, payload);

	          state.collection[payload.chatId].push(payload);
	          state.index[payload.chatId][payload.id] = payload;
	          state.created += 1;

	          _this3.saveState(state);
	        },
	        set: function set(state, payload) {
	          var _iteratorNormalCompletion = true;
	          var _didIteratorError = false;
	          var _iteratorError = undefined;

	          try {
	            var _loop = function _loop() {
	              var element = _step.value;

	              _this3.initCollection(state, {
	                chatId: element.chatId
	              });

	              var index = state.collection[element.chatId].findIndex(function (el) {
	                return el.id === element.id;
	              });

	              if (index > -1) {
	                delete element.templateId;
	                state.collection[element.chatId][index] = Object.assign(state.collection[element.chatId][index], element);
	              } else if (payload.insertType === im_const.MutationType.setBefore) {
	                state.collection[element.chatId].unshift(element);
	              } else {
	                state.collection[element.chatId].push(element);
	              }

	              state.index[element.chatId][element.id] = element;

	              _this3.saveState(state);
	            };

	            for (var _iterator = payload.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
	              _loop();
	            }
	          } catch (err) {
	            _didIteratorError = true;
	            _iteratorError = err;
	          } finally {
	            try {
	              if (!_iteratorNormalCompletion && _iterator.return != null) {
	                _iterator.return();
	              }
	            } finally {
	              if (_didIteratorError) {
	                throw _iteratorError;
	              }
	            }
	          }
	        },
	        update: function update(state, payload) {
	          _this3.initCollection(state, payload);

	          var index = -1;

	          if (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index]) {
	            index = payload.index;
	          } else {
	            index = state.collection[payload.chatId].findIndex(function (el) {
	              return el.id === payload.id;
	            });
	          }

	          if (index >= 0) {
	            delete payload.fields.templateId;
	            var element = Object.assign(state.collection[payload.chatId][index], payload.fields);
	            state.collection[payload.chatId][index] = element;
	            state.index[payload.chatId][element.id] = element;

	            _this3.saveState(state);
	          }
	        },
	        delete: function _delete(state, payload) {
	          _this3.initCollection(state, payload);

	          state.collection[payload.chatId] = state.collection[payload.chatId].filter(function (element) {
	            return element.id !== payload.id;
	          });
	          delete state.index[payload.chatId][payload.id];

	          _this3.saveState(state);
	        },
	        saveState: function saveState(state, payload) {
	          _this3.saveState(state);
	        }
	      };
	    }
	  }, {
	    key: "initCollection",
	    value: function initCollection(state, payload) {
	      if (typeof state.collection[payload.chatId] !== 'undefined') {
	        return true;
	      }

	      ui_vue.Vue.set(state.collection, payload.chatId, []);
	      ui_vue.Vue.set(state.index, payload.chatId, {});
	      return true;
	    }
	  }, {
	    key: "getLoadedState",
	    value: function getLoadedState(state) {
	      if (!state || babelHelpers.typeof(state) !== 'object') {
	        return state;
	      }

	      if (babelHelpers.typeof(state.collection) !== 'object') {
	        return state;
	      }

	      state.index = {};

	      var _loop2 = function _loop2(chatId) {
	        if (!state.collection.hasOwnProperty(chatId)) {
	          return "continue";
	        }

	        state.index[chatId] = {};
	        state.collection[chatId].filter(function (file) {
	          return file != null;
	        }).forEach(function (file) {
	          state.index[chatId][file.id] = file;
	        });
	      };

	      for (var chatId in state.collection) {
	        var _ret = _loop2(chatId);

	        if (_ret === "continue") continue;
	      }

	      return state;
	    }
	  }, {
	    key: "getSaveFileList",
	    value: function getSaveFileList() {
	      if (!this.db) {
	        return [];
	      }

	      if (!this.store.getters['messages/getSaveFileList']) {
	        return [];
	      }

	      var list = this.store.getters['messages/getSaveFileList']();

	      if (!list) {
	        return [];
	      }

	      return list;
	    }
	  }, {
	    key: "getSaveTimeout",
	    value: function getSaveTimeout() {
	      return 250;
	    }
	  }, {
	    key: "saveState",
	    value: function saveState(state) {
	      var _this4 = this;

	      if (!this.isSaveAvailable()) {
	        return false;
	      }

	      babelHelpers.get(babelHelpers.getPrototypeOf(FilesModel.prototype), "saveState", this).call(this, function () {
	        var list = _this4.getSaveFileList();

	        if (!list) {
	          return false;
	        }

	        var storedState = {
	          collection: {}
	        };

	        var _loop3 = function _loop3(chatId) {
	          if (!list.hasOwnProperty(chatId)) {
	            return "continue";
	          }

	          list[chatId].forEach(function (fileId) {
	            if (!state.index[chatId]) {
	              return false;
	            }

	            if (!state.index[chatId][fileId]) {
	              return false;
	            }

	            if (!storedState.collection[chatId]) {
	              storedState.collection[chatId] = [];
	            }

	            storedState.collection[chatId].push(state.index[chatId][fileId]);
	          });
	        };

	        for (var chatId in list) {
	          var _ret2 = _loop3(chatId);

	          if (_ret2 === "continue") continue;
	        }

	        return storedState;
	      });
	    }
	  }, {
	    key: "validate",
	    value: function validate(fields) {
	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	      var result = {};
	      options.host = options.host || this.getState().host;

	      if (typeof fields.id === "number") {
	        result.id = fields.id;
	      } else if (typeof fields.id === "string") {
	        if (fields.id.startsWith('temporary')) {
	          result.id = fields.id;
	        } else {
	          result.id = parseInt(fields.id);
	        }
	      }

	      if (typeof fields.templateId === "number") {
	        result.templateId = fields.templateId;
	      } else if (typeof fields.templateId === "string") {
	        if (fields.templateId.startsWith('temporary')) {
	          result.templateId = fields.templateId;
	        } else {
	          result.templateId = parseInt(fields.templateId);
	        }
	      }

	      if (typeof fields.chatId === "number" || typeof fields.chatId === "string") {
	        result.chatId = parseInt(fields.chatId);
	      }

	      if (typeof fields.date !== "undefined") {
	        result.date = im_lib_utils.Utils.date.cast(fields.date);
	      }

	      if (typeof fields.type === "string") {
	        result.type = fields.type;
	      }

	      if (typeof fields.extension === "string") {
	        result.extension = fields.extension.toString();

	        if (result.type === 'image') {
	          result.icon = 'img';
	        } else if (result.type === 'video') {
	          result.icon = 'mov';
	        } else {
	          result.icon = FilesModel.getIconType(result.extension);
	        }
	      }

	      if (typeof fields.name === "string" || typeof fields.name === "number") {
	        result.name = fields.name.toString();
	      }

	      if (typeof fields.size === "number" || typeof fields.size === "string") {
	        result.size = parseInt(fields.size);
	      }

	      if (typeof fields.image === 'boolean') {
	        result.image = false;
	      } else if (babelHelpers.typeof(fields.image) === 'object' && fields.image) {
	        result.image = {
	          width: 0,
	          height: 0
	        };

	        if (typeof fields.image.width === "string" || typeof fields.image.width === "number") {
	          result.image.width = parseInt(fields.image.width);
	        }

	        if (typeof fields.image.height === "string" || typeof fields.image.height === "number") {
	          result.image.height = parseInt(fields.image.height);
	        }

	        if (result.image.width <= 0 || result.image.height <= 0) {
	          result.image = false;
	        }
	      }

	      if (typeof fields.status === "string" && typeof im_const.FileStatus[fields.status] !== 'undefined') {
	        result.status = fields.status;
	      }

	      if (typeof fields.progress === "number" || typeof fields.progress === "string") {
	        result.progress = parseInt(fields.progress);
	      }

	      if (typeof fields.authorId === "number" || typeof fields.authorId === "string") {
	        result.authorId = parseInt(fields.authorId);
	      }

	      if (typeof fields.authorName === "string" || typeof fields.authorName === "number") {
	        result.authorName = fields.authorName.toString();
	      }

	      if (typeof fields.urlPreview === 'string') {
	        if (!fields.urlPreview || fields.urlPreview.startsWith('http') || fields.urlPreview.startsWith('bx') || fields.urlPreview.startsWith('file')) {
	          result.urlPreview = fields.urlPreview;
	        } else {
	          result.urlPreview = options.host + fields.urlPreview;
	        }
	      }

	      if (typeof fields.urlDownload === 'string') {
	        if (!fields.urlDownload || fields.urlDownload.startsWith('http') || fields.urlDownload.startsWith('bx') || fields.urlPreview.startsWith('file')) {
	          result.urlDownload = fields.urlDownload;
	        } else {
	          result.urlDownload = options.host + fields.urlDownload;
	        }
	      }

	      if (typeof fields.urlShow === 'string') {
	        if (!fields.urlShow || fields.urlShow.startsWith('http') || fields.urlShow.startsWith('bx') || fields.urlShow.startsWith('file')) {
	          result.urlShow = fields.urlShow;
	        } else {
	          result.urlShow = options.host + fields.urlShow;
	        }
	      }

	      return result;
	    }
	  }], [{
	    key: "getType",
	    value: function getType(type) {
	      type = type.toString().toLowerCase().split('.').splice(-1)[0];

	      switch (type) {
	        case 'png':
	        case 'jpe':
	        case 'jpg':
	        case 'jpeg':
	        case 'gif':
	        case 'heic':
	        case 'bmp':
	          return im_const.FileType.image;

	        case 'mp4':
	        case 'mkv':
	        case 'webm':
	        case 'mpeg':
	        case 'hevc':
	        case 'avi':
	        case '3gp':
	        case 'flv':
	        case 'm4v':
	        case 'ogg':
	        case 'wmv':
	        case 'mov':
	          return im_const.FileType.video;

	        case 'mp3':
	          return im_const.FileType.audio;
	      }

	      return im_const.FileType.file;
	    }
	  }, {
	    key: "getIconType",
	    value: function getIconType(extension) {
	      var icon = 'empty';

	      switch (extension.toString()) {
	        case 'png':
	        case 'jpe':
	        case 'jpg':
	        case 'jpeg':
	        case 'gif':
	        case 'heic':
	        case 'bmp':
	          icon = 'img';
	          break;

	        case 'mp4':
	        case 'mkv':
	        case 'webm':
	        case 'mpeg':
	        case 'hevc':
	        case 'avi':
	        case '3gp':
	        case 'flv':
	        case 'm4v':
	        case 'ogg':
	        case 'wmv':
	        case 'mov':
	          icon = 'mov';
	          break;

	        case 'txt':
	          icon = 'txt';
	          break;

	        case 'doc':
	        case 'docx':
	          icon = 'doc';
	          break;

	        case 'xls':
	        case 'xlsx':
	          icon = 'xls';
	          break;

	        case 'php':
	          icon = 'php';
	          break;

	        case 'pdf':
	          icon = 'pdf';
	          break;

	        case 'ppt':
	        case 'pptx':
	          icon = 'ppt';
	          break;

	        case 'rar':
	          icon = 'rar';
	          break;

	        case 'zip':
	        case '7z':
	        case 'tar':
	        case 'gz':
	        case 'gzip':
	          icon = 'zip';
	          break;

	        case 'set':
	          icon = 'set';
	          break;

	        case 'conf':
	        case 'ini':
	        case 'plist':
	          icon = 'set';
	          break;
	      }

	      return icon;
	    }
	  }]);
	  return FilesModel;
	}(ui_vue_vuex.VuexBuilderModel);

	/**
	 * Bitrix Messenger
	 * User model (Vuex Builder model)
	 *
	 * @package bitrix
	 * @subpackage im
	 * @copyright 2001-2019 Bitrix
	 */

	var RecentModel =
	/*#__PURE__*/
	function (_VuexBuilderModel) {
	  babelHelpers.inherits(RecentModel, _VuexBuilderModel);

	  function RecentModel() {
	    babelHelpers.classCallCheck(this, RecentModel);
	    return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(RecentModel).apply(this, arguments));
	  }

	  babelHelpers.createClass(RecentModel, [{
	    key: "getName",
	    value: function getName() {
	      return 'recent';
	    }
	  }, {
	    key: "getState",
	    value: function getState() {
	      return {
	        host: this.getVariable('host', location.protocol + '//' + location.host),
	        collection: {
	          pinned: [],
	          general: []
	        }
	      };
	    }
	  }, {
	    key: "getElementState",
	    value: function getElementState() {
	      return {
	        id: 0,
	        templateId: '',
	        template: 'item',
	        chatType: 'chat',
	        sectionCode: 'general',
	        avatar: '',
	        color: '#048bd0',
	        title: '',
	        message: {
	          id: 0,
	          text: '',
	          date: new Date()
	        },
	        counter: 0,
	        pinned: false,
	        chatId: 0,
	        userId: 0
	      };
	    }
	  }, {
	    key: "getGetters",
	    value: function getGetters() {
	      var _this = this;

	      return {
	        get: function get(state) {
	          return function (dialogId) {
	            return _this.findItem(state.collection, dialogId);
	          };
	        }
	      };
	    }
	  }, {
	    key: "getActions",
	    value: function getActions() {
	      var _this2 = this;

	      return {
	        set: function set(store, payload) {
	          var result = {};

	          if (payload.pinned instanceof Array) {
	            result.pinned = payload.pinned.map(function (recentItem) {
	              return _this2.prepareItem(recentItem, {
	                host: store.state.host,
	                sectionCode: 'pinned'
	              });
	            });
	          } else if (typeof payload.pinned !== 'undefined') {
	            var pinned = [];
	            pinned.push(_this2.prepareItem(payload.pinned, {
	              host: store.state.host,
	              sectionCode: 'pinned'
	            }));
	            result.pinned = pinned;
	          }

	          if (payload.general instanceof Array) {
	            result.general = payload.general.map(function (recentItem) {
	              return _this2.prepareItem(recentItem, {
	                host: store.state.host
	              });
	            });
	          } else if (typeof payload.general !== 'undefined') {
	            var general = [];
	            general.push(_this2.prepareItem(payload.general, {
	              host: store.state.host
	            }));
	            result.general = general;
	          }

	          store.commit('set', result);
	        },
	        updatePlaceholders: function updatePlaceholders(store, payload) {
	          if (!(payload.items instanceof Array)) {
	            return false;
	          }

	          payload.items = payload.items.map(function (element) {
	            return _this2.prepareItem(element);
	          });
	          payload.items.forEach(function (element, index) {
	            var placeholderId = 'placeholder' + (payload.firstMessage + index);

	            var existingPlaceholder = _this2.findItem(store.state.collection, placeholderId, 'templateId');

	            var existingItem = _this2.findItem(store.state.collection, element.id);

	            if (existingItem.element) {
	              store.commit('update', {
	                index: existingItem.index,
	                fields: Object.assign({}, element),
	                section: 'general'
	              });
	              store.commit('delete', {
	                index: existingPlaceholder.index,
	                section: 'general'
	              });
	            } else {
	              store.commit('update', {
	                index: existingPlaceholder.index,
	                fields: Object.assign({}, element),
	                section: 'general'
	              });
	            }
	          });
	        },
	        update: function update(store, payload) {
	          if (babelHelpers.typeof(payload) !== 'object' || payload instanceof Array || !payload.id || !payload.fields) {
	            return false;
	          }

	          if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') {
	            payload.id = parseInt(payload.id);
	          }

	          var existingItem = _this2.findItem(store.state.collection, payload.id);

	          if (!existingItem.element) {
	            return false;
	          }

	          store.commit('update', {
	            index: existingItem.index,
	            fields: Object.assign({}, _this2.validate(payload.fields)),
	            section: existingItem.element.sectionCode
	          });
	        },
	        pin: function pin(store, payload) {
	          if (babelHelpers.typeof(payload) !== 'object' || payload instanceof Array || !payload.id || typeof payload.action !== 'boolean') {
	            return false;
	          }

	          if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') {
	            payload.id = parseInt(payload.id);
	          }

	          var existingItem = _this2.findItem(store.state.collection, payload.id, undefined, payload.action ? 'general' : 'pinned');

	          if (!existingItem.element) {
	            return true;
	          }

	          if (payload.action) {
	            store.state.collection.pinned.push(Object.assign({}, existingItem.element, {
	              sectionCode: 'pinned',
	              pinned: true
	            }));
	            store.state.collection.pinned.sort(_this2.sortListByMessageDate);
	            store.commit('delete', {
	              index: existingItem.index,
	              section: 'general'
	            });
	          } else {
	            store.state.collection.general.push(Object.assign({}, existingItem.element, {
	              sectionCode: 'general',
	              pinned: false
	            }));
	            store.state.collection.general.sort(_this2.sortListByMessageDate);
	            store.commit('delete', {
	              index: existingItem.index,
	              section: 'pinned'
	            });
	          }
	        },
	        clearPlaceholders: function clearPlaceholders(store, payload) {
	          store.state.collection.general = store.state.collection.general.filter(function (element) {
	            return !element.id.toString().startsWith('placeholder');
	          });
	        },
	        delete: function _delete(store, payload) {
	          if (babelHelpers.typeof(payload) !== 'object' || payload instanceof Array || !payload.id) {
	            return false;
	          }

	          if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') {
	            payload.id = parseInt(payload.id);
	          }

	          var existingItem = _this2.findItem(store.state.collection, payload.id);

	          if (!existingItem.element) {
	            return false;
	          }

	          store.commit('delete', {
	            index: existingItem.index,
	            section: existingItem.element.sectionCode
	          });
	        }
	      };
	    }
	  }, {
	    key: "getMutations",
	    value: function getMutations() {
	      var _this3 = this;

	      return {
	        set: function set(state, payload) {
	          if (payload.general instanceof Array) {
	            payload.general.forEach(function (element) {
	              var _this3$initCollection = _this3.initCollection(state, element, 'general'),
	                  index = _this3$initCollection.index,
	                  alreadyExists = _this3$initCollection.alreadyExists;

	              if (alreadyExists) {
	                state.collection.general[index] = Object.assign({}, state.collection.general[index], element);
	              }
	            });
	          }

	          if (payload.pinned instanceof Array) {
	            payload.pinned.forEach(function (element) {
	              var _this3$initCollection2 = _this3.initCollection(state, element, 'pinned'),
	                  index = _this3$initCollection2.index,
	                  alreadyExists = _this3$initCollection2.alreadyExists;

	              if (alreadyExists) {
	                state.collection.pinned[index] = Object.assign({}, state.collection.pinned[index], element);
	              }
	            });
	          }
	        },
	        update: function update(state, payload) {
	          if (!payload || payload instanceof Array || babelHelpers.typeof(payload.fields) !== 'object' || typeof payload.index !== 'number' || typeof payload.section !== 'string') {
	            return false;
	          }

	          state.collection[payload.section][payload.index] = Object.assign({}, state.collection[payload.section][payload.index], payload.fields);
	          state.collection[payload.section].sort(_this3.sortListByMessageDate);
	        },
	        delete: function _delete(state, payload) {
	          if (!payload || payload instanceof Array || typeof payload.index !== 'number' || typeof payload.section !== 'string') {
	            return false;
	          }

	          state.collection[payload.section].splice(payload.index, 1);
	        }
	      };
	    }
	  }, {
	    key: "initCollection",
	    value: function initCollection(state, payload, section) {
	      var existingItem = this.findItem(state.collection, payload.id, undefined, section);

	      if (existingItem.element) {
	        return {
	          index: existingItem.index,
	          alreadyExists: true
	        };
	      }

	      var newLength = state.collection[section].push(Object.assign({}, this.getElementState(), payload));
	      return {
	        index: newLength - 1,
	        alreadyExists: false
	      };
	    }
	  }, {
	    key: "validate",
	    value: function validate(fields) {
	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	      var result = {};

	      if (typeof fields.id === "number" || typeof fields.id === "string") {
	        result.id = fields.id;
	      }

	      if (typeof fields.templateId === 'string') {
	        result.templateId = fields.templateId;
	      }

	      if (typeof fields.template === 'string') {
	        result.template = fields.template;
	      }

	      if (typeof fields.type === "string") {
	        if (fields.type === 'chat') {
	          if (fields.chat.type === 'open') {
	            result.chatType = 'open';
	          } else if (fields.chat.type === 'chat') {
	            result.chatType = 'chat';
	          }
	        } else if (fields.type === 'user') {
	          result.chatType = 'user';
	        } else if (fields.type === 'notification') {
	          result.chatType = 'notification';
	          fields.title = 'Notifications';
	        }
	      }

	      if (typeof fields.avatar === 'string') {
	        var avatar;

	        if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) {
	          avatar = '';
	        } else if (fields.avatar.startsWith('http')) {
	          avatar = fields.avatar;
	        } else {
	          avatar = options.host + fields.avatar;
	        }

	        if (avatar) {
	          result.avatar = encodeURI(avatar);
	        }
	      }

	      if (typeof fields.color === 'string') {
	        result.color = fields.color;
	      }

	      if (typeof fields.title === "string") {
	        result.title = fields.title;
	      }

	      if (babelHelpers.typeof(fields.message) === "object" && !(fields.message instanceof Array) && fields.message !== null) {
	        result.message = fields.message;
	      }

	      if (typeof fields.counter === 'number') {
	        result.counter = fields.counter;
	      }

	      if (typeof fields.pinned === 'boolean') {
	        result.pinned = fields.pinned;
	      }

	      if (typeof fields.chatId === 'number') {
	        result.chatId = fields.chatId;
	      }

	      if (typeof fields.userId === 'number') {
	        result.userId = fields.userId;
	      }

	      return result;
	    }
	  }, {
	    key: "sortListByMessageDate",
	    value: function sortListByMessageDate(a, b) {
	      if (a.message && b.message) {
	        var timestampA = new Date(a.message.date).getTime();
	        var timestampB = new Date(b.message.date).getTime();
	        return timestampB - timestampA;
	      }
	    }
	  }, {
	    key: "prepareItem",
	    value: function prepareItem(item) {
	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	      var result = this.validate(Object.assign({}, item));
	      return Object.assign({}, this.getElementState(), result, options);
	    }
	  }, {
	    key: "findItem",
	    value: function findItem(store, value) {
	      var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'id';
	      var section = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'general';
	      var result = {};

	      if (babelHelpers.typeof(store[section]) === undefined) {
	        return result;
	      }

	      var elementIndex = store[section].findIndex(function (element, index) {
	        return element[key] === value;
	      });

	      if (elementIndex !== -1) {
	        result.index = elementIndex;
	        result.element = store[section][elementIndex];
	        return result;
	      }

	      return result;
	    }
	  }]);
	  return RecentModel;
	}(ui_vue_vuex.VuexBuilderModel);

	exports.ApplicationModel = ApplicationModel;
	exports.MessagesModel = MessagesModel;
	exports.DialoguesModel = DialoguesModel;
	exports.UsersModel = UsersModel;
	exports.FilesModel = FilesModel;
	exports.RecentModel = RecentModel;

}((this.BX.Messenger.Model = this.BX.Messenger.Model || {}),BX.Messenger.Const,BX,BX,BX.Messenger.Lib));
//# sourceMappingURL=registry.bundle.js.map
dist/registry.bundle.min.js000066400000205470147732346740012002 0ustar00this.BX=this.BX||{};this.BX.Messenger=this.BX.Messenger||{};(function(e,t,i,n,a){"use strict";var r=function(e){babelHelpers.inherits(i,e);function i(){babelHelpers.classCallCheck(this,i);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(i).apply(this,arguments))}babelHelpers.createClass(i,[{key:"getName",value:function e(){return"application"}},{key:"getState",value:function e(){return{common:{host:this.getVariable("common.host",location.protocol+"//"+location.host),siteId:this.getVariable("common.siteId","default"),userId:this.getVariable("common.userId",0),languageId:this.getVariable("common.languageId","en")},dialog:{dialogId:this.getVariable("dialog.dialogId","0"),chatId:this.getVariable("dialog.chatId",0),diskFolderId:this.getVariable("dialog.diskFolderId",0),messageLimit:this.getVariable("dialog.messageLimit",20),enableReadMessages:this.getVariable("dialog.enableReadMessages",true),messageExtraCount:0},disk:{enabled:false,maxFileSize:5242880},mobile:{keyboardShow:false},device:{type:this.getVariable("device.type",t.DeviceType.desktop),orientation:this.getVariable("device.orientation",t.DeviceOrientation.portrait)},options:{quoteEnable:this.getVariable("options.quoteEnable",true),quoteFromRight:this.getVariable("options.quoteFromRight",true),autoplayVideo:this.getVariable("options.autoplayVideo",true),darkBackground:this.getVariable("options.darkBackground",false),showSmiles:false},error:{active:false,code:"",description:""}}}},{key:"getStateSaveException",value:function e(){return Object.assign({common:this.getVariable("saveException.common",null),dialog:this.getVariable("saveException.dialog",null),mobile:this.getVariable("saveException.mobile",null),device:this.getVariable("saveException.device",null),error:this.getVariable("saveException.error",null)})}},{key:"getActions",value:function e(){var t=this;return{set:function e(i,n){i.commit("set",t.validate(n))},showSmiles:function e(t,i){t.commit("showSmiles")},hideSmiles:function e(t,i){t.commit("hideSmiles")}}}},{key:"getMutations",value:function e(){var t=this;return{set:function e(i,n){var a=false;for(var r in n){if(!n.hasOwnProperty(r)){continue}for(var o in n[r]){if(!n[r].hasOwnProperty(o)){continue}i[r][o]=n[r][o];a=true}}if(a&&t.isSaveNeeded(n)){t.saveState(i)}},increaseDialogExtraCount:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=i.count,a=n===void 0?1:n;t.dialog.messageExtraCount+=a},decreaseDialogExtraCount:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=i.count,a=n===void 0?1:n;var r=t.dialog.messageExtraCount-a;if(r<=0){r=0}t.dialog.messageExtraCount=r},clearDialogExtraCount:function e(t){t.dialog.messageExtraCount=0},showSmiles:function e(t){t.options.showSmiles=true},hideSmiles:function e(t){t.options.showSmiles=false}}}},{key:"validate",value:function e(i){var n={};if(babelHelpers.typeof(i.common)==="object"&&i.common){n.common={};if(typeof i.common.userId==="number"){n.common.userId=i.common.userId}if(typeof i.common.languageId==="string"){n.common.languageId=i.common.languageId}}if(babelHelpers.typeof(i.dialog)==="object"&&i.dialog){n.dialog={};if(typeof i.dialog.dialogId==="number"){n.dialog.dialogId=i.dialog.dialogId.toString();n.dialog.chatId=0}else if(typeof i.dialog.dialogId==="string"){n.dialog.dialogId=i.dialog.dialogId;if(typeof i.dialog.chatId!=="number"){var a=i.dialog.dialogId;if(a.startsWith("chat")){a=i.dialog.dialogId.substr(4)}a=parseInt(a);n.dialog.chatId=!isNaN(a)?a:0;i.dialog.chatId=n.dialog.chatId}}if(typeof i.dialog.chatId==="number"){n.dialog.chatId=i.dialog.chatId}if(typeof i.dialog.diskFolderId==="number"){n.dialog.diskFolderId=i.dialog.diskFolderId}if(typeof i.dialog.messageLimit==="number"){n.dialog.messageLimit=i.dialog.messageLimit}if(typeof i.dialog.messageExtraCount==="number"){n.dialog.messageExtraCount=i.dialog.messageExtraCount}if(typeof i.dialog.enableReadMessages==="boolean"){n.dialog.enableReadMessages=i.dialog.enableReadMessages}}if(babelHelpers.typeof(i.disk)==="object"&&i.disk){n.disk={};if(typeof i.disk.enabled==="boolean"){n.disk.enabled=i.disk.enabled}if(typeof i.disk.maxFileSize==="number"){n.disk.maxFileSize=i.disk.maxFileSize}}if(babelHelpers.typeof(i.mobile)==="object"&&i.mobile){n.mobile={};if(typeof i.mobile.keyboardShow==="boolean"){n.mobile.keyboardShow=i.mobile.keyboardShow}}if(babelHelpers.typeof(i.device)==="object"&&i.device){n.device={};if(typeof i.device.type==="string"&&typeof t.DeviceType[i.device.type]!=="undefined"){n.device.type=i.device.type}if(typeof i.device.orientation==="string"&&typeof t.DeviceOrientation[i.device.orientation]!=="undefined"){n.device.orientation=i.device.orientation}}if(babelHelpers.typeof(i.error)==="object"&&i.error){if(typeof i.error.active==="boolean"){n.error={active:i.error.active,code:i.error.code.toString()||"",description:i.error.description.toString()||""}}}return n}}]);return i}(n.VuexBuilderModel);var o={empty:"empty",equal:"equal",none:"none",found:"found",foundReverse:"foundReverse"};var s=function(e){babelHelpers.inherits(n,e);function n(){babelHelpers.classCallCheck(this,n);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(n).apply(this,arguments))}babelHelpers.createClass(n,[{key:"getName",value:function e(){return"messages"}},{key:"getState",value:function e(){return{created:0,collection:{},mutationType:{},saveMessageList:{},saveFileList:{},saveUserList:{},host:this.getVariable("host",location.protocol+"//"+location.host)}}},{key:"getElementState",value:function e(){return{templateId:0,templateType:"message",id:0,chatId:0,authorId:0,date:new Date,text:"",textConverted:"",params:{TYPE:"default",COMPONENT_ID:"bx-im-view-message"},push:false,unread:false,sending:false,error:false,retry:false,blink:false}}},{key:"getGetters",value:function e(){var i=this;return{getMutationType:function e(i){return function(e){if(!i.mutationType[e]){return{initialType:t.MutationType.none,appliedType:t.MutationType.none}}return i.mutationType[e]}},getLastId:function e(t){return function(e){if(!t.collection[e]||t.collection[e].length<=0){return null}var i=0;for(var n=0;n<t.collection[e].length;n++){var a=t.collection[e][n];if(a.push||a.sending||a.id.toString().startsWith("temporary")){continue}if(i<a.id){i=a.id}}return i?i:null}},getMessage:function e(t){return function(e,i){if(!t.collection[e]||t.collection[e].length<=0){return null}for(var n=t.collection[e].length-1;n>=0;n--){if(t.collection[e][n].id===i){return t.collection[e][n]}}return null}},get:function e(t){return function(e){if(!t.collection[e]||t.collection[e].length<=0){return[]}return t.collection[e]}},getBlank:function e(t){return function(e){return i.getElementState()}},getSaveFileList:function e(t){return function(e){return t.saveFileList}},getSaveUserList:function e(t){return function(e){return t.saveUserList}}}}},{key:"getActions",value:function e(){var n=this;return{add:function e(t,i){var a=n.validate(Object.assign({},i));a.params=Object.assign({},n.getElementState().params,a.params);a.id="temporary"+(new Date).getTime()+t.state.created;a.templateId=a.id;a.unread=false;t.commit("add",Object.assign({},n.getElementState(),a));if(i.sending!==false){t.dispatch("actionStart",{id:a.id,chatId:a.chatId})}return a.id},actionStart:function e(t,n){if(/^\d+$/.test(n.id)){n.id=parseInt(n.id)}n.chatId=parseInt(n.chatId);i.Vue.nextTick(function(){t.commit("update",{id:n.id,chatId:n.chatId,fields:{sending:true}})})},actionError:function e(t,n){if(/^\d+$/.test(n.id)){n.id=parseInt(n.id)}n.chatId=parseInt(n.chatId);i.Vue.nextTick(function(){t.commit("update",{id:n.id,chatId:n.chatId,fields:{sending:false,error:true,retry:n.retry!==false}})})},actionFinish:function e(t,n){if(/^\d+$/.test(n.id)){n.id=parseInt(n.id)}n.chatId=parseInt(n.chatId);i.Vue.nextTick(function(){t.commit("update",{id:n.id,chatId:n.chatId,fields:{sending:false,error:false,retry:false}})})},set:function e(i,a){if(a instanceof Array){a=a.map(function(e){return n.prepareMessage(e,{host:i.state.host})})}else{var r=n.prepareMessage(a,{host:i.state.host});(a=[]).push(r)}i.commit("set",{insertType:t.MutationType.set,data:a})},setAfter:function e(i,a){if(a instanceof Array){a=a.map(function(e){return n.prepareMessage(e)})}else{var r=n.prepareMessage(a);(a=[]).push(r)}i.commit("set",{insertType:t.MutationType.setAfter,data:a})},setBefore:function e(i,a){if(a instanceof Array){a=a.map(function(e){return n.prepareMessage(e)})}else{var r=n.prepareMessage(a);(a=[]).push(r)}i.commit("set",{insertType:t.MutationType.setBefore,data:a})},update:function e(t,i){if(/^\d+$/.test(i.id)){i.id=parseInt(i.id)}if(/^\d+$/.test(i.chatId)){i.chatId=parseInt(i.chatId)}t.commit("initCollection",{chatId:i.chatId});var a=t.state.collection[i.chatId].findIndex(function(e){return e.id===i.id});if(a<0){return false}var r=n.validate(Object.assign({},i.fields));if(r.params){r.params=Object.assign({},n.getElementState().params,t.state.collection[i.chatId][a].params,r.params)}t.commit("update",{id:i.id,chatId:i.chatId,index:a,fields:r});if(i.fields.blink){setTimeout(function(){t.commit("update",{id:i.id,chatId:i.chatId,fields:{blink:false}})},1e3)}return true},delete:function e(t,i){if(!(i.id instanceof Array)){i.id=[i.id]}i.id=i.id.map(function(e){if(/^\d+$/.test(e)){e=parseInt(e)}return e});t.commit("delete",{chatId:i.chatId,elements:i.id});return true},clear:function e(t,i){i.chatId=parseInt(i.chatId);t.commit("clear",{chatId:i.chatId});return true},applyMutationType:function e(t,i){i.chatId=parseInt(i.chatId);t.commit("applyMutationType",{chatId:i.chatId});return true},readMessages:function e(t,i){i.readId=parseInt(i.readId)||0;i.chatId=parseInt(i.chatId);if(typeof t.state.collection[i.chatId]==="undefined"){return{count:0}}var n=0;for(var a=t.state.collection[i.chatId].length-1;a>=0;a--){var r=t.state.collection[i.chatId][a];if(!r.unread)continue;if(i.readId===0||r.id<=i.readId){n++}}t.commit("readMessages",{chatId:i.chatId,readId:i.readId});return{count:n}},unreadMessages:function e(t,i){i.unreadId=parseInt(i.unreadId)||0;i.chatId=parseInt(i.chatId);if(typeof t.state.collection[i.chatId]==="undefined"||!i.unreadId){return{count:0}}var n=0;for(var a=t.state.collection[i.chatId].length-1;a>=0;a--){var r=t.state.collection[i.chatId][a];if(r.unread)continue;if(r.id>=i.unreadId){n++}}t.commit("unreadMessages",{chatId:i.chatId,unreadId:i.unreadId});return{count:n}}}}},{key:"getMutations",value:function e(){var n=this;return{initCollection:function e(t,i){return n.initCollection(t,i)},add:function e(i,a){n.initCollection(i,{chatId:a.chatId});n.setMutationType(i,{chatId:a.chatId,initialType:t.MutationType.add});i.collection[a.chatId].push(a);i.saveMessageList[a.chatId].push(a.id);i.created+=1;n.saveState(i,a.chatId)},set:function e(i,a){var r=[];var s=[];var l={};l.initialType=a.insertType;if(a.insertType===t.MutationType.set){(function(){a.insertType=t.MutationType.setAfter;var e={};a.data.forEach(function(t){if(!e[t.chatId]){e[t.chatId]=[]}e[t.chatId].push(t.id)});var r=function r(s){if(!e.hasOwnProperty(s))return"continue";n.initCollection(i,{chatId:s});if(i.saveMessageList[s].length>e[s].length||e[s].length<t.StorageLimit.messages){i.collection[s]=i.collection[s].filter(function(t){return e[s].includes(t.id)});i.saveMessageList[s]=i.saveMessageList[s].filter(function(t){return e[s].includes(t)})}var d=n.manageCacheBeforeSet(babelHelpers.toConsumableArray(i.saveMessageList[s].reverse()),e[s]);if(d.type===o.none){if(d.foundElements.length>0){i.collection[s]=i.collection[s].filter(function(e){return!d.foundElements.includes(e.id)});i.saveMessageList[s]=i.saveMessageList[s].filter(function(e){return!d.foundElements.includes(e)})}n.removeIntersectionCacheElements=i.collection[s].map(function(e){return e.id});clearTimeout(n.removeIntersectionCacheTimeout);n.removeIntersectionCacheTimeout=setTimeout(function(){i.collection[s]=i.collection[s].filter(function(e){return!n.removeIntersectionCacheElements.includes(e.id)});i.saveMessageList[s]=i.saveMessageList[s].filter(function(e){return!n.removeIntersectionCacheElements.includes(e)});n.removeIntersectionCacheElements=[]},1e3)}else{if(d.type===o.foundReverse){a.insertType=t.MutationType.setBefore;a.data=a.data.reverse()}}if(d.foundElements.length>0){if(d.type===o.found&&d.noneElements[0]){l.scrollStickToTop=false;l.scrollMessageId=d.foundElements[d.foundElements.length-1]}else{l.scrollStickToTop=false;l.scrollMessageId=0}}else if(d.type===o.none){l.scrollStickToTop=false;l.scrollMessageId=a.data[0].id}};for(var s in e){var d=r(s);if(d==="continue")continue}})()}l.appliedType=a.insertType;var d=true;var c=false;var u=undefined;try{var f=function e(){var o=h.value;n.initCollection(i,{chatId:o.chatId});var l=i.collection[o.chatId].findIndex(function(e){return e.id===o.id});if(l>-1){delete o.templateId;i.collection[o.chatId][l]=Object.assign(i.collection[o.chatId][l],o)}else if(a.insertType===t.MutationType.setBefore){i.collection[o.chatId].unshift(o)}else if(a.insertType===t.MutationType.setAfter){i.collection[o.chatId].push(o)}r.push(o.chatId);if(n.store.getters["dialogues/canSaveChat"]&&n.store.getters["dialogues/canSaveChat"](o.chatId)){s.push(o.chatId)}};for(var p=a.data[Symbol.iterator](),h;!(d=(h=p.next()).done);d=true){f()}}catch(e){c=true;u=e}finally{try{if(!d&&p.return!=null){p.return()}}finally{if(c){throw u}}}r=babelHelpers.toConsumableArray(new Set(r));s=babelHelpers.toConsumableArray(new Set(s));if(l.initialType===t.MutationType.set){r.forEach(function(e){var t=0;var n=false;for(var a=0;a<i.collection[e].length;a++){var r=i.collection[e][a];if(r.id<t){n=true;break}t=r.id}if(n){i.collection[e].sort(function(e,t){return e.id-t.id})}})}r.forEach(function(e){n.setMutationType(i,babelHelpers.objectSpread({chatId:e},l))});if(l.initialType!==t.MutationType.setBefore){s.forEach(function(e){n.saveState(i,e)})}},update:function e(t,i){n.initCollection(t,{chatId:i.chatId});var a=-1;if(typeof i.index!=="undefined"&&t.collection[i.chatId][i.index]){a=i.index}else{a=t.collection[i.chatId].findIndex(function(e){return e.id===i.id})}if(a>=0){var r=t.saveMessageList[i.chatId].includes(t.collection[i.chatId][a].id)||i.fields.id&&!i.fields.id.toString().startsWith("temporary")&&t.collection[i.chatId][a].id.toString().startsWith("temporary");delete i.fields.templateId;t.collection[i.chatId][a]=Object.assign(t.collection[i.chatId][a],i.fields);if(r){n.saveState(t,i.chatId)}}},delete:function e(i,a){n.initCollection(i,{chatId:a.chatId});n.setMutationType(i,{chatId:a.chatId,initialType:t.MutationType.delete});i.collection[a.chatId]=i.collection[a.chatId].filter(function(e){return!a.elements.includes(e.id)});if(i.saveMessageList[a.chatId].length>0){var r=true;var o=false;var s=undefined;try{for(var l=a.elements[Symbol.iterator](),d;!(r=(d=l.next()).done);r=true){var c=d.value;if(i.saveMessageList[a.chatId].includes(c)){n.saveState(i,a.chatId);break}}}catch(e){o=true;s=e}finally{try{if(!r&&l.return!=null){l.return()}}finally{if(o){throw s}}}}},clear:function e(t,i){n.initCollection(t,{chatId:i.chatId});n.setMutationType(t,{chatId:i.chatId,initialType:"clear"});t.collection[i.chatId]=[];t.saveMessageList[i.chatId]=[]},applyMutationType:function e(n,a){if(typeof n.mutationType[a.chatId]==="undefined"){i.Vue.set(n.mutationType,a.chatId,{applied:false,initialType:t.MutationType.none,appliedType:t.MutationType.none,scrollStickToTop:0,scrollMessageId:0})}n.mutationType[a.chatId].applied=true},readMessages:function e(t,i){n.initCollection(t,{chatId:i.chatId});var a=false;for(var r=t.collection[i.chatId].length-1;r>=0;r--){var o=t.collection[i.chatId][r];if(!o.unread)continue;if(i.readId===0||o.id<=i.readId){t.collection[i.chatId][r]=Object.assign(t.collection[i.chatId][r],{unread:false});a=true}}if(a){n.saveState(t,i.chatId)}},unreadMessages:function e(t,i){n.initCollection(t,{chatId:i.chatId});var a=false;for(var r=t.collection[i.chatId].length-1;r>=0;r--){var o=t.collection[i.chatId][r];if(o.unread)continue;if(o.id>=i.unreadId){t.collection[i.chatId][r]=Object.assign(t.collection[i.chatId][r],{unread:true});a=true}}if(a){n.saveState(t,i.chatId);n.updateSubordinateStates()}}}}},{key:"initCollection",value:function e(n,a){if(typeof a.chatId==="undefined"){return false}if(typeof a.chatId==="undefined"||typeof n.collection[a.chatId]!=="undefined"){return true}i.Vue.set(n.collection,a.chatId,a.messages?[].concat(a.messages):[]);i.Vue.set(n.mutationType,a.chatId,{applied:false,initialType:t.MutationType.none,appliedType:t.MutationType.none,scrollStickToTop:0,scrollMessageId:0});i.Vue.set(n.saveMessageList,a.chatId,[]);i.Vue.set(n.saveFileList,a.chatId,[]);i.Vue.set(n.saveUserList,a.chatId,[]);return true}},{key:"setMutationType",value:function e(n,a){var r={applied:false,initialType:t.MutationType.none,appliedType:t.MutationType.none,scrollStickToTop:false,scrollMessageId:0};if(a.initialType&&!a.appliedType){a.appliedType=a.initialType}if(typeof n.mutationType[a.chatId]==="undefined"){i.Vue.set(n.mutationType,a.chatId,r)}n.mutationType[a.chatId]=babelHelpers.objectSpread({},r,a);return true}},{key:"prepareMessage",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=this.validate(Object.assign({},t),i);n.params=Object.assign({},this.getElementState().params,n.params);n.templateId=n.id;return Object.assign({},this.getElementState(),n)}},{key:"manageCacheBeforeSet",value:function e(t,i){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var a={type:o.empty,foundElements:[],noneElements:[]};if(!t||t.length<=0){return a}var r=true;var s=false;var l=undefined;try{for(var d=i[Symbol.iterator](),c;!(r=(c=d.next()).done);r=true){var u=c.value;if(t.includes(u)){if(a.type===o.empty){a.type=o.found}a.foundElements.push(u)}else{if(a.type===o.empty){a.type=o.none}a.noneElements.push(u)}}}catch(e){s=true;l=e}finally{try{if(!r&&d.return!=null){d.return()}}finally{if(s){throw l}}}if(a.type===o.found&&t.length===i.length&&a.foundElements.length===i.length){a.type=o.equal}else if(a.type===o.none&&!n&&a.foundElements.length>0){var f=this.manageCacheBeforeSet(t.reverse(),i.reverse(),true);if(f.type===o.found){f.type=o.foundReverse;return f}}return a}},{key:"updateSaveLists",value:function e(i,n){if(!this.isSaveAvailable()){return true}if(!n||!this.store.getters["dialogues/canSaveChat"]||!this.store.getters["dialogues/canSaveChat"](n)){return false}this.initCollection(i,{chatId:n});var a=0;var r=[];var o=[];var s=[];var l=this.store.getters["dialogues/getByChatId"](n);if(l&&l.type==="private"){s.push(parseInt(l.dialogId))}for(var d=i.collection[n].length-1;d>=0;d--){if(i.collection[n][d].id.toString().startsWith("temporary")){continue}if(a>=t.StorageLimit.messages&&!i.collection[n][d].unread){break}r.unshift(i.collection[n][d].id);a++}r=r.slice(0,t.StorageLimit.messages);i.collection[n].filter(function(e){return r.includes(e.id)}).forEach(function(e){if(e.authorId>0){s.push(e.authorId)}if(e.params.FILE_ID instanceof Array){o=e.params.FILE_ID.concat(o)}});i.saveMessageList[n]=r;i.saveFileList[n]=babelHelpers.toConsumableArray(new Set(o));i.saveUserList[n]=babelHelpers.toConsumableArray(new Set(s));return true}},{key:"getSaveTimeout",value:function e(){return 150}},{key:"saveState",value:function e(t,i){if(!this.updateSaveLists(t,i)){return false}babelHelpers.get(babelHelpers.getPrototypeOf(n.prototype),"saveState",this).call(this,function(){var e={collection:{},saveMessageList:{},saveUserList:{},saveFileList:{}};var i=function i(n){if(!t.saveMessageList.hasOwnProperty(n)){return"continue"}if(!t.collection[n]){return"continue"}if(!e.collection[n]){e.collection[n]=[]}t.collection[n].filter(function(e){return t.saveMessageList[n].includes(e.id)}).forEach(function(t){return e.collection[n].push(t)});e.saveMessageList[n]=t.saveMessageList[n];e.saveFileList[n]=t.saveFileList[n];e.saveUserList[n]=t.saveUserList[n]};for(var n in t.saveMessageList){var a=i(n);if(a==="continue")continue}return e})}},{key:"updateSubordinateStates",value:function e(){this.store.dispatch("users/saveState");this.store.dispatch("files/saveState")}},{key:"validate",value:function e(t,i){var n={};if(typeof t.id==="number"){n.id=t.id}else if(typeof t.id==="string"){if(t.id.startsWith("temporary")){n.id=t.id}else{n.id=parseInt(t.id)}}if(typeof t.templateId==="number"){n.templateId=t.templateId}else if(typeof t.templateId==="string"){if(t.templateId.startsWith("temporary")){n.templateId=t.templateId}else{n.templateId=parseInt(t.templateId)}}if(typeof t.chat_id!=="undefined"){t.chatId=t.chat_id}if(typeof t.chatId==="number"||typeof t.chatId==="string"){n.chatId=parseInt(t.chatId)}if(typeof t.date!=="undefined"){n.date=a.Utils.date.cast(t.date)}if(typeof t.textOriginal==="string"||typeof t.textOriginal==="number"){n.text=t.textOriginal.toString();if(typeof t.text==="string"||typeof t.text==="number"){n.textConverted=this.convertToHtml({text:t.text.toString(),isConverted:true})}}else{if(typeof t.text_converted!=="undefined"){t.textConverted=t.text_converted}if(typeof t.textConverted==="string"||typeof t.textConverted==="number"){n.textConverted=t.textConverted.toString()}if(typeof t.text==="string"||typeof t.text==="number"){n.text=t.text.toString();var r=typeof n.textConverted!=="undefined";n.textConverted=this.convertToHtml({text:r?n.textConverted:n.text,isConverted:r})}}if(typeof t.senderId!=="undefined"){t.authorId=t.senderId}else if(typeof t.author_id!=="undefined"){t.authorId=t.author_id}if(typeof t.authorId==="number"||typeof t.authorId==="string"){if(t.system===true||t.system==="Y"){n.authorId=0}else{n.authorId=parseInt(t.authorId)}}if(babelHelpers.typeof(t.params)==="object"&&t.params!==null){var o=this.validateParams(t.params,i);if(o){n.params=o}}if(typeof t.push==="boolean"){n.push=t.push}if(typeof t.sending==="boolean"){n.sending=t.sending}if(typeof t.unread==="boolean"){n.unread=t.unread}if(typeof t.blink==="boolean"){n.blink=t.blink}if(typeof t.error==="boolean"||typeof t.error==="string"){n.error=t.error}if(typeof t.retry==="boolean"){n.retry=t.retry}return n}},{key:"validateParams",value:function e(t,i){var n={};try{for(var r in t){if(!t.hasOwnProperty(r)){continue}if(r==="COMPONENT_ID"){if(typeof t[r]==="string"&&BX.Vue.isComponent(t[r])){n[r]=t[r]}}else if(r==="LIKE"){if(t[r]instanceof Array){n["REACTION"]={like:t[r].map(function(e){return parseInt(e)})}}}else if(r==="CHAT_LAST_DATE"){n[r]=a.Utils.date.cast(t[r])}else if(r==="AVATAR"){if(t[r]){n[r]=t[r].startsWith("http")?t[r]:i.host+t[r]}}else if(r==="NAME"){if(t[r]){n[r]=t[r]}}else{n[r]=t[r]}}}catch(e){}var o=false;for(var s in n){if(!n.hasOwnProperty(s)){continue}o=true;break}return o?n:null}},{key:"convertToHtml",value:function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=t.quote,n=i===void 0?true:i,a=t.image,r=a===void 0?true:a,o=t.text,s=o===void 0?"":o,l=t.highlightText,d=l===void 0?"":l,c=t.isConverted,u=c===void 0?false:c,f=t.enableBigSmile,p=f===void 0?true:f;s=s.trim();if(!u){s=s.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}if(s.startsWith("/me")){s="<i>".concat(s.substr(4),"</i>")}else if(s.startsWith("/loud")){s="<b>".concat(s.substr(6),"</b>")}var h="&gt;&gt;";if(n&&s.indexOf(h)>=0){var g=s.split(u?"<br />":"\n");for(var m=0;m<g.length;m++){if(g[m].startsWith(h)){g[m]=g[m].replace(h,'<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap">');while(++m<g.length&&g[m].startsWith(h)){g[m]=g[m].replace(h,"")}g[m-1]+="</div></div><br>"}}s=g.join("<br />")}s=s.replace(/\n/gi,"<br />");s=s.replace(/\t/gi,"&nbsp;&nbsp;&nbsp;&nbsp;");s=this.decodeBbCode(s,false,p);if(n){s=s.replace(/------------------------------------------------------<br \/>(.*?)\[(.*?)\]<br \/>(.*?)------------------------------------------------------(<br \/>)?/g,function(e,t,i,n,a,r){return(r>0?"<br>":"")+'<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap"><div class="bx-im-message-content-quote-name"><span class="bx-im-message-content-quote-name-text">'+t+'</span><span class="bx-im-message-content-quote-name-time">'+i+"</span></div>"+n+"</div></div><br />"});s=s.replace(/------------------------------------------------------<br \/>(.*?)------------------------------------------------------(<br \/>)?/g,function(e,t,i,n,a){return(a>0?"<br>":"")+'<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap">'+t+"</div></div><br />"})}if(r){var v=false;s=s.replace(/<a(.*?)>(http[s]{0,1}:\/\/.*?)<\/a>/gi,function(e,t,i,n){if(!i.match(/(\.(jpg|jpeg|png|gif)\?|\.(jpg|jpeg|png|gif)$)/i)||i.indexOf("/docs/pub/")>0||i.indexOf("logout=yes")>0){return e}else{v=true;return(n>0?"<br />":"")+"<a"+t+' target="_blank" class="bx-im-element-file-image"><img src="'+i+'" class="bx-im-element-file-image-source-text" onerror="BX.Messenger.Model.MessagesModel.hideErrorImage(this)"></a></span>'}});if(v){s=s.replace(/<\/span>(\n?)<br(\s\/?)>/gi,"</span>").replace(/<br(\s\/?)>(\n?)<br(\s\/?)>(\n?)<span/gi,"<br /><span")}}if(d){s=s.replace(new RegExp("("+d.replace(/[\-\[\]\/{}()*+?.\\^$|]/g,"\\$&")+")","ig"),'<span class="bx-messenger-highlight">$1</span>')}if(p){s=s.replace(/^(\s*<img\s+src=[^>]+?data-code=[^>]+?data-definition="UHD"[^>]+?style="width:)(\d+)(px[^>]+?height:)(\d+)(px[^>]+?class="bx-smile"\s*\/?>\s*)$/,function e(t,i,n,a,r,o){return i+parseInt(n,10)*1.7+a+parseInt(r,10)*1.7+o})}if(s.substr(-6)=="<br />"){s=s.substr(0,s.length-6)}s=s.replace(/<br><br \/>/gi,"<br />");s=s.replace(/<br \/><br>/gi,"<br />");return s}},{key:"decodeBbCode",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var a=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;return n.decodeBbCode({text:t,textOnly:i,enableBigSmile:a})}}],[{key:"decodeBbCode",value:function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=t.text,n=t.textOnly,r=n===void 0?false:n,o=t.enableBigSmile,s=o===void 0?true:o;var l=[];i=i.replace(/\[CODE\]\n?([\s\S]*?)\[\/CODE\]/gi,function(e,t){var i=l.length;l.push(t);return"####REPLACEMENT_MARK_"+i+"####"});i=i.replace(/\[LIKE\]/gi,'<span class="bx-smile bx-im-smile-like"></span>');i=i.replace(/\[DISLIKE\]/gi,'<span class="bx-smile bx-im-smile-dislike"></span>');i=i.replace(/\[USER=([0-9]{1,})\](.*?)\[\/USER\]/gi,function(e,t,i){return'<span class="bx-im-mention" data-type="USER" data-value="'+t+'">'+i+"</span>"});i=i.replace(/\[CHAT=(imol\|)?([0-9]{1,})\](.*?)\[\/CHAT\]/gi,function(e,t,i,n){return t?n:'<span class="bx-im-mention" data-type="CHAT" data-value="chat'+i+'">'+n+"</span>"});i=i.replace(/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/gi,function(e,t,i){return'<span class="bx-im-mention" data-type="CALL" data-value="'+a.Utils.text.htmlspecialchars(t)+'">'+i+"</span>"});i=i.replace(/\[PCH=([0-9]{1,})\](.*?)\[\/PCH\]/gi,function(e,t,i){return i});i=i.replace(/\[SEND(?:=(.+?))?\](.+?)?\[\/SEND\]/gi,function(e,t,i){var n="";i=i?i:t;t=(t?t:i).replace("<br />","\n");if(!r&&i){i=i.replace(/<([\w]+)[^>]*>(.*?)<\\1>/i,"$2",i);i=i.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i,"$2",i);n='<span class="bx-im-message-command-wrap">'+'<span class="bx-im-message-command" data-entity="send">'+i+"</span>"+'<span class="bx-im-message-command-data">'+t+"</span>"+"</span>"}else{n=i}return n});i=i.replace(/\[PUT(?:=(.+?))?\](.+?)?\[\/PUT\]/gi,function(e,t,i){var n="";i=i?i:t;t=(t?t:i).replace("<br />","\n");if(!r&&i){i=i.replace(/<([\w]+)[^>]*>(.*?)<\/\1>/i,"$2",i);i=i.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i,"$2",i);n='<span class="bx-im-message-command" data-entity="put">'+i+"</span>";n+='<span class="bx-im-message-command-data">'+t+"</span>"}else{n=i}return n});var d=0;if(s){d=i.replace(/\[icon\=([^\]]*)\]/gi,"").trim().length}i=i.replace(/\[icon\=([^\]]*)\]/gi,function(e){var t=e.match(/icon\=(\S+[^\s.,> )\];\'\"!?])/i);if(t&&t[1]){t=t[1]}else{return""}var i={src:t,border:0};var n=e.match(/size\=(\d+)/i);if(n&&n[1]){i["width"]=n[1];i["height"]=n[1]}else{var r=e.match(/width\=(\d+)/i);if(r&&r[1]){i["width"]=r[1]}var o=e.match(/height\=(\d+)/i);if(o&&o[1]){i["height"]=o[1]}if(i["width"]&&!i["height"]){i["height"]=i["width"]}else if(i["height"]&&!i["width"]){i["width"]=i["height"]}else if(i["height"]&&i["width"]);else{i["width"]=20;i["height"]=20}}i["width"]=i["width"]>100?100:i["width"];i["height"]=i["height"]>100?100:i["height"];if(s&&d===0&&i["width"]===i["height"]&&i["width"]===20){i["width"]=40;i["height"]=40}var l=e.match(/title\=(.*[^\s\]])/i);if(l&&l[1]){l=l[1];if(l.indexOf("width=")>-1){l=l.substr(0,l.indexOf("width="))}if(l.indexOf("height=")>-1){l=l.substr(0,l.indexOf("height="))}if(l.indexOf("size=")>-1){l=l.substr(0,l.indexOf("size="))}if(l){i["title"]=a.Utils.text.htmlspecialchars(l).trim();i["alt"]=i["title"]}}var c="";for(var u in i){if(i.hasOwnProperty(u)){c+=u+'="'+i[u]+'" '}}return'<img class="bx-smile bx-icon" '+c+">"});l.forEach(function(e,t){i=i.replace("####REPLACEMENT_MARK_"+t+"####",!r?'<div class="bx-im-message-content-code">'+e+"</div>":e)});return i}},{key:"hideErrorImage",value:function e(t){if(t.parentNode&&t.parentNode){t.parentNode.innerHTML='<a href="'+t.src+'" target="_blank">'+t.src+"</a>"}return true}}]);return n}(n.VuexBuilderModel);var l=function(e){babelHelpers.inherits(n,e);function n(){babelHelpers.classCallCheck(this,n);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(n).apply(this,arguments))}babelHelpers.createClass(n,[{key:"getName",value:function e(){return"dialogues"}},{key:"getState",value:function e(){return{host:this.getVariable("host",location.protocol+"//"+location.host),collection:{},saveDialogList:[],saveChatList:[]}}},{key:"getStateSaveException",value:function e(){return{host:null}}},{key:"getElementStateSaveException",value:function e(){return{writingList:null,quoteId:null}}},{key:"getElementState",value:function e(){return{dialogId:"0",chatId:0,counter:0,unreadId:0,unreadLastId:0,managerList:[],readedList:[],writingList:[],textareaMessage:"",quoteId:0,editId:0,init:false,name:"",owner:0,extranet:false,avatar:"",color:"#17A3EA",type:"chat",entityType:"",entityId:"",entityData1:"",entityData2:"",entityData3:"",dateCreate:new Date,restrictions:{avatar:true,extend:true,leave:true,leaveOwner:true,rename:true}}}},{key:"getGetters",value:function e(){var t=this;return{get:function e(t){return function(e){if(!t.collection[e]){return null}return t.collection[e]}},getByChatId:function e(t){return function(e){e=parseInt(e);for(var i in t.collection){if(!t.collection.hasOwnProperty(i)){continue}if(t.collection[i].chatId===e){return t.collection[i]}}return null}},getBlank:function e(i){return function(e){return t.getElementState()}},getQuoteId:function e(t){return function(e){if(!t.collection[e]){return 0}return t.collection[e].quoteId}},getEditId:function e(t){return function(e){if(!t.collection[e]){return 0}return t.collection[e].editId}},canSaveChat:function e(t){return function(e){if(/^\d+$/.test(e)){e=parseInt(e)}return t.saveChatList.includes(parseInt(e))}},canSaveDialog:function e(t){return function(e){return t.saveDialogList.includes(e.toString())}},isPrivateDialog:function e(t){return function(e){e=e.toString();return t.collection[e.toString()]&&t.collection[e].type==="private"}}}}},{key:"getActions",value:function e(){var t=this;return{set:function e(i,n){if(n instanceof Array){n=n.map(function(e){return Object.assign({},t.validate(Object.assign({},e),{host:i.state.host}),{init:true})})}else{var a=[];a.push(Object.assign({},t.validate(Object.assign({},n),{host:i.state.host}),{init:true}));n=a}i.commit("set",n)},update:function e(i,n){if(typeof i.state.collection[n.dialogId]==="undefined"||i.state.collection[n.dialogId].init===false){return true}i.commit("update",{dialogId:n.dialogId,fields:t.validate(Object.assign({},n.fields),{host:i.state.host})});return true},delete:function e(t,i){t.commit("delete",i.dialogId);return true},updateWriting:function e(i,n){if(typeof i.state.collection[n.dialogId]==="undefined"||i.state.collection[n.dialogId].init===false){return true}var a=i.state.collection[n.dialogId].writingList.findIndex(function(e){return e.userId===n.userId});if(n.action){if(a>=0){return true}else{var r=[].concat(i.state.collection[n.dialogId].writingList);r.unshift({userId:n.userId,userName:n.userName});i.commit("update",{actionName:"updateWriting/1",dialogId:n.dialogId,fields:t.validate({writingList:r},{host:i.state.host})})}}else{if(a>=0){var o=i.state.collection[n.dialogId].writingList.filter(function(e){return e.userId!==n.userId});i.commit("update",{actionName:"updateWriting/2",dialogId:n.dialogId,fields:t.validate({writingList:o},{host:i.state.host})});return true}else{return true}}return false},updateReaded:function e(i,n){if(typeof i.state.collection[n.dialogId]==="undefined"||i.state.collection[n.dialogId].init===false){return true}var a=i.state.collection[n.dialogId].readedList.filter(function(e){return e.userId!==n.userId});if(n.action){a.push({userId:n.userId,userName:n.userName||"",messageId:n.messageId,date:n.date||new Date})}i.commit("update",{actionName:"updateReaded",dialogId:n.dialogId,fields:t.validate({readedList:a},{host:i.state.host})});return false},increaseCounter:function e(t,i){if(typeof t.state.collection[i.dialogId]==="undefined"||t.state.collection[i.dialogId].init===false){return true}var n=t.state.collection[i.dialogId].counter;if(n===100){return true}var a=n+i.count;if(a>100){a=100}var r={counter:a};if(typeof i.unreadLastId!=="undefined"){r.unreadLastId=i.unreadLastId}t.commit("update",{actionName:"increaseCounter",dialogId:i.dialogId,fields:r});return false},decreaseCounter:function e(t,i){if(typeof t.state.collection[i.dialogId]==="undefined"||t.state.collection[i.dialogId].init===false){return true}var n=t.state.collection[i.dialogId].counter;if(n===100){return true}var a=n-i.count;if(a<0){a=0}var r=i.unreadId>t.state.collection[i.dialogId].unreadId?i.unreadId:t.state.collection[i.dialogId].unreadId;if(t.state.collection[i.dialogId].unreadId!==r||t.state.collection[i.dialogId].counter!==a){if(a===0){r=0}t.commit("update",{actionName:"decreaseCounter",dialogId:i.dialogId,fields:{counter:a,unreadId:r}})}return false},saveDialog:function e(t,i){if(typeof t.state.collection[i.dialogId]==="undefined"||t.state.collection[i.dialogId].init===false){return true}t.commit("saveDialog",{dialogId:i.dialogId,chatId:i.chatId});return false}}}},{key:"getMutations",value:function e(){var i=this;return{initCollection:function e(t,n){i.initCollection(t,n)},saveDialog:function e(n,a){if(!(a.chatId>0&&a.dialogId.length>0)){return false}var r=n.saveDialogList.filter(function(e){return e!==a.dialogId});r.unshift(a.dialogId);r=r.slice(0,t.StorageLimit.dialogues);if(n.saveDialogList.join(",")===r.join(",")){return true}n.saveDialogList=r;var o=n.saveChatList.filter(function(e){return e!==a.chatId});o.unshift(a.chatId);n.saveChatList=o.slice(0,t.StorageLimit.dialogues);i.saveState(n)},set:function e(t,n){var a=true;var r=false;var o=undefined;try{for(var s=n[Symbol.iterator](),l;!(a=(l=s.next()).done);a=true){var d=l.value;i.initCollection(t,{dialogId:d.dialogId});t.collection[d.dialogId]=Object.assign(i.getElementState(),t.collection[d.dialogId],d)}}catch(e){r=true;o=e}finally{try{if(!a&&s.return!=null){s.return()}}finally{if(r){throw o}}}i.saveState(t)},update:function e(t,n){i.initCollection(t,n);t.collection[n.dialogId]=Object.assign(t.collection[n.dialogId],n.fields);i.saveState(t)},delete:function e(t,n){delete t.collection[n.dialogId];i.saveState(t)}}}},{key:"initCollection",value:function e(t,n){if(typeof t.collection[n.dialogId]!=="undefined"){return true}i.Vue.set(t.collection,n.dialogId,this.getElementState());if(n.fields){t.collection[n.dialogId]=Object.assign(t.collection[n.dialogId],this.validate(Object.assign({},n.fields),{host:t.host}))}return true}},{key:"getSaveTimeout",value:function e(){return 100}},{key:"saveState",value:function e(){var t=this;var i=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(!this.isSaveAvailable()){return true}babelHelpers.get(babelHelpers.getPrototypeOf(n.prototype),"saveState",this).call(this,function(){var e={collection:{},saveDialogList:[].concat(i.saveDialogList),saveChatList:[].concat(i.saveChatList)};i.saveDialogList.forEach(function(n){if(!i.collection[n])return false;e.collection[n]=Object.assign(t.getElementState(),t.cloneState(i.collection[n],t.getElementStateSaveException()))});return e})}},{key:"validate",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n={};i.host=i.host||this.getState().host;if(typeof t.dialog_id!=="undefined"){t.dialogId=t.dialog_id}if(typeof t.dialogId==="number"||typeof t.dialogId==="string"){n.dialogId=t.dialogId.toString()}if(typeof t.chat_id!=="undefined"){t.chatId=t.chat_id}else if(typeof t.id!=="undefined"){t.chatId=t.id}if(typeof t.chatId==="number"||typeof t.chatId==="string"){n.chatId=parseInt(t.chatId)}if(typeof t.quoteId==="number"){n.quoteId=parseInt(t.quoteId)}if(typeof t.editId==="number"){n.editId=parseInt(t.editId)}if(typeof t.counter==="number"||typeof t.counter==="string"){n.counter=parseInt(t.counter)}if(typeof t.unread_id!=="undefined"){t.unreadId=t.unread_id}if(typeof t.unreadId==="number"||typeof t.unreadId==="string"){n.unreadId=parseInt(t.unreadId)}if(typeof t.unread_last_id!=="undefined"){t.unreadLastId=t.unread_last_id}if(typeof t.unreadLastId==="number"||typeof t.unreadLastId==="string"){n.unreadLastId=parseInt(t.unreadLastId)}if(typeof t.readed_list!=="undefined"){t.readedList=t.readed_list}if(typeof t.readedList!=="undefined"){n.readedList=[];if(t.readedList instanceof Array){t.readedList.forEach(function(e){var t={};if(typeof e.user_id!=="undefined"){e.userId=e.user_id}if(typeof e.user_name!=="undefined"){e.userName=e.user_name}if(typeof e.message_id!=="undefined"){e.messageId=e.message_id}if(!e.userId||!e.userName||!e.messageId){return false}t.userId=parseInt(e.userId);t.userName=e.userName.toString();t.messageId=parseInt(e.messageId);t.date=a.Utils.date.cast(e.date);n.readedList.push(t)})}}if(typeof t.writing_list!=="undefined"){t.writingList=t.writing_list}if(typeof t.writingList!=="undefined"){n.writingList=[];if(t.writingList instanceof Array){t.writingList.forEach(function(e){var t={};if(!e.userId){return false}t.userId=parseInt(e.userId);t.userName=e.userName;n.writingList.push(t)})}}if(typeof t.manager_list!=="undefined"){t.managerList=t.manager_list}if(typeof t.managerList!=="undefined"){n.managerList=[];if(t.managerList instanceof Array){t.managerList.forEach(function(e){e=parseInt(e);if(e>0){n.managerList.push(e)}})}}if(typeof t.mute_list!=="undefined"){t.muteList=t.mute_list}if(typeof t.muteList!=="undefined"){n.muteList=[];if(t.muteList instanceof Array){t.muteList.forEach(function(e){e=parseInt(e);if(e>0){n.muteList.push(e)}})}}if(typeof t.textareaMessage!=="undefined"){n.textareaMessage=t.textareaMessage.toString()}if(typeof t.title!=="undefined"){t.name=t.title}if(typeof t.name==="string"||typeof t.name==="number"){n.name=t.name.toString()}if(typeof t.owner!=="undefined"){t.ownerId=t.owner}if(typeof t.ownerId==="number"||typeof t.ownerId==="string"){n.ownerId=parseInt(t.ownerId)}if(typeof t.extranet==="boolean"){n.extranet=t.extranet}if(typeof t.avatar==="string"){var r;if(!t.avatar||t.avatar.endsWith("/js/im/images/blank.gif")){r=""}else if(t.avatar.startsWith("http")){r=t.avatar}else{r=i.host+t.avatar}if(r){n.avatar=encodeURI(r)}}if(typeof t.color==="string"){n.color=t.color.toString()}if(typeof t.type==="string"){n.type=t.type.toString()}if(typeof t.entity_type!=="undefined"){t.entityType=t.entity_type}if(typeof t.entityType==="string"){n.entityType=t.entityType.toString()}if(typeof t.entity_id!=="undefined"){t.entityId=t.entity_id}if(typeof t.entityId==="string"||typeof t.entityId==="number"){n.entityId=t.entityId.toString()}if(typeof t.entity_data_1!=="undefined"){t.entityData1=t.entity_data_1}if(typeof t.entityData1==="string"){n.entityData1=t.entityData1.toString()}if(typeof t.entity_data_2!=="undefined"){t.entityData2=t.entity_data_2}if(typeof t.entityData2==="string"){n.entityData2=t.entityData2.toString()}if(typeof t.entity_data_3!=="undefined"){t.entityData3=t.entity_data_3}if(typeof t.entityData3==="string"){n.entityData3=t.entityData3.toString()}if(typeof t.date_create!=="undefined"){t.dateCreate=t.date_create}if(typeof t.dateCreate!=="undefined"){n.dateCreate=a.Utils.date.cast(t.dateCreate)}if(typeof t.dateLastOpen!=="undefined"){n.dateLastOpen=a.Utils.date.cast(t.dateLastOpen)}if(babelHelpers.typeof(t.restrictions)==="object"&&t.restrictions){n.restrictions={};if(typeof t.restrictions.AVATAR==="boolean"){n.restrictions.avatar=t.restrictions.AVATAR}if(typeof t.restrictions.EXTEND==="boolean"){n.restrictions.extend=t.restrictions.EXTEND}if(typeof t.restrictions.LEAVE==="boolean"){n.restrictions.leave=t.restrictions.LEAVE}if(typeof t.restrictions.LEAVE_OWNER==="boolean"){n.restrictions.leaveOwner=t.restrictions.LEAVE_OWNER}if(typeof t.restrictions.RENAME==="boolean"){n.restrictions.rename=t.restrictions.RENAME}}return n}}]);return n}(n.VuexBuilderModel);var d=function(e){babelHelpers.inherits(t,e);function t(){babelHelpers.classCallCheck(this,t);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(t).apply(this,arguments))}babelHelpers.createClass(t,[{key:"getName",value:function e(){return"users"}},{key:"getState",value:function e(){this.startOnlineCheckInterval();return{host:this.getVariable("host",location.protocol+"//"+location.host),collection:{},onlineList:[],mobileOnlineList:[],absentList:[]}}},{key:"getElementState",value:function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=t.id,n=i===void 0?0:i,a=t.name,r=a===void 0?this.getVariable("default.name",""):a,o=t.firstName,s=o===void 0?this.getVariable("default.name",""):o,l=t.lastName,d=l===void 0?"":l;return{id:n,name:r,firstName:s,lastName:d,workPosition:"",color:"#048bd0",avatar:"",gender:"M",birthday:false,isBirthday:false,extranet:false,network:false,bot:false,connector:false,externalAuthId:"default",status:"online",idle:false,lastActivityDate:false,mobileLastDate:false,isOnline:false,isMobileOnline:false,absent:false,isAbsent:false,departments:[],phones:{workPhone:"",personalMobile:"",personalPhone:"",innerPhone:""},init:false}}},{key:"getGetters",value:function e(){var t=this;return{get:function e(i){return function(e){var n=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;e=parseInt(e);if(e<=0){if(n){e=0}else{return null}}if(!n&&(!i.collection[e]||!i.collection[e].init)){return null}if(!i.collection[e]){return t.getElementState({id:e})}return i.collection[e]}},getBlank:function e(i){return function(e){return t.getElementState(e)}}}}},{key:"getActions",value:function e(){var t=this;return{set:function e(i,n){if(n instanceof Array){n=n.map(function(e){return Object.assign({},t.getElementState(),t.validate(Object.assign({},e),{host:i.state.host}),{init:true})})}else{var a=[];a.push(Object.assign({},t.getElementState(),t.validate(Object.assign({},n),{host:i.state.host}),{init:true}));n=a}i.commit("set",n)},update:function e(i,n){n.id=parseInt(n.id);if(typeof i.state.collection[n.id]==="undefined"||i.state.collection[n.id].init===false){return true}i.commit("update",{id:n.id,fields:t.validate(Object.assign({},n.fields),{host:i.state.host})});return true},delete:function e(t,i){t.commit("delete",i.id);return true},saveState:function e(t,i){t.commit("saveState",{});return true}}}},{key:"getMutations",value:function e(){var t=this;return{set:function e(i,n){var r=true;var o=false;var s=undefined;try{var l=function e(){var n=c.value;t.initCollection(i,{id:n.id});i.collection[n.id]=n;var r=a.Utils.user.getOnlineStatus(n);if(r.isOnline){i.collection[n.id].isOnline=true;t.addToOnlineList(i,n.id)}var o=a.Utils.user.isMobileActive(n);if(o){i.collection[n.id].isMobileOnline=true;t.addToMobileOnlineList(i,n.id)}if(n.birthday){var s=a.Utils.date.format(new Date,"d-m");if(n.birthday===s){i.collection[n.id].isBirthday=true;var l=t.getTimeToNextMidnight();setTimeout(function(){i.collection[n.id].isBirthday=false},l)}}if(n.absent){n.isAbsent=true;if(!i.absentList.includes(n.id)){t.addToAbsentList(i,n.id);var d=t.getTimeToNextMidnight();var u=1e3*60*60*24;setTimeout(function(){setInterval(function(){return t.startAbsentCheckInterval(i)},u)},d)}}t.saveState(i)};for(var d=n[Symbol.iterator](),c;!(r=(c=d.next()).done);r=true){l()}}catch(e){o=true;s=e}finally{try{if(!r&&d.return!=null){d.return()}}finally{if(o){throw s}}}},update:function e(i,n){t.initCollection(i,n);var r=i.collection[n.id].lastActivityDate.getTime();var o=n.fields.lastActivityDate.getTime();if(o>r){var s=a.Utils.user.getOnlineStatus(n.fields);if(s.isOnline){i.collection[n.id].isOnline=true;t.addToOnlineList(i,n.fields.id)}}if(i.collection[n.id].mobileLastDate!==n.fields.mobileLastDate){var l=a.Utils.user.isMobileActive(n.fields);if(l){i.collection[n.id].isMobileOnline=true;t.addToMobileOnlineList(i,n.fields.id)}}i.collection[n.id]=Object.assign(i.collection[n.id],n.fields);t.saveState(i)},delete:function e(i,n){delete i.collection[n.id];t.saveState(i)},saveState:function e(i,n){t.saveState(i)}}}},{key:"initCollection",value:function e(t,n){if(typeof t.collection[n.id]!=="undefined"){return true}i.Vue.set(t.collection,n.id,this.getElementState());return true}},{key:"getSaveUserList",value:function e(){if(!this.db){return[]}if(!this.store.getters["messages/getSaveUserList"]){return[]}var t=this.store.getters["messages/getSaveUserList"]();if(!t){return[]}return t}},{key:"getSaveTimeout",value:function e(){return 250}},{key:"saveState",value:function e(i){var n=this;if(!this.isSaveAvailable()){return false}babelHelpers.get(babelHelpers.getPrototypeOf(t.prototype),"saveState",this).call(this,function(){var e=n.getSaveUserList();if(!e){return false}var t={collection:{}};var a={absent:true,idle:true,mobileLastDate:true,lastActivityDate:true};for(var r in e){if(!e.hasOwnProperty(r)){continue}e[r].forEach(function(e){if(!i.collection[e]){return false}t.collection[e]=n.cloneState(i.collection[e],a)})}return t})}},{key:"validate",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n={};i.host=i.host||this.getState().host;if(typeof t.id==="number"||typeof t.id==="string"){n.id=parseInt(t.id)}if(typeof t.first_name!=="undefined"){t.firstName=t.first_name}if(typeof t.last_name!=="undefined"){t.lastName=t.last_name}if(typeof t.name==="string"||typeof t.name==="number"){n.name=t.name.toString();if(typeof t.firstName!=="undefined"&&!t.firstName){var r=t.name.split(" ");if(r.length>1){delete r[r.length-1];t.firstName=r.join(" ").trim()}else{t.firstName=n.name}}if(typeof t.lastName!=="undefined"&&!t.lastName){var o=t.name.split(" ");if(o.length>1){t.lastName=o[o.length-1]}else{t.lastName=""}}}if(typeof t.firstName==="string"||typeof t.name==="number"){n.firstName=t.firstName.toString()}if(typeof t.lastName==="string"||typeof t.name==="number"){n.lastName=t.lastName.toString()}if(typeof t.work_position!=="undefined"){t.workPosition=t.work_position}if(typeof t.workPosition==="string"||typeof t.workPosition==="number"){n.workPosition=t.workPosition.toString()}if(typeof t.color==="string"){n.color=t.color}if(typeof t.avatar==="string"){var s;if(!t.avatar||t.avatar.endsWith("/js/im/images/blank.gif")){s=""}else if(t.avatar.startsWith("http")){s=t.avatar}else{s=i.host+t.avatar}if(s){n.avatar=encodeURI(s)}}if(typeof t.gender!=="undefined"){n.gender=t.gender==="F"?"F":"M"}if(typeof t.birthday==="string"){n.birthday=t.birthday}if(typeof t.extranet==="boolean"){n.extranet=t.extranet}if(typeof t.network==="boolean"){n.network=t.network}if(typeof t.bot==="boolean"){n.bot=t.bot}if(typeof t.connector==="boolean"){n.connector=t.connector}if(typeof t.external_auth_id!=="undefined"){t.externalAuthId=t.external_auth_id}if(typeof t.externalAuthId==="string"&&t.externalAuthId){n.externalAuthId=t.externalAuthId}if(typeof t.status==="string"){n.status=t.status}if(typeof t.idle!=="undefined"){n.idle=a.Utils.date.cast(t.idle,false)}if(typeof t.last_activity_date!=="undefined"){t.lastActivityDate=t.last_activity_date}if(typeof t.lastActivityDate!=="undefined"){n.lastActivityDate=a.Utils.date.cast(t.lastActivityDate,false)}if(typeof t.mobile_last_date!=="undefined"){t.mobileLastDate=t.mobile_last_date}if(typeof t.mobileLastDate!=="undefined"){n.mobileLastDate=a.Utils.date.cast(t.mobileLastDate,false)}if(typeof t.absent!=="undefined"){n.absent=a.Utils.date.cast(t.absent,false)}if(typeof t.departments!=="undefined"){n.departments=[];if(t.departments instanceof Array){t.departments.forEach(function(e){e=parseInt(e);if(e>0){n.departments.push(e)}})}}if(babelHelpers.typeof(t.phones)==="object"&&t.phones){n.phones={};if(typeof t.phones.work_phone!=="undefined"){t.phones.workPhone=t.phones.work_phone}if(typeof t.phones.workPhone==="string"||typeof t.phones.workPhone==="number"){n.phones.workPhone=t.phones.workPhone.toString()}if(typeof t.phones.personal_mobile!=="undefined"){t.phones.personalMobile=t.phones.personal_mobile}if(typeof t.phones.personalMobile==="string"||typeof t.phones.personalMobile==="number"){n.phones.personalMobile=t.phones.personalMobile.toString()}if(typeof t.phones.personal_phone!=="undefined"){t.phones.personalPhone=t.phones.personal_phone}if(typeof t.phones.personalPhone==="string"||typeof t.phones.personalPhone==="number"){n.phones.personalPhone=t.phones.personalPhone.toString()}if(typeof t.phones.inner_phone!=="undefined"){t.phones.innerPhone=t.phones.inner_phone}if(typeof t.phones.innerPhone==="string"||typeof t.phones.innerPhone==="number"){n.phones.innerPhone=t.phones.innerPhone.toString()}}return n}},{key:"addToOnlineList",value:function e(t,i){if(!t.onlineList.includes(i)){t.onlineList.push(i)}}},{key:"addToMobileOnlineList",value:function e(t,i){if(!t.mobileOnlineList.includes(i)){t.mobileOnlineList.push(i)}}},{key:"addToAbsentList",value:function e(t,i){if(!t.absentList.includes(i)){t.absentList.push(i)}}},{key:"getTimeToNextMidnight",value:function e(){var t=new Date((new Date).setHours(24,0,0)).getTime();return t-new Date}},{key:"startAbsentCheckInterval",value:function e(t){var i=true;var n=false;var a=undefined;try{var r=function e(){var i=s.value;var n=t.collection[i];if(!n){return"continue"}var a=(new Date).getTime();var r=new Date(t.collection[i].absent).getTime();if(r<=a){t.absentList=t.absentList.filter(function(e){return e!==i});n.isAbsent=false}};for(var o=t.absentList[Symbol.iterator](),s;!(i=(s=o.next()).done);i=true){var l=r();if(l==="continue")continue}}catch(e){n=true;a=e}finally{try{if(!i&&o.return!=null){o.return()}}finally{if(n){throw a}}}}},{key:"startOnlineCheckInterval",value:function e(){var t=this;var i=6e4;setInterval(function(){var e=true;var i=false;var n=undefined;try{var r=function e(){var i=s.value;var n=t.store.state.users.collection[i];if(!n){return"continue"}var r=a.Utils.user.getOnlineStatus(n);if(r.isOnline){n.isOnline=true}else{n.isOnline=false;t.store.state.users.onlineList=t.store.state.users.onlineList.filter(function(e){return e!==i})}};for(var o=t.store.state.users.onlineList[Symbol.iterator](),s;!(e=(s=o.next()).done);e=true){var l=r();if(l==="continue")continue}}catch(e){i=true;n=e}finally{try{if(!e&&o.return!=null){o.return()}}finally{if(i){throw n}}}var d=true;var c=false;var u=undefined;try{var f=function e(){var i=h.value;var n=t.store.state.users.collection[i];if(!n){return"continue"}var r=a.Utils.user.isMobileActive(n);if(r){n.isMobileOnline=true}else{n.isMobileOnline=false;t.store.state.users.mobileOnlineList=t.store.state.users.mobileOnlineList.filter(function(e){return e!==i})}};for(var p=t.store.state.users.mobileOnlineList[Symbol.iterator](),h;!(d=(h=p.next()).done);d=true){var g=f();if(g==="continue")continue}}catch(e){c=true;u=e}finally{try{if(!d&&p.return!=null){p.return()}}finally{if(c){throw u}}}},i)}}]);return t}(n.VuexBuilderModel);var c=function(e){babelHelpers.inherits(n,e);function n(){babelHelpers.classCallCheck(this,n);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(n).apply(this,arguments))}babelHelpers.createClass(n,[{key:"getName",value:function e(){return"files"}},{key:"getState",value:function e(){return{created:0,host:this.getVariable("host",location.protocol+"//"+location.host),collection:{},index:{}}}},{key:"getElementState",value:function e(){var i=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var n=i.id,a=n===void 0?0:n,r=i.chatId,o=r===void 0?0:r,s=i.name,l=s===void 0?this.getVariable("default.name",""):s;return{id:a,chatId:o,name:l,templateId:a,date:new Date,type:"file",extension:"",icon:"empty",size:0,image:false,status:t.FileStatus.done,progress:100,authorId:0,authorName:"",urlPreview:"",urlShow:"",urlDownload:"",init:false}}},{key:"getGetters",value:function e(){var t=this;return{get:function e(t){return function(e,i){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(!e||!i){return null}if(!t.index[e]||!t.index[e][i]){return null}if(!n&&!t.index[e][i].init){return null}return t.index[e][i]}},getList:function e(t){return function(e){if(!t.index[e]){return null}return t.index[e]}},getBlank:function e(i){return function(e){return t.getElementState(e)}}}}},{key:"getActions",value:function e(){var i=this;return{add:function e(t,n){var a=i.validate(Object.assign({},n),{host:t.state.host});a.id="temporary"+(new Date).getTime()+t.state.created;a.templateId=a.id;a.init=true;t.commit("add",Object.assign({},i.getElementState(),a));return a.id},set:function e(n,a){if(a instanceof Array){a=a.map(function(e){var t=i.validate(Object.assign({},e),{host:n.state.host});t.templateId=t.id;return Object.assign({},i.getElementState(),t,{init:true})})}else{var r=i.validate(Object.assign({},a),{host:n.state.host});r.templateId=r.id;a=[];a.push(Object.assign({},i.getElementState(),r,{init:true}))}n.commit("set",{insertType:t.MutationType.setAfter,data:a})},setBefore:function e(n,a){if(a instanceof Array){a=a.map(function(e){var t=i.validate(Object.assign({},e),{host:n.state.host});t.templateId=t.id;return Object.assign({},i.getElementState(),t,{init:true})})}else{var r=i.validate(Object.assign({},a),{host:n.state.host});r.templateId=r.id;a=[];a.push(Object.assign({},i.getElementState(),r,{init:true}))}n.commit("set",{actionName:"setBefore",insertType:t.MutationType.setBefore,data:a})},update:function e(t,n){var a=i.validate(Object.assign({},n.fields),{host:t.state.host});t.commit("initCollection",{chatId:n.chatId});var r=t.state.collection[n.chatId].findIndex(function(e){return e.id===n.id});if(r<0){return false}t.commit("update",{id:n.id,chatId:n.chatId,index:r,fields:a});if(n.fields.blink){setTimeout(function(){t.commit("update",{id:n.id,chatId:n.chatId,fields:{blink:false}})},1e3)}return true},delete:function e(t,i){t.commit("delete",{id:i.id,chatId:i.chatId});return true},saveState:function e(t,i){t.commit("saveState",{});return true}}}},{key:"getMutations",value:function e(){var i=this;return{initCollection:function e(t,n){i.initCollection(t,n)},add:function e(t,n){i.initCollection(t,n);t.collection[n.chatId].push(n);t.index[n.chatId][n.id]=n;t.created+=1;i.saveState(t)},set:function e(n,a){var r=true;var o=false;var s=undefined;try{var l=function e(){var r=c.value;i.initCollection(n,{chatId:r.chatId});var o=n.collection[r.chatId].findIndex(function(e){return e.id===r.id});if(o>-1){delete r.templateId;n.collection[r.chatId][o]=Object.assign(n.collection[r.chatId][o],r)}else if(a.insertType===t.MutationType.setBefore){n.collection[r.chatId].unshift(r)}else{n.collection[r.chatId].push(r)}n.index[r.chatId][r.id]=r;i.saveState(n)};for(var d=a.data[Symbol.iterator](),c;!(r=(c=d.next()).done);r=true){l()}}catch(e){o=true;s=e}finally{try{if(!r&&d.return!=null){d.return()}}finally{if(o){throw s}}}},update:function e(t,n){i.initCollection(t,n);var a=-1;if(typeof n.index!=="undefined"&&t.collection[n.chatId][n.index]){a=n.index}else{a=t.collection[n.chatId].findIndex(function(e){return e.id===n.id})}if(a>=0){delete n.fields.templateId;var r=Object.assign(t.collection[n.chatId][a],n.fields);t.collection[n.chatId][a]=r;t.index[n.chatId][r.id]=r;i.saveState(t)}},delete:function e(t,n){i.initCollection(t,n);t.collection[n.chatId]=t.collection[n.chatId].filter(function(e){return e.id!==n.id});delete t.index[n.chatId][n.id];i.saveState(t)},saveState:function e(t,n){i.saveState(t)}}}},{key:"initCollection",value:function e(t,n){if(typeof t.collection[n.chatId]!=="undefined"){return true}i.Vue.set(t.collection,n.chatId,[]);i.Vue.set(t.index,n.chatId,{});return true}},{key:"getLoadedState",value:function e(t){if(!t||babelHelpers.typeof(t)!=="object"){return t}if(babelHelpers.typeof(t.collection)!=="object"){return t}t.index={};var i=function e(i){if(!t.collection.hasOwnProperty(i)){return"continue"}t.index[i]={};t.collection[i].filter(function(e){return e!=null}).forEach(function(e){t.index[i][e.id]=e})};for(var n in t.collection){var a=i(n);if(a==="continue")continue}return t}},{key:"getSaveFileList",value:function e(){if(!this.db){return[]}if(!this.store.getters["messages/getSaveFileList"]){return[]}var t=this.store.getters["messages/getSaveFileList"]();if(!t){return[]}return t}},{key:"getSaveTimeout",value:function e(){return 250}},{key:"saveState",value:function e(t){var i=this;if(!this.isSaveAvailable()){return false}babelHelpers.get(babelHelpers.getPrototypeOf(n.prototype),"saveState",this).call(this,function(){var e=i.getSaveFileList();if(!e){return false}var n={collection:{}};var a=function i(a){if(!e.hasOwnProperty(a)){return"continue"}e[a].forEach(function(e){if(!t.index[a]){return false}if(!t.index[a][e]){return false}if(!n.collection[a]){n.collection[a]=[]}n.collection[a].push(t.index[a][e])})};for(var r in e){var o=a(r);if(o==="continue")continue}return n})}},{key:"validate",value:function e(i){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var o={};r.host=r.host||this.getState().host;if(typeof i.id==="number"){o.id=i.id}else if(typeof i.id==="string"){if(i.id.startsWith("temporary")){o.id=i.id}else{o.id=parseInt(i.id)}}if(typeof i.templateId==="number"){o.templateId=i.templateId}else if(typeof i.templateId==="string"){if(i.templateId.startsWith("temporary")){o.templateId=i.templateId}else{o.templateId=parseInt(i.templateId)}}if(typeof i.chatId==="number"||typeof i.chatId==="string"){o.chatId=parseInt(i.chatId)}if(typeof i.date!=="undefined"){o.date=a.Utils.date.cast(i.date)}if(typeof i.type==="string"){o.type=i.type}if(typeof i.extension==="string"){o.extension=i.extension.toString();if(o.type==="image"){o.icon="img"}else if(o.type==="video"){o.icon="mov"}else{o.icon=n.getIconType(o.extension)}}if(typeof i.name==="string"||typeof i.name==="number"){o.name=i.name.toString()}if(typeof i.size==="number"||typeof i.size==="string"){o.size=parseInt(i.size)}if(typeof i.image==="boolean"){o.image=false}else if(babelHelpers.typeof(i.image)==="object"&&i.image){o.image={width:0,height:0};if(typeof i.image.width==="string"||typeof i.image.width==="number"){o.image.width=parseInt(i.image.width)}if(typeof i.image.height==="string"||typeof i.image.height==="number"){o.image.height=parseInt(i.image.height)}if(o.image.width<=0||o.image.height<=0){o.image=false}}if(typeof i.status==="string"&&typeof t.FileStatus[i.status]!=="undefined"){o.status=i.status}if(typeof i.progress==="number"||typeof i.progress==="string"){o.progress=parseInt(i.progress)}if(typeof i.authorId==="number"||typeof i.authorId==="string"){o.authorId=parseInt(i.authorId)}if(typeof i.authorName==="string"||typeof i.authorName==="number"){o.authorName=i.authorName.toString()}if(typeof i.urlPreview==="string"){if(!i.urlPreview||i.urlPreview.startsWith("http")||i.urlPreview.startsWith("bx")||i.urlPreview.startsWith("file")){o.urlPreview=i.urlPreview}else{o.urlPreview=r.host+i.urlPreview}}if(typeof i.urlDownload==="string"){if(!i.urlDownload||i.urlDownload.startsWith("http")||i.urlDownload.startsWith("bx")||i.urlPreview.startsWith("file")){o.urlDownload=i.urlDownload}else{o.urlDownload=r.host+i.urlDownload}}if(typeof i.urlShow==="string"){if(!i.urlShow||i.urlShow.startsWith("http")||i.urlShow.startsWith("bx")||i.urlShow.startsWith("file")){o.urlShow=i.urlShow}else{o.urlShow=r.host+i.urlShow}}return o}}],[{key:"getType",value:function e(i){i=i.toString().toLowerCase().split(".").splice(-1)[0];switch(i){case"png":case"jpe":case"jpg":case"jpeg":case"gif":case"heic":case"bmp":return t.FileType.image;case"mp4":case"mkv":case"webm":case"mpeg":case"hevc":case"avi":case"3gp":case"flv":case"m4v":case"ogg":case"wmv":case"mov":return t.FileType.video;case"mp3":return t.FileType.audio}return t.FileType.file}},{key:"getIconType",value:function e(t){var i="empty";switch(t.toString()){case"png":case"jpe":case"jpg":case"jpeg":case"gif":case"heic":case"bmp":i="img";break;case"mp4":case"mkv":case"webm":case"mpeg":case"hevc":case"avi":case"3gp":case"flv":case"m4v":case"ogg":case"wmv":case"mov":i="mov";break;case"txt":i="txt";break;case"doc":case"docx":i="doc";break;case"xls":case"xlsx":i="xls";break;case"php":i="php";break;case"pdf":i="pdf";break;case"ppt":case"pptx":i="ppt";break;case"rar":i="rar";break;case"zip":case"7z":case"tar":case"gz":case"gzip":i="zip";break;case"set":i="set";break;case"conf":case"ini":case"plist":i="set";break}return i}}]);return n}(n.VuexBuilderModel);var u=function(e){babelHelpers.inherits(t,e);function t(){babelHelpers.classCallCheck(this,t);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(t).apply(this,arguments))}babelHelpers.createClass(t,[{key:"getName",value:function e(){return"recent"}},{key:"getState",value:function e(){return{host:this.getVariable("host",location.protocol+"//"+location.host),collection:{pinned:[],general:[]}}}},{key:"getElementState",value:function e(){return{id:0,templateId:"",template:"item",chatType:"chat",sectionCode:"general",avatar:"",color:"#048bd0",title:"",message:{id:0,text:"",date:new Date},counter:0,pinned:false,chatId:0,userId:0}}},{key:"getGetters",value:function e(){var t=this;return{get:function e(i){return function(e){return t.findItem(i.collection,e)}}}}},{key:"getActions",value:function e(){var t=this;return{set:function e(i,n){var a={};if(n.pinned instanceof Array){a.pinned=n.pinned.map(function(e){return t.prepareItem(e,{host:i.state.host,sectionCode:"pinned"})})}else if(typeof n.pinned!=="undefined"){var r=[];r.push(t.prepareItem(n.pinned,{host:i.state.host,sectionCode:"pinned"}));a.pinned=r}if(n.general instanceof Array){a.general=n.general.map(function(e){return t.prepareItem(e,{host:i.state.host})})}else if(typeof n.general!=="undefined"){var o=[];o.push(t.prepareItem(n.general,{host:i.state.host}));a.general=o}i.commit("set",a)},updatePlaceholders:function e(i,n){if(!(n.items instanceof Array)){return false}n.items=n.items.map(function(e){return t.prepareItem(e)});n.items.forEach(function(e,a){var r="placeholder"+(n.firstMessage+a);var o=t.findItem(i.state.collection,r,"templateId");var s=t.findItem(i.state.collection,e.id);if(s.element){i.commit("update",{index:s.index,fields:Object.assign({},e),section:"general"});i.commit("delete",{index:o.index,section:"general"})}else{i.commit("update",{index:o.index,fields:Object.assign({},e),section:"general"})}})},update:function e(i,n){if(babelHelpers.typeof(n)!=="object"||n instanceof Array||!n.id||!n.fields){return false}if(typeof n.id==="string"&&!n.id.startsWith("chat")&&n.id!=="notify"){n.id=parseInt(n.id)}var a=t.findItem(i.state.collection,n.id);if(!a.element){return false}i.commit("update",{index:a.index,fields:Object.assign({},t.validate(n.fields)),section:a.element.sectionCode})},pin:function e(i,n){if(babelHelpers.typeof(n)!=="object"||n instanceof Array||!n.id||typeof n.action!=="boolean"){return false}if(typeof n.id==="string"&&!n.id.startsWith("chat")&&n.id!=="notify"){n.id=parseInt(n.id)}var a=t.findItem(i.state.collection,n.id,undefined,n.action?"general":"pinned");if(!a.element){return true}if(n.action){i.state.collection.pinned.push(Object.assign({},a.element,{sectionCode:"pinned",pinned:true}));i.state.collection.pinned.sort(t.sortListByMessageDate);i.commit("delete",{index:a.index,section:"general"})}else{i.state.collection.general.push(Object.assign({},a.element,{sectionCode:"general",pinned:false}));i.state.collection.general.sort(t.sortListByMessageDate);i.commit("delete",{index:a.index,section:"pinned"})}},clearPlaceholders:function e(t,i){t.state.collection.general=t.state.collection.general.filter(function(e){return!e.id.toString().startsWith("placeholder")})},delete:function e(i,n){if(babelHelpers.typeof(n)!=="object"||n instanceof Array||!n.id){return false}if(typeof n.id==="string"&&!n.id.startsWith("chat")&&n.id!=="notify"){n.id=parseInt(n.id)}var a=t.findItem(i.state.collection,n.id);if(!a.element){return false}i.commit("delete",{index:a.index,section:a.element.sectionCode})}}}},{key:"getMutations",value:function e(){var t=this;return{set:function e(i,n){if(n.general instanceof Array){n.general.forEach(function(e){var n=t.initCollection(i,e,"general"),a=n.index,r=n.alreadyExists;if(r){i.collection.general[a]=Object.assign({},i.collection.general[a],e)}})}if(n.pinned instanceof Array){n.pinned.forEach(function(e){var n=t.initCollection(i,e,"pinned"),a=n.index,r=n.alreadyExists;if(r){i.collection.pinned[a]=Object.assign({},i.collection.pinned[a],e)}})}},update:function e(i,n){if(!n||n instanceof Array||babelHelpers.typeof(n.fields)!=="object"||typeof n.index!=="number"||typeof n.section!=="string"){return false}i.collection[n.section][n.index]=Object.assign({},i.collection[n.section][n.index],n.fields);i.collection[n.section].sort(t.sortListByMessageDate)},delete:function e(t,i){if(!i||i instanceof Array||typeof i.index!=="number"||typeof i.section!=="string"){return false}t.collection[i.section].splice(i.index,1)}}}},{key:"initCollection",value:function e(t,i,n){var a=this.findItem(t.collection,i.id,undefined,n);if(a.element){return{index:a.index,alreadyExists:true}}var r=t.collection[n].push(Object.assign({},this.getElementState(),i));return{index:r-1,alreadyExists:false}}},{key:"validate",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n={};if(typeof t.id==="number"||typeof t.id==="string"){n.id=t.id}if(typeof t.templateId==="string"){n.templateId=t.templateId}if(typeof t.template==="string"){n.template=t.template}if(typeof t.type==="string"){if(t.type==="chat"){if(t.chat.type==="open"){n.chatType="open"}else if(t.chat.type==="chat"){n.chatType="chat"}}else if(t.type==="user"){n.chatType="user"}else if(t.type==="notification"){n.chatType="notification";t.title="Notifications"}}if(typeof t.avatar==="string"){var a;if(!t.avatar||t.avatar.endsWith("/js/im/images/blank.gif")){a=""}else if(t.avatar.startsWith("http")){a=t.avatar}else{a=i.host+t.avatar}if(a){n.avatar=encodeURI(a)}}if(typeof t.color==="string"){n.color=t.color}if(typeof t.title==="string"){n.title=t.title}if(babelHelpers.typeof(t.message)==="object"&&!(t.message instanceof Array)&&t.message!==null){n.message=t.message}if(typeof t.counter==="number"){n.counter=t.counter}if(typeof t.pinned==="boolean"){n.pinned=t.pinned}if(typeof t.chatId==="number"){n.chatId=t.chatId}if(typeof t.userId==="number"){n.userId=t.userId}return n}},{key:"sortListByMessageDate",value:function e(t,i){if(t.message&&i.message){var n=new Date(t.message.date).getTime();var a=new Date(i.message.date).getTime();return a-n}}},{key:"prepareItem",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=this.validate(Object.assign({},t));return Object.assign({},this.getElementState(),n,i)}},{key:"findItem",value:function e(t,i){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"id";var a=arguments.length>3&&arguments[3]!==undefined?arguments[3]:"general";var r={};if(babelHelpers.typeof(t[a])===undefined){return r}var o=t[a].findIndex(function(e,t){return e[n]===i});if(o!==-1){r.index=o;r.element=t[a][o];return r}return r}}]);return t}(n.VuexBuilderModel);e.ApplicationModel=r;e.MessagesModel=s;e.DialoguesModel=l;e.UsersModel=d;e.FilesModel=c;e.RecentModel=u})(this.BX.Messenger.Model=this.BX.Messenger.Model||{},BX.Messenger.Const,BX,BX,BX.Messenger.Lib);
//# sourceMappingURL=registry.bundle.map.jstest/users.test.js000066400000001110147732346740010214 0ustar00import {VuexBuilder} from "ui.vue.vuex";
import {UsersModel} from '../src/users';

describe('Im model: Users', () => {

	let vuex = null;

	before(async () => {

		vuex = await new VuexBuilder()
			.addModel(
				UsersModel.create()
					.useDatabase(false)
					.setVariables({
						host: 'http://bitrix24.com',
						default: {name: 'Anonymous'}
					})
			)
			.build()
		;
	});

	it('Model is loaded', () => {
		assert(typeof UsersModel !== 'undefined');
	});

	it('Model is initialize', async () => {
		assert.equal(vuex.store.state.users.host, 'http://bitrix24.com');
	});

});test/recent.test.js000066400000071610147732346740010347 0ustar00import {VuexBuilder} from "ui.vue.vuex";
import {RecentModel} from '../src/recent';

let vuex = null;
let store = null;

before(async () => {

	vuex = await new VuexBuilder()
		.addModel(
			RecentModel.create()
				.useDatabase(false)
				.setVariables({
					host: 'http://test.com',
				})
		)
		.build();

	store = vuex.store.state.recent;
});

afterEach(() => {
	clearStore();
});

describe('Im model: Recent', () => {
	describe('Initialization', () => {
		it('model is loaded', () => {
			assert(typeof RecentModel !== 'undefined');
		});

		it('model is initialized', async () => {
			assert.equal(store.host, 'http://test.com');
			assert.equal(Array.isArray(store.collection.general), true);
			assert.equal(Array.isArray(store.collection.pinned), true);
		});
	});

	describe('getElementState', () => {
		it('returns a object', () => {
			assert.equal(typeof RecentModel.prototype.getElementState(), 'object');
		});

		it('returns default item', () => {
			let newItem = RecentModel.prototype.getElementState();
			assert.equal(newItem.id, 0);
			assert.equal(newItem.templateId, '');
			assert.equal(newItem.template, 'item');
			assert.equal(newItem.chatType, 'chat');
			assert.equal(newItem.sectionCode, 'general');
			assert.equal(newItem.avatar, '');
			assert.equal(newItem.color, '#048bd0');
			assert.equal(newItem.title, '');
			assert.equal(typeof newItem.message, 'object');
			assert.equal(newItem.message.id, 0);
			assert.equal(newItem.message.text, '');
			assert.equal(newItem.message.date instanceof Date, true);
			assert.equal(newItem.counter, 0);
			assert.equal(newItem.pinned, false);
			assert.equal(newItem.chatId, 0);
			assert.equal(newItem.userId, 0);
		});
	});

	describe('Mutations', () => {
		describe('set', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getMutations().set, 'function');
			});

			it('expects array and does nothing if separate item is passed', () => {
				vuex.store.commit('recent/set', createItem());

				assert.equal(store.collection.general.length, 0);
				assert.equal(store.collection.pinned.length, 0);
			});

			it('adds new item in general collection for each item in payload.general', () => {
				let payload = {};
				payload.general = [
					{title: 'First item'},
					{title: 'Second item'}
				];

				vuex.store.commit('recent/set', payload);

				assert.equal(store.collection.general.length, 2);
				assert.equal(store.collection.pinned.length, 0);
				assert.equal(store.collection.general[0].title, payload.general[0].title);
				assert.equal(store.collection.general[1].title, payload.general[1].title);
			});

			it('adds new item in pinned collection for each item in payload.pinned', () => {
				let payload = {};
				payload.pinned = [
					{title: 'First item'},
					{title: 'Second item'}
				];

				vuex.store.commit('recent/set', payload);

				assert.equal(store.collection.general.length, 0);
				assert.equal(store.collection.pinned.length, 2);
				assert.equal(store.collection.pinned[0].title, payload.pinned[0].title);
				assert.equal(store.collection.pinned[1].title, payload.pinned[1].title);
			});

			it('adds items in both collections if there are items in both payload.general and payload.pinned', () => {
				let payload = {};
				payload.general = [
					{title: 'First general item'},
					{title: 'Second general item'},
					{title: 'Third general item'}
				];
				payload.pinned = [
					{title: 'First pinned item'},
					{title: 'Second pinned item'}
				];

				vuex.store.commit('recent/set', payload);

				assert.equal(store.collection.general.length, 3);
				assert.equal(store.collection.general[0].title, payload.general[0].title);
				assert.equal(store.collection.general[1].title, payload.general[1].title);
				assert.equal(store.collection.general[2].title, payload.general[2].title);
				assert.equal(store.collection.pinned.length, 2);
				assert.equal(store.collection.pinned[0].title, payload.pinned[0].title);
				assert.equal(store.collection.pinned[1].title, payload.pinned[1].title);
			});
		});

		describe('update', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getActions().update, 'function');
			});

			it('expects single object (fields, section, index) and does nothing if something else is passed', () => {
				let newItem = createItem({
					id: 'chat1',
					title: 'Original title'
				});
				store.collection.general.push(newItem);

				let payload = [
					{id: 'chat1', fields: {title: 'Changed title'}},
					{id: 'chat2', fields: {}}
				];
				vuex.store.commit('recent/update', payload);
				let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id);

				assert.equal(existingItem.element.title, newItem.title);
			});

			it('updates existing item with passed data', () => {
				let newItem = createItem({
					id: 'chat1',
					title: 'Original title'
				});
				store.collection.general.push(newItem);

				let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id);
				let payload = {
					index: existingItem.index,
					fields: {title: 'Changed title'},
					section: existingItem.element.sectionCode
				};
				vuex.store.commit('recent/update', payload);

				existingItem = RecentModel.prototype.findItem(store.collection, newItem.id);
				assert.equal(existingItem.element.title, payload.fields.title);
			});
		});

		describe('delete', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getActions().delete, 'function');
			});

			it('expects single object (section, index) and does nothing if something else is passed', () => {
				let newItem = createItem({
					id: 'chat1',
					title: 'Original title'
				});
				store.collection.general.push(newItem);

				let payload = {
					index: 0
				};
				vuex.store.commit('recent/delete', payload);
				let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id);

				assert.equal(store.collection.general.length, 1);
				assert.equal(existingItem.element.title, newItem.title);
			});

			it('deletes item with passed index in passed section of collection', () => {
				let newItem = createItem({
					id: 'chat1',
					title: 'Original title'
				});
				store.collection.general.push(newItem);
				let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id);

				let payload = {
					index: existingItem.index,
					section: existingItem.element.sectionCode
				};
				vuex.store.commit('recent/delete', payload);

				assert.equal(store.collection.general.length, 0);
			});
		});
	});

	describe('Actions', () => {
		describe('set', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getActions().set, 'function');
			});

			it('expects object with pinned and general properties and does nothing if something else was provided', () => {
				let payload = {
					id: 'chat13',
					title: 'My new title',
					color: 'red'
				};

				return vuex.store.dispatch('recent/set', payload).then(() => {
					assert.equal(store.collection.general.length, 0);
				});
			});

			it('can set single item', () => {
				let payload = {};
				payload.general = {
					id: 'chat13',
					title: 'My new title',
					color: 'red'
				};

				return vuex.store.dispatch('recent/set', payload).then(() => {
					assert.equal(store.collection.general.length, 1);
					assert.equal(store.collection.general[0].id, payload.general.id);
					assert.equal(store.collection.general[0].title, payload.general.title);
					assert.equal(store.collection.general[0].color, payload.general.color);
				});
			});

			it('can set array of items', () => {
				let payload = {};
				payload.general = [
					{
						id: 'chat13',
						title: 'My new title',
						color: 'red'
					},
					{
						id: 'chat14',
						title: 'My second title',
						color: 'blue'
					},
				];
				payload.pinned = [
					{
						id: 'chat15',
						title: 'My pinned title',
						color: 'green'
					}
				];

				return vuex.store.dispatch('recent/set', payload).then(() => {
					assert.equal(store.collection.general.length, 2);
					assert.equal(store.collection.general[0].id, payload.general[0].id);
					assert.equal(store.collection.general[0].title, payload.general[0].title);
					assert.equal(store.collection.general[0].color, payload.general[0].color);
					assert.equal(store.collection.general[1].id, payload.general[1].id);
					assert.equal(store.collection.general[1].title, payload.general[1].title);
					assert.equal(store.collection.general[1].color, payload.general[1].color);
					assert.equal(store.collection.pinned.length, 1);
					assert.equal(store.collection.pinned[0].id, payload.pinned[0].id);
					assert.equal(store.collection.pinned[0].title, payload.pinned[0].title);
					assert.equal(store.collection.pinned[0].color, payload.pinned[0].color);
				});
			});
		});

		describe('update', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getActions().update, 'function');
			});

			it('expects object with id and fields properties and does nothing if something else was passed', () => {
				let newItem = createItem({
					title: 'Original title'
				});
				store.collection.general.push(newItem);

				let payload = {
					id: newItem.id,
					item: {title: 'Changed title'}
				};

				return vuex.store.dispatch('recent/set', payload).then(() => {
					assert.equal(store.collection.general[0].title, newItem.title);
				});
			});

			it('updates chat elements', () => {
				let newItem = createItem({
					id: 'chat15',
					title: 'Original title'
				});
				store.collection.general.push(newItem);

				let payload = {
					id: newItem.id,
					fields: {
						title: 'Changed title'
					}
				};

				return vuex.store.dispatch('recent/update', payload)
					.then(() => {
						assert.equal(store.collection.general[0].title, payload.fields.title);
					});
			});

			it('updates user elements', () => {
				let newItem = createItem({
					id: 18,
					title: 'Original user title'
				});
				store.collection.general.push(newItem);

				let payload = {
					id: '18',
					fields: {
						title: 'Changed user title'
					}
				};

				return vuex.store.dispatch('recent/update', payload)
					.then(() => {
						assert.equal(store.collection.general[0].title, payload.fields.title);
					});
			});
		});

		describe('delete', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getActions().delete, 'function');
			});

			it('deletes an element', () => {
				let newItem = createItem({
					id: 'chat13'
				});
				store.collection.general.push(newItem);

				let payload = {
					id: newItem.id
				};

				return vuex.store.dispatch('recent/delete', payload)
					.then(() => {
						assert.equal(store.collection.general.length, 0);
					});
			});
		});

		describe('pin', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getActions().pin, 'function');
			});

			it('can pin item - adds item to pinned section and removes it from general section', () => {
				let newItem = createItem({
					id: 'chat99',
					title: 'Pin me!'
				});
				store.collection.general.push(newItem);

				let payload = {
					id: newItem.id,
					action: true
				};

				return vuex.store.dispatch('recent/pin', payload)
					.then(() => {
						assert.equal(store.collection.general.length, 0);
						assert.equal(store.collection.pinned.length, 1);
						assert.equal(store.collection.pinned[0].title, newItem.title);
						assert.equal(store.collection.pinned[0].sectionCode, 'pinned');
						assert.equal(store.collection.pinned[0].pinned, true);
					});
			});

			it('can unpin item - adds item to general section and removes it from pinned section', () => {
				let newItem = createItem({
					id: 'chat99',
					title: 'Unpin me!'
				});
				store.collection.pinned.push(newItem);

				let payload = {
					id: newItem.id,
					action: false
				};

				return vuex.store.dispatch('recent/pin', payload)
					.then(() => {
						assert.equal(store.collection.pinned.length, 0);
						assert.equal(store.collection.general.length, 1);
						assert.equal(store.collection.general[0].title, newItem.title);
						assert.equal(store.collection.general[0].sectionCode, 'general');
						assert.equal(store.collection.general[0].pinned, false);
					});
			});
		});

		describe('clearPlaceholders', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getActions().clearPlaceholders, 'function');
			});

			it('removes all items from "general" collection with id starting with "placeholder"', () => {
				let newItem = createItem({
					id: 'placeholder1'
				});

				let newItem2 = createItem({
					id: 'placeholder2'
				});

				let newItem3 = createItem({
					id: 'chat3'
				});

				store.collection.general.push(newItem, newItem2, newItem3);

				return vuex.store.dispatch('recent/clearPlaceholders')
					.then(() => {
						assert.equal(store.collection.general.length, 1);
					});
			});
		});

		describe('updatePlaceholders', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.getActions().updatePlaceholders, 'function');
			});

			it('updates item and deletes appropriate placeholder if there is item with passed id', () => {
				let newItem = createItem({
					id: 'chat3',
					title: 'I was here already!'
				});
				let newItem2 = createItem({
					id: 'chat4',
					title: 'I was here already too!'
				});
				store.collection.general.push(newItem, newItem2);

				let placeholders = [];
				placeholders.push(
					{
						id: 'placeholder0',
						templateId: 'placeholder0',
						template: 'placeholder',
						sectionCode: 'general'
					},
					{
						id: 'placeholder1',
						templateId: 'placeholder1',
						template: 'placeholder',
						sectionCode: 'general'
					}
				);
				store.collection.general.push(...placeholders);

				let payload = {};
				payload.items = [
					{
						id: newItem.id,
						title: 'I am new data!',
					},
					{
						id: newItem2.id,
						title: 'I am new data too!',
					}
				];
				payload.firstMessage = 0;

				return vuex.store.dispatch('recent/updatePlaceholders', payload)
					.then(() => {
						assert.equal(store.collection.general.length, 2);
						assert.equal(store.collection.general[0].title, payload.items[0].title);
						assert.equal(store.collection.general[1].title, payload.items[1].title);
					});
			});

			it('updates appropriate placeholder with passed data if there is no item with passed id', () => {
				let placeholders = [];
				placeholders.push(
					{
						id: 'placeholder0',
						templateId: 'placeholder0',
						template: 'placeholder',
						sectionCode: 'general'
					},
					{
						id: 'placeholder1',
						templateId: 'placeholder1',
						template: 'placeholder',
						sectionCode: 'general'
					}
				);
				store.collection.general.push(...placeholders);

				let payload = {};
				payload.items = [
					{
						id: 'chat11',
						title: 'I am totally new data!'
					},
					{
						id: 'chat12',
						title: 'I am totally new data too!'
					}
				];
				payload.firstMessage = 0;

				return vuex.store.dispatch('recent/updatePlaceholders', payload)
					.then(() => {
						assert.equal(store.collection.general.length, 2);
						assert.equal(store.collection.general[0].title, payload.items[0].title);
						assert.equal(store.collection.general[1].title, payload.items[1].title);
					});
			});
		});
	});

	describe('Helpers', () => {
		describe('findItem()', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.findItem, 'function');
			});

			it('returns empty object if there is no such item', () => {
				let existingItem = RecentModel.prototype.findItem(store.collection, 'id', 999);
				assert.equal(typeof existingItem, 'object');
				assert.equal(typeof existingItem.element, 'undefined');
				assert.equal(typeof existingItem.index, 'undefined');
			});

			describe('successful search', () => {
				it('finds items based on ID by default', () => {
					let newItem = createItem();
					store.collection.general.push(newItem);

					let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id);
					assert.notEqual(typeof existingItem.index, 'undefined');
					assert.notEqual(typeof existingItem.element, 'undefined');
				});

				it('can find item based on any key', () => {
					let newItem = createItem();
					store.collection.general.push(newItem);

					let existingItem = RecentModel.prototype.findItem(store.collection, newItem.title, 'title');
					assert.notEqual(typeof existingItem.index, 'undefined');
					assert.notEqual(typeof existingItem.element, 'undefined');
				});

				it('returns index of found item', () => {
					let newItem = createItem();
					store.collection.general.push(newItem);

					let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id);
					assert.equal(existingItem.index, 0);
				});

				it('returns found item itself', () => {
					let newItem = createItem();
					store.collection.general.push(newItem);

					let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id);
					assert.equal(existingItem.element, newItem);
					assert.equal(existingItem.element.id, newItem.id);
					assert.equal(existingItem.element.title, newItem.title);
					assert.equal(existingItem.element.message.text, newItem.message.text);
				});

				it('can find items both in general and pinned sections', () => {
					let newItem = createItem();
					let newPinnedItem = Object.assign({}, RecentModel.prototype.getElementState(), {
						id: 'chat6',
						title: 'Second user',
						message: {
							id: 6,
							text: 'Message of second user'
						}
					});
					store.collection.general.push(newItem);
					store.collection.pinned.push(newPinnedItem);

					let existingItem = RecentModel.prototype.findItem(store.collection, newPinnedItem.id, undefined, 'pinned');
					assert.equal(existingItem.element, newPinnedItem);
					assert.equal(existingItem.element.id, newPinnedItem.id);
					assert.equal(existingItem.element.title, newPinnedItem.title);
					assert.equal(existingItem.element.message.text, newPinnedItem.message.text);
				});
			});
		});

		describe('initCollection()', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.initCollection, 'function');
			});

			it('returns index and flag if element is already exists', () => {
				let newItem = createItem();
				store.collection.general.push(newItem);

				let {index, alreadyExists} = RecentModel.prototype.initCollection(store, newItem, 'general');

				assert.equal(alreadyExists, true);
				assert.equal(typeof index, 'number');
				assert.equal(index, 0);
			});

			it('if not found - creates new element with given data and returns its index and flag', () => {
				store.collection.general.push(createItem());
				let payload = {id: 999};
				let {index, alreadyExists} = RecentModel.prototype.initCollection(store, payload, 'general');
				let existingItem = RecentModel.prototype.findItem(store.collection, payload.id);

				assert.equal(alreadyExists, false);
				assert.equal(store.collection.general.length, 2);
				assert.equal(index, 1);
				assert.equal(existingItem.element.id, payload.id);
			});
		});

		describe('prepareItem()', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.prepareItem, 'function');
			});

			it('creates new object from getElementState and validated payload', () => {
				let payload = {
					id: 13,
					title: 'My super title'
				};

				let result = RecentModel.prototype.prepareItem(payload);
				let defaultState = RecentModel.prototype.getElementState();

				assert.equal(result.id, payload.id);
				assert.equal(result.title, payload.title);
				assert.equal(result.color, defaultState.color);
				assert.equal(result.message.text, defaultState.message.text);
			});

			it('can add provided options to item', () => {
				let payload = {
					id: 13,
					title: 'My super title'
				};

				let options = {host: 'www.bitri24.ru'};
				let result = RecentModel.prototype.prepareItem(payload, options);
				assert.equal(result.host, options.host);
			});
		});

		describe('validate()', () => {
			it('exists', () => {
				assert.equal(typeof RecentModel.prototype.validate, 'function');
			});

			it('checks if id is number or string', () => {
				let payload = {
					id: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.id, undefined);

				payload = {
					id: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.id, undefined);

				payload = {
					id: 'chat1'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.id, payload.id);

				payload = {
					id: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.id, payload.id);
			});

			it('checks if templateId is string', () => {
				let payload = {
					templateId: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.templateId, undefined);

				payload = {
					templateId: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.templateId, undefined);

				payload = {
					templateId: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.templateId, undefined);

				payload = {
					templateId: 'chat1'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.templateId, payload.templateId);
			});

			it('checks if template is string', () => {
				let payload = {
					template: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.template, undefined);

				payload = {
					template: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.template, undefined);

				payload = {
					template: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.template, undefined);

				payload = {
					template: 'chat1'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.template, payload.template);
			});

			it('checks if type is string', () => {
				let payload = {
					type: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.type, undefined);

				payload = {
					type: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.type, undefined);

				payload = {
					type: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.type, undefined);
			});

			it('sets chatType for chats, users and notifications', () => {
				let payload = {
					type: 'chat',
					chat: {
						type: 'open'
					}
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.chatType, payload.chat.type);

				payload = {
					type: 'chat',
					chat: {
						type: 'chat'
					}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.chatType, payload.chat.type);

				payload = {
					type: 'user',
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.chatType, payload.type);

				payload = {
					type: 'notification',
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.chatType, payload.type);
				assert.equal(payload.title, 'Notifications');
			});

			it('checks if avatar is string', () => {
				let payload = {
					avatar: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.avatar, undefined);

				payload = {
					avatar: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.avatar, undefined);

				payload = {
					avatar: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.avatar, undefined);
			});

			it('formats avatar string', () => {
				let payload = {
					avatar: ''
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.avatar, undefined);

				payload = {
					avatar: 'http://www.google.com'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.avatar, encodeURI(payload.avatar));

				payload = {
					avatar: '/images/my-photo.png'
				};

				let host = 'www.bitrix24.com';
				result = RecentModel.prototype.validate(payload, {host: host});
				assert.equal(result.avatar, encodeURI(host + payload.avatar));
			});

			it('checks if color is string', () => {
				let payload = {
					color: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.color, undefined);

				payload = {
					color: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.color, undefined);

				payload = {
					color: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.color, undefined);

				payload = {
					color: '#ccc'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.color, payload.color);
			});

			it('checks if title is string', () => {
				let payload = {
					title: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.title, undefined);

				payload = {
					title: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.title, undefined);

				payload = {
					title: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.title, undefined);

				payload = {
					title: 'My title'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.color, payload.color);
			});

			it('checks if message is object', () => {
				let payload = {
					message: []
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.message, undefined);

				payload = {
					message: null
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.message, undefined);

				payload = {
					message: 'My message'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.message, undefined);

				payload = {
					message: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.message, undefined);

				payload = {
					message: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(typeof result.message, 'object');
			});

			it('checks if counter is number', () => {
				let payload = {
					counter: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.counter, undefined);

				payload = {
					counter: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.counter, undefined);

				payload = {
					counter: 'My title'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.counter, undefined);

				payload = {
					counter: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.counter, payload.counter);
			});

			it('checks if pinned is boolean', () => {
				let payload = {
					pinned: {}
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.pinned, undefined);

				payload = {
					pinned: 'My title'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.pinned, undefined);

				payload = {
					pinned: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.pinned, undefined);

				payload = {
					pinned: true
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.pinned, payload.pinned);
			});

			it('checks if chatId is number', () => {
				let payload = {
					chatId: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.chatId, undefined);

				payload = {
					chatId: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.chatId, undefined);

				payload = {
					chatId: 'My title'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.chatId, undefined);

				payload = {
					chatId: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.chatId, payload.chatId);
			});

			it('checks if userId is number', () => {
				let payload = {
					userId: true
				};

				let result = RecentModel.prototype.validate(payload);
				assert.equal(result.userId, undefined);

				payload = {
					userId: {}
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.userId, undefined);

				payload = {
					userId: 'My title'
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.userId, undefined);

				payload = {
					userId: 18
				};

				result = RecentModel.prototype.validate(payload);
				assert.equal(result.userId, payload.userId);
			});
		});
	});
});

function createItem(data = {})
{
	return Object.assign(
		RecentModel.prototype.getElementState(),
		{
			id: 'chatTest',
			title: 'Test user',
			message: {
				id: 5,
				text: 'Message of test user'
			}
		},
		data
	);
}

function clearStore()
{
	store.collection.general = [];
	store.collection.pinned = [];
}