Skip to content

Commit 9f25402

Browse files
pharret31mpreyskurantovksercs
authored
Chat: add .d.ts for message editing functionality (DevExpress#29674)
Co-authored-by: Mikhail Preyskurantov <[email protected]> Co-authored-by: ksercs <[email protected]>
1 parent 47a0db7 commit 9f25402

File tree

10 files changed

+468
-34
lines changed

10 files changed

+468
-34
lines changed

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

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323

2424

2525
import DataSource from 'devextreme/data/data_source';
26-
import { Alert, Message, DisposingEvent, InitializedEvent, MessageEnteredEvent, OptionChangedEvent, TypingEndEvent, TypingStartEvent, User } from 'devextreme/ui/chat';
26+
import { Alert, Message, DisposingEvent, InitializedEvent, MessageDeletedEvent, MessageDeletingEvent, MessageEditCanceledEvent, MessageEditingStartEvent, MessageEnteredEvent, MessageUpdatedEvent, MessageUpdatingEvent, OptionChangedEvent, TypingEndEvent, TypingStartEvent, User } from 'devextreme/ui/chat';
2727
import { DataSourceOptions } from 'devextreme/data/data_source';
2828
import { Store } from 'devextreme/data/store';
2929
import { Format } from 'devextreme/common/core/localization';
@@ -162,6 +162,19 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
162162
}
163163

164164

165+
/**
166+
* [descr:dxChatOptions.editing]
167+
168+
*/
169+
@Input()
170+
get editing(): Record<string, any> {
171+
return this._getOption('editing');
172+
}
173+
set editing(value: Record<string, any>) {
174+
this._setOption('editing', value);
175+
}
176+
177+
165178
/**
166179
* [descr:DOMComponentOptions.elementAttr]
167180
@@ -411,6 +424,38 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
411424
*/
412425
@Output() onInitialized: EventEmitter<InitializedEvent>;
413426

427+
/**
428+
429+
* [descr:dxChatOptions.onMessageDeleted]
430+
431+
432+
*/
433+
@Output() onMessageDeleted: EventEmitter<MessageDeletedEvent>;
434+
435+
/**
436+
437+
* [descr:dxChatOptions.onMessageDeleting]
438+
439+
440+
*/
441+
@Output() onMessageDeleting: EventEmitter<MessageDeletingEvent>;
442+
443+
/**
444+
445+
* [descr:dxChatOptions.onMessageEditCanceled]
446+
447+
448+
*/
449+
@Output() onMessageEditCanceled: EventEmitter<MessageEditCanceledEvent>;
450+
451+
/**
452+
453+
* [descr:dxChatOptions.onMessageEditingStart]
454+
455+
456+
*/
457+
@Output() onMessageEditingStart: EventEmitter<MessageEditingStartEvent>;
458+
414459
/**
415460
416461
* [descr:dxChatOptions.onMessageEntered]
@@ -419,6 +464,22 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
419464
*/
420465
@Output() onMessageEntered: EventEmitter<MessageEnteredEvent>;
421466

467+
/**
468+
469+
* [descr:dxChatOptions.onMessageUpdated]
470+
471+
472+
*/
473+
@Output() onMessageUpdated: EventEmitter<MessageUpdatedEvent>;
474+
475+
/**
476+
477+
* [descr:dxChatOptions.onMessageUpdating]
478+
479+
480+
*/
481+
@Output() onMessageUpdating: EventEmitter<MessageUpdatingEvent>;
482+
422483
/**
423484
424485
* [descr:dxChatOptions.onOptionChanged]
@@ -485,6 +546,13 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
485546
*/
486547
@Output() disabledChange: EventEmitter<boolean>;
487548

