Skip to content

Commit d348e23

Browse files
author
Ruslan Farkhutdinov
committed
Chat: Add FileUploading types
1 parent 04d7f0b commit d348e23

17 files changed

Lines changed: 1312 additions & 7 deletions

File tree

packages/devextreme-angular/src/core/tokens/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const PROPERTY_TOKEN_series = new InjectionToken<string>('property-token-
1717
export const PROPERTY_TOKEN_strips = new InjectionToken<string>('property-token-strips');
1818
export const PROPERTY_TOKEN_valueAxis = new InjectionToken<string>('property-token-valueAxis');
1919
export const PROPERTY_TOKEN_alerts = new InjectionToken<string>('property-token-alerts');
20+
export const PROPERTY_TOKEN_attachments = new InjectionToken<string>('property-token-attachments');
2021
export const PROPERTY_TOKEN_typingUsers = new InjectionToken<string>('property-token-typingUsers');
2122
export const PROPERTY_TOKEN_ranges = new InjectionToken<string>('property-token-ranges');
2223
export const PROPERTY_TOKEN_groupItems = new InjectionToken<string>('property-token-groupItems');

packages/devextreme-angular/src/ui/chat/index.ts

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ import {
2424

2525
import DataSource from 'devextreme/data/data_source';
2626
import dxChat from 'devextreme/ui/chat';
27-
import { Alert, Message, DisposingEvent, InitializedEvent, MessageDeletedEvent, MessageDeletingEvent, MessageEditCanceledEvent, MessageEditingStartEvent, MessageEnteredEvent, MessageUpdatedEvent, MessageUpdatingEvent, OptionChangedEvent, TypingEndEvent, TypingStartEvent, User } from 'devextreme/ui/chat';
27+
import { Alert, Message, DisposingEvent, DownloadAttachmentEvent, InitializedEvent, MessageDeletedEvent, MessageDeletingEvent, MessageEditCanceledEvent, MessageEditingStartEvent, MessageEnteredEvent, MessageUpdatedEvent, MessageUpdatingEvent, OptionChangedEvent, TypingEndEvent, TypingStartEvent, User } from 'devextreme/ui/chat';
2828
import { DataSourceOptions } from 'devextreme/data/data_source';
2929
import { Store } from 'devextreme/data/store';
3030
import { Format } from 'devextreme/common/core/localization';
31+
import { dxFileUploaderOptions } from 'devextreme/ui/file_uploader';
3132

3233
import DxChat from 'devextreme/ui/chat';
3334

@@ -46,22 +47,27 @@ import {
4647
import { DxiAlertModule } from 'devextreme-angular/ui/nested';
4748
import { DxoDayHeaderFormatModule } from 'devextreme-angular/ui/nested';
4849
import { DxoEditingModule } from 'devextreme-angular/ui/nested';
50+
import { DxoFileUploaderOptionsModule } from 'devextreme-angular/ui/nested';
4951
import { DxiItemModule } from 'devextreme-angular/ui/nested';
52+
import { DxiAttachmentModule } from 'devextreme-angular/ui/nested';
5053
import { DxoAuthorModule } from 'devextreme-angular/ui/nested';
5154
import { DxoMessageTimestampFormatModule } from 'devextreme-angular/ui/nested';
5255
import { DxiTypingUserModule } from 'devextreme-angular/ui/nested';
5356
import { DxoUserModule } from 'devextreme-angular/ui/nested';
5457

5558
import { DxiChatAlertModule } from 'devextreme-angular/ui/chat/nested';
59+
import { DxiChatAttachmentModule } from 'devextreme-angular/ui/chat/nested';
5660
import { DxoChatAuthorModule } from 'devextreme-angular/ui/chat/nested';
5761
import { DxoChatDayHeaderFormatModule } from 'devextreme-angular/ui/chat/nested';
5862
import { DxoChatEditingModule } from 'devextreme-angular/ui/chat/nested';
63+
import { DxoChatFileUploaderOptionsModule } from 'devextreme-angular/ui/chat/nested';
5964
import { DxiChatItemModule } from 'devextreme-angular/ui/chat/nested';
6065
import { DxoChatMessageTimestampFormatModule } from 'devextreme-angular/ui/chat/nested';
6166
import { DxiChatTypingUserModule } from 'devextreme-angular/ui/chat/nested';
6267
import { DxoChatUserModule } from 'devextreme-angular/ui/chat/nested';
6368
import {
6469
PROPERTY_TOKEN_alerts,
70+
PROPERTY_TOKEN_attachments,
6571
PROPERTY_TOKEN_items,
6672
PROPERTY_TOKEN_typingUsers,
6773
} from 'devextreme-angular/core/tokens';
@@ -91,6 +97,11 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
9197
this.setChildren('alerts', value);
9298
}
9399

100+
@ContentChildren(PROPERTY_TOKEN_attachments)
101+
set _attachmentsContentChildren(value: QueryList<CollectionNestedOption>) {
102+
this.setChildren('attachments', value);
103+
}
104+
94105
@ContentChildren(PROPERTY_TOKEN_items)
95106
set _itemsContentChildren(value: QueryList<CollectionNestedOption>) {
96107
this.setChildren('items', value);
@@ -220,6 +231,19 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
220231
}
221232

222233

234+
/**
235+
* [descr:dxChatOptions.fileUploaderOptions]
236+
237+
*/
238+
@Input()
239+
get fileUploaderOptions(): dxFileUploaderOptions {
240+
return this._getOption('fileUploaderOptions');
241+
}
242+
set fileUploaderOptions(value: dxFileUploaderOptions) {
243+
this._setOption('fileUploaderOptions', value);
244+
}
245+
246+
223247
/**
224248
* [descr:dxChatOptions.focusStateEnabled]
225249
@@ -337,6 +361,19 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
337361
}
338362

339363

364+
/**
365+
* [descr:dxChatOptions.showAttachButton]
366+
367+
*/
368+
@Input()
369+
get showAttachButton(): boolean {
370+
return this._getOption('showAttachButton');
371+
}
372+
set showAttachButton(value: boolean) {
373+
this._setOption('showAttachButton', value);
374+
}
375+
376+
340377
/**
341378
* [descr:dxChatOptions.showAvatar]
342379
@@ -448,6 +485,14 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
448485
*/
449486
@Output() onDisposing: EventEmitter<DisposingEvent>;
450487

488+
/**
489+
490+
* [descr:dxChatOptions.onDownloadAttachment]
491+
492+
493+
*/
494+
@Output() onDownloadAttachment: EventEmitter<DownloadAttachmentEvent>;
495+
451496
/**
452497
453498
* [descr:dxChatOptions.onInitialized]
@@ -599,6 +644,13 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
599644
*/
600645
@Output() emptyViewTemplateChange: EventEmitter<any>;
601646

647+
/**
648+
649+
* This member supports the internal infrastructure and is not intended to be used directly from your code.
650+
651+
*/
652+
@Output() fileUploaderOptionsChange: EventEmitter<dxFileUploaderOptions>;
653+
602654
/**
603655
604656
* This member supports the internal infrastructure and is not intended to be used directly from your code.
@@ -662,6 +714,13 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
662714
*/
663715
@Output() rtlEnabledChange: EventEmitter<boolean>;
664716

717+
/**
718+
719+
* This member supports the internal infrastructure and is not intended to be used directly from your code.
720+
721+
*/
722+
@Output() showAttachButtonChange: EventEmitter<boolean>;
723+
665724
/**
666725
667726
* This member supports the internal infrastructure and is not intended to be used directly from your code.
@@ -732,6 +791,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
732791

733792
this._createEventEmitters([
734793
{ subscribe: 'disposing', emit: 'onDisposing' },
794+
{ subscribe: 'downloadAttachment', emit: 'onDownloadAttachment' },
735795
{ subscribe: 'initialized', emit: 'onInitialized' },
736796
{ subscribe: 'messageDeleted', emit: 'onMessageDeleted' },
737797
{ subscribe: 'messageDeleting', emit: 'onMessageDeleting' },
@@ -752,6 +812,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
752812
{ emit: 'editingChange' },
753813
{ emit: 'elementAttrChange' },
754814
{ emit: 'emptyViewTemplateChange' },
815+
{ emit: 'fileUploaderOptionsChange' },
755816
{ emit: 'focusStateEnabledChange' },
756817
{ emit: 'heightChange' },
757818
{ emit: 'hintChange' },
@@ -761,6 +822,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
761822
{ emit: 'messageTimestampFormatChange' },
762823
{ emit: 'reloadOnChangeChange' },
763824
{ emit: 'rtlEnabledChange' },
825+
{ emit: 'showAttachButtonChange' },
764826
{ emit: 'showAvatarChange' },
765827
{ emit: 'showDayHeadersChange' },
766828
{ emit: 'showMessageTimestampChange' },
@@ -825,15 +887,19 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
825887
DxiAlertModule,
826888
DxoDayHeaderFormatModule,
827889
DxoEditingModule,
890+
DxoFileUploaderOptionsModule,
828891
DxiItemModule,
892+
DxiAttachmentModule,
829893
DxoAuthorModule,
830894
DxoMessageTimestampFormatModule,
831895
DxiTypingUserModule,
832896
DxoUserModule,
833897
DxiChatAlertModule,
898+
DxiChatAttachmentModule,
834899
DxoChatAuthorModule,
835900
DxoChatDayHeaderFormatModule,
836901
DxoChatEditingModule,
902+
DxoChatFileUploaderOptionsModule,
837903
DxiChatItemModule,
838904
DxoChatMessageTimestampFormatModule,
839905
DxiChatTypingUserModule,
@@ -846,15 +912,19 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
846912
DxiAlertModule,
847913
DxoDayHeaderFormatModule,
848914
DxoEditingModule,
915+
DxoFileUploaderOptionsModule,
849916
DxiItemModule,
917+
DxiAttachmentModule,
850918
DxoAuthorModule,
851919
DxoMessageTimestampFormatModule,
852920
DxiTypingUserModule,
853921
DxoUserModule,
854922
DxiChatAlertModule,
923+
DxiChatAttachmentModule,
855924
DxoChatAuthorModule,
856925
DxoChatDayHeaderFormatModule,
857926
DxoChatEditingModule,
927+
DxoChatFileUploaderOptionsModule,
858928
DxiChatItemModule,
859929
DxoChatMessageTimestampFormatModule,
860930
DxiChatTypingUserModule,
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/* tslint:disable:max-line-length */
2+
3+
4+
import {
5+
Component,
6+
NgModule,
7+
Host,
8+
SkipSelf,
9+
Input
10+
} from '@angular/core';
11+
12+
13+
14+
15+
16+
import {
17+
DxIntegrationModule,
18+
NestedOptionHost,
19+
} from 'devextreme-angular/core';
20+
import { CollectionNestedOption } from 'devextreme-angular/core';
21+
22+
import { PROPERTY_TOKEN_attachments } from 'devextreme-angular/core/tokens';
23+
24+
@Component({
25+
selector: 'dxi-chat-attachment',
26+
standalone: true,
27+
template: '',
28+
styles: [''],
29+
imports: [ DxIntegrationModule ],
30+
providers: [
31+
NestedOptionHost,
32+
{
33+
provide: PROPERTY_TOKEN_attachments,
34+
useExisting: DxiChatAttachmentComponent,
35+
}
36+
]
37+
})
38+
export class DxiChatAttachmentComponent extends CollectionNestedOption {
39+
@Input()
40+
get name(): string {
41+
return this._getOption('name');
42+
}
43+
set name(value: string) {
44+
this._setOption('name', value);
45+
}
46+
47+
@Input()
48+
get size(): number {
49+
return this._getOption('size');
50+
}
51+
set size(value: number) {
52+
this._setOption('size', value);
53+
}
54+
55+
56+
protected get _optionPath() {
57+
return 'attachments';
58+
}
59+
60+
61+
constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,
62+
@Host() optionHost: NestedOptionHost) {
63+
super();
64+
parentOptionHost.setNestedOption(this);
65+
optionHost.setHost(this, this._fullOptionPath.bind(this));
66+
}
67+
68+
69+
70+
ngOnDestroy() {
71+
this._deleteRemovedOptions(this._fullOptionPath());
72+
}
73+
74+
}
75+
76+
@NgModule({
77+
imports: [
78+
DxiChatAttachmentComponent
79+
],
80+
exports: [
81+
DxiChatAttachmentComponent
82+
],
83+
})
84+
export class DxiChatAttachmentModule { }

0 commit comments

Comments
 (0)