Fix drag&drop
This commit is contained in:
parent
15095dc574
commit
cf28ed7ef4
@ -192,11 +192,13 @@ fn update(msg: Msg, model: &mut model::Model, orders: &mut impl Orders<Msg>) {
|
|||||||
Msg::AuthTokenStored => {
|
Msg::AuthTokenStored => {
|
||||||
seed::push_route(vec!["dashboard"]);
|
seed::push_route(vec!["dashboard"]);
|
||||||
orders.skip().send_msg(Msg::ChangePage(Page::Project));
|
orders.skip().send_msg(Msg::ChangePage(Page::Project));
|
||||||
|
authorize_or_redirect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Msg::AuthTokenErased => {
|
Msg::AuthTokenErased => {
|
||||||
seed::push_route(vec!["login"]);
|
seed::push_route(vec!["login"]);
|
||||||
orders.skip().send_msg(Msg::ChangePage(Page::Login));
|
orders.skip().send_msg(Msg::ChangePage(Page::Login));
|
||||||
|
authorize_or_redirect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Msg::ChangePage(page) => {
|
Msg::ChangePage(page) => {
|
||||||
|
@ -18,11 +18,13 @@ pub fn update(msg: Msg, model: &mut crate::model::Model, orders: &mut impl Order
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
match &model.page {
|
match msg {
|
||||||
Page::Project | Page::AddIssue | Page::EditIssue(..) => {
|
Msg::ChangePage(Page::Project)
|
||||||
|
| Msg::ChangePage(Page::AddIssue)
|
||||||
|
| Msg::ChangePage(Page::EditIssue(..)) => {
|
||||||
model.page_content = PageContent::Project(ProjectPage::default());
|
model.page_content = PageContent::Project(ProjectPage::default());
|
||||||
}
|
}
|
||||||
_ => return,
|
_ => (),
|
||||||
}
|
}
|
||||||
|
|
||||||
let project_page = match &mut model.page_content {
|
let project_page = match &mut model.page_content {
|
||||||
@ -103,13 +105,13 @@ pub fn update(msg: Msg, model: &mut crate::model::Model, orders: &mut impl Order
|
|||||||
}
|
}
|
||||||
Msg::IssueDragStarted(issue_id) => crate::ws::issue::drag_started(issue_id, model),
|
Msg::IssueDragStarted(issue_id) => crate::ws::issue::drag_started(issue_id, model),
|
||||||
Msg::IssueDragStopped(_) => {
|
Msg::IssueDragStopped(_) => {
|
||||||
project_page.dragged_issue_id = None;
|
crate::ws::issue::sync(model);
|
||||||
}
|
}
|
||||||
Msg::ExchangePosition(issue_bellow_id) => {
|
Msg::ExchangePosition(issue_bellow_id) => {
|
||||||
crate::ws::issue::exchange_position(issue_bellow_id, model)
|
crate::ws::issue::exchange_position(issue_bellow_id, model)
|
||||||
}
|
}
|
||||||
Msg::IssueDragOverStatus(status) => crate::ws::issue::change_status(status, model),
|
Msg::IssueDragOverStatus(status) => crate::ws::issue::change_status(status, model),
|
||||||
Msg::IssueDropZone(status) => crate::ws::issue::dropped(status, model),
|
Msg::IssueDropZone(_status) => crate::ws::issue::sync(model),
|
||||||
Msg::DeleteIssue(issue_id) => {
|
Msg::DeleteIssue(issue_id) => {
|
||||||
send_ws_msg(jirs_data::WsMsg::IssueDeleteRequest(issue_id));
|
send_ws_msg(jirs_data::WsMsg::IssueDeleteRequest(issue_id));
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ pub fn update(msg: Msg, model: &mut model::Model, orders: &mut impl Orders<Msg>)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if model.page != Page::ProjectSettings {
|
if model.page != Page::ProjectSettings {
|
||||||
log!("not settings page");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
use seed::*;
|
||||||
|
|
||||||
use jirs_data::*;
|
use jirs_data::*;
|
||||||
|
|
||||||
use crate::api::send_ws_msg;
|
use crate::api::send_ws_msg;
|
||||||
@ -9,7 +11,6 @@ pub fn drag_started(issue_id: IssueId, model: &mut Model) {
|
|||||||
_ => return,
|
_ => return,
|
||||||
};
|
};
|
||||||
project_page.dragged_issue_id = Some(issue_id);
|
project_page.dragged_issue_id = Some(issue_id);
|
||||||
|
|
||||||
mark_dirty(issue_id, project_page);
|
mark_dirty(issue_id, project_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,9 +24,9 @@ pub fn exchange_position(issue_bellow_id: IssueId, model: &mut Model) {
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let dragged_id = match project_page.dragged_issue_id {
|
let dragged_id = match project_page.dragged_issue_id.as_ref().cloned() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
_ => return,
|
_ => return error!("Nothing is dragged"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut below = None;
|
let mut below = None;
|
||||||
@ -78,7 +79,10 @@ pub fn exchange_position(issue_bellow_id: IssueId, model: &mut Model) {
|
|||||||
project_page.last_drag_exchange_id = Some(issue_bellow_id);
|
project_page.last_drag_exchange_id = Some(issue_bellow_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn dropped(_status: IssueStatus, model: &mut Model) {
|
pub fn sync(model: &mut Model) {
|
||||||
|
log!("------------------------------------------------------------------");
|
||||||
|
log!("| SYNC |");
|
||||||
|
log!("------------------------------------------------------------------");
|
||||||
let project_page = match &mut model.page_content {
|
let project_page = match &mut model.page_content {
|
||||||
PageContent::Project(project_page) => project_page,
|
PageContent::Project(project_page) => project_page,
|
||||||
_ => return,
|
_ => return,
|
||||||
@ -104,10 +108,12 @@ pub fn dropped(_status: IssueStatus, model: &mut Model) {
|
|||||||
reporter_id: issue.reporter_id,
|
reporter_id: issue.reporter_id,
|
||||||
user_ids: issue.user_ids.clone(),
|
user_ids: issue.user_ids.clone(),
|
||||||
};
|
};
|
||||||
project_page.dragged_issue_id = None;
|
|
||||||
send_ws_msg(WsMsg::IssueUpdateRequest(issue.id, payload));
|
send_ws_msg(WsMsg::IssueUpdateRequest(issue.id, payload));
|
||||||
project_page.last_drag_exchange_id = None;
|
|
||||||
}
|
}
|
||||||
|
project_page.dragged_issue_id = None;
|
||||||
|
project_page.last_drag_exchange_id = None;
|
||||||
|
project_page.dirty_issues.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn change_status(status: IssueStatus, model: &mut Model) {
|
pub fn change_status(status: IssueStatus, model: &mut Model) {
|
||||||
@ -118,7 +124,7 @@ pub fn change_status(status: IssueStatus, model: &mut Model) {
|
|||||||
|
|
||||||
let issue_id = match project_page.dragged_issue_id.as_ref().cloned() {
|
let issue_id = match project_page.dragged_issue_id.as_ref().cloned() {
|
||||||
Some(issue_id) => issue_id,
|
Some(issue_id) => issue_id,
|
||||||
_ => return,
|
_ => return error!("Nothing is dragged"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut old: Vec<Issue> = vec![];
|
let mut old: Vec<Issue> = vec![];
|
||||||
@ -129,7 +135,10 @@ pub fn change_status(status: IssueStatus, model: &mut Model) {
|
|||||||
|
|
||||||
for mut issue in old.into_iter() {
|
for mut issue in old.into_iter() {
|
||||||
if issue.status == status {
|
if issue.status == status {
|
||||||
|
if issue.list_position != pos {
|
||||||
issue.list_position = pos;
|
issue.list_position = pos;
|
||||||
|
mark_dirty(issue.id, project_page);
|
||||||
|
}
|
||||||
pos += 1;
|
pos += 1;
|
||||||
}
|
}
|
||||||
if issue.id != issue_id {
|
if issue.id != issue_id {
|
||||||
@ -149,12 +158,12 @@ pub fn change_status(status: IssueStatus, model: &mut Model) {
|
|||||||
if issue.status == status {
|
if issue.status == status {
|
||||||
model.issues.push(issue);
|
model.issues.push(issue);
|
||||||
return;
|
return;
|
||||||
}
|
} else {
|
||||||
issue.status = status;
|
issue.status = status;
|
||||||
issue.list_position = pos + 1;
|
issue.list_position = pos + 1;
|
||||||
model.issues.push(issue);
|
model.issues.push(issue);
|
||||||
|
|
||||||
mark_dirty(issue_id, project_page);
|
mark_dirty(issue_id, project_page);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
Loading…
Reference in New Issue
Block a user