52 lines
1.9 KiB
Rust
52 lines
1.9 KiB
Rust
use crate::route::{RouteServices, Routes};
|
|
use crate::widgets::avatar::Avatar;
|
|
use crate::widgets::{Button, NostrWidget};
|
|
use eframe::emath::Align;
|
|
use eframe::epaint::Vec2;
|
|
use egui::{CursorIcon, Frame, Layout, Margin, Response, Sense, Ui, Widget};
|
|
|
|
pub struct Header;
|
|
|
|
impl Header {
|
|
pub fn new() -> Self {
|
|
Self {}
|
|
}
|
|
}
|
|
|
|
impl NostrWidget for Header {
|
|
fn render(&mut self, ui: &mut Ui, services: &mut RouteServices<'_>) -> Response {
|
|
let logo_bytes = include_bytes!("../resources/logo.svg");
|
|
Frame::none()
|
|
.outer_margin(Margin::symmetric(16., 8.))
|
|
.show(ui, |ui| {
|
|
ui.allocate_ui_with_layout(
|
|
Vec2::new(ui.available_width(), 32.),
|
|
Layout::left_to_right(Align::Center),
|
|
|ui| {
|
|
ui.style_mut().spacing.item_spacing.x = 16.;
|
|
if services
|
|
.img_cache
|
|
.load_bytes("logo.svg", logo_bytes)
|
|
.max_height(24.)
|
|
.sense(Sense::click())
|
|
.ui(ui)
|
|
.on_hover_and_drag_cursor(CursorIcon::PointingHand)
|
|
.clicked()
|
|
{
|
|
services.navigate(Routes::HomePage);
|
|
}
|
|
|
|
ui.with_layout(Layout::right_to_left(Align::Center), |ui| {
|
|
if let Some(pk) = services.login.public_key() {
|
|
ui.add(Avatar::pubkey(&pk, services));
|
|
} else if Button::new().show(ui, |ui| ui.label("Login")).clicked() {
|
|
services.navigate(Routes::LoginPage);
|
|
}
|
|
});
|
|
},
|
|
)
|
|
})
|
|
.response
|
|
}
|
|
}
|