import { useDemoSessions } from '../sessions';
import { Chatkit, SessionList, useCurrentSession } from '@volcengine/chatkit';
import { createMockAdapter } from '@volcengine/chatkit/adapters/mock';
import '@volcengine/chatkit/styles.css';
import { useState } from 'react';
const adapter = createMockAdapter();
// 回答操作栏里的「收藏」:用公开 hook 拿到当前会话,收藏时记下这条消息属于哪个会话
function FavoriteButton({ active, onToggle }: { active: boolean; onToggle: (sessionId: string) => void }) {
const { session } = useCurrentSession();
return (
<button type="button" className="demo-chip" aria-pressed={active} onClick={() => session && onToggle(session.id)}>
{active ? '★ 已收藏' : '☆ 收藏'}
</button>
);
}
// 收藏与分享只用插槽:回答下方的按钮放在 message.actions,
// 会话列表每一行的「分享会话」和收藏标记放在 SessionList 自己的两个位置 itemActions、itemBadge。
export default function RecipeFavorites() {
const { chat: sessions, listProps } = useDemoSessions({ adapter });
// 业务方自己的状态:消息 id → 所在的会话 id
const [favorites, setFavorites] = useState<Record<string, string>>({});
const toggle = (messageId: string, sessionId: string) =>
setFavorites(({ [messageId]: existing, ...rest }) => (existing ? rest : { ...rest, [messageId]: sessionId }));
return (
<div className="demo-row">
<SessionList
{...listProps}
style={{ width: 200 }}
itemBadge={({ session }) => (Object.values(favorites).includes(session.id) ? <span>★</span> : null)}
itemActions={({ session }) => (
<button type="button" onClick={() => window.alert(`分享链接:https://example.com/s/${session.id}`)}>
分享会话
</button>
)}
/>
<div className="demo-main">
<Chatkit
sessions={sessions}
slots={{
'message.actions': ({ message }) => (
<FavoriteButton active={message.id in favorites} onToggle={sessionId => toggle(message.id, sessionId)} />
),
}}
/>
</div>
</div>
);
}