forked from Ivasoft/mattermost-mobile
feat: server_url and theme context (#5540)
This commit is contained in:
@@ -6,8 +6,15 @@ import {Database} from '@nozbe/watermelondb';
|
||||
import DatabaseProvider from '@nozbe/watermelondb/DatabaseProvider';
|
||||
|
||||
import {MM_TABLES} from '@constants/database';
|
||||
import ServerUrlProvider from '@context/server_url';
|
||||
import ThemeProvider from '@context/theme';
|
||||
import DatabaseManager from '@database/manager';
|
||||
import Servers from '@app/database/models/app/servers';
|
||||
import Servers from '@database/models/app/servers';
|
||||
|
||||
type State = {
|
||||
database: Database;
|
||||
serverUrl: string;
|
||||
}
|
||||
|
||||
const {SERVERS} = MM_TABLES.APP;
|
||||
|
||||
@@ -15,14 +22,18 @@ export function withServerDatabase<T>(
|
||||
Component: ComponentType<T>,
|
||||
): ComponentType<T> {
|
||||
return function ServerDatabaseComponent(props) {
|
||||
const [database, setDatabase] = useState<Database|undefined>();
|
||||
const [state, setState] = useState<State|undefined>();
|
||||
const db = DatabaseManager.appDatabase?.database;
|
||||
|
||||
const observer = async (servers: Servers[]) => {
|
||||
const server = servers.reduce((a, b) => (b.lastActiveAt > a.lastActiveAt ? b : a));
|
||||
|
||||
const serverDatabase = DatabaseManager.serverDatabases[server.url]?.database;
|
||||
setDatabase(serverDatabase);
|
||||
const serverDatabase = DatabaseManager.serverDatabases[server?.url]?.database;
|
||||
|
||||
setState({
|
||||
database: serverDatabase,
|
||||
serverUrl: server?.url,
|
||||
});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
@@ -37,15 +48,19 @@ export function withServerDatabase<T>(
|
||||
};
|
||||
}, []);
|
||||
|
||||
if (!database) {
|
||||
if (!state?.database) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<DatabaseProvider
|
||||
database={(database as Database)}
|
||||
database={(state.database)}
|
||||
>
|
||||
<Component {...props}/>
|
||||
<ServerUrlProvider url={state.serverUrl}>
|
||||
<ThemeProvider database={state.database}>
|
||||
<Component {...props}/>
|
||||
</ThemeProvider>
|
||||
</ServerUrlProvider>
|
||||
</DatabaseProvider>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -17,8 +17,8 @@ import {schema as appSchema} from '@app/database/schema/app';
|
||||
import ServerDatabaseMigrations from '@database/migration/server';
|
||||
import {Channel, ChannelInfo, ChannelMembership, CustomEmoji, Draft, File,
|
||||
Group, GroupMembership, GroupsInChannel, GroupsInTeam, MyChannel, MyChannelSettings, MyTeam,
|
||||
Post, PostMetadata, PostsInChannel, PostsInThread, Preference, Reaction, Role,
|
||||
SlashCommand, System, Team, TeamChannelHistory, TeamMembership, TeamSearchHistory,
|
||||
Post, PostMetadata, PostsInChannel, PostsInThread, PreferenceModel, Reaction, Role,
|
||||
SlashCommand, SystemModel, Team, TeamChannelHistory, TeamMembership, TeamSearchHistory,
|
||||
TermsOfService, User,
|
||||
} from '@database/models/server';
|
||||
import {serverSchema} from '@database/schema/server';
|
||||
@@ -69,11 +69,11 @@ class DatabaseManager {
|
||||
PostMetadata,
|
||||
PostsInChannel,
|
||||
PostsInThread,
|
||||
Preference,
|
||||
PreferenceModel,
|
||||
Reaction,
|
||||
Role,
|
||||
SlashCommand,
|
||||
System,
|
||||
SystemModel,
|
||||
Team,
|
||||
TeamChannelHistory,
|
||||
TeamMembership,
|
||||
|
||||
@@ -17,8 +17,8 @@ import {schema as appSchema} from '@app/database/schema/app';
|
||||
import ServerDatabaseMigrations from '@database/migration/server';
|
||||
import {Channel, ChannelInfo, ChannelMembership, CustomEmoji, Draft, File,
|
||||
Group, GroupMembership, GroupsInChannel, GroupsInTeam, MyChannel, MyChannelSettings, MyTeam,
|
||||
Post, PostMetadata, PostsInChannel, PostsInThread, Preference, Reaction, Role,
|
||||
SlashCommand, System, Team, TeamChannelHistory, TeamMembership, TeamSearchHistory,
|
||||
Post, PostMetadata, PostsInChannel, PostsInThread, PreferenceModel, Reaction, Role,
|
||||
SlashCommand, SystemModel, Team, TeamChannelHistory, TeamMembership, TeamSearchHistory,
|
||||
TermsOfService, User,
|
||||
} from '@database/models/server';
|
||||
import {serverSchema} from '@database/schema/server';
|
||||
@@ -47,8 +47,8 @@ class DatabaseManager {
|
||||
this.serverModels = [
|
||||
Channel, ChannelInfo, ChannelMembership, CustomEmoji, Draft, File,
|
||||
Group, GroupMembership, GroupsInChannel, GroupsInTeam, MyChannel, MyChannelSettings, MyTeam,
|
||||
Post, PostMetadata, PostsInChannel, PostsInThread, Preference, Reaction, Role,
|
||||
SlashCommand, System, Team, TeamChannelHistory, TeamMembership, TeamSearchHistory,
|
||||
Post, PostMetadata, PostsInChannel, PostsInThread, PreferenceModel, Reaction, Role,
|
||||
SlashCommand, SystemModel, Team, TeamChannelHistory, TeamMembership, TeamSearchHistory,
|
||||
TermsOfService, User,
|
||||
];
|
||||
|
||||
|
||||
@@ -18,11 +18,11 @@ export {default as PostMetadata} from './post_metadata';
|
||||
export {default as PostsInChannel} from './posts_in_channel';
|
||||
export {default as PostsInThread} from './posts_in_thread';
|
||||
export {default as Post} from './post';
|
||||
export {default as Preference} from './preference';
|
||||
export {default as PreferenceModel} from './preference';
|
||||
export {default as Reaction} from './reaction';
|
||||
export {default as Role} from './role';
|
||||
export {default as SlashCommand} from './slash_command';
|
||||
export {default as System} from './system';
|
||||
export {default as SystemModel} from './system';
|
||||
export {default as TeamChannelHistory} from './team_channel_history';
|
||||
export {default as TeamMembership} from './team_membership';
|
||||
export {default as TeamSearchHistory} from './team_search_history';
|
||||
|
||||
Reference in New Issue
Block a user