diff --git a/app/components/proposals/form_component.html.erb b/app/components/proposals/form_component.html.erb new file mode 100644 index 000000000..f386d106d --- /dev/null +++ b/app/components/proposals/form_component.html.erb @@ -0,0 +1,109 @@ +<%= render "shared/globalize_locales", resource: proposal %> + +<%= translatable_form_for(proposal, url: url) do |f| %> + + <%= render "shared/errors", resource: proposal %> + +
+ <%= f.translatable_fields do |translations_form| %> +
+ <%= translations_form.text_field :title, + maxlength: Proposal.title_max_length, + data: suggest_data(proposal) %> +
+
+ +
+ <%= translations_form.text_area :summary, + rows: 4, maxlength: 200, + hint: t("proposals.form.proposal_summary_note") %> +
+ +
+ <%= translations_form.text_area :description, + maxlength: Proposal.description_max_length, + class: "html-area" %> +
+ <% end %> + + <%= f.invisible_captcha :subtitle %> + +
+ <%= f.text_field :video_url, hint: t("proposals.form.proposal_video_url_note") %> +
+ + <% if feature?(:allow_images) %> +
+ <%= render "images/nested_image", imageable: proposal, f: f %> +
+ <% end %> + + <% if feature?(:allow_attached_documents) %> +
+ <%= render "documents/nested_documents", documentable: proposal, f: f %> +
+ <% end %> + +
+ <%= f.select :geozone_id, geozone_select_options, + include_blank: t("geozones.none") %> +
+ + <% if feature?(:map) %> +
+ <%= render "map_locations/form_fields", + form: f, + map_location: proposal.map_location || MapLocation.new, + label: t("proposals.form.map_location"), + help: t("proposals.form.map_location_instructions"), + remove_marker_label: t("proposals.form.map_remove_marker"), + parent_class: "proposal", + i18n_namespace: "proposals" %> +
+ <% end %> + +
+ <%= f.label :tag_list, t("proposals.form.tags_label") %> +

<%= t("proposals.form.tags_instructions") %>

