[Gekidou] Extract common observers to queries (#5984)

* 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
This commit is contained in:
Daniel Espino García
2022-03-23 13:19:29 +01:00
committed by GitHub
parent 3e94958ab0
commit 7c642b1e80
179 changed files with 1615 additions and 2011 deletions

View File

@@ -1,19 +1,17 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {Q} from '@nozbe/watermelondb';
import withObservables from '@nozbe/with-observables';
import React, {ComponentType, createContext, useEffect} from 'react';
import {Appearance, EventSubscription} from 'react-native';
import {of as of$} from 'rxjs';
import {catchError, switchMap} from 'rxjs/operators';
import {Preferences} from '@constants';
import {MM_TABLES, SYSTEM_IDENTIFIERS} from '@constants/database';
import {queryPreferencesByCategoryAndName} from '@queries/servers/preference';
import {observeCurrentTeamId} from '@queries/servers/system';
import EphemeralStore from '@store/ephemeral_store';
import {setNavigationStackStyles, setThemeDefaults} from '@utils/theme';
import type {PreferenceModel, SystemModel} from '@database/models/server';
import type {PreferenceModel} from '@database/models/server';
import type Database from '@nozbe/watermelondb/Database';
type Props = {
@@ -26,8 +24,6 @@ type WithThemeProps = {
theme: Theme;
}
const {SERVER: {PREFERENCE, SYSTEM}} = MM_TABLES;
export function getDefaultThemeByAppearance(): Theme {
if (Appearance.getColorScheme() === 'dark') {
return Preferences.THEMES.onyx;
@@ -98,11 +94,8 @@ export function useTheme(): Theme {
}
const enhancedThemeProvider = withObservables([], ({database}: {database: Database}) => ({
currentTeamId: database.get<SystemModel>(SYSTEM).findAndObserve(SYSTEM_IDENTIFIERS.CURRENT_TEAM_ID).pipe(
switchMap((row) => of$(row.value)),
catchError(() => of$(undefined)),
),
themes: database.get(PREFERENCE).query(Q.where('category', Preferences.CATEGORY_THEME)).observeWithColumns(['value']),
currentTeamId: observeCurrentTeamId(database),
themes: queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_THEME).observeWithColumns(['value']),
}));
export default enhancedThemeProvider(ThemeProvider);