diff --git a/README.md b/README.md index fecd2286..6057d87a 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,29 @@ https://git.sr.ht/~tsumanu/jirs * Comment issue * Add people to project +## Known bugs + +* Bad sorting when dragging up and down + +## Roadmap + +##### Version 1.0 + +* Basic issue management +* Basic columns management +* Basic user management + +##### Version 1.1 + +* Add Epic +* Add grouping by Epic +* Add backend maximal per seconds request or die +* Add fibonacci tracked issue reports +* Add hourly tracked issue reports +* Add Rich Text Editor +* Add personal settings to choose MDE (Markdown Editor) or RTE +* Add issues and filters + ## How to run it ### Config files diff --git a/jirs-client/js/css/reports.css b/jirs-client/js/css/reports.css index 53e53975..25e068de 100644 --- a/jirs-client/js/css/reports.css +++ b/jirs-client/js/css/reports.css @@ -11,16 +11,16 @@ #reports > .top > .issueList { display: block; + margin-top: 15px; +} + +#reports > .top > .issueList > .issueListHeader { + margin-bottom: 15px; } #reports > .top > .issueList > .issue { - display: flex; - justify-content: space-between; - justify-items: flex-start; -} - -#reports > .top > .issueList > .issue > * { - width: 25%; + display: grid; + grid-template-columns: 32px 32px 240px auto 120px; } #reports > .top > .issueList > .issue.selected { diff --git a/jirs-client/src/reports/view.rs b/jirs-client/src/reports/view.rs index 80ca4fd2..46084282 100644 --- a/jirs-client/src/reports/view.rs +++ b/jirs-client/src/reports/view.rs @@ -6,7 +6,8 @@ use seed::{prelude::*, *}; use jirs_data::Issue; use crate::model::{Model, PageContent, ReportsPage}; -use crate::shared::inner_layout; +use crate::shared::styled_icon::StyledIcon; +use crate::shared::{inner_layout, ToNode}; use crate::{Msg, PageChanged, ReportsPageChange}; const SVG_MARGIN_X: u32 = 10; @@ -100,11 +101,22 @@ fn this_month_graph(page: &Box, this_month_updated: &Vec<&Issue>) - ReportsPageChange::DayHovered(None), ))) }); + let selected = page.selected_day.clone(); + let current_date = day.clone(); + let on_click: EventHandler = mouse_ev(Ev::MouseLeave, move |_| { + Some(Msg::PageChanged(PageChanged::Reports( + ReportsPageChange::DaySelected(match selected { + Some(_) => None, + None => Some(current_date), + }), + ))) + }); svg_parts.push(seed::g![ seed::rect![ on_hover, on_blur, + on_click, attrs![ At::X => x, At::Y => SVG_DRAWABLE_HEIGHT as f64 - height, // reverse draw origin @@ -150,20 +162,34 @@ fn issue_list(page: &Box, this_month_updated: &Vec<&Issue>) -> Node title, issue_type, priority, - description: _, + description, issue_status_id: _, .. } = issue; + let type_icon = StyledIcon::build(issue_type.clone().into()) + .build() + .into_node(); + let priority_icon = StyledIcon::build(priority.clone().into()) + .build() + .into_node(); children.push(li![ class!["issue"], class![active_class], - span![title.as_str()], - span![format!("{}", issue_type)], - span![format!("{}", priority)], - span![day.as_str()] + span![class!["priority"], priority_icon], + span![class!["type"], type_icon], + span![class!["name"], title.as_str()], + span![ + class!["desc"], + description.as_ref().cloned().unwrap_or_default() + ], + span![class!["updatedAt"], day.as_str()], ]); } - div![class!["issueList"], children] + div![ + class!["issueList"], + h5![class!["issueListHeader"], "Issues this month"], + children + ] } fn this_month_updated<'a>(model: &'a Model, page: &Box) -> Vec<&'a Issue> { diff --git a/jirs-client/src/shared/styled_input.rs b/jirs-client/src/shared/styled_input.rs index 1bf00c3f..efe14eed 100644 --- a/jirs-client/src/shared/styled_input.rs +++ b/jirs-client/src/shared/styled_input.rs @@ -242,8 +242,13 @@ pub fn render(values: StyledInput) -> Node { At::Class => input_class_list.join(" "), At::Value => value.unwrap_or_default(), At::Type => input_type.unwrap_or_else(|| "text".to_string()), - At::AutoFocus => auto_focus, + ], + if auto_focus { + vec![attrs![At::AutoFocus => true]] + } else { + vec![] + }, input_handlers, ], ]