RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/room/providers/hooks/useUsersNameChanged.ts

Summary

Maintainability
A
2 hrs
Test Coverage
import { useStream } from '@rocket.chat/ui-contexts';
import { useEffect } from 'react';

import { Messages, Subscriptions } from '../../../../../app/models/client';

export const useUsersNameChanged = () => {
    const notify = useStream('notify-logged');
    useEffect(() => {
        return notify('Users:NameChanged', ({ _id, name, username }) => {
            Messages.update(
                {
                    'u._id': _id,
                },
                {
                    $set: {
                        'u.username': username,
                        'u.name': name,
                    },
                },
                {
                    multi: true,
                },
            );

            Messages.update(
                {
                    'editedBy._id': _id,
                },
                {
                    $set: {
                        'editedBy.username': username,
                    },
                },
                {
                    multi: true,
                },
            );

            Messages.update(
                {
                    mentions: {
                        $elemMatch: { _id },
                    },
                },
                {
                    $set: {
                        'mentions.$.username': username,
                        'mentions.$.name': name,
                    },
                },
                {
                    multi: true,
                },
            );

            Subscriptions.update(
                {
                    name: username,
                    t: 'd',
                },
                {
                    $set: {
                        fname: name,
                    },
                },
            );
        });
    }, [notify]);
};