1
1
"use client" ;
2
- import React from "react" ;
3
- import { appWindow } from "@tauri-apps/api/window" ;
2
+ import React , { useEffect , useState } from "react" ;
3
+ import { WebviewWindow , appWindow } from "@tauri-apps/api/window" ;
4
4
5
5
const TitleBarButton = ( { src = "" , onClick } : { onClick : any ; src : any } ) => {
6
6
return (
@@ -15,6 +15,20 @@ const TitleBarButton = ({ src = "", onClick }: { onClick: any; src: any }) => {
15
15
} ;
16
16
17
17
const TitleBar = ( ) => {
18
+ const [ appWindow , setAppWindow ] = useState < WebviewWindow > ( ) ;
19
+
20
+ const setupAppWindow = async ( ) => {
21
+ const appWindow = ( await import ( "@tauri-apps/api/window" ) ) . appWindow ;
22
+ setAppWindow ( appWindow ) ;
23
+ } ;
24
+
25
+ useEffect ( ( ) => {
26
+ setupAppWindow ( ) ;
27
+ } , [ ] ) ;
28
+
29
+ const windowMinimize = ( ) => appWindow ?. minimize ( ) ;
30
+ const windowMaximize = ( ) => appWindow ?. maximize ( ) ;
31
+ const windowClose = ( ) => appWindow ?. close ( ) ;
18
32
return (
19
33
< div
20
34
className = "w-full h-[25px] fixed top-0 flex items-center justify-end bg-gray-700 text-white webview-drag-region gap-1"
@@ -32,7 +46,7 @@ const TitleBar = () => {
32
46
< path d = "M20,14H4V10H20" />
33
47
</ svg >
34
48
}
35
- onClick = { ( ) => appWindow . minimize ( ) }
49
+ onClick = { windowMinimize }
36
50
/>
37
51
< TitleBarButton
38
52
src = {
@@ -45,7 +59,7 @@ const TitleBar = () => {
45
59
< path fill = "currentColor" d = "M4 4h16v16H4zm2 4v10h12V8z" />
46
60
</ svg >
47
61
}
48
- onClick = { ( ) => appWindow . toggleMaximize ( ) }
62
+ onClick = { windowMaximize }
49
63
/>
50
64
< TitleBarButton
51
65
src = {
@@ -61,7 +75,7 @@ const TitleBar = () => {
61
75
/>
62
76
</ svg >
63
77
}
64
- onClick = { ( ) => appWindow . close ( ) }
78
+ onClick = { windowClose }
65
79
/>
66
80
</ div >
67
81
) ;
0 commit comments