From ff5a43efc68546743c7dfa0eb920037d752a8890 Mon Sep 17 00:00:00 2001 From: Adrian Wozniak Date: Mon, 13 Apr 2020 16:29:26 +0200 Subject: [PATCH] Add project settings --- jirs-client/js/css/project.css | 1 - jirs-client/js/css/styledPage.css | 3 ++ jirs-client/js/styles.css | 1 + jirs-client/src/lib.rs | 16 +++++++++ jirs-client/src/project_settings.rs | 55 +++++++++++++++++++++++++++-- jirs-client/src/shared/mod.rs | 2 +- 6 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 jirs-client/js/css/styledPage.css diff --git a/jirs-client/js/css/project.css b/jirs-client/js/css/project.css index cbd3a239..43972470 100644 --- a/jirs-client/js/css/project.css +++ b/jirs-client/js/css/project.css @@ -1,5 +1,4 @@ #projectPage { - padding: 25px 32px 50px calc(var(--appNavBarLeftWidth) + var(--secondarySideBarWidth) + 40px); } #projectPage > .breadcrumbsContainer { diff --git a/jirs-client/js/css/styledPage.css b/jirs-client/js/css/styledPage.css new file mode 100644 index 00000000..181f1d75 --- /dev/null +++ b/jirs-client/js/css/styledPage.css @@ -0,0 +1,3 @@ +.innerPage { + padding: 25px 32px 50px calc(var(--appNavBarLeftWidth) + var(--secondarySideBarWidth) + 40px); +} diff --git a/jirs-client/js/styles.css b/jirs-client/js/styles.css index ec2d0b10..b7fb57ae 100644 --- a/jirs-client/js/styles.css +++ b/jirs-client/js/styles.css @@ -17,6 +17,7 @@ @import "./css/styledForm.css"; @import "./css/styledEditor.css"; @import "./css/styledComment.css"; +@import "./css/styledPage.css"; @import "./css/app.css"; @import "./css/issue.css"; @import "./css/project.css"; diff --git a/jirs-client/src/lib.rs b/jirs-client/src/lib.rs index 3fed56c4..b2e924f7 100644 --- a/jirs-client/src/lib.rs +++ b/jirs-client/src/lib.rs @@ -49,6 +49,14 @@ pub enum AddIssueModalFieldId { Priority, } +#[derive(Clone, Debug, PartialOrd, PartialEq, Hash)] +pub enum ProjectSettingsFieldId { + Name, + Url, + Description, + Category, +} + #[derive(Clone, Debug, PartialOrd, PartialEq, Hash)] pub enum FieldId { // issue @@ -57,6 +65,8 @@ pub enum FieldId { // project boards TextFilterBoard, CopyButtonLabel, + + ProjectSettings(ProjectSettingsFieldId), } impl std::fmt::Display for FieldId { @@ -85,6 +95,12 @@ impl std::fmt::Display for FieldId { }, FieldId::TextFilterBoard => f.write_str("textFilterBoard"), FieldId::CopyButtonLabel => f.write_str("copyButtonLabel"), + FieldId::ProjectSettings(sub) => match sub { + ProjectSettingsFieldId::Name => f.write_str("projectSettings-name"), + ProjectSettingsFieldId::Url => f.write_str("projectSettings-url"), + ProjectSettingsFieldId::Description => f.write_str("projectSettings-description"), + ProjectSettingsFieldId::Category => f.write_str("projectSettings-category"), + }, } } } diff --git a/jirs-client/src/project_settings.rs b/jirs-client/src/project_settings.rs index c1a5a9ca..fc82619a 100644 --- a/jirs-client/src/project_settings.rs +++ b/jirs-client/src/project_settings.rs @@ -1,12 +1,61 @@ use seed::{prelude::*, *}; -use crate::shared::inner_layout; -use crate::{model, Msg}; +use crate::shared::styled_editor::StyledEditor; +use crate::shared::styled_field::StyledField; +use crate::shared::styled_form::StyledForm; +use crate::shared::styled_input::StyledInput; +use crate::shared::styled_select::StyledSelect; +use crate::shared::{inner_layout, ToNode}; +use crate::{model, FieldId, Msg, ProjectSettingsFieldId}; pub fn update(_msg: Msg, _model: &mut model::Model, _orders: &mut impl Orders) {} pub fn view(model: &model::Model) -> Node { - let project_section = vec![]; + let name = StyledInput::build(FieldId::ProjectSettings(ProjectSettingsFieldId::Name)) + .valid(true) + .build() + .into_node(); + let name_field = StyledField::build() + .label("Name") + .input(name) + .tip("") + .build() + .into_node(); + + let url = StyledInput::build(FieldId::ProjectSettings(ProjectSettingsFieldId::Url)) + .valid(true) + .build() + .into_node(); + let url_field = StyledField::build() + .label("Url") + .input(url) + .tip("") + .build() + .into_node(); + + let description = StyledEditor::build(FieldId::ProjectSettings( + ProjectSettingsFieldId::Description, + )) + .text("") + .update_on(Ev::Change) + .build() + .into_node(); + let description_field = StyledField::build() + .input(description) + .label("Description") + .tip("Describe the project in as much detail as you'd like.") + .build() + .into_node(); + + let form = StyledForm::build() + .heading("Project Details") + .add_field(name_field) + .add_field(url_field) + .add_field(description_field) + .build() + .into_node(); + + let project_section = vec![form]; inner_layout(model, "projectSettings", project_section, empty![]) } diff --git a/jirs-client/src/shared/mod.rs b/jirs-client/src/shared/mod.rs index 18f527eb..839c9ae2 100644 --- a/jirs-client/src/shared/mod.rs +++ b/jirs-client/src/shared/mod.rs @@ -42,7 +42,7 @@ pub fn inner_layout( ) -> Node { article![ modal_node, - attrs![At::Class => "inner-layout"], + class!["inner-layout", "innerPage"], id![page_name], navbar_left::render(model), aside::render(model),