diff --git a/src/app/pages/client/explore/Explore.tsx b/src/app/pages/client/explore/Explore.tsx index db1c00ce..661c6053 100644 --- a/src/app/pages/client/explore/Explore.tsx +++ b/src/app/pages/client/explore/Explore.tsx @@ -1,4 +1,4 @@ -import React, { ReactNode, useCallback, useRef, useState } from 'react'; +import React, { ReactNode, useCallback, useMemo, useRef, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import FocusTrap from 'focus-trap-react'; import { @@ -45,9 +45,16 @@ import { useExploreServers } from '../../../hooks/useExploreServers'; type AddExploreServerPromptProps = { onSubmit: (server: string) => Promise; + header: ReactNode; children: ReactNode; + selected?: boolean; }; -export function AddExploreServerPrompt({ onSubmit, children }: AddExploreServerPromptProps) { +export function AddExploreServerPrompt({ + onSubmit, + header, + children, + selected = false, +}: AddExploreServerPromptProps) { const [dialog, setDialog] = useState(false); const serverInputRef = useRef(null); @@ -89,9 +96,7 @@ export function AddExploreServerPrompt({ onSubmit, children }: AddExploreServerP variant="Surface" size="500" > - - Add Server - + {header} setDialog(false)} radii="300"> @@ -137,7 +142,7 @@ export function AddExploreServerPrompt({ onSubmit, children }: AddExploreServerP - + setDialog(true)}> {children} @@ -220,12 +225,23 @@ export function Explore() { const userId = mx.getUserId(); const clientConfig = useClientConfig(); const userServer = userId ? getMxIdServer(userId) : undefined; - const featuredServers = - clientConfig.featuredCommunities?.servers?.filter((server) => server !== userServer) ?? []; + const featuredServers = useMemo( + () => + clientConfig.featuredCommunities?.servers?.filter((server) => server !== userServer) ?? [], + [clientConfig, userServer] + ); const [exploreServers, addServer, removeServer] = useExploreServers(); const featuredSelected = useExploreFeaturedSelected(); const selectedServer = useExploreServer(); + const exploringUnlistedServer = useMemo( + () => + selectedServer !== undefined && + selectedServer !== userServer && + featuredServers.indexOf(selectedServer) === -1 && + exploreServers.indexOf(selectedServer) === -1, + [exploreServers, featuredServers, selectedServer, userServer] + ); const addServerCallback = useCallback( async (server: string) => { @@ -243,6 +259,13 @@ export function Explore() { [removeServer, navigate] ); + const exploreUnlistedServerCallback = useCallback( + async (server: string) => { + navigate(getExploreServerPath(server)); + }, + [navigate] + ); + return ( @@ -277,6 +300,22 @@ export function Explore() { {userServer && ( )} + View Server} + selected={exploringUnlistedServer} + > + + + + + + + View with Address + + + + @@ -299,9 +338,10 @@ export function Explore() { onRemove={() => removeServerCallback(server)} /> ))} - - - + View Server} + > @@ -313,7 +353,7 @@ export function Explore() { - +