Handle update issue
This commit is contained in:
parent
272ff38d9a
commit
4f69d20bc7
@ -98,7 +98,7 @@ pub fn update(msg: &Msg, model: &mut model::Model, orders: &mut impl Orders<Msg>
|
|||||||
project_id: Some(issue.project_id.clone()),
|
project_id: Some(issue.project_id.clone()),
|
||||||
user_ids: Some(issue.user_ids.clone()),
|
user_ids: Some(issue.user_ids.clone()),
|
||||||
};
|
};
|
||||||
send_ws_msg(jirs_data::WsMsg::IssueUpdateRequest(form));
|
send_ws_msg(jirs_data::WsMsg::IssueUpdateRequest(issue_id.clone(), form));
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
@ -96,17 +96,24 @@ pub struct ProjectPage {
|
|||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Model {
|
pub struct Model {
|
||||||
|
pub host_url: String,
|
||||||
pub access_token: Option<Uuid>,
|
pub access_token: Option<Uuid>,
|
||||||
|
|
||||||
|
// mapped
|
||||||
|
pub comments_by_project_id: HashMap<ProjectId, Vec<Comment>>,
|
||||||
|
|
||||||
|
// forms
|
||||||
pub project_form: Option<UpdateProjectForm>,
|
pub project_form: Option<UpdateProjectForm>,
|
||||||
pub issue_form: Option<CreateIssueForm>,
|
pub issue_form: Option<CreateIssueForm>,
|
||||||
pub comment_form: Option<CreateCommentForm>,
|
pub comment_form: Option<CreateCommentForm>,
|
||||||
|
|
||||||
pub comments_by_project_id: HashMap<ProjectId, Vec<Comment>>,
|
// modals
|
||||||
pub page: Page,
|
|
||||||
pub host_url: String,
|
|
||||||
pub project_page: ProjectPage,
|
|
||||||
pub modals: Vec<ModalType>,
|
pub modals: Vec<ModalType>,
|
||||||
|
|
||||||
|
// pages
|
||||||
|
pub page: Page,
|
||||||
|
pub project_page: ProjectPage,
|
||||||
|
|
||||||
pub project: Option<Project>,
|
pub project: Option<Project>,
|
||||||
pub user: Option<User>,
|
pub user: Option<User>,
|
||||||
pub issues: Vec<Issue>,
|
pub issues: Vec<Issue>,
|
||||||
|
@ -116,7 +116,7 @@ pub fn update(msg: Msg, model: &mut crate::model::Model, orders: &mut impl Order
|
|||||||
user_ids: Some(issue.user_ids.clone()),
|
user_ids: Some(issue.user_ids.clone()),
|
||||||
};
|
};
|
||||||
model.project_page.dragged_issue_id = None;
|
model.project_page.dragged_issue_id = None;
|
||||||
send_ws_msg(WsMsg::IssueUpdateRequest(payload));
|
send_ws_msg(WsMsg::IssueUpdateRequest(issue_id, payload));
|
||||||
}
|
}
|
||||||
_ => error!("Drag stopped before drop :("),
|
_ => error!("Drag stopped before drop :("),
|
||||||
},
|
},
|
||||||
|
@ -406,7 +406,7 @@ pub enum WsMsg {
|
|||||||
ProjectUsersLoaded(Vec<User>),
|
ProjectUsersLoaded(Vec<User>),
|
||||||
|
|
||||||
// issue
|
// issue
|
||||||
IssueUpdateRequest(UpdateIssuePayload),
|
IssueUpdateRequest(i32, UpdateIssuePayload),
|
||||||
IssueUpdated(Issue),
|
IssueUpdated(Issue),
|
||||||
IssueDeleteRequest(i32),
|
IssueDeleteRequest(i32),
|
||||||
IssueDeleted(i32),
|
IssueDeleted(i32),
|
||||||
|
@ -6,7 +6,7 @@ use actix_web_actors::ws;
|
|||||||
use jirs_data::{Project, WsMsg};
|
use jirs_data::{Project, WsMsg};
|
||||||
|
|
||||||
use crate::db::authorize_user::AuthorizeUser;
|
use crate::db::authorize_user::AuthorizeUser;
|
||||||
use crate::db::issues::LoadProjectIssues;
|
use crate::db::issues::{LoadProjectIssues, UpdateIssue};
|
||||||
use crate::db::projects::LoadCurrentProject;
|
use crate::db::projects::LoadCurrentProject;
|
||||||
use crate::db::users::LoadProjectUsers;
|
use crate::db::users::LoadProjectUsers;
|
||||||
use crate::db::DbExecutor;
|
use crate::db::DbExecutor;
|
||||||
@ -53,14 +53,9 @@ impl WebSocketActor {
|
|||||||
Err("Invalid auth token".to_string()),
|
Err("Invalid auth token".to_string()),
|
||||||
)),
|
)),
|
||||||
},
|
},
|
||||||
WsMsg::ProjectIssuesRequest => match block_on(self.load_issues()) {
|
WsMsg::ProjectIssuesRequest => block_on(self.load_issues()),
|
||||||
Some(msg) => Some(msg),
|
WsMsg::ProjectUsersRequest => block_on(self.load_project_users()),
|
||||||
_ => None,
|
WsMsg::IssueUpdateRequest(id, payload) => block_on(self.update_issue(id, payload)),
|
||||||
},
|
|
||||||
WsMsg::ProjectUsersRequest => match block_on(self.load_project_users()) {
|
|
||||||
Some(msg) => Some(msg),
|
|
||||||
_ => None,
|
|
||||||
},
|
|
||||||
_ => {
|
_ => {
|
||||||
error!("Failed to resolve message");
|
error!("Failed to resolve message");
|
||||||
None
|
None
|
||||||
@ -115,6 +110,49 @@ impl WebSocketActor {
|
|||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn update_issue(
|
||||||
|
&mut self,
|
||||||
|
issue_id: i32,
|
||||||
|
payload: jirs_data::UpdateIssuePayload,
|
||||||
|
) -> Option<WsMsg> {
|
||||||
|
let jirs_data::UpdateIssuePayload {
|
||||||
|
title,
|
||||||
|
issue_type,
|
||||||
|
status,
|
||||||
|
priority,
|
||||||
|
list_position,
|
||||||
|
description,
|
||||||
|
description_text,
|
||||||
|
estimate,
|
||||||
|
time_spent,
|
||||||
|
time_remaining,
|
||||||
|
project_id,
|
||||||
|
user_ids,
|
||||||
|
} = payload;
|
||||||
|
match self
|
||||||
|
.db
|
||||||
|
.send(UpdateIssue {
|
||||||
|
issue_id,
|
||||||
|
title,
|
||||||
|
issue_type,
|
||||||
|
status,
|
||||||
|
priority,
|
||||||
|
list_position,
|
||||||
|
description,
|
||||||
|
description_text,
|
||||||
|
estimate,
|
||||||
|
time_spent,
|
||||||
|
time_remaining,
|
||||||
|
project_id,
|
||||||
|
user_ids,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(Ok(issue)) => Some(WsMsg::IssueUpdated(issue.into())),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WebSocketActor {
|
impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WebSocketActor {
|
||||||
|
Loading…
Reference in New Issue
Block a user