use crate::{
model::state,
view::{
board::{self, Editing},
component::{composer::Composer, ribbon::Ribbon},
table,
},
};
use bezel::{
gpui::{Entity, FocusHandle},
ui::input::TextField,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Pane {
Chat,
Board,
Article,
Table,
}
impl Pane {
pub(crate) fn of(kind: state::Kind) -> Self {
match kind {
state::Kind::Session => Self::Chat,
state::Kind::Board => Self::Board,
state::Kind::Article => Self::Article,
state::Kind::Table => Self::Table,
}
}
}
pub struct Leaf {
pub(crate) entry: Option<artifact::space::Member>,
pub(crate) focus: FocusHandle,
pub(crate) pane: Pane,
pub(crate) composer: Entity<Composer>,
pub(crate) queued_galleries: std::collections::HashMap<
(u64, usize, String),
Entity<crate::view::component::transcript::gallery::Gallery>,
>,
pub(crate) asked_session: bool,
pub(crate) editing: Option<Editing>,
pub(crate) card_field: Entity<TextField>,
pub(crate) find_field: Entity<TextField>,
pub(crate) finding: bool,
pub(crate) landing: Option<board::Landing>,
pub(crate) cell: Option<table::Cell>,
pub(crate) cell_field: Entity<TextField>,
pub(crate) ribbon: Ribbon,
}
impl Leaf {
pub(crate) fn new(
focus: FocusHandle,
composer: Entity<Composer>,
card_field: Entity<TextField>,
cell_field: Entity<TextField>,
find_field: Entity<TextField>,
ribbon: Ribbon,
) -> Self {
Self {
entry: None,
focus,
pane: Pane::Chat,
composer,
queued_galleries: Default::default(),
asked_session: false,
editing: None,
card_field,
find_field,
finding: false,
landing: None,
cell: None,
cell_field,
ribbon,
}
}
}