From 6c25907a58afa316e2f4fd1875d96d9847ede38d Mon Sep 17 00:00:00 2001 From: Steven Miers Date: Thu, 27 Aug 2015 11:25:48 -0500 Subject: [PATCH] VRFS-3359 : New react components for profile setup. Incremental --- .../EditableList.js.jsx.coffee | 47 +++++++++++++ .../GenreCheckBoxList.js.jsx.coffee | 18 +++++ .../InstrumentCheckBoxList.js.jsx.coffee | 18 +++++ .../LanguageCheckBoxList.js.jsx.coffee | 18 +++++ .../SubjectCheckBoxList.js.jsx.coffee | 18 +++++ ...eacherExperienceEditableList.js.jsx.coffee | 67 +++++++++++++++++++ .../react-components/YearSelect.js.jsx.coffee | 24 +++++++ 7 files changed, 210 insertions(+) create mode 100644 web/app/assets/javascripts/react-components/EditableList.js.jsx.coffee create mode 100644 web/app/assets/javascripts/react-components/GenreCheckBoxList.js.jsx.coffee create mode 100644 web/app/assets/javascripts/react-components/InstrumentCheckBoxList.js.jsx.coffee create mode 100644 web/app/assets/javascripts/react-components/LanguageCheckBoxList.js.jsx.coffee create mode 100644 web/app/assets/javascripts/react-components/SubjectCheckBoxList.js.jsx.coffee create mode 100644 web/app/assets/javascripts/react-components/TeacherExperienceEditableList.js.jsx.coffee create mode 100644 web/app/assets/javascripts/react-components/YearSelect.js.jsx.coffee diff --git a/web/app/assets/javascripts/react-components/EditableList.js.jsx.coffee b/web/app/assets/javascripts/react-components/EditableList.js.jsx.coffee new file mode 100644 index 000000000..e3ff051db --- /dev/null +++ b/web/app/assets/javascripts/react-components/EditableList.js.jsx.coffee @@ -0,0 +1,47 @@ +context = window +rest = window.JK.Rest() +logger = context.JK.logger + +@EditableList = React.createClass({ + objects: [] + + listObjects: -> + objs=[] + @root = jQuery(this.getDOMNode()) + $(".listItem", @root).each -> + objs.push $(this).data("object-id") + objs + + deleteItem: (e) -> + e.preventDefault() + keys = (k for k, v of e.target when typeof v is 'function') + + logger.debug("Delete item", e.target, keys) + i = e.target.getAttribute("data-item-index") + this.props.listItems.splice(i,1) + this.props.onItemChanged(this.props.objectName, this.props.listItems) + + render: () -> + object_options = [] + + logger.debug("Rendering EditableList", this.props, this.props.listItems) + + if this.props.listItems? && this.props.listItems.length > 0 + for object,i in this.props.listItems + nm = "item_#{i}" + displayValue = this.props.formatListItem(object) + object_options.push `
+
{displayValue}
+
+ X +
` + else + object_options.push `
None
` + + `
+
+ {object_options} +
+
` + +}) \ No newline at end of file diff --git a/web/app/assets/javascripts/react-components/GenreCheckBoxList.js.jsx.coffee b/web/app/assets/javascripts/react-components/GenreCheckBoxList.js.jsx.coffee new file mode 100644 index 000000000..a080f7b21 --- /dev/null +++ b/web/app/assets/javascripts/react-components/GenreCheckBoxList.js.jsx.coffee @@ -0,0 +1,18 @@ +context = window +rest = window.JK.Rest() +logger = context.JK.logger + +@GenreCheckBoxList = React.createClass({ + genres: [] + componentDidUnmount: () -> + @genres = [] + + componentDidMount: () -> + rest.getGenres().done (genres) => + @genres = genres + + render: () -> + `
+ +
` +}) \ No newline at end of file diff --git a/web/app/assets/javascripts/react-components/InstrumentCheckBoxList.js.jsx.coffee b/web/app/assets/javascripts/react-components/InstrumentCheckBoxList.js.jsx.coffee new file mode 100644 index 000000000..2be186366 --- /dev/null +++ b/web/app/assets/javascripts/react-components/InstrumentCheckBoxList.js.jsx.coffee @@ -0,0 +1,18 @@ +context = window +rest = window.JK.Rest() +logger = context.JK.logger + +@InstrumentCheckBoxList = React.createClass({ + instruments: [] + componentDidUnmount: () -> + @instruments = [] + + componentDidMount: () -> + rest.getInstruments().done (instruments) => + @instruments = instruments + + render: () -> + `
+ +
` +}) \ No newline at end of file diff --git a/web/app/assets/javascripts/react-components/LanguageCheckBoxList.js.jsx.coffee b/web/app/assets/javascripts/react-components/LanguageCheckBoxList.js.jsx.coffee new file mode 100644 index 000000000..71592d822 --- /dev/null +++ b/web/app/assets/javascripts/react-components/LanguageCheckBoxList.js.jsx.coffee @@ -0,0 +1,18 @@ +context = window +rest = window.JK.Rest() +logger = context.JK.logger + +@LanguageCheckBoxList = React.createClass({ + languages: [] + componentDidUnmount: () -> + @languages = [] + + componentDidMount: () -> + rest.getLanguages().done (languages) => + @languages = languages + + render: () -> + `
+ +
` +}) \ No newline at end of file diff --git a/web/app/assets/javascripts/react-components/SubjectCheckBoxList.js.jsx.coffee b/web/app/assets/javascripts/react-components/SubjectCheckBoxList.js.jsx.coffee new file mode 100644 index 000000000..e3cf1fbe9 --- /dev/null +++ b/web/app/assets/javascripts/react-components/SubjectCheckBoxList.js.jsx.coffee @@ -0,0 +1,18 @@ +context = window +rest = window.JK.Rest() +logger = context.JK.logger + +@SubjectCheckBoxList = React.createClass({ + subjects: [] + componentDidUnmount: () -> + @subjects = [] + + componentDidMount: () -> + rest.getSubjects().done (subjects) => + @subjects = subjects + + render: () -> + `
+ +
` +}) \ No newline at end of file diff --git a/web/app/assets/javascripts/react-components/TeacherExperienceEditableList.js.jsx.coffee b/web/app/assets/javascripts/react-components/TeacherExperienceEditableList.js.jsx.coffee new file mode 100644 index 000000000..5ed8aca0e --- /dev/null +++ b/web/app/assets/javascripts/react-components/TeacherExperienceEditableList.js.jsx.coffee @@ -0,0 +1,67 @@ +context = window +rest = window.JK.Rest() +logger = context.JK.logger + +@TeacherExperienceEditableList = React.createClass({ + instruments: [] + componentDidUnmount: () -> + @instruments = [] + + componentDidMount: () -> + $root = jQuery(this.getDOMNode()) + rest.getInstruments().done (instruments) => + @instruments = instruments + + $root.off("submit", ".teacher-experience-teaching-form").on("submit", ".teacher-experience-teaching-form", @addExperience) + + formatListItem: (obj) -> + "#{obj.name}" + + listItems: () -> + logger.debug("listItems", this.props.listItems) + this.props.listItems + + addExperience: (e) -> + e.preventDefault() + logger.debug("addExperience", $(this)) + $form = e.target + formValues = $(":input", $form).formToObject() + this.props.listItems.push { + name: $("[name='title_input']", $form).val() + organization: $("[name='organization_input']", $form).val() + start_year: $("[name='start_year']", $form).val() + end_year: $("[name='end_year']", $form).val() + } + logger.debug("addExperience", this.props.listItems) + this.props.onItemChanged(this.props.experienceType, this.props.listItems) + $form.reset() + false + + render: () -> + `
+
+ + + + + + + + + + + + + +
+
+ + + +
+
+ +
+ +
` +}) \ No newline at end of file diff --git a/web/app/assets/javascripts/react-components/YearSelect.js.jsx.coffee b/web/app/assets/javascripts/react-components/YearSelect.js.jsx.coffee new file mode 100644 index 000000000..10993eafd --- /dev/null +++ b/web/app/assets/javascripts/react-components/YearSelect.js.jsx.coffee @@ -0,0 +1,24 @@ +context = window +rest = window.JK.Rest() +logger = context.JK.logger + +@YearSelect = React.createClass({ + instruments: [] + componentDidUnmount: () -> + @instruments = [] + + componentDidMount: () -> + rest.getInstruments().done (instruments) => + @instruments = instruments + + render: () -> + options = [] + + now = new Date().getFullYear() + for yr in [1901..now] + options.push `` + + `` +}) \ No newline at end of file