diff --git a/config.json b/config.json
index de6015a1..e1f477d8 100644
--- a/config.json
+++ b/config.json
@@ -9,7 +9,6 @@
"xmr.se"
],
"allowCustomHomeservers": true,
-
"featuredCommunities": {
"openAsDefault": false,
"spaces": [
@@ -28,11 +27,16 @@
"#PrivSec.dev:arcticfoxes.net",
"#disroot:aria-net.org"
],
- "servers": ["envs.net", "matrix.org", "monero.social", "mozilla.org"]
+ "servers": [
+ "envs.net",
+ "matrix.org",
+ "monero.social",
+ "mozilla.org"
+ ],
+ "directoryServer": "matrixrooms.info"
},
-
"hashRouter": {
"enabled": false,
"basename": "/"
}
-}
+}
\ No newline at end of file
diff --git a/src/app/hooks/router/useExploreSelected.ts b/src/app/hooks/router/useExploreSelected.ts
index be7615ca..7ca00a13 100644
--- a/src/app/hooks/router/useExploreSelected.ts
+++ b/src/app/hooks/router/useExploreSelected.ts
@@ -1,5 +1,6 @@
import { useMatch, useParams } from 'react-router-dom';
import { getExploreFeaturedPath, getExplorePath } from '../../pages/pathUtils';
+import { useClientConfig } from '../useClientConfig';
export const useExploreSelected = (): boolean => {
const match = useMatch({
@@ -26,3 +27,8 @@ export const useExploreServer = (): string | undefined => {
return server;
};
+
+export const useDirectoryServer = (): string | undefined => {
+ const { featuredCommunities } = useClientConfig();
+ return featuredCommunities?.directoryServer;
+};
diff --git a/src/app/hooks/useClientConfig.ts b/src/app/hooks/useClientConfig.ts
index e5fc6cc6..98d7eb92 100644
--- a/src/app/hooks/useClientConfig.ts
+++ b/src/app/hooks/useClientConfig.ts
@@ -15,6 +15,7 @@ export type ClientConfig = {
spaces?: string[];
rooms?: string[];
servers?: string[];
+ directoryServer?: string;
};
hashRouter?: HashRouterConfig;
diff --git a/src/app/pages/client/explore/Explore.tsx b/src/app/pages/client/explore/Explore.tsx
index 3733b615..4e06830e 100644
--- a/src/app/pages/client/explore/Explore.tsx
+++ b/src/app/pages/client/explore/Explore.tsx
@@ -32,6 +32,7 @@ import {
} from '../../../components/nav';
import { getExploreFeaturedPath, getExploreServerPath } from '../../pathUtils';
import {
+ useDirectoryServer,
useExploreFeaturedRooms,
useExploreServer,
} from '../../../hooks/router/useExploreSelected';
@@ -250,28 +251,31 @@ export function Explore() {
useNavToActivePathMapper('explore');
const userId = mx.getUserId();
const userServer = userId ? getMxIdServer(userId) : undefined;
+ const directoryServer = useDirectoryServer();
const [bookmarkedServers, addServerBookmark, removeServerBookmark] = useBookmarkedServers();
-
const selectedServer = useExploreServer();
+
const exploringFeaturedRooms = useExploreFeaturedRooms();
+ const exploringDirectory = directoryServer !== undefined && selectedServer === directoryServer;
const exploringUnlistedServer = useMemo(
() =>
!(
selectedServer === undefined ||
selectedServer === userServer ||
+ exploringDirectory ||
bookmarkedServers.includes(selectedServer)
),
- [bookmarkedServers, selectedServer, userServer]
+ [bookmarkedServers, selectedServer, userServer, exploringDirectory]
);
const viewServerCallback = useCallback(
async (server: string, saveBookmark: boolean) => {
- if (saveBookmark && server !== userServer && selectedServer) {
+ if (saveBookmark && server !== userServer && server !== directoryServer && selectedServer) {
await addServerBookmark(server);
}
navigate(getExploreServerPath(server));
},
- [addServerBookmark, navigate, userServer, selectedServer]
+ [addServerBookmark, navigate, userServer, directoryServer, selectedServer]
);
const removeServerBookmarkCallback = useCallback(
@@ -312,6 +316,24 @@ export function Explore() {
+ {directoryServer && (
+
+
+
+
+
+
+
+
+
+ Public Room Directory
+
+
+
+
+
+
+ )}
{userServer && (
useMemo(
@@ -349,6 +352,7 @@ export function PublicRooms() {
const mx = useMatrixClient();
const userId = mx.getUserId();
const userServer = userId && getMxIdServer(userId);
+ const directoryServer = useDirectoryServer();
const allRooms = useAtomValue(allRoomsAtom);
const { navigateSpace, navigateRoom } = useRoomNavigate();
const screenSize = useScreenSizeContext();
@@ -363,6 +367,15 @@ export function PublicRooms() {
const [bookmarkedServers, addServerBookmark, removeServerBookmark] = useBookmarkedServers();
const isUserHomeserver = server !== undefined && server === userServer;
const isBookmarkedServer = server !== undefined && bookmarkedServers.includes(server);
+ const isDirectoryServer = server !== undefined && server === directoryServer;
+ let headerIcon: IconSrc;
+ if (isUserHomeserver) {
+ headerIcon = Icons.Home;
+ } else if (isDirectoryServer) {
+ headerIcon = Icons.Search;
+ } else {
+ headerIcon = Icons.Server;
+ }
const currentLimit: number = useMemo(() => {
const limitParam = serverSearchParams.limit;
@@ -526,40 +539,70 @@ export function PublicRooms() {
)}
- {screenSize !== ScreenSize.Mobile && (
-
- )}
+ {screenSize !== ScreenSize.Mobile && }
- {server}
+ {isDirectoryServer ? 'Public Room Directory' : server}
-
- {isBookmarkedServer ? 'Remove Bookmark' : 'Add Bookmark'}
-
- }
- >
- {(triggerRef) =>
- !isUserHomeserver && (
-
- handleBookmarkAction(
- isBookmarkedServer ? removeServerBookmark : addServerBookmark
- )
- }
- ref={triggerRef}
- disabled={bookmarkActionLoading}
+ {isDirectoryServer ? (
+
+ provided by {directoryServer}
+
+ }
+ >
+ {(triggerRef) => (
+ }
>
-
-
- )
- }
-
+
+ provided by {directoryServer}
+
+
+ )}
+
+ ) : (
+
+ {isBookmarkedServer ? 'Remove Bookmark' : 'Add Bookmark'}
+
+ }
+ >
+ {(triggerRef) =>
+ !isUserHomeserver && (
+
+ handleBookmarkAction(
+ isBookmarkedServer ? removeServerBookmark : addServerBookmark
+ )
+ }
+ ref={triggerRef}
+ disabled={bookmarkActionLoading}
+ >
+
+
+ )
+ }
+
+ )}
>
)}