UNPKG

@progress/kendo-angular-conversational-ui

Version:

Kendo UI for Angular Conversational UI components

180 lines (179 loc) 7.56 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; import { STB_DEFAULT_SETTINGS, SEND_BTN_DEFAULT_SETTINGS, FILESELECT_DEFAULT_SETTINGS, SUGGESTIONS_LAYOUT_DEFAULT_SETTINGS } from './utils'; import * as i0 from "@angular/core"; /** * @hidden */ export class ChatService { authorId; messageWidthMode; messageToolbarActions = []; messageContextMenuActions = []; calculatedContextMenuActions = []; fileActions = []; toggleMessageState = false; reply; messages = []; chatElement; messageElementsMap = new Map(); messagesContextMenu; activeMessage; activeMessageElement; selectOnMenuClose = false; active = false; messageFilesLayout = 'vertical'; timestampVisibility = 'focus'; showUsername = true; showAvatar = true; _enableSpeechToText = STB_DEFAULT_SETTINGS; _enableFileSelect = FILESELECT_DEFAULT_SETTINGS; _sendButtonSettings = SEND_BTN_DEFAULT_SETTINGS; _suggestionsLayout = SUGGESTIONS_LAYOUT_DEFAULT_SETTINGS; _quickActionsLayout = SUGGESTIONS_LAYOUT_DEFAULT_SETTINGS; _authorMessageSettings; _receiverMessageSettings; _allowMessageCollapse; subjects = { toolbarAction: new Subject(), contextMenuAction: new Subject(), fileAction: new Subject(), fileDownload: new Subject(), replyReferenceClick: new Subject(), inputValueChange: new Subject(), contextMenuVisibilityChange: new Subject(), suggestionsLayoutChange: new Subject(), quickActionsLayoutChange: new Subject(), authorMessageSettingsChange: new Subject(), receiverMessageSettingsChange: new Subject(), allowMessageCollapseChange: new Subject(), }; toolbarAction$ = this.subjects.toolbarAction.asObservable(); contextMenuAction$ = this.subjects.contextMenuAction.asObservable(); fileAction$ = this.subjects.fileAction.asObservable(); fileDownload$ = this.subjects.fileDownload.asObservable(); replyReferenceClick$ = this.subjects.replyReferenceClick.asObservable(); inputValueChange$ = this.subjects.inputValueChange.asObservable(); contextMenuVisibilityChange$ = this.subjects.contextMenuVisibilityChange.asObservable(); suggestionsLayoutChange$ = this.subjects.suggestionsLayoutChange.asObservable(); quickActionsLayoutChange$ = this.subjects.quickActionsLayoutChange.asObservable(); authorMessageSettingsChange$ = this.subjects.authorMessageSettingsChange.asObservable(); receiverMessageSettingsChange$ = this.subjects.receiverMessageSettingsChange.asObservable(); allowMessageCollapseChange$ = this.subjects.allowMessageCollapseChange.asObservable(); set authorMessageSettings(settings) { const previousSettings = this._authorMessageSettings; if (JSON.stringify(previousSettings) !== JSON.stringify(settings)) { this.updateComponentSettings('_authorMessageSettings', settings, null); this.emit('authorMessageSettingsChange', this._authorMessageSettings); } } get authorMessageSettings() { return this._authorMessageSettings; } set receiverMessageSettings(settings) { const previousSettings = this._receiverMessageSettings; if (JSON.stringify(previousSettings) !== JSON.stringify(settings)) { this.updateComponentSettings('_receiverMessageSettings', settings, null); this.emit('receiverMessageSettingsChange', this._receiverMessageSettings); } } get receiverMessageSettings() { return this._receiverMessageSettings; } set enableSpeechToText(settings) { this.updateComponentSettings('_enableSpeechToText', settings, STB_DEFAULT_SETTINGS); } get enableSpeechToText() { return this._enableSpeechToText; } set enableFileSelect(settings) { this.updateComponentSettings('_enableFileSelect', settings, FILESELECT_DEFAULT_SETTINGS); } get enableFileSelect() { return this._enableFileSelect; } set sendButtonSettings(settings) { this.updateComponentSettings('_sendButtonSettings', settings, SEND_BTN_DEFAULT_SETTINGS); } get sendButtonSettings() { return this._sendButtonSettings; } set suggestionsLayout(layoutMode) { this._suggestionsLayout = layoutMode; this.emit('suggestionsLayoutChange', this._suggestionsLayout); } get suggestionsLayout() { return this._suggestionsLayout; } set quickActionsLayout(layoutMode) { this._quickActionsLayout = layoutMode; this.emit('quickActionsLayoutChange', this._quickActionsLayout); } get quickActionsLayout() { return this._quickActionsLayout; } set allowMessageCollapse(value) { const previousValue = this._allowMessageCollapse; if (previousValue !== value) { this._allowMessageCollapse = value; this.emit('allowMessageCollapseChange', this._allowMessageCollapse); } } get allowMessageCollapse() { return this._allowMessageCollapse; } calculateContextMenuActions(isOwn) { const settings = isOwn ? this.authorMessageSettings : this.receiverMessageSettings; if (settings?.messageContextMenuActions) { this.calculatedContextMenuActions = settings.messageContextMenuActions; return; } this.calculatedContextMenuActions = this.messageContextMenuActions || []; } emit(subjectKey, value) { (this.subjects[subjectKey]).next(value); } getMessageById(id) { return this.messages.find(message => message.id === id); } registerMessageElement(messageId, elementRef) { this.messageElementsMap.set(messageId, elementRef); } unregisterMessageElement(messageId) { this.messageElementsMap.delete(messageId); if (this.reply?.id === messageId) { this.reply = null; } } scrollToMessage(messageId) { const elementRef = this.messageElementsMap.get(messageId); if (elementRef?.nativeElement) { elementRef.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } } focusActiveMessageElement() { if (this.activeMessageElement) { this.activeMessageElement.element?.nativeElement?.focus(); } } updateComponentSettings(property, settings, defaultSettings) { if (settings === true) { this[property] = defaultSettings; } else if (settings === false) { this[property] = null; } else { this[property] = { ...defaultSettings, ...settings }; } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatService }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatService, decorators: [{ type: Injectable }] });