use crate::{
model::state,
view::{
board::{self, Editing},
component::{composer::Composer, ribbon::Ribbon},
table,
},
};
use bezel::{
gpui::{Entity, ScrollHandle},
ui::{input::TextField, scroll::DriftState},
};
#[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::layout::Member>,
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) board_scroll: ScrollHandle,
pub(crate) board_drift: DriftState,
pub(crate) lanes: board::Lanes,
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(
composer: Entity<Composer>,
card_field: Entity<TextField>,
cell_field: Entity<TextField>,
ribbon: Ribbon,
) -> Self {
Self {
entry: None,
pane: Pane::Chat,
composer,
queued_galleries: Default::default(),
asked_session: false,
editing: None,
card_field,
board_scroll: ScrollHandle::new(),
board_drift: DriftState::new(),
lanes: board::Lanes::default(),
landing: None,
cell: None,
cell_field,
ribbon,
}
}
}