1
0
Fork 0
forked from alemi/upub
upub/web/src/components/mod.rs

67 lines
1.4 KiB
Rust
Raw Normal View History

mod login;
pub use login::*;
mod activity;
pub use activity::*;
mod navigation;
pub use navigation::*;
mod object;
pub use object::*;
mod user;
pub use user::*;
mod post;
pub use post::*;
mod timeline;
pub use timeline::*;
use leptos::*;
#[component]
pub fn DateTime(t: Option<chrono::DateTime<chrono::Utc>>) -> impl IntoView {
match t {
Some(t) => {
2024-04-23 03:15:37 +02:00
let delta = chrono::Utc::now() - t;
let pretty = if delta.num_seconds() < 60 {
format!("{}s ago", delta.num_seconds())
} else if delta.num_minutes() < 60 {
format!("{}m ago", delta.num_minutes())
} else if delta.num_hours() < 24 {
format!("{}h ago", delta.num_hours())
} else if delta.num_days() < 90 {
format!("{}d ago", delta.num_days())
} else {
t.format("%d/%m/%Y").to_string()
2024-04-23 03:15:37 +02:00
};
let rfc = t.to_rfc2822();
Some(view! {
<small title={rfc}>{pretty}</small>
})
},
None => None,
}
}
pub const PRIVACY_PUBLIC : &str = "🪩";
2024-04-23 02:48:30 +02:00
pub const PRIVACY_FOLLOWERS : &str = "🔒";
pub const PRIVACY_PRIVATE : &str = "📨";
#[component]
pub fn PrivacyMarker(addressed: Vec<String>) -> impl IntoView {
let privacy = if addressed.iter().any(|x| x == apb::target::PUBLIC) {
2024-04-23 02:48:30 +02:00
PRIVACY_PUBLIC
} else if addressed.iter().any(|x| x.ends_with("/followers")) {
2024-04-23 02:48:30 +02:00
PRIVACY_FOLLOWERS
} else {
2024-04-23 02:48:30 +02:00
PRIVACY_PRIVATE
};
let audience = format!("[ {} ]", addressed.join(", "));
view! {
<span class="emoji ml-1 mr-s moreinfo" title={audience} >{privacy}</span>
}
}