From 16524314aa0eaf2cd2d5ce2865c49cfb0cf39abf Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Thu, 3 Feb 2022 11:44:49 -0300 Subject: [PATCH] Sort servers list --- app/database/subscription/servers.ts | 2 +- .../home/channel_list/servers/index.tsx | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/database/subscription/servers.ts b/app/database/subscription/servers.ts index e152f37d8b..c95cbbdb4d 100644 --- a/app/database/subscription/servers.ts +++ b/app/database/subscription/servers.ts @@ -23,7 +23,7 @@ export const subscribeAllServers = (observer: (servers: ServersModel[]) => void) const db = DatabaseManager.appDatabase?.database; return db?. get(SERVERS). - query(Q.sortBy('display_name', Q.asc)). + query(). observeWithColumns(['last_active_at']). subscribe(observer); }; diff --git a/app/screens/home/channel_list/servers/index.tsx b/app/screens/home/channel_list/servers/index.tsx index 062e665a40..722cb623f0 100644 --- a/app/screens/home/channel_list/servers/index.tsx +++ b/app/screens/home/channel_list/servers/index.tsx @@ -2,7 +2,7 @@ // See LICENSE.txt for license information. import React, {useCallback, useEffect, useRef, useState} from 'react'; -import {useIntl} from 'react-intl'; +import {IntlShape, useIntl} from 'react-intl'; import {StyleSheet} from 'react-native'; import ServerIcon from '@components/server_icon'; @@ -34,6 +34,20 @@ const styles = StyleSheet.create({ }, }); +const sortServers = (servers: ServersModel[], intl: IntlShape) => { + function serverName(s: ServersModel) { + if (s.displayName === s.url) { + return intl.formatMessage({id: 'servers.default', defaultMessage: 'Default Server'}); + } + + return s.displayName; + } + + return servers.sort((a, b) => { + return serverName(a).localeCompare(serverName(b)); + }); +}; + export default function Servers() { const intl = useIntl(); const [total, setTotal] = useState({mentions: 0, unread: false}); @@ -70,7 +84,7 @@ export default function Servers() { }; const serversObserver = async (servers: ServersModel[]) => { - registeredServers.current = servers; + registeredServers.current = sortServers(servers, intl); // unsubscribe mentions from servers that were removed const allUrls = servers.map((s) => s.url);