403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/v2/component/message/file/src/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/v2/component/message/file/src/file-message.js
import { Type } from 'main.core';
import { FileType } from 'im.v2.const';
import { UnsupportedMessage } from 'im.v2.component.message.unsupported';
import { Utils } from 'im.v2.lib.utils';
import { UploadingService } from 'im.v2.provider.service.uploading';
import { UploaderFile } from 'ui.uploader.core';

import { MediaMessage } from './components/media-message';
import { BaseFileMessage } from './components/base-file-message';
import { AudioMessage } from './components/audio-message';
import { FileCollectionMessage } from './components/file-collection-message';
import { MediaContent } from './components/media-content';

import type { ImModelMessage, ImModelFile, ImModelChat } from 'im.v2.model';

const FileMessageType = Object.freeze({
	media: 'MediaMessage',
	audio: 'AudioMessage',
	base: 'BaseFileMessage',
	collection: 'FileCollectionMessage',
});

// @vue/component
export const FileMessage = {
	name: 'FileMessage',
	components: {
		BaseFileMessage,
		MediaMessage,
		AudioMessage,
		UnsupportedMessage,
		FileCollectionMessage,
	},
	props: {
		item: {
			type: Object,
			required: true,
		},
		dialogId: {
			type: String,
			required: true,
		},
		withTitle: {
			type: Boolean,
			default: true,
		},
	},
	computed:
	{
		FileType: () => FileType,
		message(): ImModelMessage
		{
			return this.$store.getters['messages/getById'](this.item.id);
		},
		messageFiles(): ImModelFile[]
		{
			const files = [];

			if (this.message.files.length === 0)
			{
				return files;
			}

			this.message.files.forEach((fileId: number) => {
				const file: ImModelFile = this.$store.getters['files/get'](fileId, true);
				files.push(file);
			});

			return files;
		},
		isGallery(): boolean
		{
			const allowedGalleryTypes: Set<string> = new Set([FileType.image, FileType.video]);
			const isMediaOnly: boolean = this.messageFiles.every((file) => {
				return allowedGalleryTypes.has(file.type);
			});
			const hasImageProp: boolean = this.messageFiles.some((file) => {
				return file.image !== false;
			});

			return isMediaOnly && hasImageProp;
		},
		componentName(): string
		{
			if (this.messageFiles.length > 1)
			{
				return this.isGallery ? FileMessageType.media : FileMessageType.collection;
			}

			const file = this.messageFiles[0];
			const hasPreview = Boolean(file.image);

			if (file.type === FileType.image && hasPreview)
			{
				return FileMessageType.media;
			}

			if (file.type === FileType.audio)
			{
				return FileMessageType.audio;
			}

			// file.type value is empty for mkv files
			const isVideo = file.type === FileType.video || Utils.file.getFileExtension(file.name) === 'mkv';
			if (isVideo && hasPreview)
			{
				return FileMessageType.media;
			}

			return FileMessageType.base;
		},
		isRealMessage(): boolean
		{
			return this.$store.getters['messages/isRealMessage'](this.message.id);
		},
	},
	methods: {
		onCancel(event: { file: ImModelFile })
		{
			const canceledFileId: string = event.file.id;
			const uploadingService: UploadingService = UploadingService.getInstance();
			const uploaderId: string = uploadingService.getUploaderIdByFileId(canceledFileId);

			uploadingService.removeFileFromUploader({
				uploaderId,
				filesIds: [canceledFileId],
				restartUploading: true,
			});

			const uploaderFiles: Array<UploaderFile> = uploadingService.getFiles(uploaderId);
			if (Type.isArrayFilled(uploaderFiles))
			{
				const actualMessageFiles: Array<string> = uploaderFiles.map((file: UploaderFile) => {
					return file.getId();
				});

				void this.$store.dispatch('messages/update', {
					id: this.message.id,
					fields: {
						files: actualMessageFiles,
					},
				});
			}
			else
			{
				const chatId: number = this.message.chatId;
				void this.$store.dispatch('messages/delete', { id: this.message.id });

				const chat: ImModelChat = this.$store.getters['chats/getByChatId'](chatId);
				const lastMessageId: string | number | null = this.$store.getters['messages/findLastChatMessageId'](chatId);

				if (Type.isString(lastMessageId) || Type.isNumber(lastMessageId))
				{
					void this.$store.dispatch('recent/update', {
						id: chat.dialogId,
						fields: { messageId: lastMessageId },
					});
				}
				else
				{
					void this.$store.dispatch('recent/delete', {
						id: chat.dialogId,
					});
				}
			}
		},
	},
	template: `
		<component 
			:is="componentName" 
			:item="message" 
			:dialogId="dialogId"
			:withTitle="withTitle" 
			:withContextMenu="isRealMessage"
			@cancelClick="onCancel"
		/>
	`,
};

export { MediaContent };

Youez - 2016 - github.com/yon3zu
LinuXploit