add column and alias are separate
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
//! The request handlers behind the five table-definition pages.
|
||||
//! The request handlers behind the six table-definition pages.
|
||||
//!
|
||||
//! Each page has a GET that renders it and, except for the read-only history,
|
||||
//! a POST per write it offers. A write answers with its own page's body,
|
||||
@@ -43,7 +43,8 @@ use super::{
|
||||
/// which fragment a write on it swaps back.
|
||||
#[derive(Clone, Copy)]
|
||||
enum Page {
|
||||
Columns,
|
||||
AddColumns,
|
||||
Presentation,
|
||||
Delete,
|
||||
Copy,
|
||||
Template,
|
||||
@@ -53,7 +54,8 @@ enum Page {
|
||||
impl Page {
|
||||
fn name(self) -> &'static str {
|
||||
match self {
|
||||
Self::Columns => "columns",
|
||||
Self::AddColumns => "add-columns",
|
||||
Self::Presentation => "presentation",
|
||||
Self::Delete => "delete",
|
||||
Self::Copy => "copy",
|
||||
Self::Template => "template",
|
||||
@@ -63,7 +65,8 @@ impl Page {
|
||||
|
||||
fn render_page(self, page: &TableDefinitionPageState) -> String {
|
||||
match self {
|
||||
Self::Columns => ui::render_columns_page(page),
|
||||
Self::AddColumns => ui::render_add_columns_page(page),
|
||||
Self::Presentation => ui::render_presentation_page(page),
|
||||
Self::Delete => ui::render_delete_page(page),
|
||||
Self::Copy => ui::render_copy_page(page),
|
||||
Self::Template => ui::render_template_page(page),
|
||||
@@ -74,7 +77,8 @@ impl Page {
|
||||
/// The `#table-panel` swap. History has no writes, so it never asks.
|
||||
fn render_fragment(self, page: &TableDefinitionPageState) -> String {
|
||||
match self {
|
||||
Self::Columns => ui::render_columns_fragment(page),
|
||||
Self::AddColumns => ui::render_add_columns_fragment(page),
|
||||
Self::Presentation => ui::render_presentation_fragment(page),
|
||||
Self::Delete => ui::render_delete_fragment(page),
|
||||
Self::Copy => ui::render_copy_fragment(page),
|
||||
Self::Template => ui::render_template_fragment(page),
|
||||
@@ -85,13 +89,22 @@ impl Page {
|
||||
|
||||
// ── The pages ───────────────────────────────────────────────────────────────
|
||||
|
||||
/// GET /admin/tables/columns
|
||||
pub(crate) async fn columns_page(
|
||||
/// GET /admin/tables/columns/add
|
||||
pub(crate) async fn add_columns_page(
|
||||
State(state): State<AppState>,
|
||||
headers: HeaderMap,
|
||||
Query(selection): Query<Selection>,
|
||||
) -> Response {
|
||||
show(state, headers, PageInputs::for_selection(selection), Page::Columns).await
|
||||
show(state, headers, PageInputs::for_selection(selection), Page::AddColumns).await
|
||||
}
|
||||
|
||||
/// GET /admin/tables/presentation
|
||||
pub(crate) async fn presentation_page(
|
||||
State(state): State<AppState>,
|
||||
headers: HeaderMap,
|
||||
Query(selection): Query<Selection>,
|
||||
) -> Response {
|
||||
show(state, headers, PageInputs::for_selection(selection), Page::Presentation).await
|
||||
}
|
||||
|
||||
/// GET /admin/tables/delete
|
||||
@@ -151,7 +164,7 @@ async fn show(state: AppState, headers: HeaderMap, inputs: PageInputs, page: Pag
|
||||
|
||||
// ── The writes ──────────────────────────────────────────────────────────────
|
||||
|
||||
/// POST /admin/tables/columns/builder — staging a column to append.
|
||||
/// POST /admin/tables/columns/add/builder — staging a column to append.
|
||||
///
|
||||
/// Nothing is written here; the panel is swapped back with the column added,
|
||||
/// removed, or its index toggled, exactly as the Add-table builder works.
|
||||
@@ -194,14 +207,14 @@ pub(crate) async fn update_columns(
|
||||
|
||||
match load_page(state, &headers, inputs).await {
|
||||
Ok(mut loaded) => {
|
||||
loaded.active = Page::Columns.name();
|
||||
loaded.active = Page::AddColumns.name();
|
||||
Html(ui::render_column_panel(&loaded)).into_response()
|
||||
}
|
||||
Err(error) => load_error_response(&headers, error),
|
||||
}
|
||||
}
|
||||
|
||||
/// POST /admin/tables/columns — AddTableColumns.
|
||||
/// POST /admin/tables/columns/add — AddTableColumns.
|
||||
pub(crate) async fn add_columns(
|
||||
State(state): State<AppState>,
|
||||
headers: HeaderMap,
|
||||
@@ -232,7 +245,7 @@ pub(crate) async fn add_columns(
|
||||
state,
|
||||
headers,
|
||||
inputs,
|
||||
Page::Columns,
|
||||
Page::AddColumns,
|
||||
message,
|
||||
)
|
||||
.await;
|
||||
@@ -246,7 +259,7 @@ pub(crate) async fn add_columns(
|
||||
state,
|
||||
headers,
|
||||
inputs,
|
||||
Page::Columns,
|
||||
Page::AddColumns,
|
||||
message,
|
||||
)
|
||||
.await;
|
||||
@@ -254,7 +267,7 @@ pub(crate) async fn add_columns(
|
||||
// The same checks the server runs, applied to a draft that may have been
|
||||
// rebuilt from a posted form rather than through the panel.
|
||||
if let Err(message) = inputs.columns.validate(Locale::from_headers(&headers)) {
|
||||
return refuse(state, headers, inputs, Page::Columns, message).await;
|
||||
return refuse(state, headers, inputs, Page::AddColumns, message).await;
|
||||
}
|
||||
|
||||
let request = AddTableColumnsRequest {
|
||||
@@ -283,7 +296,7 @@ pub(crate) async fn add_columns(
|
||||
));
|
||||
// The columns are the table's now, so the panel starts empty.
|
||||
inputs.columns = crate::schema::ColumnDraft::for_append(catalog);
|
||||
respond(state, headers, inputs, Page::Columns, StatusCode::OK).await
|
||||
respond(state, headers, inputs, Page::AddColumns, StatusCode::OK).await
|
||||
}
|
||||
Ok(response) => {
|
||||
let message = response.into_inner().sql;
|
||||
@@ -295,10 +308,10 @@ pub(crate) async fn add_columns(
|
||||
} else {
|
||||
message
|
||||
};
|
||||
refuse(state, headers, inputs, Page::Columns, message).await
|
||||
refuse(state, headers, inputs, Page::AddColumns, message).await
|
||||
}
|
||||
Err(error) => {
|
||||
refuse(state, headers, inputs, Page::Columns, error.message().to_string()).await
|
||||
refuse(state, headers, inputs, Page::AddColumns, error.message().to_string()).await
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -331,7 +344,7 @@ pub(crate) async fn set_column_presentation(
|
||||
state,
|
||||
headers,
|
||||
inputs,
|
||||
Page::Columns,
|
||||
Page::Presentation,
|
||||
message,
|
||||
)
|
||||
.await;
|
||||
@@ -378,7 +391,7 @@ pub(crate) async fn set_column_presentation(
|
||||
table: form.table,
|
||||
..Default::default()
|
||||
};
|
||||
respond(state, headers, inputs, Page::Columns, StatusCode::OK).await
|
||||
respond(state, headers, inputs, Page::Presentation, StatusCode::OK).await
|
||||
}
|
||||
Ok(response) => {
|
||||
let message = response.into_inner().message;
|
||||
@@ -390,10 +403,10 @@ pub(crate) async fn set_column_presentation(
|
||||
} else {
|
||||
message
|
||||
};
|
||||
refuse(state, headers, inputs, Page::Columns, message).await
|
||||
refuse(state, headers, inputs, Page::Presentation, message).await
|
||||
}
|
||||
Err(error) => {
|
||||
refuse(state, headers, inputs, Page::Columns, error.message().to_string()).await
|
||||
refuse(state, headers, inputs, Page::Presentation, error.message().to_string()).await
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user