Skip to content

Commit

Permalink
feat: Add sidebar to SearchPage #2247 (#2267)
Browse files Browse the repository at this point in the history
### What problem does this PR solve?

feat: Add sidebar to SearchPage #2247

### Type of change


- [x] New Feature (non-breaking change which adds functionality)
  • Loading branch information
cike8899 authored Sep 5, 2024
1 parent 878dca2 commit b2f87a9
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 37 deletions.
12 changes: 9 additions & 3 deletions web/src/pages/search/index.less
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
.searchSide {
overflow: auto;
height: 100vh;
height: calc(100vh - 72px);
position: fixed !important;
inset-inline-start: 0;
top: 0;
top: 72px;
bottom: 0;

.modelForm {
display: flex;
padding: 24px;
}

.checkGroup {
width: 100%;
height: 100%;
}
.list {
width: 100%;
height: 100%;
overflow: auto;
}
.checkbox {
width: 100%;
Expand Down
39 changes: 5 additions & 34 deletions web/src/pages/search/index.tsx
Original file line number Diff line number Diff line change
@@ -1,42 +1,13 @@
import { useNextFetchKnowledgeList } from '@/hooks/knowledge-hooks';
import { Checkbox, Layout, List, Typography } from 'antd';
import React, { useCallback } from 'react';
import { Layout } from 'antd';
import React from 'react';
import SearchSidebar from './sidebar';

import { CheckboxValueType } from 'antd/es/checkbox/Group';
import styles from './index.less';

const { Header, Content, Footer, Sider } = Layout;
const { Header, Content, Footer } = Layout;

const SearchPage = () => {
const { list } = useNextFetchKnowledgeList();

const handleChange = useCallback((checkedValue: CheckboxValueType[]) => {
console.log('🚀 ~ handleChange ~ args:', checkedValue);
}, []);

return (
<Layout hasSider>
<Sider className={styles.searchSide} theme={'light'}>
<Checkbox.Group className={styles.checkGroup} onChange={handleChange}>
<List
bordered
dataSource={list}
className={styles.list}
renderItem={(item) => (
<List.Item>
<Checkbox value={item.id} className={styles.checkbox}>
<Typography.Text
ellipsis={{ tooltip: item.name }}
className={styles.knowledgeName}
>
{item.name}
</Typography.Text>
</Checkbox>
</List.Item>
)}
/>
</Checkbox.Group>
</Sider>
<SearchSidebar></SearchSidebar>
<Layout style={{ marginInlineStart: 200 }}>
<Header style={{ padding: 0 }} />
<Content style={{ margin: '24px 16px 0', overflow: 'initial' }}>
Expand Down
71 changes: 71 additions & 0 deletions web/src/pages/search/sidebar.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { useNextFetchKnowledgeList } from '@/hooks/knowledge-hooks';
import type { CheckboxProps } from 'antd';
import { Checkbox, Layout, List, Typography } from 'antd';
import { CheckboxValueType } from 'antd/es/checkbox/Group';
import { useCallback, useMemo, useState } from 'react';

import { CheckboxChangeEvent } from 'antd/es/checkbox';
import styles from './index.less';

const { Sider } = Layout;

const SearchSidebar = () => {
const { list } = useNextFetchKnowledgeList();
const ids = useMemo(() => list.map((x) => x.id), [list]);

const [checkedList, setCheckedList] = useState<string[]>(ids);

const checkAll = list.length === checkedList.length;

const indeterminate =
checkedList.length > 0 && checkedList.length < list.length;

const onChange = useCallback((list: CheckboxValueType[]) => {
setCheckedList(list as string[]);
}, []);

const onCheckAllChange: CheckboxProps['onChange'] = useCallback(
(e: CheckboxChangeEvent) => {
setCheckedList(e.target.checked ? ids : []);
},
[ids],
);

return (
<Sider className={styles.searchSide} theme={'light'} width={260}>
<Checkbox
className={styles.modelForm}
indeterminate={indeterminate}
onChange={onCheckAllChange}
checked={checkAll}
>
Check all
</Checkbox>
<Checkbox.Group
className={styles.checkGroup}
onChange={onChange}
value={checkedList}
>
<List
bordered
dataSource={list}
className={styles.list}
renderItem={(item) => (
<List.Item>
<Checkbox value={item.id} className={styles.checkbox}>
<Typography.Text
ellipsis={{ tooltip: item.name }}
className={styles.knowledgeName}
>
{item.name}
</Typography.Text>
</Checkbox>
</List.Item>
)}
/>
</Checkbox.Group>
</Sider>
);
};

export default SearchSidebar;

0 comments on commit b2f87a9

Please sign in to comment.