@@ -3,6 +3,7 @@ use crate::components::output::OutputContainer;
3
3
use crate :: utils:: query:: Query ;
4
4
use crate :: { icon, ActionButtonState , ActionButtonStateContext } ;
5
5
use gloo:: history:: { BrowserHistory , History } ;
6
+ use split_yew:: { Direction , Split } ;
6
7
use std:: rc:: Rc ;
7
8
use yew:: prelude:: * ;
8
9
use yew:: suspense:: Suspense ;
@@ -14,12 +15,21 @@ pub fn App() -> Html {
14
15
15
16
let action_button_state = use_context :: < ActionButtonStateContext > ( ) . unwrap ( ) ;
16
17
18
+ let split_sizes = use_state ( || vec ! [ 100.0 , 0.0 ] ) ;
19
+ let output_collapsed = use_state ( || true ) ;
20
+
17
21
let on_run_click = {
18
22
let action_button_state = action_button_state. clone ( ) ;
19
23
let editor_contents = editor_contents. clone ( ) ;
24
+ let split_sizes = split_sizes. clone ( ) ;
25
+ let output_collapsed = output_collapsed. clone ( ) ;
20
26
let data = data. clone ( ) ;
21
27
move |_| {
22
28
data. set ( Some ( Rc :: from ( editor_contents. as_ref ( ) . borrow ( ) . as_str ( ) ) ) ) ;
29
+ if * output_collapsed {
30
+ output_collapsed. set ( false ) ;
31
+ split_sizes. set ( vec ! [ 50.0 , 50.0 ] ) ;
32
+ }
23
33
action_button_state. dispatch ( ActionButtonState :: Disabled ) ;
24
34
}
25
35
} ;
@@ -69,11 +79,7 @@ pub fn App() -> Html {
69
79
classes. push ( "hover:bg-gray-900" )
70
80
}
71
81
72
- let template_rows = if data. is_some ( ) {
73
- "grid-template-rows: 1fr 1fr"
74
- } else {
75
- "grid-template-rows: 1fr "
76
- } ;
82
+ let collapsed_split = if * output_collapsed { Some ( 1 ) } else { None } ;
77
83
78
84
html ! {
79
85
<div class="flex flex-col h-screen" >
@@ -84,16 +90,18 @@ pub fn App() -> Html {
84
90
<button onclick={ on_share_click} disabled={ action_button_state. disabled( ) } class={ classes} >{ icon!( "share" , classes!( "fill-gray-200" ) ) } { "Share" } </button>
85
91
</div>
86
92
</header>
87
- <div class="grid h-full" style={ template_rows} >
88
- <Suspense fallback={ { html! { "loading..." } } } >
89
- <Editor { oninput} />
90
- </Suspense >
91
- <div class="w-full h-full min-h-0" >
93
+ <Split min_sizes={ vec![ 100.0 , 0.0 ] } sizes={ ( * split_sizes) . clone( ) } collapsed={ collapsed_split} direction={ Direction :: Vertical } class="flex flex-col flex-grow overflow-hidden" >
94
+ <div>
95
+ <Suspense fallback={ { html! { "loading..." } } } >
96
+ <Editor { oninput} />
97
+ </Suspense >
98
+ </div>
99
+ <div class="w-full min-h-0" >
92
100
if let Some ( ref data) = * data {
93
101
<OutputContainer value={ data} />
94
102
}
95
103
</div>
96
- </div >
104
+ </Split >
97
105
</div>
98
106
}
99
107
}
0 commit comments