diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index b227dc0..ad3d1f0 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -1,4 +1,5 @@ import { useEffect, useMemo, useState } from 'react' +import { useSearchParams } from 'react-router-dom' import { getApiClient } from '../lib/api-client' import { disconnectSocket, getSocketClient } from '../lib/socket-client' @@ -10,7 +11,9 @@ type MessageItem = { } export default function ChatPage() { - const [channelId, setChannelId] = useState('') + const [searchParams, setSearchParams] = useSearchParams() + const guildId = searchParams.get('guildId') ?? '' + const [channelId, setChannelId] = useState(() => searchParams.get('channelId') ?? '') const [content, setContent] = useState('') const [messages, setMessages] = useState([]) const [socketState, setSocketState] = useState<'offline' | 'online'>('offline') @@ -54,6 +57,15 @@ export default function ChatPage() { setContent('') } + function onChangeChannel(value: string) { + setChannelId(value) + const next = new URLSearchParams(searchParams) + if (guildId) next.set('guildId', guildId) + if (value) next.set('channelId', value) + else next.delete('channelId') + setSearchParams(next) + } + useEffect(() => { if (!channelId || !socket.connected) return socket.emit('join_channel', { channelId }) @@ -65,9 +77,10 @@ export default function ChatPage() { return (

聊天

+

Guild: {guildId || '-'}

Socket: {socketState}

- setChannelId(e.target.value)} placeholder="Channel ID" /> + onChangeChannel(e.target.value)} placeholder="Channel ID" />
diff --git a/src/pages/WorkspacePage.tsx b/src/pages/WorkspacePage.tsx index f2a1d65..38c6383 100644 --- a/src/pages/WorkspacePage.tsx +++ b/src/pages/WorkspacePage.tsx @@ -1,5 +1,6 @@ import { useState } from 'react' import type { FormEvent } from 'react' +import { Link } from 'react-router-dom' import { getApiClient, resetApiClient } from '../lib/api-client' import { getRuntimeConfig, @@ -11,6 +12,8 @@ import { reconnectSocket } from '../lib/socket-client' export default function WorkspacePage() { const [form, setForm] = useState(getRuntimeConfig()) const [health, setHealth] = useState('') + const [guilds, setGuilds] = useState>([]) + const [channelsByGuild, setChannelsByGuild] = useState>>({}) async function onSave(e: FormEvent) { e.preventDefault() @@ -29,6 +32,26 @@ export default function WorkspacePage() { } } + async function loadGuilds() { + try { + const res = await getApiClient().get('/guilds') + const list = Array.isArray(res.data) ? res.data : [] + setGuilds(list) + } catch { + setGuilds([]) + } + } + + async function loadChannels(guildId: string) { + try { + const res = await getApiClient().get('/channels', { params: { guildId } }) + const list = Array.isArray(res.data) ? res.data : [] + setChannelsByGuild((prev) => ({ ...prev, [guildId]: list })) + } catch { + setChannelsByGuild((prev) => ({ ...prev, [guildId]: [] })) + } + } + return (

工作台

@@ -61,6 +84,31 @@ export default function WorkspacePage() {

{health}

+
+ +
+ +
) }