🚧 Add relations between store::Room and store::Area
This commit is contained in:
@@ -3,24 +3,28 @@ use std::rc::Rc;
|
||||
|
||||
use dioxus::prelude::*;
|
||||
|
||||
use crate::domain::model::common::Avatar;
|
||||
use crate::domain::model::room::Invitation;
|
||||
use crate::domain::model::space::SpaceId;
|
||||
use crate::domain::model::{
|
||||
room::RoomId,
|
||||
room_member::RoomMember,
|
||||
store_interface::{RoomStoreConsumerInterface, RoomStoreProviderInterface},
|
||||
};
|
||||
|
||||
#[modx::props(id, is_direct, name)]
|
||||
#[modx::props(id, is_direct, name, spaces)]
|
||||
#[modx::store]
|
||||
pub struct Store {
|
||||
id: RoomId,
|
||||
|
||||
is_direct: Option<bool>,
|
||||
name: Option<String>,
|
||||
|
||||
avatar: Option<Avatar>,
|
||||
members: Vec<RoomMember>,
|
||||
invitations: Vec<Invitation>,
|
||||
is_invited: bool,
|
||||
|
||||
spaces: Vec<SpaceId>,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
@@ -35,32 +39,40 @@ impl Room {
|
||||
}
|
||||
|
||||
pub fn from_domain(room: Rc<dyn RoomStoreConsumerInterface>) -> Self {
|
||||
let props = StoreProps::new(room.id().clone(), room.is_direct(), room.name());
|
||||
let props = StoreProps::new(
|
||||
room.id().clone(),
|
||||
room.is_direct(),
|
||||
room.name(),
|
||||
room.spaces().clone(),
|
||||
);
|
||||
|
||||
Self {
|
||||
store: RefCell::new(Store::new(props)),
|
||||
domain: room,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Room {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.store.borrow().id == other.store.borrow().id
|
||||
pub async fn get_avatar(&self) -> Option<Avatar> {
|
||||
self.domain.avatar().await
|
||||
}
|
||||
}
|
||||
|
||||
impl RoomStoreProviderInterface for Room {
|
||||
fn on_new_member(&self, member: RoomMember) {
|
||||
let mut store = self.store.borrow_mut();
|
||||
store.members.write().push(member);
|
||||
}
|
||||
|
||||
fn on_new_name(&self, name: Option<String>) {
|
||||
let mut store = self.store.borrow_mut();
|
||||
store.name.set(name);
|
||||
}
|
||||
|
||||
fn on_new_avatar(&self, avatar: Option<Avatar>) {
|
||||
let mut store = self.store.borrow_mut();
|
||||
store.avatar.set(avatar);
|
||||
}
|
||||
|
||||
fn on_new_member(&self, member: RoomMember) {
|
||||
let mut store = self.store.borrow_mut();
|
||||
store.members.write().push(member);
|
||||
}
|
||||
|
||||
fn on_invitation(&self, invitation: Invitation) {
|
||||
let mut store = self.store.borrow_mut();
|
||||
|
||||
|
Reference in New Issue
Block a user