login page using canvas library
This commit is contained in:
@@ -279,6 +279,23 @@ impl EventHandler {
|
||||
let key_code = key_event.code;
|
||||
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(
|
||||
&mut app_state.ui,
|
||||
config,
|
||||
|
||||
@@ -69,6 +69,7 @@ pub async fn run_ui() -> Result<()> {
|
||||
|
||||
let mut auth_state = AuthState::default();
|
||||
let mut login_state = LoginFormState::new();
|
||||
login_state.editor.set_keymap(config.build_canvas_keymap());
|
||||
let mut register_state = RegisterState::default();
|
||||
let mut intro_state = IntroState::default();
|
||||
let mut admin_state = AdminState::default();
|
||||
@@ -295,9 +296,19 @@ pub async fn run_ui() -> Result<()> {
|
||||
|
||||
match login_result_receiver.try_recv() {
|
||||
Ok(result) => {
|
||||
if login::handle_login_result(result, &mut app_state, &mut auth_state, &mut login_state) {
|
||||
needs_redraw = true;
|
||||
}
|
||||
// Apply result to the active router Login page if present,
|
||||
// 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::Disconnected) => {
|
||||
@@ -353,7 +364,16 @@ pub async fn run_ui() -> Result<()> {
|
||||
router.navigate(Page::Intro(intro_state.clone()));
|
||||
}
|
||||
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::Admin => {
|
||||
|
||||
Reference in New Issue
Block a user