/* * This file is part of sdbclient * Copyright (C) 2022 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use bevy::prelude::*; use bevy_egui::{egui, EguiContext}; use crate::util::eguipwd; use crate::plugins::menu::MenuState; use super::RegisterState; /// Register inputs #[derive(Resource, Debug, Component, PartialEq, Eq, Clone)] pub struct InputsUserRegister { pub username: String, pub email: String, pub password: String, pub password_confirm: String, pub passwords_match: bool, pub error: String, } impl InputsUserRegister { pub fn new() -> Self { Self { username: "".to_string(), email: "".to_string(), password: "".to_string(), password_confirm: "".to_string(), passwords_match: true, error: "".to_string(), } } } pub fn account_register_ui( mut egui_context: ResMut, mut menu_state: ResMut>, mut register_state: ResMut>, mut inputs: ResMut, ) { egui::Window::new("Register") .collapsible(false) .show(egui_context.ctx_mut(), |ui| { ui.horizontal(|ui| { ui.label("Username: "); ui.text_edit_singleline(&mut inputs.username); }); ui.horizontal(|ui| { ui.label("Email: "); ui.text_edit_singleline(&mut inputs.email); }); ui.horizontal(|ui| { ui.label("Password: "); ui.add(eguipwd::password(&mut inputs.password)); }); ui.horizontal(|ui| { ui.label("Confirm password: "); ui.add(eguipwd::password(&mut inputs.password_confirm)); }); inputs.passwords_match = inputs.password == inputs.password_confirm; // Show an error if there is one if !inputs.passwords_match { ui.horizontal(|ui| { ui.label( egui::RichText::new("passwords don't match").color(egui::Color32::RED), ); }); } else if !inputs.error.is_empty() { ui.horizontal(|ui| { ui.label(egui::RichText::new(inputs.error.clone()).color(egui::Color32::RED)); }); } ui.with_layout(egui::Layout::right_to_left(egui::Align::Min), |ui| { if ui.button("Cancel").clicked() { register_state.set(RegisterState::None).unwrap(); menu_state.set(MenuState::AccountLoggedOut).unwrap(); } ui.add_enabled_ui(inputs.passwords_match, |ui| { if ui.button("Register").clicked() { register_state.set(RegisterState::Registering).unwrap(); // Reset error field inputs.error = "".to_string(); } }); }) }); }