54 lines
1.2 KiB
Rust
54 lines
1.2 KiB
Rust
use std::rc::Rc;
|
|
use std::{cell::RefCell, collections::HashSet};
|
|
|
|
use dioxus::prelude::*;
|
|
|
|
use crate::domain::model::{
|
|
room::RoomId,
|
|
space::SpaceId,
|
|
store_interface::{SpaceStoreConsumerInterface, SpaceStoreProviderInterface},
|
|
};
|
|
|
|
#[modx::props(id, name)]
|
|
#[modx::store]
|
|
pub struct Store {
|
|
id: SpaceId,
|
|
name: Option<String>,
|
|
room_ids: HashSet<RoomId>,
|
|
}
|
|
|
|
#[derive(Clone)]
|
|
pub struct Space {
|
|
store: RefCell<Store>,
|
|
|
|
#[allow(dead_code)]
|
|
domain: Rc<dyn SpaceStoreConsumerInterface>,
|
|
}
|
|
|
|
impl Space {
|
|
pub fn signal(&self) -> Store {
|
|
*self.store.borrow()
|
|
}
|
|
|
|
pub fn from_domain(space: Rc<dyn SpaceStoreConsumerInterface>) -> Self {
|
|
let props = StoreProps::new(space.id().clone(), space.name());
|
|
|
|
Self {
|
|
store: RefCell::new(Store::new(props)),
|
|
domain: space,
|
|
}
|
|
}
|
|
|
|
pub fn add_room(&self, room_id: RoomId) {
|
|
let mut store = self.store.borrow_mut();
|
|
store.room_ids.write().insert(room_id);
|
|
}
|
|
}
|
|
|
|
impl SpaceStoreProviderInterface for Space {
|
|
fn set_name(&self, name: Option<String>) {
|
|
let mut store = self.store.borrow_mut();
|
|
store.name.set(name);
|
|
}
|
|
}
|