+ +
+ <%= f.label :category_tag_list, t("proposals.form.tag_category_label") %> + <% categories.each do |tag| %> + <%= tag.name %> + <% end %> +
+ +
+ <%= f.text_field :tag_list, value: proposal.tag_list.to_s, + label: false, + placeholder: t("proposals.form.tags_placeholder"), + class: "js-tag-list tag-autocomplete", + aria: { describedby: "tag-list-help-text" }, + data: { js_url: suggest_tags_path } %> +
+ + <% if current_user.unverified? %> +
+ <%= f.text_field :responsible_name, + hint: t("proposals.form.proposal_responsible_name_note") %> +
+ <% end %> + + <%= render SDG::RelatedListSelectorComponent.new(f) %> + +
+ <% if proposal.new_record? %> + <%= f.check_box :terms_of_service, + title: t("form.accept_terms_title"), + label: t("form.accept_terms", + policy: link_to(t("form.policy"), "/privacy", target: "blank"), + conditions: link_to(t("form.conditions"), "/conditions", target: "blank") + ) %> + <% end %> +
+ +
+ <%= f.submit(class: "button", value: t("proposals.#{action_name}.form.submit_button")) %> +
+
+<% end %> diff --git a/app/components/proposals/form_component.rb b/app/components/proposals/form_component.rb new file mode 100644 index 000000000..4ec266d05 --- /dev/null +++ b/app/components/proposals/form_component.rb @@ -0,0 +1,17 @@ +class Proposals::FormComponent < ApplicationComponent + include TranslatableFormHelper + include GlobalizeHelper + attr_reader :proposal, :url + delegate :current_user, :suggest_data, :geozone_select_options, to: :helpers + + def initialize(proposal, url:) + @proposal = proposal + @url = url + end + + private + + def categories + Tag.category.order(:name) + end +end diff --git a/app/controllers/concerns/commentable_actions.rb b/app/controllers/concerns/commentable_actions.rb index 31ced92e1..1d1b647f9 100644 --- a/app/controllers/concerns/commentable_actions.rb +++ b/app/controllers/concerns/commentable_actions.rb @@ -52,7 +52,6 @@ module CommentableActions redirect_path = url_for(controller: controller_name, action: :show, id: @resource.id) redirect_to redirect_path, notice: t("flash.actions.create.#{resource_name.underscore}") else - load_categories load_geozones set_resource_instance render :new @@ -66,7 +65,6 @@ module CommentableActions if resource.update(strong_params) redirect_to resource, notice: t("flash.actions.update.#{resource_name.underscore}") else - load_categories load_geozones set_resource_instance render :edit diff --git a/app/controllers/management/proposals_controller.rb b/app/controllers/management/proposals_controller.rb index a384bb541..740a4b81c 100644 --- a/app/controllers/management/proposals_controller.rb +++ b/app/controllers/management/proposals_controller.rb @@ -7,7 +7,6 @@ class Management::ProposalsController < Management::BaseController before_action :only_verified_users, except: :print before_action :set_proposal, only: [:vote, :show] before_action :parse_search_terms, only: :index - before_action :load_categories, only: [:new, :edit] before_action :load_geozones, only: [:edit] has_orders %w[confidence_score hot_score created_at most_commented random], only: [:index, :print] @@ -22,7 +21,6 @@ class Management::ProposalsController < Management::BaseController redirect_path = url_for(controller: controller_name, action: :show, id: @resource.id) redirect_to redirect_path, notice: t("flash.actions.create.#{resource_name.underscore}") else - load_categories load_geozones set_resource_instance render :new diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index fc0b977df..dd4932ed1 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -7,7 +7,7 @@ class ProposalsController < ApplicationController include MapLocationAttributes include Translatable - before_action :load_categories, only: [:index, :new, :create, :edit, :map, :summary] + before_action :load_categories, only: [:index, :map, :summary] before_action :load_geozones, only: [:edit, :map, :summary] before_action :authenticate_user!, except: [:index, :show, :map, :summary] before_action :destroy_map_location_association, only: :update diff --git a/app/views/proposals/_form.html.erb b/app/views/proposals/_form.html.erb index 44b14fc59..aa749b961 100644 --- a/app/views/proposals/_form.html.erb +++ b/app/views/proposals/_form.html.erb @@ -1,111 +1 @@ -<%= render "shared/globalize_locales", resource: @proposal %> - -<%= translatable_form_for(@proposal, url: form_url) do |f| %> - - <%= render "shared/errors", resource: @proposal %> - -
- <%= f.translatable_fields do |translations_form| %> -
- <%= translations_form.text_field :title, - maxlength: Proposal.title_max_length, - data: suggest_data(@proposal) %> -
-
- -
- <%= translations_form.text_area :summary, - rows: 4, maxlength: 200, - hint: t("proposals.form.proposal_summary_note") %> -
- -
- <%= translations_form.text_area :description, - maxlength: Proposal.description_max_length, - class: "html-area" %> -
- <% end %> - - <%= f.invisible_captcha :subtitle %> - -
- <%= f.text_field :video_url, hint: t("proposals.form.proposal_video_url_note") %> -
- - <% if feature?(:allow_images) %> -
- <%= render "images/nested_image", imageable: @proposal, f: f %> -
- <% end %> - - <% if feature?(:allow_attached_documents) %> -
- <%= render "documents/nested_documents", documentable: @proposal, f: f %> -
- <% end %> - -
- <%= f.select :geozone_id, geozone_select_options, - include_blank: t("geozones.none") %> -
- - <% if feature?(:map) %> -
- - <%= render "map_locations/form_fields", - form: f, - map_location: @proposal.map_location || MapLocation.new, - label: t("proposals.form.map_location"), - help: t("proposals.form.map_location_instructions"), - remove_marker_label: t("proposals.form.map_remove_marker"), - parent_class: "proposal", - i18n_namespace: "proposals" %> - -
- <% end %> - -
- <%= f.label :tag_list, t("proposals.form.tags_label") %> -

<%= t("proposals.form.tags_instructions") %>

- -
- <%= f.label :category_tag_list, t("proposals.form.tag_category_label") %> - <% @categories.each do |tag| %> - <%= tag.name %> - <% end %> -
- -
- <%= f.text_field :tag_list, value: @proposal.tag_list.to_s, - label: false, - placeholder: t("proposals.form.tags_placeholder"), - class: "js-tag-list tag-autocomplete", - aria: { describedby: "tag-list-help-text" }, - data: { js_url: suggest_tags_path } %> -
- - <% if current_user.unverified? %> -
- <%= f.text_field :responsible_name, - hint: t("proposals.form.proposal_responsible_name_note") %> -
- <% end %> - - <%= render SDG::RelatedListSelectorComponent.new(f) %> - -
- <% if @proposal.new_record? %> - <%= f.check_box :terms_of_service, - title: t("form.accept_terms_title"), - label: t("form.accept_terms", - policy: link_to(t("form.policy"), "/privacy", target: "blank"), - conditions: link_to(t("form.conditions"), "/conditions", target: "blank") - ) %> - <% end %> -
- -
- <%= f.submit(class: "button", value: t("proposals.#{action_name}.form.submit_button")) %> -
-
-<% end %> +<%= render Proposals::FormComponent.new(@proposal, url: form_url) %>