All docs
V25.1
25.1
24.2
The page you are viewing does not exist in version 24.2.
24.1
The page you are viewing does not exist in version 24.1.
23.2
The page you are viewing does not exist in version 23.2.
23.1
The page you are viewing does not exist in version 23.1.
22.2
The page you are viewing does not exist in version 22.2.
22.1
The page you are viewing does not exist in version 22.1.
21.2
The page you are viewing does not exist in version 21.2.
21.1
The page you are viewing does not exist in version 21.1.
20.2
The page you are viewing does not exist in version 20.2.
20.1
The page you are viewing does not exist in version 20.1.
19.2
The page you are viewing does not exist in version 19.2.
19.1
The page you are viewing does not exist in version 19.1.
18.2
The page you are viewing does not exist in version 18.2.
18.1
The page you are viewing does not exist in version 18.1.
17.2
The page you are viewing does not exist in version 17.2.

JavaScript/jQuery Chat - editing

Configures editing.

Type:

Object

View Demo

NOTE
  • Before allowing a user to update and delete messages, make sure that your data source supports these actions.
  • Set the Store's key property to "id" to ensure editing functions correctly.
jQuery
index.js
$('#chat').dxChat({
    dataSource: initialMessages,
    editing: {
        allowUpdating: true,
        allowDeleting: true
    },
    onMessageEntered({ message }) {
        e.component.renderMessage(message);
    },
    onMessageUpdated(e) {
        const message = e.message;
        message.text = e.text;
        message.isEdited = true;
        initialMessages[e.message.id] = message;
        e.component.repaint();
    },
    onMessageDeleted(e) {
        const message = e.message;
        message.isDeleted = true;
        initialMessages[e.message.id] = message;
        e.component.repaint();
    },
});
Angular
app.component.html
app.component.ts
<dx-chat 
    [dataSource]="messages"
    (onMessageEntered)="onMessageEntered($event)"
    (onMessageUpdated)="onMessageUpdated($event)"
    (onMessageDeleted)="onMessageDeleted($event)"
>
    <dxo-chat-editing 
        [allowUpdating]="true" 
        [allowDeleting]="true"
    ></dxo-chat-editing>
</dx-chat>
import { DxChatTypes } from "devextreme-angular/ui/chat";
// ...
export class AppComponent {
    messages: DxChatTypes.Message[] = [];
    onMessageEntered({ message }) {
        this.messages = [...this.messages, message];
        this.sendToBackend(message);
    }
    sendToBackend(message: DxChatTypes.Message) {
        console.log(`Message sent to backend: '${message.text}'`);
        // Backend logic goes here
    }
    onMessageUpdated(e: DxChatTypes.MessageUpdatedEvent) {
        const message = e.message;
        message.text = e.text;
        message.isEdited = true;
        initialMessages[e.message.id] = message;
        e.component.repaint();
    }
    onMessageDeleted(e: DxChatTypes.MessageDeletedEvent) {
        const message = e.message;
        message.isDeleted = true;
        initialMessages[e.message.id] = message;
        e.component.repaint();
    }
}
Vue
App.vue
<template>
<DxChat
    :data-source="messages"
    @message-entered="onMessageEntered"
    @message-updated="onMessageUpdated"
    @message-deleted="onMessageDeleted"
>
    <DxEditing :allow-updating="true" :allow-deleting="true" />
</DxChat>
</template>

<script setup lang="ts">
import DxChat, { DxChatTypes } from "devextreme-vue/chat";
const onMessageEntered = ({ message }) => {
    messages.value = [...messages.value, message];
    sendToBackend(message);
};
const sendToBackend = (message) => {
    console.log(`Message sent to backend: '${message.text}'`);
    // Backend logic goes here
};
const onMessageUpdated = (e: DxChatTypes.MessageUpdatedEvent) => {
    const message = e.message;
    message.text = e.text;
    message.isEdited = true;
    initialMessages[e.message.id] = message;
    e.component.repaint();
};
const onMessageDeleted = (e: DxChatTypes.MessageDeletedEvent) => {
    const message = e.message;
    message.isDeleted = true;
    initialMessages[e.message.id] = message;
    e.component.repaint();
};
</script>
React
App.js
import React, { useCallback, useState } from "react";
import Chat, { ChatTypes } from "devextreme-react/chat";

const onMessageUpdated = (e: ChatTypes.MessageUpdatedEvent) => {
    const message = e.message;
    message.text = e.text;
    message.isEdited = true;
    initialMessages[e.message.id] = message;
    e.component.repaint();
};
const onMessageDeleted = (e: ChatTypes.MessageDeletedEvent) => {
    const message = e.message;
    message.isDeleted = true;
    initialMessages[e.message.id] = message;
    e.component.repaint();
};

const App = () => {
    const [messages, setMessages] = useState();
    const onMessageEntered = useCallback(({ message }) => {
        setMessages((prevMessages) => [...prevMessages, message]);
        sendToBackend(message);
    }, []);
    const sendToBackend = (message) => {
        console.log(`Message sent to backend: '${message.text}'`);
        // Backend logic goes here
    }

    return (
        <Chat
            onMessageEntered={onMessageEntered}
            onMessageUpdated={onMessageUpdated}
            onMessageDeleted={onMessageDeleted}
            dataSource={messages}
        >
            <Editing allowUpdating={true} allowDeleting={true} />
        </Chat>
    );
};

allowDeleting

Specifies whether a user can delete messages. Called for each message when defined as a function.

Type:

Boolean

|

Function

Function parameters:
options:

Object

Information about the current message.

Object structure:
Name Type Description
component dxChat

Chat's instance.

message

Message

Message data.

Return Value:

Boolean

true if the message can be deleted; otherwise false.

Default Value: false

If false, no messages can be deleted. If true, only the current user can delete their messages.

allowUpdating

Specifies whether a user can update messages. Called for each message when defined as a function.

Type:

Boolean

|

Function

Function parameters:
options:

Object

Information about the current message.

Object structure:
Name Type Description
component dxChat

Chat's instance.

message

Message

Message data.

Return Value:

Boolean

true if the message can be updated; otherwise false.

Default Value: false

If false, no messages can be edited. If true, only the current user can edit their messages.