Fix redundant rebuild Project page
This commit is contained in:
parent
10bda7bb9c
commit
146be0184b
@ -1,8 +1,9 @@
|
|||||||
|
use jirs_data::WsMsg;
|
||||||
use seed::app::Orders;
|
use seed::app::Orders;
|
||||||
|
|
||||||
use crate::model::{Model, Page, PageContent};
|
use crate::model::{Model, Page, PageContent};
|
||||||
use crate::pages::epics_page::EpicsPage;
|
use crate::pages::epics_page::EpicsPage;
|
||||||
use crate::ws::board_load;
|
use crate::ws::{board_load, send_ws_msg};
|
||||||
use crate::{Msg, OperationKind, ResourceKind};
|
use crate::{Msg, OperationKind, ResourceKind};
|
||||||
|
|
||||||
pub fn update(msg: Msg, model: &mut crate::model::Model, orders: &mut impl Orders<Msg>) {
|
pub fn update(msg: Msg, model: &mut crate::model::Model, orders: &mut impl Orders<Msg>) {
|
||||||
@ -13,14 +14,17 @@ pub fn update(msg: Msg, model: &mut crate::model::Model, orders: &mut impl Order
|
|||||||
if matches!(model.page, Page::IssuesAndFilters)
|
if matches!(model.page, Page::IssuesAndFilters)
|
||||||
&& !matches!(model.page_content, PageContent::IssuesAndFilters(..))
|
&& !matches!(model.page_content, PageContent::IssuesAndFilters(..))
|
||||||
{
|
{
|
||||||
build_page_content(model);
|
build_page_content(model, orders);
|
||||||
}
|
}
|
||||||
|
|
||||||
match msg {
|
match msg {
|
||||||
Msg::ResourceChanged(ResourceKind::Auth, OperationKind::SingleLoaded, Some(_))
|
Msg::ResourceChanged(ResourceKind::Auth, OperationKind::SingleLoaded, Some(_))
|
||||||
| Msg::ChangePage(Page::Epics) => {
|
| Msg::ChangePage(Page::Epics) => {
|
||||||
board_load(model, orders);
|
board_load(model, orders);
|
||||||
build_page_content(model);
|
build_page_content(model, orders);
|
||||||
|
}
|
||||||
|
Msg::ResourceChanged(ResourceKind::IssueStatus, OperationKind::ListLoaded, _) => {
|
||||||
|
//
|
||||||
}
|
}
|
||||||
Msg::ResourceChanged(ResourceKind::Issue, OperationKind::ListLoaded, ..) => {
|
Msg::ResourceChanged(ResourceKind::Issue, OperationKind::ListLoaded, ..) => {
|
||||||
let hash = EpicsPage::build_issues_per_epic(model);
|
let hash = EpicsPage::build_issues_per_epic(model);
|
||||||
@ -30,9 +34,10 @@ pub fn update(msg: Msg, model: &mut crate::model::Model, orders: &mut impl Order
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_page_content(model: &mut Model) {
|
fn build_page_content(model: &mut Model, orders: &mut impl Orders<Msg>) {
|
||||||
if matches!(model.page_content, PageContent::Epics(..)) {
|
if matches!(model.page_content, PageContent::Epics(..)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
model.page_content = PageContent::Epics(Box::new(super::EpicsPage::new(model)));
|
model.page_content = PageContent::Epics(Box::new(super::EpicsPage::new(model)));
|
||||||
|
send_ws_msg(WsMsg::IssueStatusesLoad, model.ws.as_ref(), orders);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use chrono::NaiveDateTime;
|
use chrono::NaiveDateTime;
|
||||||
use jirs_data::Issue;
|
use jirs_data::{Issue, IssueStatus};
|
||||||
use seed::prelude::*;
|
use seed::prelude::*;
|
||||||
use seed::*;
|
use seed::*;
|
||||||
|
|
||||||
@ -42,7 +42,10 @@ pub fn view(model: &Model) -> Node<Msg> {
|
|||||||
C!["issues"],
|
C!["issues"],
|
||||||
issues
|
issues
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|issue| render_issue(issue))
|
.map(|issue| render_issue(
|
||||||
|
issue,
|
||||||
|
model.issue_statuses_by_id.get(&issue.issue_status_id)
|
||||||
|
))
|
||||||
.collect::<Vec<Node<Msg>>>()
|
.collect::<Vec<Node<Msg>>>()
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -76,10 +79,16 @@ fn date_field(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_issue(issue: &Issue) -> Node<Msg> {
|
fn render_issue(issue: &Issue, status: Option<&IssueStatus>) -> Node<Msg> {
|
||||||
div![
|
div![
|
||||||
C!["issue"],
|
C!["issue"],
|
||||||
div![C!["name"], issue.title.as_str()],
|
div![C!["name"], issue.title.as_str()],
|
||||||
|
div![
|
||||||
|
C!["status"],
|
||||||
|
status
|
||||||
|
.map(|status| status.name.as_str())
|
||||||
|
.unwrap_or_default()
|
||||||
|
],
|
||||||
div![
|
div![
|
||||||
C!["flags"],
|
C!["flags"],
|
||||||
div![
|
div![
|
||||||
|
@ -127,5 +127,8 @@ pub fn update(msg: Msg, model: &mut crate::model::Model, orders: &mut impl Order
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn build_page_content(model: &mut Model) {
|
fn build_page_content(model: &mut Model) {
|
||||||
|
if matches!(model.page_content, PageContent::Project(..)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
model.page_content = PageContent::Project(Box::new(ProjectPage::default()));
|
model.page_content = PageContent::Project(Box::new(ProjectPage::default()));
|
||||||
}
|
}
|
||||||
|
@ -17,8 +17,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
|
|
||||||
match msg {
|
match msg {
|
||||||
Msg::ProjectChanged(Some(_)) => {
|
Msg::ProjectChanged(Some(_)) => {
|
||||||
build_page_content(model);
|
build_page_content(model, orders);
|
||||||
send_ws_msg(WsMsg::IssueStatusesLoad, model.ws.as_ref(), orders);
|
|
||||||
}
|
}
|
||||||
Msg::WebSocketChange(ref change) => match change {
|
Msg::WebSocketChange(ref change) => match change {
|
||||||
WebSocketChanged::WsMsg(WsMsg::AuthorizeLoaded(..)) => {
|
WebSocketChanged::WsMsg(WsMsg::AuthorizeLoaded(..)) => {
|
||||||
@ -35,7 +34,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
_ => (),
|
_ => (),
|
||||||
},
|
},
|
||||||
Msg::ChangePage(Page::ProjectSettings) => {
|
Msg::ChangePage(Page::ProjectSettings) => {
|
||||||
build_page_content(model);
|
build_page_content(model, orders);
|
||||||
if model.user.is_some() {
|
if model.user.is_some() {
|
||||||
board_load(model, orders);
|
board_load(model, orders);
|
||||||
}
|
}
|
||||||
@ -55,8 +54,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
if matches!(model.page, Page::ProjectSettings)
|
if matches!(model.page, Page::ProjectSettings)
|
||||||
&& !matches!(model.page_content, PageContent::ProjectSettings(..))
|
&& !matches!(model.page_content, PageContent::ProjectSettings(..))
|
||||||
{
|
{
|
||||||
build_page_content(model);
|
build_page_content(model, orders);
|
||||||
send_ws_msg(WsMsg::IssueStatusesLoad, model.ws.as_ref(), orders);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let page = match_page_mut!(model, ProjectSettings);
|
let page = match_page_mut!(model, ProjectSettings);
|
||||||
@ -80,8 +78,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
FieldId::ProjectSettings(ProjectFieldId::Category),
|
FieldId::ProjectSettings(ProjectFieldId::Category),
|
||||||
StyledSelectChanged::Changed(Some(value)),
|
StyledSelectChanged::Changed(Some(value)),
|
||||||
) => {
|
) => {
|
||||||
let category = value.into();
|
page.payload.category = Some(value.into());
|
||||||
page.payload.category = Some(category);
|
|
||||||
}
|
}
|
||||||
Msg::PageChanged(PageChanged::ProjectSettings(
|
Msg::PageChanged(PageChanged::ProjectSettings(
|
||||||
ProjectPageChange::SubmitProjectSettingsForm,
|
ProjectPageChange::SubmitProjectSettingsForm,
|
||||||
@ -174,7 +171,7 @@ fn exchange_position(bellow_id: IssueStatusId, model: &mut Model) {
|
|||||||
}
|
}
|
||||||
let dragged_id = match page.column_drag.dragged_id.as_ref().cloned() {
|
let dragged_id = match page.column_drag.dragged_id.as_ref().cloned() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
_ => return error!("Nothing is dragged"),
|
_ => return log::error!("Nothing is dragged"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut below = None;
|
let mut below = None;
|
||||||
@ -221,7 +218,7 @@ fn sync(model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
std::mem::swap(&mut old, &mut page.column_drag.dirty);
|
std::mem::swap(&mut old, &mut page.column_drag.dirty);
|
||||||
old
|
old
|
||||||
}
|
}
|
||||||
_ => return error!("bad content type"),
|
_ => return log::error!("bad content type"),
|
||||||
};
|
};
|
||||||
for id in dirty {
|
for id in dirty {
|
||||||
let IssueStatus { name, position, .. } =
|
let IssueStatus { name, position, .. } =
|
||||||
@ -237,7 +234,10 @@ fn sync(model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_page_content(model: &mut Model) {
|
fn build_page_content(model: &mut Model, orders: &mut impl Orders<Msg>) {
|
||||||
|
if matches!(model.page_content, PageContent::ProjectSettings(..)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if let Some(project) = &model.project {
|
if let Some(project) = &model.project {
|
||||||
let mode = model
|
let mode = model
|
||||||
.user_settings
|
.user_settings
|
||||||
@ -247,4 +247,6 @@ fn build_page_content(model: &mut Model) {
|
|||||||
model.page_content =
|
model.page_content =
|
||||||
PageContent::ProjectSettings(Box::new(ProjectSettingsPage::new(mode, project)));
|
PageContent::ProjectSettings(Box::new(ProjectSettingsPage::new(mode, project)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
send_ws_msg(WsMsg::IssueStatusesLoad, model.ws.as_ref(), orders);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user