549+
/**
550+
551+
* This member supports the internal infrastructure and is not intended to be used directly from your code.
552+
553+
*/
554+
@Output() editingChange: EventEmitter<Record<string, any>>;
555+
488556
/**
489557
490558
* This member supports the internal infrastructure and is not intended to be used directly from your code.
@@ -678,7 +746,13 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
678746
this._createEventEmitters([
679747
{ subscribe: 'disposing', emit: 'onDisposing' },
680748
{ subscribe: 'initialized', emit: 'onInitialized' },
749+
{ subscribe: 'messageDeleted', emit: 'onMessageDeleted' },
750+
{ subscribe: 'messageDeleting', emit: 'onMessageDeleting' },
751+
{ subscribe: 'messageEditCanceled', emit: 'onMessageEditCanceled' },
752+
{ subscribe: 'messageEditingStart', emit: 'onMessageEditingStart' },
681753
{ subscribe: 'messageEntered', emit: 'onMessageEntered' },
754+
{ subscribe: 'messageUpdated', emit: 'onMessageUpdated' },
755+
{ subscribe: 'messageUpdating', emit: 'onMessageUpdating' },
682756
{ subscribe: 'optionChanged', emit: 'onOptionChanged' },
683757
{ subscribe: 'typingEnd', emit: 'onTypingEnd' },
684758
{ subscribe: 'typingStart', emit: 'onTypingStart' },
@@ -688,6 +762,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
688762
{ emit: 'dataSourceChange' },
689763
{ emit: 'dayHeaderFormatChange' },
690764
{ emit: 'disabledChange' },
765+
{ emit: 'editingChange' },
691766
{ emit: 'elementAttrChange' },
692767
{ emit: 'focusStateEnabledChange' },
693768
{ emit: 'heightChange' },

packages/devextreme-angular/src/ui/chat/nested/item-dxi.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,22 @@ export class DxiChatItemComponent extends CollectionNestedOption {
4343
this._setOption('id', value);
4444
}
4545

46+
@Input()
47+
get isDeleted(): boolean {
48+
return this._getOption('isDeleted');
49+
}
50+
set isDeleted(value: boolean) {
51+
this._setOption('isDeleted', value);
52+
}
53+
54+
@Input()
55+
get isEdited(): boolean {
56+
return this._getOption('isEdited');
57+
}
58+
set isEdited(value: boolean) {
59+
this._setOption('isEdited', value);
60+
}
61+
4662
@Input()
4763
get text(): string {
4864
return this._getOption('text');

packages/devextreme-angular/src/ui/nested/base/button-group-item-dxi.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,20 @@ export abstract class DxiButtonGroupItem extends CollectionNestedOption {
161161
this._setOption('id', value);
162162
}
163163

164+
get isDeleted(): boolean {
165+
return this._getOption('isDeleted');
166+
}
167+
set isDeleted(value: boolean) {
168+
this._setOption('isDeleted', value);
169+
}
170+
171+
get isEdited(): boolean {
172+
return this._getOption('isEdited');
173+
}
174+
set isEdited(value: boolean) {
175+
this._setOption('isEdited', value);
176+
}
177+
164178
get timestamp(): Date | number | string {
165179
return this._getOption('timestamp');
166180
}

packages/devextreme-angular/src/ui/nested/item-dxi.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ import { DxiLocationComponent } from './location-dxi';
5858
'hint',
5959
'author',
6060
'id',
61+
'isDeleted',
62+
'isEdited',
6163
'timestamp',
6264
'beginGroup',
6365
'closeMenuOnClick',

packages/devextreme-react/src/chat.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import dxChat, {
88
import { Component as BaseComponent, IHtmlOptions, ComponentRef, NestedComponentMeta } from "./core/component";
99
import NestedOption from "./core/nested-option";
1010

11-
import type { Message, DisposingEvent, InitializedEvent, MessageEnteredEvent, TypingEndEvent, TypingStartEvent, User as ChatUser } from "devextreme/ui/chat";
11+
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

1414
type ReplaceFieldTypes<TSource, TReplacement> = {
@@ -18,7 +18,13 @@ type ReplaceFieldTypes<TSource, TReplacement> = {
1818
type IChatOptionsNarrowedEvents = {
1919
onDisposing?: ((e: DisposingEvent) => void);
2020
onInitialized?: ((e: InitializedEvent) => void);
21+
onMessageDeleted?: ((e: MessageDeletedEvent) => void) | undefined;
22+
onMessageDeleting?: ((e: MessageDeletingEvent) => void) | undefined;
23+
onMessageEditCanceled?: ((e: MessageEditCanceledEvent) => void) | undefined;
24+
onMessageEditingStart?: ((e: MessageEditingStartEvent) => void) | undefined;
2125
onMessageEntered?: ((e: MessageEnteredEvent) => void) | undefined;
26+
onMessageUpdated?: ((e: MessageUpdatedEvent) => void) | undefined;
27+
onMessageUpdating?: ((e: MessageUpdatingEvent) => void) | undefined;
2228
onTypingEnd?: ((e: TypingEndEvent) => void) | undefined;
2329
onTypingStart?: ((e: TypingStartEvent) => void) | undefined;
2430
}
@@ -48,7 +54,7 @@ const Chat = memo(
4854
), [baseRef.current]);
4955

5056
const subscribableOptions = useMemo(() => (["items"]), []);
51-
const independentEvents = useMemo(() => (["onDisposing","onInitialized","onMessageEntered","onTypingEnd","onTypingStart"]), []);
57+
const independentEvents = useMemo(() => (["onDisposing","onInitialized","onMessageDeleted","onMessageDeleting","onMessageEditCanceled","onMessageEditingStart","onMessageEntered","onMessageUpdated","onMessageUpdating","onTypingEnd","onTypingStart"]), []);
5258

5359
const defaults = useMemo(() => ({
5460
defaultItems: "items",
@@ -157,6 +163,8 @@ const DayHeaderFormat = Object.assign<typeof _componentDayHeaderFormat, NestedCo
157163
type IItemProps = React.PropsWithChildren<{
158164
author?: ChatUser;
159165
id?: number | string;
166+
isDeleted?: boolean;
167+
isEdited?: boolean;
160168
text?: string;
161169
timestamp?: Date | number | string;
162170
}>

packages/devextreme-vue/src/chat.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ import {
88
Message,
99
DisposingEvent,
1010
InitializedEvent,
11+
MessageDeletedEvent,
12+
MessageDeletingEvent,
13+
MessageEditCanceledEvent,
14+
MessageEditingStartEvent,
1115
MessageEnteredEvent,
16+
MessageUpdatedEvent,
17+
MessageUpdatingEvent,
1218
OptionChangedEvent,
1319
TypingEndEvent,
1420
TypingStartEvent,
@@ -35,6 +41,7 @@ type AccessibleOptions = Pick<Properties,
3541
"dataSource" |
3642
"dayHeaderFormat" |
3743
"disabled" |
44+
"editing" |
3845
"elementAttr" |
3946
"focusStateEnabled" |
4047
"height" |
@@ -45,7 +52,13 @@ type AccessibleOptions = Pick<Properties,
4552
"messageTimestampFormat" |
4653
"onDisposing" |
4754
"onInitialized" |
55+
"onMessageDeleted" |
56+
"onMessageDeleting" |
57+
"onMessageEditCanceled" |
58+
"onMessageEditingStart" |
4859
"onMessageEntered" |
60+
"onMessageUpdated" |
61+
"onMessageUpdating" |
4962
"onOptionChanged" |
5063
"onTypingEnd" |
5164
"onTypingStart" |
@@ -73,6 +86,7 @@ const componentConfig = {
7386
dataSource: [Array, Object, String] as PropType<Array<Message> | DataSource | DataSourceOptions | null | Store | string | Record<string, any>>,
7487
dayHeaderFormat: [Object, String, Function] as PropType<Format | CommonFormat | (((value: number | Date) => string)) | Record<string, any> | string>,
7588
disabled: Boolean,
89+
editing: Object as PropType<Record<string, any>>,
7690
elementAttr: Object as PropType<Record<string, any>>,
7791
focusStateEnabled: Boolean,
7892
height: [Function, Number, String] as PropType<((() => number | string)) | number | string>,
@@ -83,7 +97,13 @@ const componentConfig = {
8397
messageTimestampFormat: [Object, String, Function] as PropType<Format | CommonFormat | (((value: number | Date) => string)) | Record<string, any> | string>,
8498
onDisposing: Function as PropType<((e: DisposingEvent) => void)>,
8599
onInitialized: Function as PropType<((e: InitializedEvent) => void)>,
100+
onMessageDeleted: Function as PropType<((e: MessageDeletedEvent) => void)>,
101+
onMessageDeleting: Function as PropType<((e: MessageDeletingEvent) => void)>,
102+
onMessageEditCanceled: Function as PropType<((e: MessageEditCanceledEvent) => void)>,
103+
onMessageEditingStart: Function as PropType<((e: MessageEditingStartEvent) => void)>,
86104
onMessageEntered: Function as PropType<((e: MessageEnteredEvent) => void)>,
105+
onMessageUpdated: Function as PropType<((e: MessageUpdatedEvent) => void)>,
106+
onMessageUpdating: Function as PropType<((e: MessageUpdatingEvent) => void)>,
87107
onOptionChanged: Function as PropType<((e: OptionChangedEvent) => void)>,
88108
onTypingEnd: Function as PropType<((e: TypingEndEvent) => void)>,
89109
onTypingStart: Function as PropType<((e: TypingStartEvent) => void)>,
@@ -107,6 +127,7 @@ const componentConfig = {
107127
"update:dataSource": null,
108128
"update:dayHeaderFormat": null,
109129
"update:disabled": null,
130+
"update:editing": null,
110131
"update:elementAttr": null,
111132
"update:focusStateEnabled": null,
112133
"update:height": null,
@@ -117,7 +138,13 @@ const componentConfig = {
117138
"update:messageTimestampFormat": null,
118139
"update:onDisposing": null,
119140
"update:onInitialized": null,
141+
"update:onMessageDeleted": null,
142+
"update:onMessageDeleting": null,
143+
"update:onMessageEditCanceled": null,
144+
"update:onMessageEditingStart": null,
120145
"update:onMessageEntered": null,
146+
"update:onMessageUpdated": null,
147+
"update:onMessageUpdating": null,
121148
"update:onOptionChanged": null,
122149
"update:onTypingEnd": null,
123150
"update:onTypingStart": null,
@@ -232,12 +259,16 @@ const DxItemConfig = {
232259
"update:hoveredElement": null,
233260
"update:author": null,
234261
"update:id": null,
262+
"update:isDeleted": null,
263+
"update:isEdited": null,
235264
"update:text": null,
236265
"update:timestamp": null,
237266
},
238267
props: {
239268
author: Object as PropType<User | Record<string, any>>,
240269
id: [Number, String],
270+
isDeleted: Boolean,
271+
isEdited: Boolean,
241272
text: String,
242273
timestamp: [Date, Number, String]
243274
}

0 commit comments

Comments
 (0)