From ad16c1732d395023d9aa23c38914dffd3af7a68a Mon Sep 17 00:00:00 2001 From: Tianyang Date: Sat, 1 Aug 2026 02:55:58 +0800 Subject: [PATCH] feat: wire FileExplorer, DocumentEditor, search and upload into App --- frontend/src/App.tsx | 41 +++++++++++++++- frontend/tests/App.test.tsx | 96 ++++++++++++++++++++++++++++++++++++- 2 files changed, 135 insertions(+), 2 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 7dd74e3..efc7482 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,7 +1,46 @@ +import { useState } from 'react'; +import FileExplorer from './components/FileExplorer'; +import DocumentEditor from './components/DocumentEditor'; +import SearchBar from './components/SearchBar'; +import SearchResults from './components/SearchResults'; +import UploadButton from './components/UploadButton'; +import type { SearchResult, UploadDocumentResponse } from './api/client'; + export default function App() { + const [selectedKey, setSelectedKey] = useState(null); + const [searchQuery, setSearchQuery] = useState(''); + const [searchResults, setSearchResults] = useState([]); + + function handleJumpToResult(key: string) { + setSelectedKey(key); + setSearchQuery(''); + setSearchResults([]); + } + + function handleUploaded(result: UploadDocumentResponse) { + setSelectedKey(result.key); + } + return (
-

DocHub

+
+

DocHub

+ + +
+
+ +
+ {selectedKey ? ( + + ) : ( +
未选择文档
+ )} +
+ {searchQuery !== '' && ( + + )} +
); } diff --git a/frontend/tests/App.test.tsx b/frontend/tests/App.test.tsx index 8312a27..8cf3251 100644 --- a/frontend/tests/App.test.tsx +++ b/frontend/tests/App.test.tsx @@ -1,8 +1,102 @@ import { render, screen } from '@testing-library/react'; -import { test, expect } from 'vitest'; +import { test, expect, beforeEach, vi } from 'vitest'; import App from '../src/App'; +import userEvent from '@testing-library/user-event'; +import { waitFor } from '@testing-library/react'; +import { listDocuments, getDocument, search } from '../src/api/client'; + +vi.mock('../src/api/client'); + +vi.mock('@monaco-editor/react', () => ({ + default: ({ value, onChange }: { value: string; onChange: (value: string | undefined) => void }) => ( +