update user functionality and cleanup

This commit is contained in:
2021-08-12 15:48:02 +02:00
committed by dietrich
parent 6837495eba
commit d503d49917
10 changed files with 297 additions and 80 deletions
+10 -11
View File
@@ -52,12 +52,12 @@ impl Page {
let result = match url.next_path_part() {
None | Some("list_links") => Self::Home(pages::list_links::init(
url,
&mut orders.proxy(Msg::ListLinksMsg),
&mut orders.proxy(Msg::ListLinks),
i18n,
)),
Some("list_users") => Self::ListUsers(pages::list_users::init(
url,
&mut orders.proxy(Msg::ListUsersMsg),
&mut orders.proxy(Msg::ListUsers),
i18n,
)),
_other => Self::NotFound,
@@ -71,12 +71,11 @@ impl Page {
// ------ ------
// Update
// ------ ------
#[allow(renamed_and_removed_lints, pub_enum_variant_names)]
#[derive(Clone)]
pub enum Msg {
UrlChanged(subs::UrlChanged),
ListLinksMsg(list_links::Msg),
ListUsersMsg(list_users::Msg),
ListLinks(list_links::Msg),
ListUsers(list_users::Msg),
NoMessage,
}
@@ -87,14 +86,14 @@ fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
model.page = Page::init(url.0, orders, model.i18n.clone());
}
Msg::ListLinksMsg(msg) => {
Msg::ListLinks(msg) => {
if let Page::Home(model) = &mut model.page {
list_links::update(msg, model, &mut orders.proxy(Msg::ListLinksMsg))
list_links::update(msg, model, &mut orders.proxy(Msg::ListLinks))
}
}
Msg::ListUsersMsg(msg) => {
Msg::ListUsers(msg) => {
if let Page::ListUsers(model) = &mut model.page {
list_users::update(msg, model, &mut orders.proxy(Msg::ListUsersMsg))
list_users::update(msg, model, &mut orders.proxy(Msg::ListUsers))
}
}
Msg::NoMessage => (),
@@ -165,8 +164,8 @@ fn view_content(page: &Page, url: &Url) -> Node<Msg> {
div![
C!["container"],
match page {
Page::Home(model) => pages::list_links::view(model).map_msg(Msg::ListLinksMsg),
Page::ListUsers(model) => pages::list_users::view(model).map_msg(Msg::ListUsersMsg),
Page::Home(model) => pages::list_links::view(model).map_msg(Msg::ListLinks),
Page::ListUsers(model) => pages::list_users::view(model).map_msg(Msg::ListUsers),
Page::NotFound => div![div![url.to_string()], "Page not found!"],
}
]
+1 -1
View File
@@ -26,7 +26,7 @@ pub fn navigation(i18n: &I18n, base_url: &Url) -> Node<Msg> {
li![a![ev(Ev::Click, |_| Msg::NoMessage), t!("add-link"),],],
li![a![
attrs! {At::Href => crate::Urls::new(base_url).create_user()},
ev(Ev::Click, |_| Msg::ListUsersMsg(
ev(Ev::Click, |_| Msg::ListUsers(
super::pages::list_users::Msg::Edit(
super::pages::list_users::UserEditMsg::CreateNewUser
)
+31 -6
View File
@@ -49,6 +49,7 @@ struct FilterInput {
pub enum Msg {
Query(UserQueryMsg),
Edit(UserEditMsg),
ClearAll,
}
/// All the messages on user Querying
@@ -81,6 +82,10 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
match msg {
Msg::Query(msg) => process_query_messages(msg, model, orders),
Msg::Edit(msg) => process_user_edit_messages(msg, model, orders),
Msg::ClearAll => {
model.last_message = None;
model.user_edit = None;
}
}
}
@@ -176,6 +181,7 @@ pub fn process_user_edit_messages(
match msg {
UserEditMsg::EditUserSelected(user) => {
log!("Editing user: ", user);
model.last_message = None;
model.user_edit = Some(RefCell::new(user))
}
UserEditMsg::CreateNewUser => {
@@ -216,10 +222,13 @@ pub fn process_user_edit_messages(
orders.perform_cmd(async {
let data = data;
let response = match fetch(
Request::new("/admin/json/create_user/")
.method(Method::Post)
.json(&data)
.expect("serialization failed"),
Request::new(match data.edit {
EditMode::Create => "/admin/json/create_user/",
EditMode::Edit => "/admin/json/update_user/",
})
.method(Method::Post)
.json(&data)
.expect("serialization failed"),
)
.await
{
@@ -256,11 +265,22 @@ pub fn view(model: &Model) -> Node<Msg> {
let lang = model.i18n.clone();
let t = move |key: &str| lang.translate(key, None);
section![
keyboard_ev(Ev::KeyDown, |keyboard_event| {
IF!(keyboard_event.key() == "Escape" => Msg::ClearAll)
}),
h1!("List Users Page from list_users"),
if let Some(message) = &model.last_message {
div![C!("Message"), &message.message]
div![
C!["message", "center"],
div![
C!["closebutton"],
a!["\u{d7}"],
ev(Ev::Click, |_| Msg::ClearAll)
],
&message.message
]
} else {
section!()
section![]
},
table![
// Column Headlines
@@ -363,6 +383,11 @@ fn edit_or_create_user<F: Fn(&str) -> String>(l: &RefCell<UserDelta>, t: F) -> N
let user = l.borrow();
div![
C!["editdialog", "center"],
div![
C!["closebutton"],
a!["\u{d7}"],
ev(Ev::Click, |_| Msg::ClearAll)
],
h1![match &user.edit {
EditMode::Edit => t("edit-user"),
EditMode::Create => t("new-user"),