feat: add basic htmx example

This commit is contained in:
Alexander Navarro 2025-02-26 04:16:11 -03:00
parent 17bf419074
commit ffca6175c0
6 changed files with 80 additions and 25 deletions

View file

@ -1,4 +1,5 @@
use axum::{extract::State, response::Html, routing::get, Router};
use axum_htmx::HxRequest;
use chrono::Utc;
use minijinja::context;
use serde::Serialize;
@ -22,7 +23,11 @@ struct ExampleRow {
pub current_timestamp: chrono::DateTime<Utc>,
}
async fn handler_home(State(state): State<AppState>, mut tx: Tx) -> ResultTemplate {
async fn handler_home(
State(state): State<AppState>,
HxRequest(hx_request): HxRequest,
mut tx: Tx,
) -> ResultTemplate {
let template = state.tmpl_env.get_template("index.html")?;
let rows = sqlx::query_as::<_, ExampleRow>("select 'Postgres' as database, setting as version, current_database(), current_user, current_timestamp from pg_settings where name = 'server_version'")
@ -31,7 +36,13 @@ async fn handler_home(State(state): State<AppState>, mut tx: Tx) -> ResultTempla
println!("{:?}", rows);
let content = template.render(context!(rows => rows))?;
let content = if hx_request {
template
.eval_to_state(context!(rows => rows))?
.render_block("htmx")?
} else {
template.render(context!(rows => rows))?
};
Ok(Html(content))
}