Skip to content

Commit 7664f30

Browse files
Chat Editing configuration components for frameworks (DevExpress#29828)
1 parent 6411549 commit 7664f30

File tree

10 files changed

+184
-54
lines changed

10 files changed

+184
-54
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323

2424

2525
import DataSource from 'devextreme/data/data_source';
26+
import dxChat from 'devextreme/ui/chat';
2627
import { Alert, Message, DisposingEvent, InitializedEvent, MessageDeletedEvent, MessageDeletingEvent, MessageEditCanceledEvent, MessageEditingStartEvent, MessageEnteredEvent, MessageUpdatedEvent, MessageUpdatingEvent, OptionChangedEvent, TypingEndEvent, TypingStartEvent, User } from 'devextreme/ui/chat';
2728
import { DataSourceOptions } from 'devextreme/data/data_source';
2829
import { Store } from 'devextreme/data/store';
@@ -43,6 +44,7 @@ import {
4344

4445
import { DxiAlertModule } from 'devextreme-angular/ui/nested';
4546
import { DxoDayHeaderFormatModule } from 'devextreme-angular/ui/nested';
47+
import { DxoEditingModule } from 'devextreme-angular/ui/nested';
4648
import { DxiItemModule } from 'devextreme-angular/ui/nested';
4749
import { DxoAuthorModule } from 'devextreme-angular/ui/nested';
4850
import { DxoMessageTimestampFormatModule } from 'devextreme-angular/ui/nested';
@@ -52,6 +54,7 @@ import { DxoUserModule } from 'devextreme-angular/ui/nested';
5254
import { DxiChatAlertModule } from 'devextreme-angular/ui/chat/nested';
5355
import { DxoChatAuthorModule } from 'devextreme-angular/ui/chat/nested';
5456
import { DxoChatDayHeaderFormatModule } from 'devextreme-angular/ui/chat/nested';
57+
import { DxoChatEditingModule } from 'devextreme-angular/ui/chat/nested';
5558
import { DxiChatItemModule } from 'devextreme-angular/ui/chat/nested';
5659
import { DxoChatMessageTimestampFormatModule } from 'devextreme-angular/ui/chat/nested';
5760
import { DxiChatTypingUserModule } from 'devextreme-angular/ui/chat/nested';
@@ -169,10 +172,10 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
169172
170173
*/
171174
@Input()
172-
get editing(): Record<string, any> {
175+
get editing(): { allowDeleting?: boolean | ((options: { component: dxChat, message: Message }) => boolean), allowUpdating?: boolean | ((options: { component: dxChat, message: Message }) => boolean) } {
173176
return this._getOption('editing');
174177
}
175-
set editing(value: Record<string, any>) {
178+
set editing(value: { allowDeleting?: boolean | ((options: { component: dxChat, message: Message }) => boolean), allowUpdating?: boolean | ((options: { component: dxChat, message: Message }) => boolean) }) {
176179
this._setOption('editing', value);
177180
}
178181

@@ -553,7 +556,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
553556
* This member supports the internal infrastructure and is not intended to be used directly from your code.
554557
555558
*/
556-
@Output() editingChange: EventEmitter<Record<string, any>>;
559+
@Output() editingChange: EventEmitter<{ allowDeleting?: boolean | ((options: { component: dxChat, message: Message }) => boolean), allowUpdating?: boolean | ((options: { component: dxChat, message: Message }) => boolean) }>;
557560

558561
/**
559562
@@ -838,6 +841,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
838841
DxChatComponent,
839842
DxiAlertModule,
840843
DxoDayHeaderFormatModule,
844+
DxoEditingModule,
841845
DxiItemModule,
842846
DxoAuthorModule,
843847
DxoMessageTimestampFormatModule,
@@ -846,6 +850,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
846850
DxiChatAlertModule,
847851
DxoChatAuthorModule,
848852
DxoChatDayHeaderFormatModule,
853+
DxoChatEditingModule,
849854
DxiChatItemModule,
850855
DxoChatMessageTimestampFormatModule,
851856
DxiChatTypingUserModule,
@@ -857,6 +862,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
857862
DxChatComponent,
858863
DxiAlertModule,
859864
DxoDayHeaderFormatModule,
865+
DxoEditingModule,
860866
DxiItemModule,
861867
DxoAuthorModule,
862868
DxoMessageTimestampFormatModule,
@@ -865,6 +871,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
865871
DxiChatAlertModule,
866872
DxoChatAuthorModule,
867873
DxoChatDayHeaderFormatModule,
874+
DxoChatEditingModule,
868875
DxiChatItemModule,
869876
DxoChatMessageTimestampFormatModule,
870877
DxiChatTypingUserModule,
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/* tslint:disable:max-line-length */
2+
3+
4+
import {
5+
Component,
6+
OnInit,
7+
OnDestroy,
8+
NgModule,
9+
Host,
10+
SkipSelf,
11+
Input
12+
} from '@angular/core';
13+
14+
15+
16+
17+
import dxChat from 'devextreme/ui/chat';
18+
import { Message } from 'devextreme/ui/chat';
19+
20+
import {
21+
DxIntegrationModule,
22+
NestedOptionHost,
23+
} from 'devextreme-angular/core';
24+
import { NestedOption } from 'devextreme-angular/core';
25+
26+
27+
@Component({
28+
selector: 'dxo-chat-editing',
29+
standalone: true,
30+
template: '',
31+
styles: [''],
32+
imports: [ DxIntegrationModule ],
33+
providers: [NestedOptionHost]
34+
})
35+
export class DxoChatEditingComponent extends NestedOption implements OnDestroy, OnInit {
36+
@Input()
37+
get allowDeleting(): boolean | ((options: { component: dxChat, message: Message }) => boolean) {
38+
return this._getOption('allowDeleting');
39+
}
40+
set allowDeleting(value: boolean | ((options: { component: dxChat, message: Message }) => boolean)) {
41+
this._setOption('allowDeleting', value);
42+
}
43+
44+
@Input()
45+
get allowUpdating(): boolean | ((options: { component: dxChat, message: Message }) => boolean) {
46+
return this._getOption('allowUpdating');
47+
}
48+
set allowUpdating(value: boolean | ((options: { component: dxChat, message: Message }) => boolean)) {
49+
this._setOption('allowUpdating', value);
50+
}
51+
52+
53+
protected get _optionPath() {
54+
return 'editing';
55+
}
56+
57+
58+
constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,
59+
@Host() optionHost: NestedOptionHost) {
60+
super();
61+
parentOptionHost.setNestedOption(this);
62+
optionHost.setHost(this, this._fullOptionPath.bind(this));
63+
}
64+
65+
66+
ngOnInit() {
67+
this._addRecreatedComponent();
68+
}
69+
70+
ngOnDestroy() {
71+
this._addRemovedOption(this._getOptionPath());
72+
}
73+
74+
75+
}
76+
77+
@NgModule({
78+
imports: [
79+
DxoChatEditingComponent
80+
],
81+
exports: [
82+
DxoChatEditingComponent
83+
],
84+
})
85+
export class DxoChatEditingModule { }

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export * from './alert-dxi';
22
export * from './author';
33
export * from './day-header-format';
4+
export * from './editing';
45
export * from './item-dxi';
56
export * from './message-timestamp-format';
67
export * from './typing-user-dxi';

packages/devextreme-angular/src/ui/nested/editing.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,6 @@ import { DxiChangeComponent } from './change-dxi';
4040
providers: [NestedOptionHost]
4141
})
4242
export class DxoEditingComponent extends NestedOption implements OnDestroy, OnInit {
43-
@Input()
44-
get allowAdding(): boolean | Function {
45-
return this._getOption('allowAdding');
46-
}
47-
set allowAdding(value: boolean | Function) {
48-
this._setOption('allowAdding', value);
49-
}
50-
5143
@Input()
5244
get allowDeleting(): boolean | Function {
5345
return this._getOption('allowDeleting');
@@ -64,6 +56,14 @@ export class DxoEditingComponent extends NestedOption implements OnDestroy, OnIn
6456
this._setOption('allowUpdating', value);
6557
}
6658

59+
@Input()
60+
get allowAdding(): boolean | Function {
61+
return this._getOption('allowAdding');
62+
}
63+
set allowAdding(value: boolean | Function) {
64+
this._setOption('allowAdding', value);
65+
}
66+
6767
@Input()
6868
get changes(): Array<DataChange> {
6969
return this._getOption('changes');

packages/devextreme-react/src/chat.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import NestedOption from "./core/nested-option";
1111
import type { Message, DisposingEvent, InitializedEvent, MessageDeletedEvent, MessageDeletingEvent, MessageEditCanceledEvent, MessageEditingStartEvent, MessageEnteredEvent, MessageUpdatedEvent, MessageUpdatingEvent, TypingEndEvent, TypingStartEvent, User as ChatUser } from "devextreme/ui/chat";
1212
import type { Format } from "devextreme/common";
1313

14+
1415
type ReplaceFieldTypes<TSource, TReplacement> = {
1516
[P in keyof TSource]: P extends keyof TReplacement ? TReplacement[P] : TSource[P];
1617
}
@@ -63,6 +64,7 @@ const Chat = memo(
6364
const expectedChildren = useMemo(() => ({
6465
alert: { optionName: "alerts", isCollectionItem: true },
6566
dayHeaderFormat: { optionName: "dayHeaderFormat", isCollectionItem: false },
67+
editing: { optionName: "editing", isCollectionItem: false },
6668
item: { optionName: "items", isCollectionItem: true },
6769
messageTimestampFormat: { optionName: "messageTimestampFormat", isCollectionItem: false },
6870
typingUser: { optionName: "typingUsers", isCollectionItem: true },
@@ -158,6 +160,25 @@ const DayHeaderFormat = Object.assign<typeof _componentDayHeaderFormat, NestedCo
158160
componentType: "option",
159161
});
160162

163+
// owners:
164+
// Chat
165+
type IEditingProps = React.PropsWithChildren<{
166+
allowDeleting?: boolean | ((options: { component: dxChat, message: Message }) => boolean);
167+
allowUpdating?: boolean | ((options: { component: dxChat, message: Message }) => boolean);
168+
}>
169+
const _componentEditing = (props: IEditingProps) => {
170+
return React.createElement(NestedOption<IEditingProps>, {
171+
...props,
172+
elementDescriptor: {
173+
OptionName: "editing",
174+
},
175+
});
176+
};
177+
178+
const Editing = Object.assign<typeof _componentEditing, NestedComponentMeta>(_componentEditing, {
179+
componentType: "option",
180+
});
181+
161182
// owners:
162183
// Chat
163184
type IItemProps = React.PropsWithChildren<{
@@ -262,6 +283,8 @@ export {
262283
IAuthorProps,
263284
DayHeaderFormat,
264285
IDayHeaderFormatProps,
286+
Editing,
287+
IEditingProps,
265288
Item,
266289
IItemProps,
267290
MessageTimestampFormat,

packages/devextreme-vue/src/chat.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { defineComponent } from "vue";
33
import { prepareComponentConfig } from "./core/index";
44
import Chat, { Properties } from "devextreme/ui/chat";
55
import DataSource from "devextreme/data/data_source";
6+
import dxChat from "devextreme/ui/chat";
67
import {
78
Alert,
89
Message,
@@ -170,6 +171,7 @@ const componentConfig = {
170171
(this as any).$_expectedChildren = {
171172
alert: { isCollectionItem: true, optionName: "alerts" },
172173
dayHeaderFormat: { isCollectionItem: false, optionName: "dayHeaderFormat" },
174+
editing: { isCollectionItem: false, optionName: "editing" },
173175
item: { isCollectionItem: true, optionName: "items" },
174176
messageTimestampFormat: { isCollectionItem: false, optionName: "messageTimestampFormat" },
175177
typingUser: { isCollectionItem: true, optionName: "typingUsers" },
@@ -253,6 +255,25 @@ const DxDayHeaderFormat = defineComponent(DxDayHeaderFormatConfig);
253255

254256
(DxDayHeaderFormat as any).$_optionName = "dayHeaderFormat";
255257

258+
const DxEditingConfig = {
259+
emits: {
260+
"update:isActive": null,
261+
"update:hoveredElement": null,
262+
"update:allowDeleting": null,
263+
"update:allowUpdating": null,
264+
},
265+
props: {
266+
allowDeleting: [Boolean, Function] as PropType<boolean | (((options: { component: dxChat, message: Message }) => boolean))>,
267+
allowUpdating: [Boolean, Function] as PropType<boolean | (((options: { component: dxChat, message: Message }) => boolean))>
268+
}
269+
};
270+
271+
prepareConfigurationComponentConfig(DxEditingConfig);
272+
273+
const DxEditing = defineComponent(DxEditingConfig);
274+
275+
(DxEditing as any).$_optionName = "editing";
276+
256277
const DxItemConfig = {
257278
emits: {
258279
"update:isActive": null,
@@ -364,6 +385,7 @@ export {
364385
DxAlert,
365386
DxAuthor,
366387
DxDayHeaderFormat,
388+
DxEditing,
367389
DxItem,
368390
DxMessageTimestampFormat,
369391
DxTypingUser,

packages/devextreme/js/ui/chat.d.ts

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -238,28 +238,6 @@ export type MessageTemplateData = {
238238
readonly message?: Message;
239239
};
240240

241-
/**
242-
* @docid
243-
* @namespace DevExpress.ui.dxChat
244-
* @public
245-
*/
246-
export type Editing = {
247-
/**
248-
* @docid
249-
* @default false
250-
* @type boolean|function
251-
* @public
252-
*/
253-
allowUpdating?: boolean | ((options: { component?: dxChat; message?: Message }) => boolean);
254-
/**
255-
* @docid
256-
* @default false
257-
* @type boolean|function
258-
* @public
259-
*/
260-
allowDeleting?: boolean | ((options: { component?: dxChat; message?: Message }) => boolean);
261-
};
262-
263241
/**
264242
* @deprecated use Properties instead
265243
* @namespace DevExpress.ui
@@ -299,10 +277,22 @@ export interface dxChatOptions extends WidgetOptions<dxChat> {
299277
items?: Array<Message>;
300278
/**
301279
* @docid
302-
* @type object
303280
* @public
304281
*/
305-
editing?: Editing;
282+
editing?: {
283+
/**
284+
* @docid
285+
* @default false
286+
* @public
287+
*/
288+
allowUpdating?: boolean | ((options: { component?: dxChat; message?: Message }) => boolean);
289+
/**
290+
* @docid
291+
* @default false
292+
* @public
293+
*/
294+
allowDeleting?: boolean | ((options: { component?: dxChat; message?: Message }) => boolean);
295+
};
306296
/**
307297
* @docid
308298
* @type string | Array<Message> | Store | DataSource | DataSourceOptions | null

packages/devextreme/js/ui/chat_types.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export {
1515
Alert,
1616
Message,
1717
MessageTemplateData,
18-
Editing,
1918
dxChatOptions,
2019
Properties,
2120
} from './chat';

0 commit comments

Comments
 (0)