Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions moon.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
"name": "respo/app",
"version": "0.1.0",
"deps": {
"tiye/respo": "0.0.35",
"tiye/dom-ffi": "0.0.9"
"tiye/respo": "0.1.0",
"tiye/dom-ffi": "0.2.0",
"tiye/respo_css": "0.1.2"
},
"readme": "README.md",
"repository": "",
"license": "Apache-2.0",
"keywords": [],
"description": "",
"source": "src"
"source": "src",
"preferred-target": "js"
}
8 changes: 4 additions & 4 deletions src/main/counter.mbt
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ struct MainState {
///|
fn comp_counter(
states : @respo.RespoStatesTree,
global_counted : Int
global_counted : Int,
) -> RespoNode[ActionOp] {
let cursor = states.path()
let state = (states.cast_branch() : MainState)
let counted = state.counted
let on_inc = fn(
e : RespoEvent,
dispatch : DispatchFn[ActionOp]
dispatch : DispatchFn[ActionOp],
) -> Unit raise RespoCommonError {
@dom_ffi.warn_log("inc click: \{e}")
if e is Click(original_event~, ..) {
Expand All @@ -31,7 +31,7 @@ fn comp_counter(
}
let on_dec = fn(
e : RespoEvent,
dispatch : DispatchFn[ActionOp]
dispatch : DispatchFn[ActionOp],
) -> Unit raise RespoCommonError {
@dom_ffi.warn_log("dec click: \{e}")
dispatch.run(Decrement)
Expand All @@ -40,7 +40,7 @@ fn comp_counter(
}
let on_inc_twice = fn(
e : RespoEvent,
dispatch : DispatchFn[ActionOp]
dispatch : DispatchFn[ActionOp],
) -> Unit raise RespoCommonError {
@dom_ffi.warn_log("twice click: \{e}")
dispatch.run(IncTwice)
Expand Down
44 changes: 24 additions & 20 deletions src/main/main.mbt
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
///|
fnalias @respo_node.(div, span, button, respo_style)
fnalias @respo_node.(div, span, button)

///|
fnalias @css.respo_style

///|
let app_store_key : String = "mbt-workflow"

///|
fn view(
store : Store
store : Store,
) -> @respo_node.RespoNode[ActionOp] raise @respo_node.RespoCommonError {
if false {
raise @respo_node.RespoCommonError("TODO")
Expand All @@ -21,23 +24,24 @@ fn view(
///|
fn main {
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,
if window.document().query_selector(".app") is Some(mount_target) {
let mount_target = mount_target.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) {
@dom_ffi.log("Action: \{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}")
} else {
@dom_ffi.log("No mount target found")
}
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) {
@dom_ffi.log("Action: \{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}")
}
7 changes: 4 additions & 3 deletions src/main/moon.pkg.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@
"is-main": true,
"import": [
{
"path": "tiye/respo/lib",
"path": "tiye/respo",
"alias": "respo"
},
{
"path": "tiye/respo/lib/node",
"path": "tiye/respo/node",
"alias": "respo_node"
},
{ "path": "tiye/dom-ffi/lib", "alias": "dom_ffi" }
{ "path": "tiye/dom-ffi", "alias": "dom_ffi" },
{ "path": "tiye/respo_css", "alias": "css" }
]
}
26 changes: 21 additions & 5 deletions src/main/store.mbt
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,37 @@ struct Task {

///|
enum ActionOp {
Noop
StatesChange(@respo.RespoUpdateState)
Increment
Decrement
IncTwice
}

///|
impl @respo_node.RespoAction for ActionOp with build_states_action(cursor, a) {
ActionOp::StatesChange({ cursor, data: a.map(ToJson::to_json) })
impl Default for ActionOp with default() -> ActionOp {
Noop
}

///|
impl @respo_node.RespoAction for ActionOp with build_states_action(cursor, a, j) {
StatesChange({
cursor,
data: if a is Some(a) {
Some(@dom_ffi.js_obscure_to_v(a))
} else {
None
},
backup: j,
})
}

///|
impl Show for ActionOp with output(self, logger) -> Unit {
let s = match self {
StatesChange(states) =>
"StatesChange(\{states.cursor} \{states.data.to_json()})"
Noop => "Noop"
StatesChange(state) =>
"StatesChange(\{state.cursor} \{state.backup.to_json()})"
// Intent(_intent) => "Intent(...)"
Increment => "Increment"
Decrement => "Decrement"
Expand All @@ -49,7 +64,8 @@ fn get_states(self : Store) -> @respo.RespoStatesTree {
self.states
}

///| TODO mutation might break memoization in future
///|
/// TODO mutation might break memoization in future
fn update(self : Store, op : ActionOp) -> Unit {
match op {
Increment => self.counted += 1
Expand Down