Finished agent update & Creation
This commit is contained in:
parent
e06651f14c
commit
f31dd3c4d2
|
@ -9,7 +9,7 @@ use jl_types::{
|
||||||
payloads::{
|
payloads::{
|
||||||
contact::ContactPayload,
|
contact::ContactPayload,
|
||||||
location::NewLocationPayload,
|
location::NewLocationPayload,
|
||||||
project::{NewProjectPayload, UpdateProjectPayload}, unit::UpdateUnitPayload, agent::UpdateAgentPayload,
|
project::{NewProjectPayload, UpdateProjectPayload}, unit::UpdateUnitPayload, agent::{UpdateAgentPayload, NewAgentPayload},
|
||||||
},
|
},
|
||||||
project_card::ProjectCardDto,
|
project_card::ProjectCardDto,
|
||||||
},
|
},
|
||||||
|
@ -201,6 +201,18 @@ pub async fn get_location_with_city_and_district(
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn create_new_agent(agent: NewAgentPayload) -> Result<Agent, err::Error> {
|
||||||
|
perform_request_without_client(
|
||||||
|
BASE_URL.into(),
|
||||||
|
Method::POST,
|
||||||
|
format!("admin/agent"),
|
||||||
|
Some(agent),
|
||||||
|
200,
|
||||||
|
Vec::new(),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
pub async fn create_new_project(project: NewProjectPayload) -> Result<Project, err::Error> {
|
pub async fn create_new_project(project: NewProjectPayload) -> Result<Project, err::Error> {
|
||||||
perform_request_without_client(
|
perform_request_without_client(
|
||||||
BASE_URL.into(),
|
BASE_URL.into(),
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
use jl_types::domain::{agent::Agent, credential::CredentialType};
|
use jl_types::{domain::{agent::Agent, credential::CredentialType}, dto::payloads::agent::{NewAgentPayload, UpdateAgentPayload}};
|
||||||
use yew::prelude::*;
|
use yew::prelude::*;
|
||||||
use yew_router::prelude::use_navigator;
|
use yew_router::prelude::use_navigator;
|
||||||
|
|
||||||
use crate::{pages::admin::edit::{EditType}, components::{textfield::TextField, dropdown::DropDown, single_media_picker::SingleMediaPicker}, };
|
use crate::{pages::admin::edit::{EditType}, components::{textfield::TextField, dropdown::DropDown, single_media_picker::SingleMediaPicker}, api::backend::{update_agent, create_new_agent}, routes::main_router::Route, };
|
||||||
|
|
||||||
#[derive(Properties, PartialEq, Clone)]
|
#[derive(Properties, PartialEq, Clone)]
|
||||||
pub struct AgentFieldsProps {
|
pub struct AgentFieldsProps {
|
||||||
|
@ -12,7 +12,7 @@ pub struct AgentFieldsProps {
|
||||||
|
|
||||||
#[function_component(AgentFields)]
|
#[function_component(AgentFields)]
|
||||||
pub fn agent_fields(props: &AgentFieldsProps) -> Html {
|
pub fn agent_fields(props: &AgentFieldsProps) -> Html {
|
||||||
let _navigator = use_navigator().unwrap();
|
let navigator = use_navigator().unwrap();
|
||||||
let user_typed = use_state(|| false);
|
let user_typed = use_state(|| false);
|
||||||
let agent_opt = props.agent.clone();
|
let agent_opt = props.agent.clone();
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ pub fn agent_fields(props: &AgentFieldsProps) -> Html {
|
||||||
let agent_shortcode_handle = use_state_eq(|| String::new());
|
let agent_shortcode_handle = use_state_eq(|| String::new());
|
||||||
let profile_picture_url_handle = use_state_eq(|| String::new());
|
let profile_picture_url_handle = use_state_eq(|| String::new());
|
||||||
let credential_handle = use_state_eq(|| String::new());
|
let credential_handle = use_state_eq(|| String::new());
|
||||||
let credential_type = use_state_eq(|| Some(CredentialType::PhoneNumber));
|
let credential_type = use_state_eq(|| None);
|
||||||
|
|
||||||
// Fields definition & Update on value recieved
|
// Fields definition & Update on value recieved
|
||||||
if !*user_typed {
|
if !*user_typed {
|
||||||
|
@ -62,8 +62,76 @@ pub fn agent_fields(props: &AgentFieldsProps) -> Html {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let update_button_onclick = {
|
let update_button_onclick = {
|
||||||
Callback::from(move |_: MouseEvent| {
|
let navigator = navigator.clone();
|
||||||
|
let edit_type = props.edittype.clone();
|
||||||
|
|
||||||
|
// Fields to be sent to the backend
|
||||||
|
let agent_name_handle = agent_name_handle.clone();
|
||||||
|
let agent_shortcode_handle = agent_shortcode_handle.clone();
|
||||||
|
let profile_picture_url_handle = profile_picture_url_handle.clone();
|
||||||
|
let credential_handle = credential_handle.clone();
|
||||||
|
let credential_type = credential_type.clone();
|
||||||
|
Callback::from(move |_: MouseEvent| {
|
||||||
|
let navigator = navigator.clone();
|
||||||
|
let edit_type = edit_type.clone();
|
||||||
|
|
||||||
|
// Fields to be sent to the backend
|
||||||
|
let agent_name_handle = agent_name_handle.clone();
|
||||||
|
|
||||||
|
let profile_picture_url_handle = profile_picture_url_handle.clone();
|
||||||
|
let credential_handle = credential_handle.clone();
|
||||||
|
let credential_type_handle = credential_type.clone();
|
||||||
|
wasm_bindgen_futures::spawn_local(async move {
|
||||||
|
if (*agent_name_handle).clone().is_empty() {
|
||||||
|
log::error!("Missing field agent_name");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (*profile_picture_url_handle).clone().is_empty() {
|
||||||
|
log::error!("Missing field profile_picture_url");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (*credential_handle).clone().is_empty() {
|
||||||
|
log::error!("Missing field credential");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let agent_name = (*agent_name_handle).clone();
|
||||||
|
let profile_picture_url = (*profile_picture_url_handle).clone();
|
||||||
|
let credential = (*credential_handle).clone();
|
||||||
|
let credential_type = if let Some(credential_type) = (*credential_type_handle).clone(){
|
||||||
|
credential_type
|
||||||
|
} else {
|
||||||
|
log::error!("Missing field credential_type");
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
match edit_type {
|
||||||
|
EditType::New => {
|
||||||
|
let agent = NewAgentPayload {
|
||||||
|
credential,
|
||||||
|
credential_type,
|
||||||
|
full_name: agent_name,
|
||||||
|
profile_picture_url
|
||||||
|
};
|
||||||
|
match create_new_agent(agent).await {
|
||||||
|
Ok(_) => navigator.push(&Route::AdminAgents),
|
||||||
|
Err(error) => log::error!("Error updating agent: {error}")
|
||||||
|
};
|
||||||
|
},
|
||||||
|
EditType::Existing(id) => {
|
||||||
|
let agent = UpdateAgentPayload {
|
||||||
|
id,
|
||||||
|
credential: Some(credential),
|
||||||
|
credential_type: Some(credential_type),
|
||||||
|
full_name: Some(agent_name),
|
||||||
|
profile_picture_url: Some(profile_picture_url)
|
||||||
|
};
|
||||||
|
match update_agent(agent).await {
|
||||||
|
Ok(_) => navigator.push(&Route::AdminAgents),
|
||||||
|
Err(error) => log::error!("Error updating agent: {error}")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
html! {
|
html! {
|
||||||
|
|
Loading…
Reference in New Issue