diff --git a/.gitignore b/.gitignore index 4fffb2f..183ea7d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target /Cargo.lock +.jj/ \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 458a637..b73d172 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -use std::marker::PhantomData; +use std::{marker::PhantomData, rc::Rc}; use sycamore::prelude::*; @@ -53,11 +53,15 @@ where self.signal } - pub fn bind_event(&'ctx self, cx: Scope<'ctx>, message_fn: F) - where - F: Fn() -> Msg + 'ctx, + pub fn bind_trigger( + &'ctx self, + cx: Scope<'ctx>, + trigger: &'ctx ReadSignal, + message_fn: F, + ) where + F: Fn(Rc) -> Msg + 'ctx, { - create_effect(cx, move || self.dispatch(message_fn())); + create_effect(cx, move || self.dispatch(message_fn(trigger.get()))); } } diff --git a/src/tests/mod.rs b/src/tests/mod.rs index df39f3c..8c85cc5 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -65,7 +65,7 @@ fn test_state_effect_flow() { create_child_scope(cx, |cx| { let form_val = create_signal(cx, handler.read_signal().get_untracked().value_one.clone()); - handler.bind_event(cx, || Msg::UpdateOne((*form_val.get()).clone())); + handler.bind_trigger(cx, form_val, |val| Msg::UpdateOne((*val).clone())); form_val.set("bar".to_owned()); @@ -74,7 +74,7 @@ fn test_state_effect_flow() { create_child_scope(cx, |cx| { let form_val = create_signal(cx, 0); - handler.bind_event(cx, || Msg::UpdateTwo(*form_val.get())); + handler.bind_trigger(cx, form_val, |val| Msg::UpdateTwo(*val)); form_val.set(1); assert_eq!(handler.read_signal().get_untracked().value_two, 1); });