login page using canvas library
This commit is contained in:
@@ -279,6 +279,23 @@ impl EventHandler {
|
|||||||
let key_code = key_event.code;
|
let key_code = key_event.code;
|
||||||
let modifiers = key_event.modifiers;
|
let modifiers = key_event.modifiers;
|
||||||
|
|
||||||
|
if let Page::Login(login_page) = &mut router.current {
|
||||||
|
match login_page.handle_key_event(key_event) {
|
||||||
|
KeyEventOutcome::Consumed(Some(msg)) => {
|
||||||
|
self.command_message = msg;
|
||||||
|
return Ok(EventOutcome::Ok("Login input updated".to_string()));
|
||||||
|
}
|
||||||
|
KeyEventOutcome::Consumed(None) => {
|
||||||
|
return Ok(EventOutcome::Ok("Login input updated".to_string()));
|
||||||
|
}
|
||||||
|
KeyEventOutcome::Pending => {
|
||||||
|
return Ok(EventOutcome::Ok("Waiting for next key...".to_string()));
|
||||||
|
}
|
||||||
|
KeyEventOutcome::NotMatched => {
|
||||||
|
// fall through to other handlers (buttons, etc.)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if toggle_sidebar(
|
if toggle_sidebar(
|
||||||
&mut app_state.ui,
|
&mut app_state.ui,
|
||||||
config,
|
config,
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ pub async fn run_ui() -> Result<()> {
|
|||||||
|
|
||||||
let mut auth_state = AuthState::default();
|
let mut auth_state = AuthState::default();
|
||||||
let mut login_state = LoginFormState::new();
|
let mut login_state = LoginFormState::new();
|
||||||
|
login_state.editor.set_keymap(config.build_canvas_keymap());
|
||||||
let mut register_state = RegisterState::default();
|
let mut register_state = RegisterState::default();
|
||||||
let mut intro_state = IntroState::default();
|
let mut intro_state = IntroState::default();
|
||||||
let mut admin_state = AdminState::default();
|
let mut admin_state = AdminState::default();
|
||||||
@@ -295,9 +296,19 @@ pub async fn run_ui() -> Result<()> {
|
|||||||
|
|
||||||
match login_result_receiver.try_recv() {
|
match login_result_receiver.try_recv() {
|
||||||
Ok(result) => {
|
Ok(result) => {
|
||||||
if login::handle_login_result(result, &mut app_state, &mut auth_state, &mut login_state) {
|
// Apply result to the active router Login page if present,
|
||||||
needs_redraw = true;
|
// otherwise update the local copy.
|
||||||
}
|
let updated = if let Page::Login(page) = &mut router.current {
|
||||||
|
login::handle_login_result(
|
||||||
|
result,
|
||||||
|
&mut app_state,
|
||||||
|
&mut auth_state,
|
||||||
|
page,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
login::handle_login_result(result, &mut app_state, &mut auth_state, &mut login_state)
|
||||||
|
};
|
||||||
|
if updated { needs_redraw = true; }
|
||||||
}
|
}
|
||||||
Err(mpsc::error::TryRecvError::Empty) => {}
|
Err(mpsc::error::TryRecvError::Empty) => {}
|
||||||
Err(mpsc::error::TryRecvError::Disconnected) => {
|
Err(mpsc::error::TryRecvError::Disconnected) => {
|
||||||
@@ -353,7 +364,16 @@ pub async fn run_ui() -> Result<()> {
|
|||||||
router.navigate(Page::Intro(intro_state.clone()));
|
router.navigate(Page::Intro(intro_state.clone()));
|
||||||
}
|
}
|
||||||
AppView::Login => {
|
AppView::Login => {
|
||||||
router.navigate(Page::Login(LoginFormState::new()))
|
// Do not re-create the page every frame. If we’re already on Login,
|
||||||
|
// keep it. If we just switched into Login, create it once and
|
||||||
|
// inject the keymap.
|
||||||
|
if let Page::Login(_) = &router.current {
|
||||||
|
// Already on login page; keep existing state
|
||||||
|
} else {
|
||||||
|
let mut page = LoginFormState::new();
|
||||||
|
page.editor.set_keymap(config.build_canvas_keymap());
|
||||||
|
router.navigate(Page::Login(page));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
AppView::Register => router.navigate(Page::Register(register_state.clone())),
|
AppView::Register => router.navigate(Page::Register(register_state.clone())),
|
||||||
AppView::Admin => {
|
AppView::Admin => {
|
||||||
|
|||||||
Reference in New Issue
Block a user