orbital_base_components/signals/
model.rs1use leptos::prelude::*;
2
3#[derive(Clone)]
5pub struct SignalModel<T>(RwSignal<T>);
6
7impl<T> SignalModel<T>
8where
9 T: Send + Sync + 'static,
10{
11 pub fn new(value: T) -> Self {
12 Self(RwSignal::new(value))
13 }
14
15 pub fn from_rw(signal: RwSignal<T>) -> Self {
16 Self(signal)
17 }
18
19 pub fn get(&self) -> T
20 where
21 T: Clone,
22 {
23 self.0.get()
24 }
25
26 pub fn get_untracked(&self) -> T
27 where
28 T: Clone,
29 {
30 self.0.get_untracked()
31 }
32
33 pub fn set(&self, value: T) {
34 self.0.set(value);
35 }
36
37 pub fn update(&self, f: impl FnOnce(&mut T)) {
38 self.0.update(f);
39 }
40
41 pub fn with<U>(&self, f: impl FnOnce(&T) -> U) -> U {
42 self.0.with(f)
43 }
44
45 pub fn with_untracked<U>(&self, f: impl FnOnce(&T) -> U) -> U {
46 self.0.with_untracked(f)
47 }
48
49 pub fn read_only(&self) -> ReadSignal<T> {
50 self.0.read_only()
51 }
52
53 pub fn write_only(&self) -> WriteSignal<T> {
54 self.0.write_only()
55 }
56
57 pub fn split(&self) -> (ReadSignal<T>, WriteSignal<T>) {
58 self.0.split()
59 }
60}
61
62impl<T> From<RwSignal<T>> for SignalModel<T>
63where
64 T: Send + Sync + 'static,
65{
66 fn from(signal: RwSignal<T>) -> Self {
67 Self(signal)
68 }
69}
70
71impl<T> From<SignalModel<T>> for RwSignal<T>
72where
73 T: Send + Sync + 'static,
74{
75 fn from(model: SignalModel<T>) -> Self {
76 model.0
77 }
78}