add guild list to home page

pull/8/head
Patrick Cleavelin 2023-07-31 23:21:57 -05:00
parent b1be0d0d77
commit a15a1820a8
1 changed files with 42 additions and 5 deletions

View File

@ -1,7 +1,7 @@
use crate::{ use crate::{
auth::{self, User}, auth::{self, User},
htmx::{Build, HtmxBuilder, Tag}, htmx::{Build, HtmxBuilder, Tag},
settings::{ApiState, Intro, IntroFriendlyName}, settings::{ApiState, GuildSettings, Intro, IntroFriendlyName},
}; };
use axum::{ use axum::{
extract::{Path, State}, extract::{Path, State},
@ -22,14 +22,51 @@ fn page_header(title: &str) -> HtmxBuilder {
}) })
} }
pub(crate) async fn home(State(state): State<ApiState>, user: Option<User>) -> Redirect { pub(crate) async fn home(
if user.is_some() { State(state): State<ApiState>,
Redirect::to(&format!("{}/guild/588149178912473103", state.origin)) user: Option<User>,
) -> Result<Html<String>, Redirect> {
if let Some(user) = user {
let settings = state.settings.lock().await;
let guild = settings
.guilds
.iter()
.filter(|(_, guild_settings)| guild_settings.users.contains_key(&user.name));
Ok(Html(
page_header("MemeJoin - Home")
.builder(Tag::Div, |b| {
b.attribute("class", "container")
.builder_text(Tag::Header2, "Choose a Guild")
.push_builder(guild_list(&state.origin, guild))
})
.build(),
))
} else { } else {
Redirect::to(&format!("{}/login", state.origin)) Err(Redirect::to(&format!("{}/login", state.origin)))
} }
} }
fn guild_list<'a>(
origin: &str,
guilds: impl Iterator<Item = (&'a u64, &'a GuildSettings)>,
) -> HtmxBuilder {
HtmxBuilder::new(Tag::Empty).ul(|b| {
let mut b = b;
for (guild_id, guild_settings) in guilds {
b = b.li(|b| {
b.link(
&format!("Guild - {}", guild_settings.name),
&format!("{}/guild/{}", origin, guild_id),
)
});
}
b
})
}
fn intro_list<'a>( fn intro_list<'a>(
intros: impl Iterator<Item = (&'a String, &'a Intro)>, intros: impl Iterator<Item = (&'a String, &'a Intro)>,
label: &str, label: &str,