mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-31 16:49:07 +08:00
feat: Add search button to the knowledge base, and adjusted the display for drag-and-drop uploads (#2365)
* feat: Add search button to the knowledge base, and adjusted the display for drag-and-drop uploads * feat: Add search button to the knowledge base, and adjusted the display for drag-and-drop uploads
This commit is contained in:
parent
186c82e355
commit
7d76db40e8
@ -90,17 +90,19 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (files) {
|
if (files) {
|
||||||
const _files: FileType[] = files.map((file) => ({
|
const _files: FileType[] = files
|
||||||
id: file.name,
|
.map((file) => ({
|
||||||
name: file.name,
|
id: file.name,
|
||||||
path: file.path,
|
name: file.name,
|
||||||
size: file.size,
|
path: file.path,
|
||||||
ext: `.${file.name.split('.').pop()}`,
|
size: file.size,
|
||||||
count: 1,
|
ext: `.${file.name.split('.').pop()}`,
|
||||||
origin_name: file.name,
|
count: 1,
|
||||||
type: file.type as FileTypes,
|
origin_name: file.name,
|
||||||
created_at: new Date()
|
type: file.type as FileTypes,
|
||||||
}))
|
created_at: new Date()
|
||||||
|
}))
|
||||||
|
.filter(({ ext }) => fileTypes.includes(ext))
|
||||||
console.debug('[KnowledgeContent] Uploading files:', _files, files)
|
console.debug('[KnowledgeContent] Uploading files:', _files, files)
|
||||||
const uploadedFiles = await FileManager.uploadFiles(_files)
|
const uploadedFiles = await FileManager.uploadFiles(_files)
|
||||||
addFiles(uploadedFiles)
|
addFiles(uploadedFiles)
|
||||||
@ -241,7 +243,7 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
</TitleWrapper>
|
</TitleWrapper>
|
||||||
<Dragger
|
<Dragger
|
||||||
showUploadList={false}
|
showUploadList={false}
|
||||||
customRequest={({ file }) => handleDrop([file as File])}
|
onDrop={({ dataTransfer }) => handleDrop([...dataTransfer.files])}
|
||||||
multiple={true}
|
multiple={true}
|
||||||
accept={fileTypes.join(',')}
|
accept={fileTypes.join(',')}
|
||||||
style={{ marginTop: 10, background: 'transparent' }}>
|
style={{ marginTop: 10, background: 'transparent' }}>
|
||||||
@ -253,7 +255,7 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
</FileSection>
|
</FileSection>
|
||||||
|
|
||||||
<FileListSection>
|
<FileListSection>
|
||||||
{fileItems.map((item) => {
|
{fileItems.reverse().map((item) => {
|
||||||
const file = item.content as FileType
|
const file = item.content as FileType
|
||||||
return (
|
return (
|
||||||
<ItemCard key={item.id}>
|
<ItemCard key={item.id}>
|
||||||
@ -287,7 +289,7 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
</Button>
|
</Button>
|
||||||
</TitleWrapper>
|
</TitleWrapper>
|
||||||
<FlexColumn>
|
<FlexColumn>
|
||||||
{directoryItems.map((item) => (
|
{directoryItems.reverse().map((item) => (
|
||||||
<ItemCard key={item.id}>
|
<ItemCard key={item.id}>
|
||||||
<ItemContent>
|
<ItemContent>
|
||||||
<ItemInfo>
|
<ItemInfo>
|
||||||
@ -325,7 +327,7 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
</Button>
|
</Button>
|
||||||
</TitleWrapper>
|
</TitleWrapper>
|
||||||
<FlexColumn>
|
<FlexColumn>
|
||||||
{urlItems.map((item) => (
|
{urlItems.reverse().map((item) => (
|
||||||
<ItemCard key={item.id}>
|
<ItemCard key={item.id}>
|
||||||
<ItemContent>
|
<ItemContent>
|
||||||
<ItemInfo>
|
<ItemInfo>
|
||||||
@ -379,7 +381,7 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
</Button>
|
</Button>
|
||||||
</TitleWrapper>
|
</TitleWrapper>
|
||||||
<FlexColumn>
|
<FlexColumn>
|
||||||
{sitemapItems.map((item) => (
|
{sitemapItems.reverse().map((item) => (
|
||||||
<ItemCard key={item.id}>
|
<ItemCard key={item.id}>
|
||||||
<ItemContent>
|
<ItemContent>
|
||||||
<ItemInfo>
|
<ItemInfo>
|
||||||
@ -416,7 +418,7 @@ const KnowledgeContent: FC<KnowledgeContentProps> = ({ selectedBase }) => {
|
|||||||
</Button>
|
</Button>
|
||||||
</TitleWrapper>
|
</TitleWrapper>
|
||||||
<FlexColumn>
|
<FlexColumn>
|
||||||
{noteItems.map((note) => (
|
{noteItems.reverse().map((note) => (
|
||||||
<ItemCard key={note.id}>
|
<ItemCard key={note.id}>
|
||||||
<ItemContent>
|
<ItemContent>
|
||||||
<ItemInfo onClick={() => handleEditNote(note)} style={{ cursor: 'pointer' }}>
|
<ItemInfo onClick={() => handleEditNote(note)} style={{ cursor: 'pointer' }}>
|
||||||
|
|||||||
@ -1,10 +1,21 @@
|
|||||||
import { DeleteOutlined, EditOutlined, FileTextOutlined, PlusOutlined, SettingOutlined } from '@ant-design/icons'
|
import {
|
||||||
import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar'
|
DeleteOutlined,
|
||||||
|
EditOutlined,
|
||||||
|
FileTextOutlined,
|
||||||
|
PlusOutlined,
|
||||||
|
SearchOutlined,
|
||||||
|
SettingOutlined
|
||||||
|
} from '@ant-design/icons'
|
||||||
|
import { Navbar, NavbarCenter, NavbarRight as NavbarRightFromComponents } from '@renderer/components/app/Navbar'
|
||||||
import DragableList from '@renderer/components/DragableList'
|
import DragableList from '@renderer/components/DragableList'
|
||||||
|
import { HStack } from '@renderer/components/Layout'
|
||||||
import ListItem from '@renderer/components/ListItem'
|
import ListItem from '@renderer/components/ListItem'
|
||||||
import PromptPopup from '@renderer/components/Popups/PromptPopup'
|
import PromptPopup from '@renderer/components/Popups/PromptPopup'
|
||||||
import Scrollbar from '@renderer/components/Scrollbar'
|
import Scrollbar from '@renderer/components/Scrollbar'
|
||||||
import { useKnowledgeBases } from '@renderer/hooks/useKnowledge'
|
import { useKnowledgeBases } from '@renderer/hooks/useKnowledge'
|
||||||
|
import { useShortcut } from '@renderer/hooks/useShortcuts'
|
||||||
|
import { NavbarIcon } from '@renderer/pages/home/Navbar'
|
||||||
|
import KnowledgeSearchPopup from '@renderer/pages/knowledge/components/KnowledgeSearchPopup'
|
||||||
import { KnowledgeBase } from '@renderer/types'
|
import { KnowledgeBase } from '@renderer/types'
|
||||||
import { Dropdown, Empty, MenuProps } from 'antd'
|
import { Dropdown, Empty, MenuProps } from 'antd'
|
||||||
import { FC, useCallback, useEffect, useState } from 'react'
|
import { FC, useCallback, useEffect, useState } from 'react'
|
||||||
@ -81,10 +92,23 @@ const KnowledgePage: FC = () => {
|
|||||||
[deleteKnowledgeBase, renameKnowledgeBase, t]
|
[deleteKnowledgeBase, renameKnowledgeBase, t]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
useShortcut('search_message', () => {
|
||||||
|
if (selectedBase) {
|
||||||
|
KnowledgeSearchPopup.show({ base: selectedBase }).then()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Navbar>
|
<Navbar>
|
||||||
<NavbarCenter style={{ borderRight: 'none' }}>{t('knowledge.title')}</NavbarCenter>
|
<NavbarCenter style={{ borderRight: 'none' }}>{t('knowledge.title')}</NavbarCenter>
|
||||||
|
<NavbarRight>
|
||||||
|
<HStack alignItems="center">
|
||||||
|
<NarrowIcon onClick={() => selectedBase && KnowledgeSearchPopup.show({ base: selectedBase })}>
|
||||||
|
<SearchOutlined />
|
||||||
|
</NarrowIcon>
|
||||||
|
</HStack>
|
||||||
|
</NavbarRight>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
<ContentContainer id="content-container">
|
<ContentContainer id="content-container">
|
||||||
<SideNav>
|
<SideNav>
|
||||||
@ -221,4 +245,15 @@ const AddKnowledgeName = styled.div`
|
|||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const NarrowIcon = styled(NavbarIcon)`
|
||||||
|
@media (max-width: 1000px) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
const NavbarRight = styled(NavbarRightFromComponents)`
|
||||||
|
min-width: auto;
|
||||||
|
padding-right: 140px;
|
||||||
|
`
|
||||||
|
|
||||||
export default KnowledgePage
|
export default KnowledgePage
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user