diff --git a/client/lib/userData.ts b/client/lib/userData.ts index 2596af5b6519f..56098e682cd8f 100644 --- a/client/lib/userData.ts +++ b/client/lib/userData.ts @@ -4,7 +4,7 @@ import { Meteor } from 'meteor/meteor'; import { APIClient } from '../../app/utils/client'; import { Users } from '../../app/models/client'; import { Notifications } from '../../app/notifications/client'; -import type { IUser } from '../../definition/IUser'; +import type { IUser, IUserDataEvent } from '../../definition/IUser'; export const isSyncReady = new ReactiveVar(false); @@ -27,29 +27,21 @@ const updateUser = (userData: IUser & { _updatedAt: Date }): void => { Meteor.users.update({ _id: user._id }, { $set: userData }); }; -type UserDataNotification = { - id: unknown; -} -& ( - ({ type: 'inserted' } & Meteor.User) - | ({ type: 'updated' } & Partial) - | ({ type: 'removed' }) -) - export const synchronizeUserData = async (uid: Meteor.User['_id']): Promise => { if (!uid) { return; } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - await Notifications.onUser('userData', ({ type, id, ...data }: UserDataNotification) => { - switch (type) { + await Notifications.onUser('userData', (data: IUserDataEvent) => { + switch (data.type) { case 'inserted': - Meteor.users.insert(data); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { type, id, ...user } = data; + Meteor.users.insert(user); break; case 'updated': - Meteor.users.upsert({ _id: uid }, { $set: data }); + Meteor.users.upsert({ _id: uid }, { $set: data.diff }); break; case 'removed': diff --git a/definition/IUser.ts b/definition/IUser.ts index cb55aa40b9ec5..fb6499d1c6267 100644 --- a/definition/IUser.ts +++ b/definition/IUser.ts @@ -114,3 +114,19 @@ export interface IUser { }; settings?: IUserSettings; } + +export type IUserDataEvent = { + id: unknown; +} +& ( + ({ + type: 'inserted'; + } & IUser) + | ({ + type: 'removed'; + }) + | ({ + type: 'updated'; + diff: Partial; + }) +)