use axum::{
extract::{Path, State},
response::{IntoResponse, Redirect},
};
use quokka::{extract::Extensions, handler::html::TemplateDataLoader, state::ProvideState};
use crate::{
data::Severity,
service::{page_loader::AdminPageLoader, AdminListing},
};
pub async fn post_delete_entity<S: Send + Sync + 'static, L: AdminListing<S>>(
State(state): State<S>,
Path(params): Path<L::PrimaryKeys>,
) -> impl IntoResponse
where
S: ProvideState<AdminPageLoader>,
{
let result = L::delete_entity(params, &state).await;
if let Err(error) = result {
let loader: AdminPageLoader = state.provide();
return <AdminPageLoader as TemplateDataLoader<S>>::render_error(&loader, error)
.await
.into_response();
}
(
Extensions::new()
.add(Severity::Success.message("Entity removed", "Successfully deleted the entity")),
Redirect::to(&format!("/admin/entity/{}", L::entity_name())),
)
.into_response()
}