Как в чате расспознать конкретное сообщение и произвести по нему изменения vue.js socket.io

Подскажите пожалуйста пару моментов, я сейчас пишу чат на vue.js так же используется socket.io, стоит задача удалять и изменять сообщения. Сообщения хранятся в массиве messages. Отправка сообщения выполняется в методе sendMessage, где формируется пост запрос с параметрами для сохранения в которых есть одно поле uniq_id это уникальная строка, чтобы позже когда придется ответ от бродкастера расспознать в массиве это сообщение.

Пока сообщение отправляется и ожидается ответ я добавляю в массив messages новое сообщение данные которые мне не известны я заполняю null'ом. Получается так, что по нажатию энтера сообщение сразу появляется у пользователя на экране.

Когда пришел ответ от бродкастера я ищу это сообщение в массиве messages перезаписываю его, но вот тут как раз и вся суть проблемы, верстка уже отрендерена можно как-то новый данные массива синхронизировать с версткой, чтобы ко клику в метод editMessage(message) прилетал message актуальный который уже перезаписал в массиве messages?

<div class="chat-room__body">
    <div class="chat-room__content">
        <div class="chat-room__messages" ref="messages">

            <div v-for="message in messages" class="chat-room__message" :class="message.class" >
                <div class="chat-room__message-data">
                    <div class="chat-room__message-author" v-if="message.class === 'ltr'">{{ message.user.name + ' ' + message.user.surname}}</div>
                    <div class="chat-room__message-date">{{ message.date }}</div>
                </div>
                <div class="chat-room__message-text" @click="editMessage(message)">{{ message.message }}</div>
            </div>

        </div>
    </div>
    <div class="chat-room__controls">
        <div class="chat-room__message-content">
            <input id="message-content" @keyup.enter="sendMessage" v-model="textMessage">
            <img width="30" src="/images/chat/send.svg" alt="send icon" class="chat-room__send">
        </div>
    </div>
</div>



<script>
export default {
    data() {
        return{
            messages: [],
            textMessage: '',
            isSender: false,
            chats: [],
            currentUser: {},
            currentChat: {},
            link: null
        }
    },
    props: ['chat_id', 'current_user', 'current_chat'],
    mounted() {
        this.currentUser = JSON.parse(String(this.current_user))
        this.currentChat = JSON.parse(String(this.current_chat))

        if (this.currentChat.lot_id) {
            this.link = '/lot/' + this.currentChat.id;
        }

        window.Echo.private('chat.' + this.chat_id).listen('PrivateChatEvent', ({data}) => {
            if (data.uniq_id) {
                this.changeMessage(data)
            } else {
                this.messages.push(data);
                setTimeout(() => { this.scrollChatContent() }, 10);
            }
        });    

        this.getUserChats();
        this.getUserChatMessages()

    },
    methods: {
        scrollChatContent(){
            let chatContent = this.$refs.messages;
            chatContent.scrollTop = chatContent.scrollHeight;
        },
        sendMessage(){
            setTimeout(() => { this.scrollChatContent() })
            if (this.textMessage.length === 0) return;
            let uniq_id = this.generateUniqueId();

            axios.post('/panel/messages/send', {
                message: this.textMessage,
                chat_id: this.chat_id,
                uniq_id })
                .catch((error) => {
                    if (error.response.status === 429) {
                        warningMessage({
                            warning: {
                                message: 'Слишком много запросов, пожалуйста, подождите немного'
                            }
                        })
                    } else if (error.response) {
                        warningMessage({
                            warning: {
                                message: error.response.statusText
                            }
                        })
                    }
                })
            this.messages.push({
                uniq_id: uniq_id,
                id: null,
                chat_id: null,
                is_read: 0,
                message: this.textMessage,
                user: null,
                class: 'rtl',
                date: null,
                updated_at: null,
                created_at: null,
            });
            this.textMessage = '';
        },

        editMessage(message){
            console.log(message)
        },
        changeMessage(data){
            for (let i in this.messages) {
                if (this.messages[i].uniq_id && this.messages[i].uniq_id === data.uniq_id) {
                    this.messages[i] = data;
                }
            }

            console.log(this.messages)
        }
    }
}
</script>

Ответы (0 шт):