forked from Ivasoft/mattermost-mobile
* Extract common observers to queries * Separate also queries and more agressive refactoring * Use query to avoid throws from findAndObserve * Fix minor error * Address feedback * Address feedback * Address feedback * Fix model types * Address feedback
72 lines
2.3 KiB
TypeScript
72 lines
2.3 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {forceLogoutIfNecessary} from '@actions/remote/session';
|
|
import {Client} from '@client/rest';
|
|
import {Emoji, General} from '@constants';
|
|
import DatabaseManager from '@database/manager';
|
|
import NetworkManager from '@init/network_manager';
|
|
import {queryCustomEmojisByName} from '@queries/servers/custom_emoji';
|
|
|
|
export const fetchCustomEmojis = async (serverUrl: string, page = 0, perPage = General.PAGE_SIZE_DEFAULT, sort = Emoji.SORT_BY_NAME) => {
|
|
let client: Client;
|
|
try {
|
|
client = NetworkManager.getClient(serverUrl);
|
|
} catch (error) {
|
|
return {error};
|
|
}
|
|
|
|
const operator = DatabaseManager.serverDatabases[serverUrl]?.operator;
|
|
if (!operator) {
|
|
return {error: `${serverUrl} database not found`};
|
|
}
|
|
|
|
try {
|
|
const data = await client.getCustomEmojis(page, perPage, sort);
|
|
if (data.length) {
|
|
await operator.handleCustomEmojis({
|
|
emojis: data,
|
|
prepareRecordsOnly: false,
|
|
});
|
|
}
|
|
|
|
return {data};
|
|
} catch (error) {
|
|
forceLogoutIfNecessary(serverUrl, error as ClientErrorProps);
|
|
return {error};
|
|
}
|
|
};
|
|
|
|
export const searchCustomEmojis = async (serverUrl: string, term: string) => {
|
|
let client: Client;
|
|
try {
|
|
client = NetworkManager.getClient(serverUrl);
|
|
} catch (error) {
|
|
return {error};
|
|
}
|
|
|
|
const operator = DatabaseManager.serverDatabases[serverUrl]?.operator;
|
|
if (!operator) {
|
|
return {error: `${serverUrl} database not found`};
|
|
}
|
|
|
|
try {
|
|
const data = await client.searchCustomEmoji(term);
|
|
if (data.length) {
|
|
const names = data.map((c) => c.name);
|
|
const exist = await queryCustomEmojisByName(operator.database, names).fetch();
|
|
const emojis = data.filter((d) => exist.findIndex((c) => c.name === d.name));
|
|
if (emojis.length) {
|
|
await operator.handleCustomEmojis({
|
|
emojis,
|
|
prepareRecordsOnly: false,
|
|
});
|
|
}
|
|
}
|
|
return {data};
|
|
} catch (error) {
|
|
forceLogoutIfNecessary(serverUrl, error as ClientErrorProps);
|
|
return {error};
|
|
}
|
|
};
|