-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.mbt
More file actions
60 lines (53 loc) · 1.46 KB
/
main.mbt
File metadata and controls
60 lines (53 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
///|
fnalias @respo.(ui_global, ui_button)
///|
fnalias @respo_node.(div, button, respo_style)
///|
let app_store_key : String = "mbt-workflow"
///|
extern "js" fn register_gemini_ask() -> Unit =
#| () => {};
#| import "/src/control.mjs";
///|
extern "js" fn ask_gemini(msg : String) -> Unit =
#| (msg) => { window.ask_gemini(msg); };
///|
fn view(
store : Store
) -> @respo_node.RespoNode[ActionOp]!@respo_node.RespoCommonError {
if false {
raise @respo_node.RespoCommonError("TODO")
}
// @dom_ffi.log("Store to render: " + store.to_json().stringify(indent=2))
let states = store.get_states()
div(class_name=ui_global, style=respo_style(padding=Px(12)), [
comp_container(states.pick("container")),
])
}
///|
fn main {
register_gemini_ask()
let window = @dom_ffi.window()
let mount_target = window
.document()
.query_selector(".app")
.reinterpret_as_node()
let app : @respo.RespoApp[Store] = {
store: Ref::new(@respo.try_load_storage(app_store_key)),
mount_target,
storage_key: app_store_key,
}
app.backup_model_beforeunload()
// @dom_ffi.log("store: " + app.store.val.to_json().stringify(indent=2))
app.render_loop(fn() { view!(app.store.val) }, fn(op) {
if op is StatesChange(_) {
} else {
@dom_ffi.log("op: \{op}")
}
app.store.val.update(op)
})
let dev_mode = @dom_ffi.new_url_search_params(window.location().search()).get(
"mode",
)
@dom_ffi.log("dev mode: " + dev_mode.to_string())
}