@@ -5,10 +5,10 @@ import { unified } from "unified";
55import remarkParse from "remark-parse" ;
66import remarkRehype from "remark-rehype" ;
77import rehypeStringify from "rehype-stringify" ;
8- import { User , Alert , MessageEnteredEvent } from " devextreme/ui/chat" ;
9- import DataSource from " devextreme/data/data_source" ;
10- import CustomStore from " devextreme/data/custom_store" ;
11- import TextArea from 'devextreme/ui/text_area' ;
8+ import { type DxChatTypes } from ' devextreme-angular /ui/chat' ;
9+ import { DataSource } from ' devextreme-angular/common/data' ;
10+ import { CustomStore } from ' devextreme-angular/common/data' ;
11+
1212@Injectable ( {
1313 providedIn : "root" ,
1414} )
@@ -24,26 +24,26 @@ export class AppService {
2424 REGENERATION_TEXT = "Regeneration..." ;
2525 ALERT_TIMEOUT = 10000 ;
2626
27- user : User = {
27+ user : DxChatTypes . User = {
2828 id : "user" ,
2929 } ;
3030
31- assistant : User = {
31+ assistant : DxChatTypes . User = {
3232 id : "assistant" ,
3333 name : "Virtual Assistant" ,
3434 } ;
3535
36- store : Array < { id : number ; timestamp : Date ; author : User ; text : string } > = [ ] ;
36+ store : Array < { id : number ; timestamp : Date ; author : DxChatTypes . User ; text : string } > = [ ] ;
3737 messages : Array < { role : "user" | "assistant" | "system" ; content : string } > = [ ] ;
38- alerts : Alert [ ] = [ ] ;
38+ alerts : DxChatTypes . Alert [ ] = [ ] ;
3939
4040 customStore : CustomStore | undefined ;
4141
4242 dataSource : DataSource | undefined ;
4343
44- typingUsersSubject : BehaviorSubject < User [ ] > = new BehaviorSubject < User [ ] > ( [ ] ) ;
44+ typingUsersSubject : BehaviorSubject < DxChatTypes . User [ ] > = new BehaviorSubject < DxChatTypes . User [ ] > ( [ ] ) ;
4545
46- alertsSubject : BehaviorSubject < Alert [ ] > = new BehaviorSubject < Alert [ ] > ( [ ] ) ;
46+ alertsSubject : BehaviorSubject < DxChatTypes . Alert [ ] > = new BehaviorSubject < DxChatTypes . Alert [ ] > ( [ ] ) ;
4747
4848 constructor ( ) {
4949 this . chatService = new OpenAI ( this . OpenAIConfig ) ;
@@ -52,11 +52,11 @@ export class AppService {
5252 this . alertsSubject . next ( [ ] ) ;
5353 }
5454
55- get typingUsers$ ( ) : Observable < User [ ] > {
55+ get typingUsers$ ( ) : Observable < DxChatTypes . User [ ] > {
5656 return this . typingUsersSubject . asObservable ( ) ;
5757 }
5858
59- get alerts$ ( ) : Observable < Alert [ ] > {
59+ get alerts$ ( ) : Observable < DxChatTypes . Alert [ ] > {
6060 return this . alertsSubject . asObservable ( ) ;
6161 }
6262
@@ -70,14 +70,15 @@ export class AppService {
7070 } ,
7171 } ;
7272 }
73- toggleDisabledState ( disabled : boolean , event ?: Event ) {
74- let element = document . querySelector ( `.dx-chat-messagebox-textarea` ) ;
75- let textAreaInstance = element ? TextArea . getInstance ( element ) as TextArea : null ;
76-
77- textAreaInstance ?. option ( { disabled } ) ;
78-
79- if ( ! disabled ) {
80- textAreaInstance ?. focus ( ) ;
73+ toggleDisabledState ( disabled : boolean , event ?: { target ?: EventTarget } | undefined ) {
74+ const element = event ?. target as HTMLElement ;
75+
76+ if ( element ) {
77+ if ( disabled ) {
78+ element . blur ( ) ;
79+ } else {
80+ element . focus ( ) ;
81+ }
8182 }
8283 }
8384 initDataSource ( ) {
@@ -122,8 +123,8 @@ export class AppService {
122123 return data . choices [ 0 ] . message ?. content ;
123124 }
124125
125- async processMessageSending ( ) {
126- this . toggleDisabledState ( true ) ;
126+ async processMessageSending ( e : DxChatTypes . MessageEnteredEvent ) {
127+ this . toggleDisabledState ( true , e . event ) ;
127128
128129 this . typingUsersSubject . next ( [ this . assistant ] ) ;
129130 try {
@@ -137,7 +138,7 @@ export class AppService {
137138 this . typingUsersSubject . next ( [ ] ) ;
138139 this . alertLimitReached ( ) ;
139140 } finally {
140- this . toggleDisabledState ( false ) ;
141+ this . toggleDisabledState ( false , e . event ) ;
141142 }
142143 }
143144
@@ -179,7 +180,7 @@ export class AppService {
179180 } , this . ALERT_TIMEOUT ) ;
180181 }
181182
182- setAlerts ( alerts : Alert [ ] ) {
183+ setAlerts ( alerts : DxChatTypes . Alert [ ] ) {
183184 this . alerts = alerts ;
184185 this . alertsSubject . next ( alerts ) ;
185186 }
@@ -214,12 +215,13 @@ export class AppService {
214215 return result ;
215216 }
216217
217- async onMessageEntered ( { message, event } : MessageEnteredEvent ) {
218+ async onMessageEntered ( event : DxChatTypes . MessageEnteredEvent ) {
219+ let { message } = event ;
218220 this . dataSource
219221 ?. store ( )
220222 . push ( [ { type : "insert" , data : { id : Date . now ( ) , ...message } } ] ) ;
221223
222224 this . messages . push ( { role : "user" , content : message ?. text ?? "" } ) ;
223- this . processMessageSending ( ) ;
225+ await this . processMessageSending ( event ) ;
224226 }
225227}
0 commit comments