The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/app/utils/server/lib/getUserPreference.ts

32 lines
1.0 KiB

import { Users } from '@rocket.chat/models';
import type { IUser } from '@rocket.chat/core-typings';
import { settings } from '../../../settings/server';
/**
* @summary Get a user preference
* @param {String} userId The user ID
* @param {String} preference The preference name
* @param {unknown?} defaultValue The default value
* @returns {unknown} The preference value
*/
export const getUserPreference = async (user: IUser | string, key: string, defaultValue: any = undefined) => {
let preference;
if (typeof user === 'string') {
const dbUser = await Users.findOneById(user, { projection: { [`settings.preferences.${key}`]: 1 } });
if (dbUser) {
user = dbUser;
}
}
if (typeof user === 'string') {
return defaultValue;
}
if (user?.settings?.preferences?.hasOwnProperty(key)) {
preference = user.settings.preferences[key];
} else if (defaultValue === undefined) {
preference = settings.get(`Accounts_Default_User_Preferences_${key}`);
}
return preference !== undefined ? preference : defaultValue;
};