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;