Толкач Laravel Транслирует Уведомление О Выходе Из комнаты

#laravel #pusher

Вопрос:

Я собираюсь опубликовать все свои методы в своем приложении, просто чтобы мне было понятно, что я читаю. Вот в чем цель. Когда пользователь входит в комнату, добавляется сообщение «ПОЛЬЗОВАТЕЛЬ ВОШЕЛ В КОМНАТУ» — это работает нормально. Теперь я хочу, чтобы, когда пользователь ПОКИДАЕТ комнату, я хотел, чтобы он сказал «ПОЛЬЗОВАТЕЛЬ ПОКИНУЛ КОМНАТУ» — уведомление работает, но оно показывает неправильное имя пользователя (оно показывает имя пользователя, который ВИДИТ сообщение.

Чего мне не хватает или чего я не понимаю

     methods: {
        connect() {
            if (this.currentRoom?.id) {
                let vm = this;
                this.getMessages();
                Echo.join("chat."   this.currentRoom.id)
                    .here(users => {
                        this.sendUserActivityNotification(this.$page.props.user, true)
                        this.users = users
                        this.usersCount = users.length
                    })
                    .joining(user => {
                        this.users.push(user)
                        this.usersCount = this.usersCount 1
                    })
                    .leaving(user => { 
                        this.sendUserActivityNotification(this.$page.props.user, false)
                        this.users = this.users.filter(({id}) => (id !== user.id))
                        this.usersCount = this.usersCount-1
                    })
                    .listen('NewChatMessage', (e) => {
                        vm.getMessages();
                    });
            }
        },
        setRoom(room) {
            this.currentRoom = room;
        },
        getMessages() {
            axios.get('/chat/room/'   this.currentRoom.id   '/messages')
                .then(response => {
                    this.messages = response.data;
                })
                .catch(error => {
                    console.log(error);
                })
        },
        sendUserActivityNotification(user, joining) {
            const message = `${user.name} has ${joining === true ? 'entered' : 'left'} the room.`
            return axios.post(`/chat/room/${this.currentRoom.id}/notifications`, {message}).then(() => this.getMessages())
            .catch(console.error)
        },
        leaveRoom({id}) {
            this.$store.dispatch(RoomTypes.LEAVE_ROOM, id)
        }
    },
 

Ответ №1:

Я не использовал Laravel Echo, но после прочтения вашего кода я думаю, что при leaving вызове метода вы передаете текущего пользователя вместо того, что вы получаете от события при вызове sendUserActivityNotification метода.

Ваша реализация выглядит так:

     ...
    .leaving(user => { 
        this.sendUserActivityNotification(this.$page.props.user, false)
        this.users = this.users.filter(({id}) => (id !== user.id))
        this.usersCount = this.usersCount-1
    })
    ....
 

Вы переходите this.$page.props.user к this.sendUserActivityNotification методу вместо передачи user .

Вы должны изменить этот вызов на this.sendUserActivityNotification(user, false)