1- import { useEditor , useToasts } from "@tldraw/tldraw" ;
2- import { parseDecompressBlob , parseString } from "./fileLoaderUtils.ts" ;
3- import { useEffect } from "react" ;
1+ import { Editor , useDialogs , useEditor , useToasts } from "@tldraw/tldraw" ;
2+ import { parseDecompressBlob , parseString } from "./fileLoaderUtils.ts" ;
3+ import { useEffect } from "react" ;
4+ import { OpenDialog } from "./createOpenDialog.tsx" ;
45
56export default function FileDropHandler ( ) {
67 const editor = useEditor ( ) ;
78 const { addToast } = useToasts ( ) ;
9+ const { addDialog } = useDialogs ( ) ;
810
911 useEffect ( ( ) => {
1012 // @ts -expect-error editor.externalContentHandlers does actually exist
@@ -16,14 +18,10 @@ export default function FileDropHandler() {
1618 if ( ! file ) return ;
1719
1820 if ( file . name . endsWith ( '.tldr' ) ) {
19- const json = await file . text ( ) ;
20- parseString ( json , editor , addToast ) ;
21- addToast ( { title : `"${ file . name } " loaded` , severity : 'success' } ) ;
21+ addDialog ( { component : createTldrDialog ( editor , file , addToast ) } ) ;
2222 }
2323 else if ( file . name . endsWith ( '.tldz' ) ) {
24- const blob = new Blob ( [ file ] ) ;
25- await parseDecompressBlob ( blob , editor , addToast ) ;
26- addToast ( { title : `"${ file . name } " loaded` , severity : 'success' } ) ;
24+ addDialog ( { component : createTldzDialog ( editor , file , addToast ) } ) ;
2725 }
2826 else {
2927 defaultOnDrop ?.( content ) ;
@@ -32,4 +30,26 @@ export default function FileDropHandler() {
3230 } , [ editor , addToast ] ) ;
3331
3432 return null ;
33+ }
34+
35+ function createTldrDialog ( editor : Editor , file : File , addToast : any ) {
36+ return ( { onClose } : { onClose ( ) : void } ) => {
37+ return OpenDialog ( onClose , async ( ) => {
38+ const json = await file . text ( ) ;
39+ parseString ( json , editor , addToast ) ;
40+ addToast ( { title : `"${ file . name } " loaded` , severity : 'success' } ) ;
41+ onClose ( ) ;
42+ } )
43+ }
44+ }
45+
46+ function createTldzDialog ( editor : Editor , file : File , addToast : any ) {
47+ return ( { onClose } : { onClose ( ) : void } ) => {
48+ return OpenDialog ( onClose , async ( ) => {
49+ const blob = new Blob ( [ file ] ) ;
50+ await parseDecompressBlob ( blob , editor , addToast ) ;
51+ addToast ( { title : `"${ file . name } " loaded` , severity : 'success' } ) ;
52+ onClose ( ) ;
53+ } )
54+ }
3555}
0 commit comments