File size: 3,167 Bytes
			
			| 3927930 f9e19e4 3927930 d4bff6a 3927930 71d280d f372e89 f9e19e4 3927930 f372e89 e3239a2 3927930 f9e19e4 3927930 f372e89 3927930 d4bff6a 3927930 d4bff6a 3927930 d4bff6a 3927930 d4bff6a 3927930 f9e19e4 3927930 f372e89 e3239a2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | import HightLightMarkdown from '@/components/highlight-markdown';
import { ImageWithPopover } from '@/components/image';
import { useSelectTestingResult } from '@/hooks/knowledge-hooks';
import { IReference } from '@/interfaces/database/chat';
import { Card, Flex, Input, Layout, List, Skeleton, Space, Tag } from 'antd';
import { useState } from 'react';
import MarkdownContent from '../chat/markdown-content';
import { useSendQuestion } from './hooks';
import SearchSidebar from './sidebar';
import IndentedTree from '@/components/indented-tree/indented-tree';
import styles from './index.less';
const { Content } = Layout;
const { Search } = Input;
const SearchPage = () => {
  const [checkedList, setCheckedList] = useState<string[]>([]);
  const list = useSelectTestingResult();
  const {
    sendQuestion,
    answer,
    sendingLoading,
    relatedQuestions,
    mindMap,
    mindMapLoading,
  } = useSendQuestion(checkedList);
  return (
    <Layout className={styles.searchPage}>
      <SearchSidebar
        checkedList={checkedList}
        setCheckedList={setCheckedList}
      ></SearchSidebar>
      <Layout>
        <Content>
          <Flex className={styles.content}>
            <section className={styles.main}>
              <Search
                placeholder="input search text"
                onSearch={sendQuestion}
                size="large"
                loading={sendingLoading}
                disabled={checkedList.length === 0}
              />
              <MarkdownContent
                loading={sendingLoading}
                content={answer.answer}
                reference={answer.reference ?? ({} as IReference)}
                clickDocumentButton={() => {}}
              ></MarkdownContent>
              <List
                dataSource={list.chunks}
                renderItem={(item) => (
                  <List.Item>
                    <Card className={styles.card}>
                      <Space>
                        <ImageWithPopover id={item.img_id}></ImageWithPopover>
                        <HightLightMarkdown>
                          {item.highlight}
                        </HightLightMarkdown>
                      </Space>
                    </Card>
                  </List.Item>
                )}
              />
              {relatedQuestions?.length > 0 && (
                <Card>
                  <Flex wrap="wrap" gap={'10px 0'}>
                    {relatedQuestions?.map((x, idx) => (
                      <Tag key={idx} className={styles.tag}>
                        {x}
                      </Tag>
                    ))}
                  </Flex>
                </Card>
              )}
            </section>
            <section className={styles.graph}>
              {mindMapLoading ? (
                <Skeleton active />
              ) : (
                <IndentedTree
                  data={mindMap}
                  show
                  style={{ width: '100%', height: '100%' }}
                ></IndentedTree>
              )}
            </section>
          </Flex>
        </Content>
      </Layout>
    </Layout>
  );
};
export default SearchPage;
 |