@@ -6,6 +6,7 @@ import { FileTree } from './components/file-tree';
66import Sidebar from './components/sidebar' ;
77import HeaderBar from './components/header-bar' ;
88import { PDFTeX } from './pdftex/pdftex' ;
9+ import Tabs from './components/tabs' ;
910
1011const dummyDir : Directory = {
1112 id : "1" ,
@@ -17,10 +18,29 @@ const dummyDir: Directory = {
1718 files : [ ]
1819} ;
1920
21+ function PDFViewer ( { dataUrl } : { dataUrl ?: string ; } ) {
22+ return (
23+ < >
24+ { dataUrl &&
25+ < iframe
26+ src = { dataUrl }
27+ style = { {
28+ width : "100%" ,
29+ height : "100%" ,
30+ border : "none" ,
31+ } }
32+ title = "PDF preview"
33+ />
34+ }
35+ </ >
36+ ) ;
37+ }
38+
2039function App ( ) {
2140 const [ selectedFile , setSelectedFile ] = useState < File | undefined > ( undefined ) ;
2241 const [ rootDir , setRootDir ] = useState ( dummyDir ) ;
23-
42+ const [ pdfDataUrl , setPdfDataUrl ] = useState < string > ( ) ;
43+ const [ selectedTab , setSelectedTab ] = useState < string > ( ) ;
2444
2545 async function readDirectory ( { dirHandle, depth = 0 , initialPath = '/' , name, parentId } : {
2646 dirHandle : FileSystemDirectoryHandle ,
@@ -106,7 +126,9 @@ function App() {
106126 const uint8pdf = binaryStringToUint8Array ( binary_pdf ) ;
107127 const blob = new Blob ( [ uint8pdf ] , { type : "application/pdf" } ) ;
108128 const url = URL . createObjectURL ( blob ) ;
109- window . open ( url , "_blank" ) ;
129+
130+ setPdfDataUrl ( url ) ;
131+ setSelectedTab ( 'pdf' ) ;
110132
111133 }
112134
@@ -157,9 +179,36 @@ function App() {
157179 onSelect = { setSelectedFile }
158180 />
159181 </ Sidebar >
160- < Code
161- selectedFile = { selectedFile }
162- />
182+ < div style = { {
183+ display : 'flex' ,
184+ flex : 1 ,
185+ height : window . innerHeight - 25
186+ } } >
187+ < Tabs
188+ tabs = { [ {
189+ key : 'code' ,
190+ label : selectedFile ?. name || 'code' ,
191+ } , {
192+ key : 'pdf' ,
193+ label : 'pdf'
194+ } ] }
195+ selectedTab = { selectedTab }
196+ setSelectedTab = { setSelectedTab }
197+ >
198+ { ( { selectedTab } ) => {
199+ if ( selectedTab === 'code' ) {
200+ return < Code
201+ selectedFile = { selectedFile }
202+ /> ;
203+ }
204+ if ( selectedTab === 'pdf' ) {
205+ return < PDFViewer
206+ dataUrl = { pdfDataUrl }
207+ /> ;
208+ }
209+ } }
210+ </ Tabs >
211+ </ div >
163212 </ div >
164213 </ div >
165214 ) ;
0 commit comments