// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import DatabaseProvider from '@nozbe/watermelondb/DatabaseProvider'; import React, {type ComponentType, useEffect, useState} from 'react'; import ServerProvider from '@context/server'; import ThemeProvider from '@context/theme'; import UserLocaleProvider from '@context/user_locale'; import DatabaseManager from '@database/manager'; import {subscribeActiveServers} from '@database/subscription/servers'; import type {Database} from '@nozbe/watermelondb'; import type ServersModel from '@typings/database/models/app/servers'; type State = { database: Database; serverUrl: string; serverDisplayName: string; }; export function withServerDatabase(Component: ComponentType): ComponentType { return function ServerDatabaseComponent(props: T) { const [state, setState] = useState(); const observer = (servers: ServersModel[]) => { const server = servers?.length ? servers.reduce((a, b) => (b.lastActiveAt > a.lastActiveAt ? b : a), ) : undefined; if (server) { const database = DatabaseManager.serverDatabases[server.url]?.database; if (database) { setState({ database, serverUrl: server.url, serverDisplayName: server.displayName, }); } } else { setState(undefined); } }; useEffect(() => { const subscription = subscribeActiveServers(observer); return () => { subscription?.unsubscribe(); }; }, []); if (!state?.database) { return null; } return ( ); }; }