page editor

This commit is contained in:
2026-04-11 14:58:15 -06:00
parent ed34c56e31
commit 5dbba44e10
8 changed files with 599 additions and 120 deletions

View File

@@ -37,14 +37,17 @@ impl<T> ApiList<T> {
}
}
// ─── Login form ───────────────────────────────────────────────────────────────
// ─── App state ────────────────────────────────────────────────────────────────
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum AppState {
Login,
Main,
Editor,
}
// ─── Login form ───────────────────────────────────────────────────────────────
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum LoginField {
Url,
@@ -115,6 +118,7 @@ pub struct MainView {
pub focus: Panel,
pub loading_spaces: bool,
pub loading_pages: bool,
pub loading_page_content: bool,
pub error: Option<String>,
}
@@ -128,17 +132,45 @@ impl MainView {
focus: Panel::Spaces,
loading_spaces: true,
loading_pages: false,
loading_page_content: false,
error: None,
}
}
}
// ─── Editor view ─────────────────────────────────────────────────────────────
pub struct EditorView {
pub page_id: String,
pub page_title: String,
pub saving: bool,
pub status: Option<EditorStatus>,
}
#[derive(Debug, Clone)]
pub enum EditorStatus {
Saved,
Error(String),
}
impl EditorView {
pub fn new(page_id: String, page_title: String) -> Self {
Self {
page_id,
page_title,
saving: false,
status: None,
}
}
}
// ─── Root app ─────────────────────────────────────────────────────────────────
pub struct App {
pub state: AppState,
pub login: LoginForm,
pub main: MainView,
pub editor: EditorView,
pub base_url: String,
pub token: String,
}
@@ -149,6 +181,7 @@ impl App {
state: AppState::Login,
login: LoginForm::new(),
main: MainView::new(),
editor: EditorView::new(String::new(), String::new()),
base_url: String::new(),
token: String::new(),
}
@@ -162,6 +195,9 @@ pub enum AppMsg {
LoginError(String),
SpacesLoaded(Vec<Space>),
PagesLoaded(Vec<Page>),
PageContentLoaded { page_id: String, title: String, content: String },
PageSaved,
SaveError(String),
ApiError(String),
}