* small preferences refactor
* filter unused preferences and fix removal of preferences in the db
* Feedback review
(cherry picked from commit 64a59aad55)
Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
This commit is contained in:
parent
d1cbfe6659
commit
f1a06396c6
49 changed files with 246 additions and 212 deletions
|
|
@ -13,7 +13,7 @@ import {
|
|||
prepareDeleteChannel, prepareMyChannelsForTeam, queryAllMyChannel,
|
||||
getMyChannel, getChannelById, queryUsersOnChannel, queryUserChannelsByTypes,
|
||||
} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {prepareCommonSystemValues, PrepareCommonSystemValuesArgs, getCommonSystemValues, getCurrentTeamId, setCurrentChannelId, getCurrentUserId, getConfig, getLicense} from '@queries/servers/system';
|
||||
import {addChannelToTeamHistory, addTeamToTeamHistory, getTeamById, removeChannelFromTeamHistory} from '@queries/servers/team';
|
||||
import {getCurrentUser, queryUsersById} from '@queries/servers/user';
|
||||
|
|
@ -369,7 +369,7 @@ export async function updateChannelsDisplayName(serverUrl: string, channels: Cha
|
|||
|
||||
const license = await getLicense(database);
|
||||
const config = await getConfig(database);
|
||||
const preferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const preferences = await queryDisplayNamePreferences(database, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const displaySettings = getTeammateNameDisplaySetting(preferences, config.LockTeammateNameDisplay, config.TeammateNameDisplay, license);
|
||||
const models: Model[] = [];
|
||||
for await (const channel of channels) {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ import AppsManager from '@managers/apps_manager';
|
|||
import NetworkManager from '@managers/network_manager';
|
||||
import {getActiveServer} from '@queries/app/servers';
|
||||
import {prepareMyChannelsForTeam, getChannelById, getChannelByName, getMyChannel, getChannelInfo, queryMyChannelSettingsByIds, getMembersCountByChannelsId} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {getCommonSystemValues, getConfig, getCurrentChannelId, getCurrentTeamId, getCurrentUserId, getLicense, setCurrentChannelId, setCurrentTeamAndChannelId} from '@queries/servers/system';
|
||||
import {getNthLastChannelFromTeam, getMyTeamById, getTeamByName, queryMyTeams, removeChannelFromTeamHistory} from '@queries/servers/team';
|
||||
import {getCurrentUser} from '@queries/servers/user';
|
||||
|
|
@ -530,7 +530,7 @@ export async function fetchDirectChannelsInfo(serverUrl: string, directChannels:
|
|||
return {error: `${serverUrl} database not found`};
|
||||
}
|
||||
|
||||
const preferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).fetch();
|
||||
const preferences = await queryDisplayNamePreferences(database).fetch();
|
||||
const config = await getConfig(database);
|
||||
const license = await getLicense(database);
|
||||
const teammateDisplayNameSetting = getTeammateNameDisplaySetting(preferences, config?.LockTeammateNameDisplay, config?.TeammateNameDisplay, license);
|
||||
|
|
@ -776,7 +776,7 @@ export async function createDirectChannel(serverUrl: string, userId: string, dis
|
|||
if (displayName) {
|
||||
created.display_name = displayName;
|
||||
} else {
|
||||
const preferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const preferences = await queryDisplayNamePreferences(database, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const license = await getLicense(database);
|
||||
const config = await getConfig(database);
|
||||
const teammateDisplayNameSetting = getTeammateNameDisplaySetting(preferences || [], config.LockTeammateNameDisplay, config.TeammateNameDisplay, license);
|
||||
|
|
@ -918,7 +918,7 @@ export async function createGroupChannel(serverUrl: string, userIds: string[]) {
|
|||
return {data: created};
|
||||
}
|
||||
|
||||
const preferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const preferences = await queryDisplayNamePreferences(database, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const license = await getLicense(database);
|
||||
const config = await getConfig(database);
|
||||
const teammateDisplayNameSetting = getTeammateNameDisplaySetting(preferences || [], config.LockTeammateNameDisplay, config.TeammateNameDisplay, license);
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ export const fetchAppEntryData = async (serverUrl: string, sinceArg: number, ini
|
|||
if (!initialTeamId && teamData.teams?.length && teamData.memberships?.length) {
|
||||
// If no initial team was set in the database but got teams in the response
|
||||
const config = await getConfig(database);
|
||||
const teamOrderPreference = getPreferenceValue(prefData.preferences || [], Preferences.TEAMS_ORDER, '', '') as string;
|
||||
const teamOrderPreference = getPreferenceValue<string>(prefData.preferences || [], Preferences.CATEGORIES.TEAMS_ORDER, '', '');
|
||||
const teamMembers = new Set(teamData.memberships.filter((m) => m.delete_at === 0).map((m) => m.team_id));
|
||||
const myTeams = teamData.teams!.filter((t) => teamMembers.has(t.id));
|
||||
const defaultTeam = selectDefaultTeam(myTeams, meData.user?.locale || DEFAULT_LOCALE, teamOrderPreference, config?.ExperimentalPrimaryTeam);
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ export const entryGQL = async (serverUrl: string, currentTeamId?: string, curren
|
|||
if (!teamData.teams.length) {
|
||||
initialTeamId = '';
|
||||
} else if (!initialTeamId || !teamData.teams.find((t) => t.id === currentTeamId && t.delete_at === 0)) {
|
||||
const teamOrderPreference = getPreferenceValue(prefData.preferences || [], Preferences.TEAMS_ORDER, '', '') as string;
|
||||
const teamOrderPreference = getPreferenceValue<string>(prefData.preferences || [], Preferences.CATEGORIES.TEAMS_ORDER, '', '');
|
||||
initialTeamId = selectDefaultTeam(teamData.teams, meData.user.locale, teamOrderPreference, config.ExperimentalPrimaryTeam)?.id || '';
|
||||
}
|
||||
const gqlRoles = [
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
import {switchToChannelById} from '@actions/remote/channel';
|
||||
import {fetchAndSwitchToThread} from '@actions/remote/thread';
|
||||
import {Preferences, Screens} from '@constants';
|
||||
import {Screens} from '@constants';
|
||||
import {getDefaultThemeByAppearance} from '@context/theme';
|
||||
import DatabaseManager from '@database/manager';
|
||||
import {getMyChannel} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryThemePreferences} from '@queries/servers/preference';
|
||||
import {getConfig, getCurrentTeamId, getLicense, getWebSocketLastDisconnected, setCurrentTeamAndChannelId} from '@queries/servers/system';
|
||||
import {getMyTeamById} from '@queries/servers/team';
|
||||
import {getIsCRTEnabled} from '@queries/servers/thread';
|
||||
|
|
@ -53,7 +53,7 @@ export async function pushNotificationEntry(serverUrl: string, notification: Not
|
|||
// When opening the app from a push notification the theme may not be set in the EphemeralStore
|
||||
// causing the goToScreen to use the Appearance theme instead and that causes the screen background color to potentially
|
||||
// not match the theme
|
||||
const themes = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_THEME, teamId).fetch();
|
||||
const themes = await queryThemePreferences(database, teamId).fetch();
|
||||
let theme = getDefaultThemeByAppearance();
|
||||
if (themes.length) {
|
||||
theme = setThemeDefaults(JSON.parse(themes[0].value) as Theme);
|
||||
|
|
|
|||
|
|
@ -5,14 +5,12 @@ import {General, Preferences} from '@constants';
|
|||
import DatabaseManager from '@database/manager';
|
||||
import NetworkManager from '@managers/network_manager';
|
||||
import {getChannelById} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {querySavedPostsPreferences} from '@queries/servers/preference';
|
||||
import {getCurrentUserId} from '@queries/servers/system';
|
||||
import {getUserIdFromChannelName} from '@utils/user';
|
||||
|
||||
import {forceLogoutIfNecessary} from './session';
|
||||
|
||||
const {CATEGORY_DIRECT_CHANNEL_SHOW, CATEGORY_GROUP_CHANNEL_SHOW, CATEGORY_FAVORITE_CHANNEL, CATEGORY_SAVED_POST} = Preferences;
|
||||
|
||||
export type MyPreferencesRequest = {
|
||||
preferences?: PreferenceType[];
|
||||
error?: unknown;
|
||||
|
|
@ -56,7 +54,7 @@ export const saveFavoriteChannel = async (serverUrl: string, channelId: string,
|
|||
try {
|
||||
const userId = await getCurrentUserId(operator.database);
|
||||
const favPref: PreferenceType = {
|
||||
category: CATEGORY_FAVORITE_CHANNEL,
|
||||
category: Preferences.CATEGORIES.FAVORITE_CHANNEL,
|
||||
name: channelId,
|
||||
user_id: userId,
|
||||
value: String(isFavorite),
|
||||
|
|
@ -77,7 +75,7 @@ export const savePostPreference = async (serverUrl: string, postId: string) => {
|
|||
const userId = await getCurrentUserId(operator.database);
|
||||
const pref: PreferenceType = {
|
||||
user_id: userId,
|
||||
category: CATEGORY_SAVED_POST,
|
||||
category: Preferences.CATEGORIES.SAVED_POST,
|
||||
name: postId,
|
||||
value: 'true',
|
||||
};
|
||||
|
|
@ -116,23 +114,15 @@ export const savePreference = async (serverUrl: string, preferences: PreferenceT
|
|||
};
|
||||
|
||||
export const deleteSavedPost = async (serverUrl: string, postId: string) => {
|
||||
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 {
|
||||
const userId = await getCurrentUserId(operator.database);
|
||||
const records = await queryPreferencesByCategoryAndName(operator.database, CATEGORY_SAVED_POST, postId).fetch();
|
||||
const {database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl);
|
||||
const client = NetworkManager.getClient(serverUrl);
|
||||
const userId = await getCurrentUserId(database);
|
||||
const records = await querySavedPostsPreferences(database, postId).fetch();
|
||||
const postPreferenceRecord = records.find((r) => postId === r.name);
|
||||
const pref = {
|
||||
user_id: userId,
|
||||
category: CATEGORY_SAVED_POST,
|
||||
category: Preferences.CATEGORIES.SAVED_POST,
|
||||
name: postId,
|
||||
value: 'true',
|
||||
};
|
||||
|
|
@ -161,7 +151,8 @@ export const setDirectChannelVisible = async (serverUrl: string, channelId: stri
|
|||
const channel = await getChannelById(database, channelId);
|
||||
if (channel?.type === General.DM_CHANNEL || channel?.type === General.GM_CHANNEL) {
|
||||
const userId = await getCurrentUserId(database);
|
||||
const category = channel.type === General.DM_CHANNEL ? CATEGORY_DIRECT_CHANNEL_SHOW : CATEGORY_GROUP_CHANNEL_SHOW;
|
||||
const {DIRECT_CHANNEL_SHOW, GROUP_CHANNEL_SHOW} = Preferences.CATEGORIES;
|
||||
const category = channel.type === General.DM_CHANNEL ? DIRECT_CHANNEL_SHOW : GROUP_CHANNEL_SHOW;
|
||||
const name = channel.type === General.DM_CHANNEL ? getUserIdFromChannelName(userId, channel.name) : channelId;
|
||||
const pref: PreferenceType = {
|
||||
user_id: userId,
|
||||
|
|
@ -185,7 +176,7 @@ export const savePreferredSkinTone = async (serverUrl: string, skinCode: string)
|
|||
const userId = await getCurrentUserId(database);
|
||||
const pref: PreferenceType = {
|
||||
user_id: userId,
|
||||
category: Preferences.CATEGORY_EMOJI,
|
||||
category: Preferences.CATEGORIES.EMOJI,
|
||||
name: Preferences.EMOJI_SKINTONE,
|
||||
value: skinCode,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import {selectDefaultTeam} from '@helpers/api/team';
|
|||
import NetworkManager from '@managers/network_manager';
|
||||
import {prepareCategoriesAndCategoriesChannels} from '@queries/servers/categories';
|
||||
import {prepareMyChannelsForTeam} from '@queries/servers/channel';
|
||||
import {prepareMyPreferences, queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {prepareMyPreferences, queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {prepareCommonSystemValues, getConfig, getLicense} from '@queries/servers/system';
|
||||
import {prepareMyTeams} from '@queries/servers/team';
|
||||
import {getCurrentUser} from '@queries/servers/user';
|
||||
|
|
@ -60,7 +60,7 @@ export async function retryInitialTeamAndChannel(serverUrl: string) {
|
|||
|
||||
// select initial team
|
||||
if (!clData.error && !prefData.error && !teamData.error) {
|
||||
const teamOrderPreference = getPreferenceValue(prefData.preferences!, Preferences.TEAMS_ORDER, '', '') as string;
|
||||
const teamOrderPreference = getPreferenceValue<string>(prefData.preferences!, Preferences.CATEGORIES.TEAMS_ORDER, '', '');
|
||||
const teamRoles: string[] = [];
|
||||
const teamMembers = new Set<string>();
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ export async function retryInitialChannel(serverUrl: string, teamId: string) {
|
|||
return {error: true};
|
||||
}
|
||||
|
||||
const prefs = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const prefs = await queryDisplayNamePreferences(database, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const preferences: PreferenceType[] = prefs.map((p) => ({
|
||||
category: p.category,
|
||||
name: p.name,
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ async function handleSavePostAdded(serverUrl: string, preferences: PreferenceTyp
|
|||
return;
|
||||
}
|
||||
|
||||
const savedPosts = preferences.filter((p) => p.category === Preferences.CATEGORY_SAVED_POST);
|
||||
const savedPosts = preferences.filter((p) => p.category === Preferences.CATEGORIES.SAVED_POST);
|
||||
for await (const saved of savedPosts) {
|
||||
const post = await getPostById(database, saved.name);
|
||||
if (!post) {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import DatabaseManager from '@database/manager';
|
|||
import {getTeammateNameDisplaySetting} from '@helpers/api/preference';
|
||||
import WebsocketManager from '@managers/websocket_manager';
|
||||
import {queryChannelsByTypes, queryUserChannelsByTypes} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {getConfig, getLicense} from '@queries/servers/system';
|
||||
import {getCurrentUser} from '@queries/servers/user';
|
||||
import {displayUsername} from '@utils/user';
|
||||
|
|
@ -91,7 +91,7 @@ export async function handleUserTypingEvent(serverUrl: string, msg: WebSocketMes
|
|||
const {users, existingUsers} = await fetchUsersByIds(serverUrl, [msg.data.user_id]);
|
||||
const user = users?.[0] || existingUsers?.[0];
|
||||
|
||||
const namePreference = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const namePreference = await queryDisplayNamePreferences(database, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const teammateDisplayNameSetting = getTeammateNameDisplaySetting(namePreference, config.LockTeammateNameDisplay, config.TeammateNameDisplay, license);
|
||||
const currentUser = await getCurrentUser(database);
|
||||
const username = displayUsername(user, currentUser?.locale, teammateDisplayNameSetting);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import {switchMap} from 'rxjs/operators';
|
|||
|
||||
import {Preferences} from '@constants';
|
||||
import {queryAllCustomEmojis} from '@queries/servers/custom_emoji';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryEmojiPreferences} from '@queries/servers/preference';
|
||||
import {observeConfigBooleanValue} from '@queries/servers/system';
|
||||
|
||||
import EmojiSuggestion from './emoji_suggestion';
|
||||
|
|
@ -21,12 +21,9 @@ const enhanced = withObservables([], ({database}: WithDatabaseArgs) => {
|
|||
const isCustomEmojisEnabled = observeConfigBooleanValue(database, 'EnableCustomEmoji');
|
||||
return {
|
||||
customEmojis: isCustomEmojisEnabled.pipe(
|
||||
switchMap((enabled) => (enabled ?
|
||||
queryAllCustomEmojis(database).observe() :
|
||||
of$(emptyEmojiList)),
|
||||
),
|
||||
switchMap((enabled) => (enabled ? queryAllCustomEmojis(database).observe() : of$(emptyEmojiList))),
|
||||
),
|
||||
skinTone: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_EMOJI, Preferences.EMOJI_SKINTONE).
|
||||
skinTone: queryEmojiPreferences(database, Preferences.EMOJI_SKINTONE).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((prefs) => of$(prefs?.[0]?.value ?? 'default')),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -12,9 +12,8 @@ import {switchMap} from 'rxjs/operators';
|
|||
import FormattedDate from '@components/formatted_date';
|
||||
import FormattedText from '@components/formatted_text';
|
||||
import FormattedTime from '@components/formatted_time';
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {observeCurrentUser} from '@queries/servers/user';
|
||||
import {getCurrentMomentForTimezone} from '@utils/helpers';
|
||||
import {makeStyleSheetFromTheme} from '@utils/theme';
|
||||
|
|
@ -134,10 +133,10 @@ const CustomStatusExpiry = ({currentUser, isMilitaryTime, showPrefix, showTimeCo
|
|||
|
||||
const enhanced = withObservables([], ({database}: WithDatabaseArgs) => ({
|
||||
currentUser: observeCurrentUser(database),
|
||||
isMilitaryTime: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).
|
||||
isMilitaryTime: queryDisplayNamePreferences(database).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap(
|
||||
(preferences) => of$(getPreferenceAsBool(preferences, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', false)),
|
||||
(preferences) => of$(getDisplayNamePreferenceAsBool(preferences, 'use_military_time')),
|
||||
),
|
||||
),
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ import withObservables from '@nozbe/with-observables';
|
|||
import {of as of$, combineLatest} from 'rxjs';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {observeConfigBooleanValue} from '@queries/servers/system';
|
||||
|
||||
import Opengraph from './opengraph';
|
||||
|
|
@ -22,10 +22,10 @@ const enhance = withObservables(
|
|||
}
|
||||
|
||||
const linkPreviewsConfig = observeConfigBooleanValue(database, 'EnableLinkPreviews');
|
||||
const linkPreviewPreference = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.LINK_PREVIEW_DISPLAY).
|
||||
const linkPreviewPreference = queryDisplayNamePreferences(database, Preferences.LINK_PREVIEW_DISPLAY).
|
||||
observeWithColumns(['value']);
|
||||
const showLinkPreviews = combineLatest([linkPreviewsConfig, linkPreviewPreference], (cfg, pref) => {
|
||||
const previewsEnabled = getPreferenceAsBool(pref, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.LINK_PREVIEW_DISPLAY, true);
|
||||
const previewsEnabled = getDisplayNamePreferenceAsBool(pref, Preferences.LINK_PREVIEW_DISPLAY, true);
|
||||
return of$(previewsEnabled && cfg);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -6,10 +6,9 @@ import withObservables from '@nozbe/with-observables';
|
|||
import {of as of$} from 'rxjs';
|
||||
import {map, switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {observePost, observePostAuthor, queryPostReplies} from '@queries/servers/post';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {observeConfigBooleanValue} from '@queries/servers/system';
|
||||
import {observeTeammateNameDisplay, observeUser} from '@queries/servers/user';
|
||||
|
||||
|
|
@ -26,12 +25,12 @@ type HeaderInputProps = {
|
|||
const withHeaderProps = withObservables(
|
||||
['post', 'differentThreadSequence'],
|
||||
({post, database, differentThreadSequence}: WithDatabaseArgs & HeaderInputProps) => {
|
||||
const preferences = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).
|
||||
const preferences = queryDisplayNamePreferences(database).
|
||||
observeWithColumns(['value']);
|
||||
const author = observePostAuthor(database, post);
|
||||
const enablePostUsernameOverride = observeConfigBooleanValue(database, 'EnablePostUsernameOverride');
|
||||
const isTimezoneEnabled = observeConfigBooleanValue(database, 'ExperimentalTimezone');
|
||||
const isMilitaryTime = preferences.pipe(map((prefs) => getPreferenceAsBool(prefs, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', false)));
|
||||
const isMilitaryTime = preferences.pipe(map((prefs) => getDisplayNamePreferenceAsBool(prefs, 'use_military_time')));
|
||||
const teammateNameDisplay = observeTeammateNameDisplay(database);
|
||||
const commentCount = queryPostReplies(database, post.rootId || post.id).observeCount();
|
||||
const isCustomStatusEnabled = observeConfigBooleanValue(database, 'EnableCustomUserStatuses');
|
||||
|
|
|
|||
|
|
@ -6,9 +6,8 @@ import withObservables from '@nozbe/with-observables';
|
|||
import {of as of$} from 'rxjs';
|
||||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {observePost, queryPostReplies} from '@queries/servers/post';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {querySavedPostsPreferences} from '@queries/servers/preference';
|
||||
|
||||
import ThreadOverview from './thread_overview';
|
||||
|
||||
|
|
@ -19,7 +18,7 @@ const enhanced = withObservables(
|
|||
({database, rootId}: WithDatabaseArgs & {rootId: string}) => {
|
||||
return {
|
||||
rootPost: observePost(database, rootId),
|
||||
isSaved: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SAVED_POST, rootId).
|
||||
isSaved: querySavedPostsPreferences(database, rootId).
|
||||
observeWithColumns(['value']).
|
||||
pipe(
|
||||
switchMap((pref) => of$(Boolean(pref[0]?.value === 'true'))),
|
||||
|
|
|
|||
|
|
@ -9,9 +9,8 @@ import {map} from 'rxjs/operators';
|
|||
|
||||
import FormattedText from '@components/formatted_text';
|
||||
import FormattedTime from '@components/formatted_time';
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {observeConfigBooleanValue} from '@queries/servers/system';
|
||||
import {observeCurrentUser} from '@queries/servers/user';
|
||||
import {makeStyleSheetFromTheme} from '@utils/theme';
|
||||
|
|
@ -80,11 +79,11 @@ const SystemHeader = ({isMilitaryTime, isTimezoneEnabled, createAt, theme, user}
|
|||
};
|
||||
|
||||
const enhanced = withObservables([], ({database}: WithDatabaseArgs) => {
|
||||
const preferences = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time').
|
||||
const preferences = queryDisplayNamePreferences(database, 'use_military_time').
|
||||
observeWithColumns(['value']);
|
||||
const isTimezoneEnabled = observeConfigBooleanValue(database, 'ExperimentalTimezone');
|
||||
const isMilitaryTime = preferences.pipe(
|
||||
map((prefs) => getPreferenceAsBool(prefs, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', false)),
|
||||
map((prefs) => getDisplayNamePreferenceAsBool(prefs, 'use_military_time')),
|
||||
);
|
||||
const user = observeCurrentUser(database);
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ const withTeams = withObservables([], ({database}: WithDatabaseArgs) => {
|
|||
const teamIds = queryJoinedTeams(database).observe().pipe(
|
||||
map((ts) => ts.map((t) => ({id: t.id, displayName: t.displayName}))),
|
||||
);
|
||||
const order = queryPreferencesByCategoryAndName(database, Preferences.TEAMS_ORDER).
|
||||
const order = queryPreferencesByCategoryAndName(database, Preferences.CATEGORIES.TEAMS_ORDER).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((p) => (p.length ? of$(p[0].value.split(',')) : of$([]))),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ import {of as of$} from 'rxjs';
|
|||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import Preferences from '@constants/preferences';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getSidebarPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {querySidebarPreferences} from '@queries/servers/preference';
|
||||
import {observeCurrentChannelId, observeCurrentTeamId, observeOnlyUnreads} from '@queries/servers/system';
|
||||
import {observeUnreadsAndMentionsInTeam} from '@queries/servers/thread';
|
||||
|
||||
|
|
@ -22,10 +22,10 @@ const enhanced = withObservables([], ({database}: WithDatabaseArgs) => {
|
|||
|
||||
return {
|
||||
currentChannelId: observeCurrentChannelId(database),
|
||||
groupUnreadsSeparately: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
groupUnreadsSeparately: querySidebarPreferences(database, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
observeWithColumns(['value']).
|
||||
pipe(
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getPreferenceAsBool(prefs, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS, false))),
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getSidebarPreferenceAsBool(prefs, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS))),
|
||||
),
|
||||
onlyUnreads: observeOnlyUnreads(database),
|
||||
unreadsAndMentions: currentTeamId.pipe(
|
||||
|
|
|
|||
|
|
@ -1,16 +1,26 @@
|
|||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
const Preferences: Record<string, any> = {
|
||||
CATEGORY_CHANNEL_OPEN_TIME: 'channel_open_time',
|
||||
CATEGORY_CHANNEL_APPROXIMATE_VIEW_TIME: 'channel_approximate_view_time',
|
||||
CATEGORY_DIRECT_CHANNEL_SHOW: 'direct_channel_show',
|
||||
CATEGORY_GROUP_CHANNEL_SHOW: 'group_channel_show',
|
||||
CATEGORY_EMOJI: 'emoji',
|
||||
CATEGORY_SAVED_POST: 'flagged_post',
|
||||
CATEGORY_FAVORITE_CHANNEL: 'favorite_channel',
|
||||
CATEGORY_AUTO_RESET_MANUAL_STATUS: 'auto_reset_manual_status',
|
||||
CATEGORY_NOTIFICATIONS: 'notifications',
|
||||
export const CATEGORIES_TO_KEEP: Record<string, string> = {
|
||||
ADVANCED_SETTINGS: 'advanced_settings',
|
||||
DIRECT_CHANNEL_SHOW: 'direct_channel_show',
|
||||
GROUP_CHANNEL_SHOW: 'group_channel_show',
|
||||
DISPLAY_SETTINGS: 'display_settings',
|
||||
EMOJI: 'emoji',
|
||||
NOTIFICATIONS: 'notifications',
|
||||
SAVED_POST: 'flagged_post',
|
||||
SIDEBAR_SETTINGS: 'sidebar_settings',
|
||||
TEAMS_ORDER: 'teams_order',
|
||||
THEME: 'theme',
|
||||
};
|
||||
|
||||
const CATEGORIES: Record<string, string> = {
|
||||
...CATEGORIES_TO_KEEP,
|
||||
FAVORITE_CHANNEL: 'favorite_channel',
|
||||
};
|
||||
|
||||
const Preferences = {
|
||||
CATEGORIES,
|
||||
COLLAPSED_REPLY_THREADS: 'collapsed_reply_threads',
|
||||
COLLAPSED_REPLY_THREADS_OFF: 'off',
|
||||
COLLAPSED_REPLY_THREADS_ON: 'on',
|
||||
|
|
@ -27,7 +37,6 @@ const Preferences: Record<string, any> = {
|
|||
// "immediate" is a 30 second interval
|
||||
INTERVAL_NEVER: 0,
|
||||
INTERVAL_NOT_SET: -1,
|
||||
CATEGORY_DISPLAY_SETTINGS: 'display_settings',
|
||||
NAME_NAME_FORMAT: 'name_format',
|
||||
DISPLAY_PREFER_NICKNAME: 'nickname_full_name',
|
||||
DISPLAY_PREFER_FULL_NAME: 'full_name',
|
||||
|
|
@ -36,18 +45,14 @@ const Preferences: Record<string, any> = {
|
|||
LINK_PREVIEW_DISPLAY: 'link_previews',
|
||||
MENTION_KEYS: 'mention_keys',
|
||||
USE_MILITARY_TIME: 'use_military_time',
|
||||
CATEGORY_SIDEBAR_SETTINGS: 'sidebar_settings',
|
||||
CHANNEL_SIDEBAR_ORGANIZATION: 'channel_sidebar_organization',
|
||||
CHANNEL_SIDEBAR_LIMIT_DMS: 'limit_visible_dms_gms',
|
||||
CHANNEL_SIDEBAR_LIMIT_DMS_DEFAULT: 20,
|
||||
CHANNEL_SIDEBAR_GROUP_UNREADS: 'show_unread_section',
|
||||
AUTOCLOSE_DMS_ENABLED: 'after_seven_days',
|
||||
CATEGORY_ADVANCED_SETTINGS: 'advanced_settings',
|
||||
ADVANCED_FILTER_JOIN_LEAVE: 'join_leave',
|
||||
ADVANCED_CODE_BLOCK_ON_CTRL_ENTER: 'code_block_ctrl_enter',
|
||||
ADVANCED_SEND_ON_CTRL_ENTER: 'send_on_ctrl_enter',
|
||||
CATEGORY_THEME: 'theme',
|
||||
TEAMS_ORDER: 'teams_order',
|
||||
THEMES: {
|
||||
denim: {
|
||||
type: 'Denim',
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import React, {ComponentType, createContext, useEffect, useState} from 'react';
|
|||
import {Appearance} from 'react-native';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryThemePreferences} from '@queries/servers/preference';
|
||||
import {observeCurrentTeamId} from '@queries/servers/system';
|
||||
import {setThemeDefaults, updateThemeIfNeeded} from '@utils/theme';
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ export function useTheme(): Theme {
|
|||
|
||||
const enhancedThemeProvider = withObservables([], ({database}: {database: Database}) => ({
|
||||
currentTeamId: observeCurrentTeamId(database),
|
||||
themes: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_THEME).observeWithColumns(['value']),
|
||||
themes: queryThemePreferences(database).observeWithColumns(['value']),
|
||||
}));
|
||||
|
||||
export default enhancedThemeProvider(ThemeProvider);
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ describe('*** Operator: User Handlers tests ***', () => {
|
|||
},
|
||||
{
|
||||
user_id: '9ciscaqbrpd6d8s68k76xb9bte',
|
||||
category: 'tutorial_step',
|
||||
category: 'tutorial_step', // we aren't using this category in the app, should be filtered
|
||||
name: '9ciscaqbrpd6d8s68k76xb9bte',
|
||||
value: '2',
|
||||
},
|
||||
|
|
@ -140,12 +140,13 @@ describe('*** Operator: User Handlers tests ***', () => {
|
|||
await operator.handlePreferences({
|
||||
preferences,
|
||||
prepareRecordsOnly: false,
|
||||
sync: false,
|
||||
});
|
||||
|
||||
expect(spyOnHandleRecords).toHaveBeenCalledTimes(1);
|
||||
expect(spyOnHandleRecords).toHaveBeenCalledWith({
|
||||
fieldName: 'user_id',
|
||||
createOrUpdateRawValues: preferences,
|
||||
createOrUpdateRawValues: preferences.filter((p) => p.category !== 'tutorial_step'),
|
||||
tableName: 'Preference',
|
||||
prepareRecordsOnly: true,
|
||||
buildKeyRecordBy: buildPreferenceKey,
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import {
|
|||
transformUserRecord,
|
||||
} from '@database/operator/server_data_operator/transformers/user';
|
||||
import {getUniqueRawsBy} from '@database/operator/utils/general';
|
||||
import {filterPreferences} from '@helpers/api/preference';
|
||||
import {logWarning} from '@utils/log';
|
||||
|
||||
import type {
|
||||
|
|
@ -33,22 +34,25 @@ const UserHandler = (superclass: any) => class extends superclass {
|
|||
* @returns {Promise<PreferenceModel[]>}
|
||||
*/
|
||||
handlePreferences = async ({preferences, prepareRecordsOnly = true, sync = false}: HandlePreferencesArgs): Promise<PreferenceModel[]> => {
|
||||
if (!preferences?.length) {
|
||||
const records: PreferenceModel[] = [];
|
||||
const filtered = filterPreferences(preferences);
|
||||
if (!filtered?.length) {
|
||||
logWarning(
|
||||
'An empty or undefined "preferences" array has been passed to the handlePreferences method',
|
||||
);
|
||||
return [];
|
||||
return records;
|
||||
}
|
||||
|
||||
// WE NEED TO SYNC THE PREFS FROM WHAT WE GOT AND WHAT WE HAVE
|
||||
const deleteValues: PreferenceModel[] = [];
|
||||
const stored = await this.database.get(PREFERENCE).query().fetch() as PreferenceModel[];
|
||||
const preferenesMap = new Map(stored.map((p) => {
|
||||
const storedPreferencesMap = new Map(stored.map((p) => {
|
||||
return [`${p.category}-${p.name}`, p];
|
||||
}));
|
||||
if (sync) {
|
||||
const rawPreferencesMap = new Map(filtered.map((p) => [`${p.category}-${p.name}`, p]));
|
||||
for (const pref of stored) {
|
||||
const exists = preferenesMap.get(`${pref.category}-${pref.name}`);
|
||||
const exists = rawPreferencesMap.get(`${pref.category}-${pref.name}`);
|
||||
if (!exists) {
|
||||
pref.prepareDestroyPermanently();
|
||||
deleteValues.push(pref);
|
||||
|
|
@ -56,9 +60,9 @@ const UserHandler = (superclass: any) => class extends superclass {
|
|||
}
|
||||
}
|
||||
|
||||
const createOrUpdateRawValues = preferences.reduce((res: PreferenceType[], p) => {
|
||||
const createOrUpdateRawValues = filtered.reduce((res: PreferenceType[], p) => {
|
||||
const id = `${p.category}-${p.name}`;
|
||||
const exist = preferenesMap.get(id);
|
||||
const exist = storedPreferencesMap.get(id);
|
||||
if (!exist) {
|
||||
res.push(p);
|
||||
return res;
|
||||
|
|
@ -71,18 +75,21 @@ const UserHandler = (superclass: any) => class extends superclass {
|
|||
return res;
|
||||
}, []);
|
||||
|
||||
if (!createOrUpdateRawValues.length) {
|
||||
return [];
|
||||
if (!createOrUpdateRawValues.length && !deleteValues.length) {
|
||||
return records;
|
||||
}
|
||||
|
||||
const records: PreferenceModel[] = await this.handleRecords({
|
||||
fieldName: 'user_id',
|
||||
buildKeyRecordBy: buildPreferenceKey,
|
||||
transformer: transformPreferenceRecord,
|
||||
prepareRecordsOnly: true,
|
||||
createOrUpdateRawValues,
|
||||
tableName: PREFERENCE,
|
||||
});
|
||||
if (createOrUpdateRawValues.length) {
|
||||
const createOrUpdate: PreferenceModel[] = await this.handleRecords({
|
||||
fieldName: 'user_id',
|
||||
buildKeyRecordBy: buildPreferenceKey,
|
||||
transformer: transformPreferenceRecord,
|
||||
prepareRecordsOnly: true,
|
||||
createOrUpdateRawValues,
|
||||
tableName: PREFERENCE,
|
||||
});
|
||||
records.push(...createOrUpdate);
|
||||
}
|
||||
|
||||
if (deleteValues.length) {
|
||||
records.push(...deleteValues);
|
||||
|
|
|
|||
|
|
@ -2,17 +2,22 @@
|
|||
// See LICENSE.txt for license information.
|
||||
|
||||
import {General, Preferences} from '@constants';
|
||||
import {CATEGORIES_TO_KEEP} from '@constants/preferences';
|
||||
|
||||
import type PreferenceModel from '@typings/database/models/servers/preference';
|
||||
|
||||
export function getPreferenceValue(preferences: Array<PreferenceType | PreferenceModel>, category: string, name: string, defaultValue: unknown = '') {
|
||||
type Preference = PreferenceModel | PreferenceType;
|
||||
|
||||
const categoriesToKeep = new Set(Object.values(CATEGORIES_TO_KEEP));
|
||||
|
||||
export function getPreferenceValue<T>(preferences: Preference[], category: string, name: string, defaultValue = '' as unknown) {
|
||||
const pref = preferences.find((p) => p.category === category && p.name === name);
|
||||
|
||||
return pref?.value || defaultValue;
|
||||
return (pref?.value || defaultValue) as T;
|
||||
}
|
||||
|
||||
export function getPreferenceAsBool(preferences: PreferenceType[] | PreferenceModel[], category: string, name: string, defaultValue = false) {
|
||||
const value = getPreferenceValue(preferences, category, name, defaultValue);
|
||||
export function getPreferenceAsBool(preferences: Preference[], category: string, name: string, defaultValue = false) {
|
||||
const value = getPreferenceValue<boolean|string>(preferences, category, name, defaultValue);
|
||||
if (typeof value === 'boolean') {
|
||||
return defaultValue;
|
||||
}
|
||||
|
|
@ -20,18 +25,9 @@ export function getPreferenceAsBool(preferences: PreferenceType[] | PreferenceMo
|
|||
return value !== 'false';
|
||||
}
|
||||
|
||||
export function getPreferenceAsInt(preferences: PreferenceType[] | PreferenceModel[], category: string, name: string, defaultValue = 0) {
|
||||
const value = getPreferenceValue(preferences, category, name, defaultValue);
|
||||
if (value) {
|
||||
return parseInt(value as string, 10);
|
||||
}
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
export function getTeammateNameDisplaySetting(preferences: PreferenceType[] | PreferenceModel[], lockTeammateNameDisplay?: string, teammateNameDisplay?: string, license?: ClientLicense) {
|
||||
export function getTeammateNameDisplaySetting(preferences: Preference[], lockTeammateNameDisplay?: string, teammateNameDisplay?: string, license?: ClientLicense) {
|
||||
const useAdminTeammateNameDisplaySetting = license?.LockTeammateNameDisplay === 'true' && lockTeammateNameDisplay === 'true';
|
||||
const preference = getPreferenceValue(preferences, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT, '') as string;
|
||||
const preference = getPreferenceValue<string>(preferences, Preferences.CATEGORIES.DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT, '');
|
||||
if (preference && !useAdminTeammateNameDisplaySetting) {
|
||||
return preference;
|
||||
} else if (teammateNameDisplay) {
|
||||
|
|
@ -40,3 +36,27 @@ export function getTeammateNameDisplaySetting(preferences: PreferenceType[] | Pr
|
|||
|
||||
return General.TEAMMATE_NAME_DISPLAY.SHOW_USERNAME;
|
||||
}
|
||||
|
||||
export function getAdvanceSettingPreferenceAsBool(preferences: Preference[], name: string, defaultValue = false) {
|
||||
return getPreferenceAsBool(preferences, Preferences.CATEGORIES.ADVANCED_SETTINGS, name, defaultValue);
|
||||
}
|
||||
|
||||
export function getDisplayNamePreferenceAsBool(preferences: Preference[], name: string, defaultValue = false) {
|
||||
return getPreferenceAsBool(preferences, Preferences.CATEGORIES.DISPLAY_SETTINGS, name, defaultValue);
|
||||
}
|
||||
|
||||
export function getDisplayNamePreference<T>(preferences: Preference[], name: string, defaultValue = '' as unknown) {
|
||||
return getPreferenceValue<T>(preferences, Preferences.CATEGORIES.DISPLAY_SETTINGS, name, defaultValue);
|
||||
}
|
||||
|
||||
export function getSidebarPreferenceAsBool(preferences: Preference[], name: string, defaultValue = false) {
|
||||
return getPreferenceAsBool(preferences, Preferences.CATEGORIES.SIDEBAR_SETTINGS, name, defaultValue);
|
||||
}
|
||||
|
||||
export function filterPreferences(preferences?: PreferenceType[]) {
|
||||
if (!preferences?.length) {
|
||||
return preferences;
|
||||
}
|
||||
|
||||
return preferences.filter((p) => categoriesToKeep.has(p.category));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import DatabaseManager from '@database/manager';
|
|||
import {getTeammateNameDisplaySetting} from '@helpers/api/preference';
|
||||
import NetworkManager from '@managers/network_manager';
|
||||
import {getChannelById} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {getConfig, getLicense} from '@queries/servers/system';
|
||||
import {getCurrentUser, getUserById} from '@queries/servers/user';
|
||||
import {dismissAllModalsAndPopToScreen} from '@screens/navigation';
|
||||
|
|
@ -385,7 +385,7 @@ export const getEndCallMessage = async (serverUrl: string, channelId: string, cu
|
|||
const otherUser = await getUserById(database, otherID);
|
||||
const license = await getLicense(database);
|
||||
const config = await getConfig(database);
|
||||
const preferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const preferences = await queryDisplayNamePreferences(database, Preferences.NAME_NAME_FORMAT).fetch();
|
||||
const displaySetting = getTeammateNameDisplaySetting(preferences, config.LockTeammateNameDisplay, config.TeammateNameDisplay, license);
|
||||
msg = intl.formatMessage({
|
||||
id: 'mobile.calls_end_msg_dm',
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ import {CallsCustomMessage} from '@calls/components/calls_custom_message/calls_c
|
|||
import {observeIsCallLimitRestricted} from '@calls/observers';
|
||||
import {observeCurrentCall} from '@calls/state';
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {observeCurrentUser, observeTeammateNameDisplay, observeUser} from '@queries/servers/user';
|
||||
|
||||
import type {WithDatabaseArgs} from '@typings/database/database';
|
||||
|
|
@ -25,9 +25,9 @@ type OwnProps = {
|
|||
const enhanced = withObservables(['post'], ({serverUrl, post, database}: OwnProps & WithDatabaseArgs) => {
|
||||
const currentUser = observeCurrentUser(database);
|
||||
const author = observeUser(database, post.userId);
|
||||
const isMilitaryTime = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).observeWithColumns(['value']).pipe(
|
||||
const isMilitaryTime = queryDisplayNamePreferences(database).observeWithColumns(['value']).pipe(
|
||||
switchMap(
|
||||
(preferences) => of$(getPreferenceAsBool(preferences, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', false)),
|
||||
(preferences) => of$(getDisplayNamePreferenceAsBool(preferences, Preferences.USE_MILITARY_TIME)),
|
||||
),
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,18 +5,16 @@ import {Database, Model, Q, Query} from '@nozbe/watermelondb';
|
|||
import {of as of$} from 'rxjs';
|
||||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {MM_TABLES} from '@constants/database';
|
||||
|
||||
import {queryPreferencesByCategoryAndName} from './preference';
|
||||
import {querySavedPostsPreferences} from './preference';
|
||||
import {observeUser} from './user';
|
||||
|
||||
import type PostModel from '@typings/database/models/servers/post';
|
||||
import type PostInChannelModel from '@typings/database/models/servers/posts_in_channel';
|
||||
import type PostsInThreadModel from '@typings/database/models/servers/posts_in_thread';
|
||||
import type PreferenceModel from '@typings/database/models/servers/preference';
|
||||
|
||||
const {SERVER: {POST, POSTS_IN_CHANNEL, POSTS_IN_THREAD, PREFERENCE}} = MM_TABLES;
|
||||
const {SERVER: {POST, POSTS_IN_CHANNEL, POSTS_IN_THREAD}} = MM_TABLES;
|
||||
|
||||
export const prepareDeletePost = async (post: PostModel): Promise<Model[]> => {
|
||||
const preparedModels: Model[] = [post.prepareDestroyPermanently()];
|
||||
|
|
@ -72,7 +70,7 @@ export const observePostAuthor = (database: Database, post: PostModel) => {
|
|||
};
|
||||
|
||||
export const observePostSaved = (database: Database, postId: string) => {
|
||||
return queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SAVED_POST, postId).
|
||||
return querySavedPostsPreferences(database, postId).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap(
|
||||
(pref) => of$(Boolean(pref[0]?.value === 'true')),
|
||||
|
|
@ -212,13 +210,9 @@ export const observePinnedPostsInChannel = (database: Database, channelId: strin
|
|||
};
|
||||
|
||||
export const observeSavedPostsByIds = (database: Database, postIds: string[]) => {
|
||||
return database.get<PreferenceModel>(PREFERENCE).
|
||||
query(
|
||||
Q.and(
|
||||
Q.where('category', Preferences.CATEGORY_SAVED_POST),
|
||||
Q.where('name', Q.oneOf(postIds)),
|
||||
),
|
||||
).observeWithColumns(['name']).pipe(
|
||||
switchMap((prefs) => of$(new Set(prefs.map((p) => p.name)))),
|
||||
);
|
||||
return querySavedPostsPreferences(database).extend(
|
||||
Q.where('name', Q.oneOf(postIds)),
|
||||
).observeWithColumns(['name']).pipe(
|
||||
switchMap((prefs) => of$(new Set(prefs.map((p) => p.name)))),
|
||||
);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import type {ServerDatabase} from '@typings/database/database';
|
|||
import type PreferenceModel from '@typings/database/models/servers/preference';
|
||||
|
||||
const {SERVER: {PREFERENCE}} = MM_TABLES;
|
||||
const {ADVANCED_SETTINGS, DISPLAY_SETTINGS, EMOJI, SAVED_POST, SIDEBAR_SETTINGS, THEME} = Preferences.CATEGORIES;
|
||||
|
||||
export async function prepareMyPreferences(operator: ServerDataOperator, preferences: PreferenceType[], sync = false): Promise<PreferenceModel[]> {
|
||||
return operator.handlePreferences({
|
||||
|
|
@ -37,7 +38,7 @@ export const queryPreferencesByCategoryAndName = (database: Database, category:
|
|||
|
||||
export const getThemeForCurrentTeam = async (database: Database): Promise<Theme | undefined> => {
|
||||
const currentTeamId = await getCurrentTeamId(database);
|
||||
const teamTheme = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_THEME, currentTeamId).fetch();
|
||||
const teamTheme = await queryPreferencesByCategoryAndName(database, THEME, currentTeamId).fetch();
|
||||
if (teamTheme.length) {
|
||||
try {
|
||||
return JSON.parse(teamTheme[0].value);
|
||||
|
|
@ -68,12 +69,12 @@ export async function deletePreferences(database: ServerDatabase, preferences: P
|
|||
}
|
||||
|
||||
export const differsFromLocalNameFormat = async (database: Database, preferences: PreferenceType[]) => {
|
||||
const displayPref = getPreferenceValue(preferences, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT) as string;
|
||||
const displayPref = getPreferenceValue<string>(preferences, DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT);
|
||||
if (displayPref === '') {
|
||||
return false;
|
||||
}
|
||||
|
||||
const currentPref = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT, displayPref).fetch();
|
||||
const currentPref = await queryDisplayNamePreferences(database, Preferences.NAME_NAME_FORMAT, displayPref).fetch();
|
||||
if (currentPref.length > 0) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -93,3 +94,27 @@ export async function getHasCRTChanged(database: Database, preferences: Preferen
|
|||
|
||||
return oldCRT !== newCRT;
|
||||
}
|
||||
|
||||
export const queryDisplayNamePreferences = (database: Database, name?: string, value?: string) => {
|
||||
return queryPreferencesByCategoryAndName(database, DISPLAY_SETTINGS, name, value);
|
||||
};
|
||||
|
||||
export const querySavedPostsPreferences = (database: Database, postId?: string, value?: string) => {
|
||||
return queryPreferencesByCategoryAndName(database, SAVED_POST, postId, value);
|
||||
};
|
||||
|
||||
export const queryThemePreferences = (database: Database, teamId?: string) => {
|
||||
return queryPreferencesByCategoryAndName(database, THEME, teamId);
|
||||
};
|
||||
|
||||
export const querySidebarPreferences = (database: Database, name?: string) => {
|
||||
return queryPreferencesByCategoryAndName(database, SIDEBAR_SETTINGS, name);
|
||||
};
|
||||
|
||||
export const queryEmojiPreferences = (database: Database, name: string) => {
|
||||
return queryPreferencesByCategoryAndName(database, EMOJI, name);
|
||||
};
|
||||
|
||||
export const queryAdvanceSettingsPreferences = (database: Database, name?: string, value?: string) => {
|
||||
return queryPreferencesByCategoryAndName(database, ADVANCED_SETTINGS, name, value);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ export const getLastTeam = async (database: Database, ignoreIdForDefault?: strin
|
|||
export const getDefaultTeamId = async (database: Database, ignoreId?: string) => {
|
||||
const user = await getCurrentUser(database);
|
||||
const config = await getConfig(database);
|
||||
const teamOrderPreferences = await queryPreferencesByCategoryAndName(database, Preferences.TEAMS_ORDER, '').fetch();
|
||||
const teamOrderPreferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORIES.TEAMS_ORDER, '').fetch();
|
||||
let teamOrderPreference = '';
|
||||
if (teamOrderPreferences.length) {
|
||||
teamOrderPreference = teamOrderPreferences[0].value;
|
||||
|
|
@ -368,9 +368,9 @@ export const getAvailableTeamIds = async (database: Database, excludeTeamId: str
|
|||
if (teams) {
|
||||
let teamOrderPreference;
|
||||
if (preferences) {
|
||||
teamOrderPreference = getPreferenceValue(preferences, Preferences.TEAMS_ORDER, '', '') as string;
|
||||
teamOrderPreference = getPreferenceValue<string>(preferences, Preferences.CATEGORIES.TEAMS_ORDER, '', '');
|
||||
} else {
|
||||
const dbPreferences = await queryPreferencesByCategoryAndName(database, Preferences.TEAMS_ORDER, '').fetch();
|
||||
const dbPreferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORIES.TEAMS_ORDER, '').fetch();
|
||||
teamOrderPreference = dbPreferences[0].value;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ import {Database, Q, Query} from '@nozbe/watermelondb';
|
|||
import {combineLatest, of as of$, Observable} from 'rxjs';
|
||||
import {map, switchMap, distinctUntilChanged} from 'rxjs/operators';
|
||||
|
||||
import {Config, Preferences} from '@constants';
|
||||
import {Config} from '@constants';
|
||||
import {MM_TABLES} from '@constants/database';
|
||||
import {processIsCRTAllowed, processIsCRTEnabled} from '@utils/thread';
|
||||
|
||||
import {observeChannel} from './channel';
|
||||
import {observePost} from './post';
|
||||
import {queryPreferencesByCategoryAndName} from './preference';
|
||||
import {queryDisplayNamePreferences} from './preference';
|
||||
import {getConfig, observeConfigValue} from './system';
|
||||
|
||||
import type ServerDataOperator from '@database/operator/server_data_operator';
|
||||
|
|
@ -24,7 +24,7 @@ const {SERVER: {CHANNEL, POST, THREAD, THREADS_IN_TEAM, THREAD_PARTICIPANT, TEAM
|
|||
|
||||
export const getIsCRTEnabled = async (database: Database): Promise<boolean> => {
|
||||
const config = await getConfig(database);
|
||||
const preferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).fetch();
|
||||
const preferences = await queryDisplayNamePreferences(database).fetch();
|
||||
return processIsCRTEnabled(preferences, config?.CollapsedThreads, config?.FeatureFlagCollapsedThreads, config?.Version);
|
||||
};
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ export const observeIsCRTEnabled = (database: Database) => {
|
|||
const cfgValue = observeConfigValue(database, 'CollapsedThreads');
|
||||
const featureFlag = observeConfigValue(database, 'FeatureFlagCollapsedThreads');
|
||||
const version = observeConfigValue(database, 'Version');
|
||||
const preferences = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).observeWithColumns(['value']);
|
||||
const preferences = queryDisplayNamePreferences(database).observeWithColumns(['value']);
|
||||
return combineLatest([cfgValue, featureFlag, preferences, version]).pipe(
|
||||
map(
|
||||
([cfgV, ff, prefs, ver]) => processIsCRTEnabled(prefs, cfgV, ff, ver),
|
||||
|
|
|
|||
|
|
@ -5,11 +5,10 @@ import {Database, Q} from '@nozbe/watermelondb';
|
|||
import {combineLatest, of as of$} from 'rxjs';
|
||||
import {distinctUntilChanged, switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {MM_TABLES} from '@constants/database';
|
||||
import {getTeammateNameDisplaySetting} from '@helpers/api/preference';
|
||||
|
||||
import {queryPreferencesByCategoryAndName} from './preference';
|
||||
import {queryDisplayNamePreferences} from './preference';
|
||||
import {observeCurrentUserId, observeLicense, getCurrentUserId, getConfig, getLicense, observeConfigValue} from './system';
|
||||
|
||||
import type ServerDataOperator from '@database/operator/server_data_operator';
|
||||
|
|
@ -68,7 +67,7 @@ export const observeTeammateNameDisplay = (database: Database) => {
|
|||
const lockTeammateNameDisplay = observeConfigValue(database, 'LockTeammateNameDisplay');
|
||||
const teammateNameDisplay = observeConfigValue(database, 'TeammateNameDisplay');
|
||||
const license = observeLicense(database);
|
||||
const preferences = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).
|
||||
const preferences = queryDisplayNamePreferences(database).
|
||||
observeWithColumns(['value']);
|
||||
return combineLatest([lockTeammateNameDisplay, teammateNameDisplay, license, preferences]).pipe(
|
||||
switchMap(
|
||||
|
|
@ -80,7 +79,7 @@ export const observeTeammateNameDisplay = (database: Database) => {
|
|||
export async function getTeammateNameDisplay(database: Database) {
|
||||
const config = await getConfig(database);
|
||||
const license = await getLicense(database);
|
||||
const preferences = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).fetch();
|
||||
const preferences = await queryDisplayNamePreferences(database).fetch();
|
||||
return getTeammateNameDisplaySetting(preferences, config?.LockTeammateNameDisplay, config?.TeammateNameDisplay, license);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ import {combineLatest, of as of$} from 'rxjs';
|
|||
import {switchMap, distinctUntilChanged} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {getAdvanceSettingPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {observeMyChannel} from '@queries/servers/channel';
|
||||
import {queryPostsBetween, queryPostsInChannel} from '@queries/servers/post';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryAdvanceSettingsPreferences} from '@queries/servers/preference';
|
||||
import {observeIsCRTEnabled} from '@queries/servers/thread';
|
||||
|
||||
import ChannelPostList from './channel_post_list';
|
||||
|
|
@ -40,9 +40,9 @@ const enhanced = withObservables(['channelId', 'forceQueryAfterAppState'], ({dat
|
|||
return queryPostsBetween(database, earliest, latest, Q.desc, '', channelId, isCRTEnabled ? '' : undefined).observe();
|
||||
}),
|
||||
),
|
||||
shouldShowJoinLeaveMessages: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_ADVANCED_SETTINGS, Preferences.ADVANCED_FILTER_JOIN_LEAVE).
|
||||
shouldShowJoinLeaveMessages: queryAdvanceSettingsPreferences(database, Preferences.ADVANCED_FILTER_JOIN_LEAVE).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((preferences) => of$(getPreferenceAsBool(preferences, Preferences.CATEGORY_ADVANCED_SETTINGS, Preferences.ADVANCED_FILTER_JOIN_LEAVE, true))),
|
||||
switchMap((preferences) => of$(getAdvanceSettingPreferenceAsBool(preferences, Preferences.ADVANCED_FILTER_JOIN_LEAVE, true))),
|
||||
distinctUntilChanged(),
|
||||
),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ import {switchMap} from 'rxjs/operators';
|
|||
|
||||
import {Preferences} from '@constants';
|
||||
import {CUSTOM_STATUS_TIME_PICKER_INTERVALS_IN_MINUTES} from '@constants/custom_status';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {getCurrentMomentForTimezone, getRoundedTime, getUtcOffsetForTimeZone} from '@utils/helpers';
|
||||
import {makeStyleSheetFromTheme} from '@utils/theme';
|
||||
|
||||
|
|
@ -113,10 +113,10 @@ const DateTimeSelector = ({timezone, handleChange, isMilitaryTime, theme}: Props
|
|||
};
|
||||
|
||||
const enhanced = withObservables([], ({database}: WithDatabaseArgs) => ({
|
||||
isMilitaryTime: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).
|
||||
isMilitaryTime: queryDisplayNamePreferences(database).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap(
|
||||
(preferences) => of$(getPreferenceAsBool(preferences, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', false)),
|
||||
(preferences) => of$(getDisplayNamePreferenceAsBool(preferences, Preferences.USE_MILITARY_TIME, false)),
|
||||
),
|
||||
),
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@ import {of as of$} from 'rxjs';
|
|||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryEmojiPreferences} from '@queries/servers/preference';
|
||||
|
||||
import EmojiFiltered from './filtered';
|
||||
|
||||
import type {WithDatabaseArgs} from '@typings/database/database';
|
||||
|
||||
const enhanced = withObservables([], ({database}: WithDatabaseArgs) => ({
|
||||
skinTone: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_EMOJI, Preferences.EMOJI_SKINTONE).
|
||||
skinTone: queryEmojiPreferences(database, Preferences.EMOJI_SKINTONE).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((prefs) => of$(prefs?.[0]?.value ?? 'default')),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@ import {of as of$} from 'rxjs';
|
|||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryEmojiPreferences} from '@queries/servers/preference';
|
||||
|
||||
import PickerHeader from './header';
|
||||
|
||||
import type {WithDatabaseArgs} from '@typings/database/database';
|
||||
|
||||
const enhanced = withObservables([], ({database}: WithDatabaseArgs) => ({
|
||||
skinTone: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_EMOJI, Preferences.EMOJI_SKINTONE).
|
||||
skinTone: queryEmojiPreferences(database, Preferences.EMOJI_SKINTONE).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((prefs) => of$(prefs?.[0]?.value ?? 'default')),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ import {map, switchMap, combineLatestWith} from 'rxjs/operators';
|
|||
|
||||
import {General, Preferences} from '@constants';
|
||||
import {DMS_CATEGORY} from '@constants/categories';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {getSidebarPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {observeChannelsByCategoryChannelSortOrder, observeChannelsByLastPostAtInCategory} from '@queries/servers/categories';
|
||||
import {observeNotifyPropsByChannels, queryChannelsByNames, queryEmptyDirectAndGroupChannels} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryPreferencesByCategoryAndName, querySidebarPreferences} from '@queries/servers/preference';
|
||||
import {observeCurrentChannelId, observeCurrentUserId, observeLastUnreadChannelId} from '@queries/servers/system';
|
||||
import {getDirectChannelName} from '@utils/channel';
|
||||
|
||||
|
|
@ -96,7 +96,7 @@ const enhance = withObservables(['category', 'isTablet', 'locale'], ({category,
|
|||
|
||||
const currentChannelId = observeCurrentChannelId(database);
|
||||
|
||||
const hiddenDmIds = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, undefined, 'false').
|
||||
const hiddenDmIds = queryPreferencesByCategoryAndName(database, Preferences.CATEGORIES.DIRECT_CHANNEL_SHOW, undefined, 'false').
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((prefs: PreferenceModel[]) => {
|
||||
const names = prefs.map(dmMap);
|
||||
|
|
@ -112,7 +112,7 @@ const enhance = withObservables(['category', 'isTablet', 'locale'], ({category,
|
|||
switchMap(mapChannelIds),
|
||||
);
|
||||
|
||||
const hiddenChannelIds = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_GROUP_CHANNEL_SHOW, undefined, 'false').
|
||||
const hiddenChannelIds = queryPreferencesByCategoryAndName(database, Preferences.CATEGORIES.GROUP_CHANNEL_SHOW, undefined, 'false').
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap(mapPrefName),
|
||||
combineLatestWith(hiddenDmIds, emptyDmIds),
|
||||
|
|
@ -129,7 +129,7 @@ const enhance = withObservables(['category', 'isTablet', 'locale'], ({category,
|
|||
|
||||
let limit = of$(Preferences.CHANNEL_SIDEBAR_LIMIT_DMS_DEFAULT);
|
||||
if (category.type === DMS_CATEGORY) {
|
||||
limit = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_LIMIT_DMS).
|
||||
limit = querySidebarPreferences(database, Preferences.CHANNEL_SIDEBAR_LIMIT_DMS).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((val) => {
|
||||
return val[0] ? of$(parseInt(val[0].value, 10)) : of$(Preferences.CHANNEL_SIDEBAR_LIMIT_DMS_DEFAULT);
|
||||
|
|
@ -137,10 +137,10 @@ const enhance = withObservables(['category', 'isTablet', 'locale'], ({category,
|
|||
);
|
||||
}
|
||||
|
||||
const unreadsOnTop = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
const unreadsOnTop = querySidebarPreferences(database, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
observeWithColumns(['value']).
|
||||
pipe(
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getPreferenceAsBool(prefs, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS, false))),
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getSidebarPreferenceAsBool(prefs, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS))),
|
||||
);
|
||||
|
||||
const lastUnreadId = isTablet ? observeLastUnreadChannelId(database) : of$(undefined);
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ import {of as of$} from 'rxjs';
|
|||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {getSidebarPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryCategoriesByTeamIds} from '@queries/servers/categories';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {querySidebarPreferences} from '@queries/servers/preference';
|
||||
import {observeCurrentTeamId, observeOnlyUnreads} from '@queries/servers/system';
|
||||
|
||||
import Categories from './categories';
|
||||
|
|
@ -23,10 +23,10 @@ const enhanced = withObservables(
|
|||
const currentTeamId = observeCurrentTeamId(database);
|
||||
const categories = currentTeamId.pipe(switchMap((ctid) => queryCategoriesByTeamIds(database, [ctid]).observeWithColumns(['sort_order'])));
|
||||
|
||||
const unreadsOnTop = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
const unreadsOnTop = querySidebarPreferences(database, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
observeWithColumns(['value']).
|
||||
pipe(
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getPreferenceAsBool(prefs, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS, false))),
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getSidebarPreferenceAsBool(prefs, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS))),
|
||||
);
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ import {of as of$} from 'rxjs';
|
|||
import {combineLatestWith, map, switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {getSidebarPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {filterAndSortMyChannels, makeChannelsMap} from '@helpers/database';
|
||||
import {getChannelById, observeChannelsByLastPostAt, observeNotifyPropsByChannels, queryMyChannelUnreads} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {querySidebarPreferences} from '@queries/servers/preference';
|
||||
import {observeLastUnreadChannelId} from '@queries/servers/system';
|
||||
import {observeUnreadsAndMentionsInTeam} from '@queries/servers/thread';
|
||||
|
||||
|
|
@ -36,10 +36,10 @@ const concatenateChannelsArray = ([a, b]: CA) => {
|
|||
};
|
||||
|
||||
const enhanced = withObservables(['currentTeamId', 'isTablet', 'onlyUnreads'], ({currentTeamId, isTablet, database, onlyUnreads}: WithDatabaseProps) => {
|
||||
const unreadsOnTop = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
const unreadsOnTop = querySidebarPreferences(database, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
observeWithColumns(['value']).
|
||||
pipe(
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getPreferenceAsBool(prefs, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS, false))),
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getSidebarPreferenceAsBool(prefs, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS))),
|
||||
);
|
||||
|
||||
const getC = (lastUnreadChannelId: string) => getChannelById(database, lastUnreadChannelId);
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ import {of as of$} from 'rxjs';
|
|||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getSidebarPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {querySidebarPreferences} from '@queries/servers/preference';
|
||||
|
||||
import SubHeader from './subheader';
|
||||
|
||||
|
|
@ -16,10 +16,10 @@ import type {WithDatabaseArgs} from '@typings/database/database';
|
|||
import type PreferenceModel from '@typings/database/models/servers/preference';
|
||||
|
||||
const enhanced = withObservables([], ({database}: WithDatabaseArgs) => {
|
||||
const unreadsOnTop = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
const unreadsOnTop = querySidebarPreferences(database, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS).
|
||||
observeWithColumns(['value']).
|
||||
pipe(
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getPreferenceAsBool(prefs, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS, false))),
|
||||
switchMap((prefs: PreferenceModel[]) => of$(getSidebarPreferenceAsBool(prefs, Preferences.CHANNEL_SIDEBAR_GROUP_UNREADS))),
|
||||
);
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -7,10 +7,9 @@ import withObservables from '@nozbe/with-observables';
|
|||
import {of as of$} from 'rxjs';
|
||||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {queryAllCustomEmojis} from '@queries/servers/custom_emoji';
|
||||
import {queryPostsById} from '@queries/servers/post';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {querySavedPostsPreferences} from '@queries/servers/preference';
|
||||
import {observeConfigBooleanValue} from '@queries/servers/system';
|
||||
import {observeCurrentUser} from '@queries/servers/user';
|
||||
import {mapCustomEmojiNames} from '@utils/emoji/helpers';
|
||||
|
|
@ -29,7 +28,7 @@ const enhance = withObservables([], ({database}: WithDatabaseArgs) => {
|
|||
const currentUser = observeCurrentUser(database);
|
||||
|
||||
return {
|
||||
posts: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SAVED_POST, undefined, 'true').observeWithColumns(['name']).pipe(
|
||||
posts: querySavedPostsPreferences(database, undefined, 'true').observeWithColumns(['name']).pipe(
|
||||
switchMap((rows) => {
|
||||
if (!rows.length) {
|
||||
return of$([]);
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ import {combineLatest, of as of$} from 'rxjs';
|
|||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {observeAllowedThemesKeys, observeConfigBooleanValue} from '@queries/servers/system';
|
||||
import {observeCRTUserPreferenceDisplay, observeIsCRTEnabled} from '@queries/servers/thread';
|
||||
import {observeCurrentUser} from '@queries/servers/user';
|
||||
|
|
@ -34,10 +34,10 @@ const enhanced = withObservables([], ({database}: WithDatabaseArgs) => {
|
|||
isThemeSwitchingEnabled,
|
||||
isCRTEnabled: observeIsCRTEnabled(database),
|
||||
isCRTSwitchEnabled: observeCRTUserPreferenceDisplay(database),
|
||||
hasMilitaryTimeFormat: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).
|
||||
hasMilitaryTimeFormat: queryDisplayNamePreferences(database).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap(
|
||||
(preferences) => of$(getPreferenceAsBool(preferences, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', false)),
|
||||
(preferences) => of$(getDisplayNamePreferenceAsBool(preferences, Preferences.USE_MILITARY_TIME)),
|
||||
),
|
||||
),
|
||||
currentUser: observeCurrentUser(database),
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ const DisplayClock = ({componentId, currentUserId, hasMilitaryTimeFormat}: Displ
|
|||
const saveClockDisplayPreference = useCallback(() => {
|
||||
if (hasMilitaryTimeFormat !== isMilitaryTimeFormat) {
|
||||
const timePreference: PreferenceType = {
|
||||
category: Preferences.CATEGORY_DISPLAY_SETTINGS,
|
||||
category: Preferences.CATEGORIES.DISPLAY_SETTINGS,
|
||||
name: 'use_military_time',
|
||||
user_id: currentUserId,
|
||||
value: `${isMilitaryTimeFormat}`,
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ import {of as of$} from 'rxjs';
|
|||
import {switchMap} from 'rxjs/operators';
|
||||
|
||||
import {Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {observeCurrentUserId} from '@queries/servers/system';
|
||||
|
||||
import DisplayClock from './display_clock';
|
||||
|
|
@ -18,10 +18,10 @@ import type {WithDatabaseArgs} from '@typings/database/database';
|
|||
const enhanced = withObservables([], ({database}: WithDatabaseArgs) => {
|
||||
return {
|
||||
currentUserId: observeCurrentUserId(database),
|
||||
hasMilitaryTimeFormat: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).
|
||||
hasMilitaryTimeFormat: queryDisplayNamePreferences(database).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap(
|
||||
(preferences) => of$(getPreferenceAsBool(preferences, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', false)),
|
||||
(preferences) => of$(getDisplayNamePreferenceAsBool(preferences, Preferences.USE_MILITARY_TIME)),
|
||||
),
|
||||
),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ const DisplayCRT = ({componentId, currentUserId, isCRTEnabled}: Props) => {
|
|||
const saveCRTPreference = useCallback(() => {
|
||||
if (isCRTEnabled !== isEnabled) {
|
||||
const crtPreference: PreferenceType = {
|
||||
category: Preferences.CATEGORY_DISPLAY_SETTINGS,
|
||||
category: Preferences.CATEGORIES.DISPLAY_SETTINGS,
|
||||
name: Preferences.COLLAPSED_REPLY_THREADS,
|
||||
user_id: currentUserId,
|
||||
value: isEnabled ? Preferences.COLLAPSED_REPLY_THREADS_ON : Preferences.COLLAPSED_REPLY_THREADS_OFF,
|
||||
|
|
|
|||
|
|
@ -40,10 +40,10 @@ const DisplayTheme = ({allowedThemeKeys, componentId, currentTeamId, currentUser
|
|||
}
|
||||
|
||||
const pref: PreferenceType = {
|
||||
category: Preferences.CATEGORY_THEME,
|
||||
category: Preferences.CATEGORIES.THEME,
|
||||
name: currentTeamId,
|
||||
user_id: currentUserId,
|
||||
value: JSON.stringify(Preferences.THEMES[allowedTheme]),
|
||||
value: JSON.stringify(Preferences.THEMES[allowedTheme as ThemeKey]),
|
||||
};
|
||||
savePreference(serverUrl, [pref]);
|
||||
}, [allowedThemeKeys, currentTeamId, initialTheme, serverUrl]);
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ export const ThemeTiles = ({allowedThemeKeys, onThemeChange, selectedTheme}: The
|
|||
return (
|
||||
<View style={styles.tilesContainer}>
|
||||
{
|
||||
allowedThemeKeys.map((themeKey: string) => {
|
||||
allowedThemeKeys.map((themeKey: ThemeKey) => {
|
||||
if (!Preferences.THEMES[themeKey] || !selectedTheme) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ const enhanced = withObservables([], ({database}: WithDatabaseArgs) => {
|
|||
return {
|
||||
currentUser: observeCurrentUser(database),
|
||||
enableEmailBatching: observeConfigBooleanValue(database, 'EnableEmailBatching'),
|
||||
emailInterval: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_NOTIFICATIONS).
|
||||
emailInterval: queryPreferencesByCategoryAndName(database, Preferences.CATEGORIES.NOTIFICATIONS).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((preferences) => of$(getPreferenceValue(preferences, Preferences.CATEGORY_NOTIFICATIONS, Preferences.EMAIL_INTERVAL, Preferences.INTERVAL_NOT_SET))),
|
||||
switchMap((preferences) => of$(getPreferenceValue<string>(preferences, Preferences.CATEGORIES.NOTIFICATIONS, Preferences.EMAIL_INTERVAL, Preferences.INTERVAL_NOT_SET))),
|
||||
),
|
||||
isCRTEnabled: observeIsCRTEnabled(database),
|
||||
sendEmailNotifications: observeConfigBooleanValue(database, 'SendEmailNotifications'),
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ const NotificationEmail = ({componentId, currentUser, emailInterval, enableEmail
|
|||
|
||||
if (notifyInterval !== initialInterval) {
|
||||
const emailIntervalPreference = {
|
||||
category: Preferences.CATEGORY_NOTIFICATIONS,
|
||||
category: Preferences.CATEGORIES.NOTIFICATIONS,
|
||||
name: Preferences.EMAIL_INTERVAL,
|
||||
user_id: currentUser.id,
|
||||
value: notifyInterval,
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ const enhanced = withObservables([], ({database}: WithDatabaseArgs) => {
|
|||
isCRTEnabled: observeIsCRTEnabled(database),
|
||||
enableAutoResponder: observeConfigBooleanValue(database, 'ExperimentalEnableAutomaticReplies'),
|
||||
enableEmailBatching: observeConfigBooleanValue(database, 'EnableEmailBatching'),
|
||||
emailInterval: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_NOTIFICATIONS).
|
||||
emailInterval: queryPreferencesByCategoryAndName(database, Preferences.CATEGORIES.NOTIFICATIONS).
|
||||
observeWithColumns(['value']).pipe(
|
||||
switchMap((preferences) => of$(getPreferenceValue(preferences, Preferences.CATEGORY_NOTIFICATIONS, Preferences.EMAIL_INTERVAL, Preferences.INTERVAL_NOT_SET))),
|
||||
switchMap((preferences) => of$(getPreferenceValue<string>(preferences, Preferences.CATEGORIES.NOTIFICATIONS, Preferences.EMAIL_INTERVAL, Preferences.INTERVAL_NOT_SET))),
|
||||
),
|
||||
sendEmailNotifications: observeConfigBooleanValue(database, 'SendEmailNotifications'),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ import {of as of$} from 'rxjs';
|
|||
import {map, switchMap} from 'rxjs/operators';
|
||||
|
||||
import {General, Preferences} from '@constants';
|
||||
import {getPreferenceAsBool} from '@helpers/api/preference';
|
||||
import {getDisplayNamePreferenceAsBool} from '@helpers/api/preference';
|
||||
import {observeChannel} from '@queries/servers/channel';
|
||||
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
|
||||
import {queryDisplayNamePreferences} from '@queries/servers/preference';
|
||||
import {observeConfigBooleanValue, observeCurrentTeamId, observeCurrentUserId} from '@queries/servers/system';
|
||||
import {observeTeammateNameDisplay, observeUser, observeUserIsChannelAdmin, observeUserIsTeamAdmin} from '@queries/servers/user';
|
||||
import {isSystemAdmin} from '@utils/user';
|
||||
|
|
@ -37,9 +37,9 @@ const enhanced = withObservables([], ({channelId, database, userId}: EnhancedPro
|
|||
const systemAdmin = user.pipe(switchMap((u) => of$(u?.roles ? isSystemAdmin(u.roles) : false)));
|
||||
const enablePostIconOverride = observeConfigBooleanValue(database, 'EnablePostIconOverride');
|
||||
const enablePostUsernameOverride = observeConfigBooleanValue(database, 'EnablePostUsernameOverride');
|
||||
const preferences = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_DISPLAY_SETTINGS).
|
||||
const preferences = queryDisplayNamePreferences(database).
|
||||
observeWithColumns(['value']);
|
||||
const isMilitaryTime = preferences.pipe(map((prefs) => getPreferenceAsBool(prefs, Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', false)));
|
||||
const isMilitaryTime = preferences.pipe(map((prefs) => getDisplayNamePreferenceAsBool(prefs, Preferences.USE_MILITARY_TIME)));
|
||||
const isCustomStatusEnabled = observeConfigBooleanValue(database, 'EnableCustomUserStatuses');
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// See LICENSE.txt for license information.
|
||||
|
||||
import {Config, Preferences} from '@constants';
|
||||
import {getPreferenceValue} from '@helpers/api/preference';
|
||||
import {getDisplayNamePreference} from '@helpers/api/preference';
|
||||
import {isMinimumServerVersion} from '@utils/helpers';
|
||||
|
||||
import type PreferenceModel from '@typings/database/models/servers/preference';
|
||||
|
|
@ -16,7 +16,7 @@ export function processIsCRTEnabled(preferences: PreferenceModel[]|PreferenceTyp
|
|||
if (configValue === Config.DEFAULT_ON) {
|
||||
preferenceDefault = Preferences.COLLAPSED_REPLY_THREADS_ON;
|
||||
}
|
||||
const preference = getPreferenceValue(preferences, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.COLLAPSED_REPLY_THREADS, preferenceDefault);
|
||||
const preference = getDisplayNamePreference<string>(preferences, Preferences.COLLAPSED_REPLY_THREADS, preferenceDefault);
|
||||
|
||||
// CRT Feature flag removed in 7.6
|
||||
const isFeatureFlagEnabled = version && isMinimumServerVersion(version, 7, 6) ? true : featureFlag === Config.TRUE;
|
||||
|
|
|
|||
Loading…
Reference in a new issue