import React, { useEffect, useState } from 'react' import type { FC } from 'react' import { useTranslation } from 'react-i18next' import { PencilSquareIcon, } from '@heroicons/react/24/outline' import cn from 'classnames' import Button from '../../../base/button' import List from './list' import AppInfo from '@/app/components/share/chat/sidebar/app-info' // import Card from './card' import type { ConversationItem, SiteInfo } from '@/models/share' import { fetchConversations } from '@/service/share' export type ISidebarProps = { copyRight: string currentId: string onCurrentIdChange: (id: string) => void list: ConversationItem[] isClearConversationList: boolean pinnedList: ConversationItem[] isClearPinnedConversationList: boolean isInstalledApp: boolean installedAppId?: string siteInfo: SiteInfo onMoreLoaded: (res: { data: ConversationItem[]; has_more: boolean }) => void onPinnedMoreLoaded: (res: { data: ConversationItem[]; has_more: boolean }) => void isNoMore: boolean isPinnedNoMore: boolean onPin: (id: string) => void onUnpin: (id: string) => void controlUpdateList: number onDelete: (id: string) => void } const Sidebar: FC = ({ copyRight, currentId, onCurrentIdChange, list, isClearConversationList, pinnedList, isClearPinnedConversationList, isInstalledApp, installedAppId, siteInfo, onMoreLoaded, onPinnedMoreLoaded, isNoMore, isPinnedNoMore, onPin, onUnpin, controlUpdateList, onDelete, }) => { const { t } = useTranslation() const [hasPinned, setHasPinned] = useState(false) const checkHasPinned = async () => { const { data }: any = await fetchConversations(isInstalledApp, installedAppId, undefined, true) setHasPinned(data.length > 0) } useEffect(() => { checkHasPinned() }, []) useEffect(() => { if (controlUpdateList !== 0) checkHasPinned() }, [controlUpdateList]) const maxListHeight = isInstalledApp ? 'max-h-[30vh]' : 'max-h-[40vh]' return (
{isInstalledApp && ( )}
{/* pinned list */} {hasPinned && (
{t('share.chat.pinnedTitle')}
0 ? maxListHeight : 'flex-grow')} currentId={currentId} onCurrentIdChange={onCurrentIdChange} list={pinnedList} isClearConversationList={isClearPinnedConversationList} isInstalledApp={isInstalledApp} installedAppId={installedAppId} onMoreLoaded={onPinnedMoreLoaded} isNoMore={isPinnedNoMore} isPinned={true} onPinChanged={id => onUnpin(id)} controlUpdate={controlUpdateList + 1} onDelete={onDelete} />
)} {/* unpinned list */}
{(hasPinned && list.length > 0) && (
{t('share.chat.unpinnedTitle')}
)} onPin(id)} controlUpdate={controlUpdateList + 1} onDelete={onDelete} />
© {copyRight} {(new Date()).getFullYear()}
) } export default React.memo(Sidebar)