feat: wire ConnectInstanceModal into FriendsPage add-friend input

This commit is contained in:
Jannis Braun
2026-03-24 18:37:17 +01:00
parent 13485bc20a
commit 0dc5e8f8f4
@@ -1,6 +1,7 @@
import React, { useEffect, useState, useRef, useCallback } from 'react'; import React, { useEffect, useState, useRef, useCallback } from 'react';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { useSocialStore, type TaggedFriend, type TaggedFriendRequest } from '../../stores/socialStore'; import { useSocialStore, type TaggedFriend, type TaggedFriendRequest, InstanceNotConnectedError, InstanceDisconnectedError } from '../../stores/socialStore';
import { ConnectInstanceModal } from '../modals/ConnectInstanceModal';
import { useDiscoverStore, type TaggedDiscoverUser } from '../../stores/discoverStore'; import { useDiscoverStore, type TaggedDiscoverUser } from '../../stores/discoverStore';
import { useSpaceStore } from '../../stores/spaceStore'; import { useSpaceStore } from '../../stores/spaceStore';
import { useInstanceStore } from '../../stores/instanceStore'; import { useInstanceStore } from '../../stores/instanceStore';
@@ -27,6 +28,12 @@ export function FriendsPage({ mobile }: FriendsPageProps) {
const [activeTab, setActiveTab] = useState<Tab>('online'); const [activeTab, setActiveTab] = useState<Tab>('online');
const [addUsername, setAddUsername] = useState(''); const [addUsername, setAddUsername] = useState('');
const [addStatus, setAddStatus] = useState<{ type: 'success' | 'error', message: string } | null>(null); const [addStatus, setAddStatus] = useState<{ type: 'success' | 'error', message: string } | null>(null);
const addToast = useUIStore((s) => s.addToast);
const [connectModal, setConnectModal] = useState<{
domain: string;
isReconnect: boolean;
username: string;
} | null>(null);
const navigate = useNavigate(); const navigate = useNavigate();
const addDmChannel = useSpaceStore((s) => s.addDmChannel); const addDmChannel = useSpaceStore((s) => s.addDmChannel);
@@ -63,7 +70,28 @@ export function FriendsPage({ mobile }: FriendsPageProps) {
setAddStatus({ type: 'success', message: `Success! Your friend request to ${addUsername} has been sent.` }); setAddStatus({ type: 'success', message: `Success! Your friend request to ${addUsername} has been sent.` });
setAddUsername(''); setAddUsername('');
} catch (err) { } catch (err) {
setAddStatus({ type: 'error', message: (err as Error).message }); if (err instanceof InstanceNotConnectedError) {
setConnectModal({ domain: err.domain, isReconnect: false, username: addUsername.trim() });
} else if (err instanceof InstanceDisconnectedError) {
setConnectModal({ domain: err.domain, isReconnect: true, username: addUsername.trim() });
} else {
setAddStatus({ type: 'error', message: (err as Error).message });
}
}
};
const handleAddFriendConnected = async (result: 'new' | 'reconnect') => {
const username = connectModal?.username;
const domain = connectModal?.domain;
setConnectModal(null);
if (!username) return;
try {
await sendFriendRequest(username);
setAddStatus({ type: 'success', message: `Connected to ${domain} — friend request sent!` });
setAddUsername('');
} catch (err) {
addToast((err as Error).message, 'warning');
} }
}; };
@@ -367,6 +395,16 @@ export function FriendsPage({ mobile }: FriendsPageProps) {
)} )}
{renderTabContent()} {renderTabContent()}
{connectModal && (
<ConnectInstanceModal
domain={connectModal.domain}
targetDisplayName={connectModal.username}
isReconnect={connectModal.isReconnect}
onConnected={handleAddFriendConnected}
onCancel={() => setConnectModal(null)}
/>
)}
</div> </div>
); );
} }