forked from Ivasoft/mattermost-mobile
* Channel Intro * Move avatar margins to post component per feedback review * Channel intro redesign * Fix preferences unit test * Change group intro sizes * Add Bot tag to DM Intro if they have it * fix channel isTablet layout on split screen * update snapshot
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {Preferences} from '@constants';
|
|
import DatabaseManager from '@database/manager';
|
|
import NetworkManager from '@init/network_manager';
|
|
import {queryCurrentUserId} from '@queries/servers/system';
|
|
|
|
import {forceLogoutIfNecessary} from './session';
|
|
|
|
export type MyPreferencesRequest = {
|
|
preferences?: PreferenceType[];
|
|
error?: unknown;
|
|
}
|
|
|
|
export const fetchMyPreferences = async (serverUrl: string, fetchOnly = false): Promise<MyPreferencesRequest> => {
|
|
let client;
|
|
try {
|
|
client = NetworkManager.getClient(serverUrl);
|
|
} catch (error) {
|
|
return {error};
|
|
}
|
|
|
|
try {
|
|
const preferences = await client.getMyPreferences();
|
|
|
|
if (!fetchOnly) {
|
|
const operator = DatabaseManager.serverDatabases[serverUrl]?.operator;
|
|
if (operator) {
|
|
await operator.handlePreferences({
|
|
prepareRecordsOnly: false,
|
|
preferences,
|
|
sync: true,
|
|
});
|
|
}
|
|
}
|
|
|
|
return {preferences};
|
|
} catch (error) {
|
|
forceLogoutIfNecessary(serverUrl, error as ClientErrorProps);
|
|
return {error};
|
|
}
|
|
};
|
|
|
|
export const saveFavoriteChannel = async (serverUrl: string, channelId: string, isFavorite: boolean) => {
|
|
const operator = DatabaseManager.serverDatabases[serverUrl]?.operator;
|
|
if (!operator) {
|
|
return {error: `${serverUrl} database not found`};
|
|
}
|
|
|
|
let client;
|
|
try {
|
|
client = NetworkManager.getClient(serverUrl);
|
|
} catch (error) {
|
|
return {error};
|
|
}
|
|
|
|
try {
|
|
// Todo: @shaz I think you'll need to add the category handler here so that the channel is added/removed from the favorites category
|
|
const userId = await queryCurrentUserId(operator.database);
|
|
const favPref: PreferenceType = {
|
|
category: Preferences.CATEGORY_FAVORITE_CHANNEL,
|
|
name: channelId,
|
|
user_id: userId,
|
|
value: String(isFavorite),
|
|
};
|
|
const preferences = [favPref];
|
|
client.savePreferences(userId, preferences);
|
|
await operator.handlePreferences({
|
|
preferences,
|
|
prepareRecordsOnly: false,
|
|
});
|
|
|
|
return {preferences};
|
|
} catch (error) {
|
|
forceLogoutIfNecessary(serverUrl, error as ClientErrorProps);
|
|
return {error};
|
|
}
|
|
};
|