feat: Enable direct navigation to specific message conversations via URL parameters and initiate new conversations from the network page.

This commit is contained in:
pradeepkumar
2026-03-15 01:03:44 +05:30
parent 50640a5828
commit 65d3d6c9dc
4 changed files with 40 additions and 5 deletions

View File

@@ -1,11 +1,15 @@
'use client'; 'use client';
import { useSearchParams } from 'next/navigation';
import { MessagingPage } from '@/components/message'; import { MessagingPage } from '@/components/message';
export default function AgentMessagePage() { export default function AgentMessagePage() {
const searchParams = useSearchParams();
const conversationId = searchParams.get('conversationId');
return ( return (
<div className="max-w-7xl mx-auto px-4 lg:px-8 py-6"> <div className="max-w-7xl mx-auto px-4 lg:px-8 py-6">
<MessagingPage /> <MessagingPage initialConversationId={conversationId} />
</div> </div>
); );
} }

View File

@@ -7,6 +7,7 @@ import { NetworkSidebar } from './component/NetworkSidebar';
import { InvitationCard } from './component/InvitationCard'; import { InvitationCard } from './component/InvitationCard';
import { ConnectionCard } from './component/ConnectionCard'; import { ConnectionCard } from './component/ConnectionCard';
import { connectionRequestsService, ConnectionRequest, ConnectionRequestCounts } from '@/services/connection-requests.service'; import { connectionRequestsService, ConnectionRequest, ConnectionRequestCounts } from '@/services/connection-requests.service';
import { messagesService } from '@/services/messages.service';
export default function NetworkPage() { export default function NetworkPage() {
const router = useRouter(); const router = useRouter();
@@ -100,8 +101,20 @@ export default function NetworkPage() {
} }
}; };
const handleMessage = (userId: string) => { const [messagingUserId, setMessagingUserId] = useState<string | null>(null);
router.push('/agent/message');
const handleMessage = async (userId: string) => {
if (messagingUserId) return;
setMessagingUserId(userId);
try {
const conversation = await messagesService.startConversation({ userId });
router.push(`/agent/message?conversationId=${conversation.id}`);
} catch (err) {
console.error('Failed to start conversation:', err);
router.push('/agent/message');
} finally {
setMessagingUserId(null);
}
}; };
return ( return (

View File

@@ -1,11 +1,15 @@
'use client'; 'use client';
import { useSearchParams } from 'next/navigation';
import { MessagingPage } from '@/components/message'; import { MessagingPage } from '@/components/message';
export default function UserMessagePage() { export default function UserMessagePage() {
const searchParams = useSearchParams();
const conversationId = searchParams.get('conversationId');
return ( return (
<div className="max-w-7xl mx-auto px-4 lg:px-8 py-6"> <div className="max-w-7xl mx-auto px-4 lg:px-8 py-6">
<MessagingPage /> <MessagingPage initialConversationId={conversationId} />
</div> </div>
); );
} }

View File

@@ -126,7 +126,7 @@ interface ConnectedAgent {
state: string | null; state: string | null;
} }
export function MessagingPage() { export function MessagingPage({ initialConversationId }: { initialConversationId?: string | null }) {
const { data: session } = useSession(); const { data: session } = useSession();
const { const {
conversations, conversations,
@@ -298,6 +298,20 @@ export function MessagingPage() {
} }
}, [conversations]); }, [conversations]);
// Auto-select conversation when navigated with initialConversationId
const initialConvHandledRef = useRef(false);
useEffect(() => {
if (
initialConversationId &&
!initialConvHandledRef.current &&
conversations.length > 0 &&
!isLoading
) {
initialConvHandledRef.current = true;
selectConversation(initialConversationId);
}
}, [initialConversationId, conversations, isLoading, selectConversation]);
// Convert current conversation avatar when selected // Convert current conversation avatar when selected
useEffect(() => { useEffect(() => {
const convertCurrentAvatar = async () => { const convertCurrentAvatar = async () => {