12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import { useState, useRef, useEffect, useLayoutEffect } from "react";
- import DeleteIcon from "../icons/delete.svg";
- import styles from "./home.module.scss";
- import {
- Message,
- SubmitKey,
- useChatStore,
- ChatSession,
- BOT_HELLO,
- } from "../store";
- import Locale from "../locales";
- import { isMobileScreen } from "../utils";
- export function ChatItem(props: {
- onClick?: () => void;
- onDelete?: () => void;
- title: string;
- count: number;
- time: string;
- selected: boolean;
- }) {
- return (
- <div
- className={`${styles["chat-item"]} ${
- props.selected && styles["chat-item-selected"]
- }`}
- onClick={props.onClick}
- >
- <div className={styles["chat-item-title"]}>{props.title}</div>
- <div className={styles["chat-item-info"]}>
- <div className={styles["chat-item-count"]}>
- {Locale.ChatItem.ChatItemCount(props.count)}
- </div>
- <div className={styles["chat-item-date"]}>{props.time}</div>
- </div>
- <div className={styles["chat-item-delete"]} onClick={props.onDelete}>
- <DeleteIcon />
- </div>
- </div>
- );
- }
- export function ChatList() {
- const [sessions, selectedIndex, selectSession, removeSession] = useChatStore(
- (state) => [
- state.sessions,
- state.currentSessionIndex,
- state.selectSession,
- state.removeSession,
- ],
- );
- return (
- <div className={styles["chat-list"]}>
- {sessions.map((item, i) => (
- <ChatItem
- title={item.topic}
- time={item.lastUpdate}
- count={item.messages.length}
- key={i}
- selected={i === selectedIndex}
- onClick={() => selectSession(i)}
- onDelete={() =>
- (!isMobileScreen() || confirm(Locale.Home.DeleteChat)) &&
- removeSession(i)
- }
- />
- ))}
- </div>
- );
- }
|