Move investment form partial to a component
This commit is contained in:
107
app/components/budgets/investments/form_component.html.erb
Normal file
107
app/components/budgets/investments/form_component.html.erb
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
<%= translatable_form_for(investment, url: url, html: { multipart: true }) do |f| %>
|
||||||
|
|
||||||
|
<%= render "shared/errors", resource: investment %>
|
||||||
|
|
||||||
|
<div class="row column">
|
||||||
|
<% unless budget.single_heading? %>
|
||||||
|
<div class="small-12 medium-8 column">
|
||||||
|
<%= f.select :heading_id, budget_heading_select_options(budget), { include_blank: true } %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="small-12 column">
|
||||||
|
<%= render "shared/globalize_locales", resource: investment %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= f.translatable_fields do |translations_form| %>
|
||||||
|
<div class="small-12 column">
|
||||||
|
<%= translations_form.text_field :title,
|
||||||
|
maxlength: Budget::Investment.title_max_length,
|
||||||
|
data: suggest_data(investment) %>
|
||||||
|
</div>
|
||||||
|
<div class="js-suggest" data-locale="<%= translations_form.locale %>"></div>
|
||||||
|
|
||||||
|
<div class="small-12 column">
|
||||||
|
<%= translations_form.text_area :description,
|
||||||
|
maxlength: Budget::Investment.description_max_length,
|
||||||
|
class: "html-area" %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%= f.invisible_captcha :subtitle %>
|
||||||
|
|
||||||
|
<% if feature?(:allow_images) %>
|
||||||
|
<div class="images small-12 column">
|
||||||
|
<%= render "images/nested_image", imageable: investment, f: f %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% if feature?(:allow_attached_documents) %>
|
||||||
|
<div class="documents small-12 column">
|
||||||
|
<%= render "documents/nested_documents", documentable: investment, f: f %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% if feature?(:map) %>
|
||||||
|
<div class="small-12 column">
|
||||||
|
<%= render "map_locations/form_fields",
|
||||||
|
form: f,
|
||||||
|
map_location: investment.map_location || MapLocation.new,
|
||||||
|
label: t("budgets.investments.form.map_location"),
|
||||||
|
help: t("budgets.investments.form.map_location_instructions"),
|
||||||
|
remove_marker_label: t("budgets.investments.form.map_remove_marker"),
|
||||||
|
parent_class: "budget_investment",
|
||||||
|
i18n_namespace: "budgets.investments" %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="small-12 column">
|
||||||
|
<%= f.text_field :location %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="small-12 column">
|
||||||
|
<%= f.text_field :organization_name %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="small-12 column">
|
||||||
|
<%= f.label :tag_list, t("budgets.investments.form.tags_label") %>
|
||||||
|
<p class="help-text" id="tags-list-help-text"><%= t("budgets.investments.form.tags_instructions") %></p>
|
||||||
|
|
||||||
|
<div id="category_tags" class="tags">
|
||||||
|
<%= f.label :category_tag_list, t("budgets.investments.form.tag_category_label") %>
|
||||||
|
<% categories.each do |tag| %>
|
||||||
|
<a class="js-add-tag-link"><%= tag.name %></a>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<%= f.text_field :tag_list, value: investment.tag_list.to_s,
|
||||||
|
label: false,
|
||||||
|
placeholder: t("budgets.investments.form.tags_placeholder"),
|
||||||
|
aria: { describedby: "tags-list-help-text" },
|
||||||
|
class: "js-tag-list tag-autocomplete",
|
||||||
|
data: { js_url: suggest_tags_path } %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render SDG::RelatedListSelectorComponent.new(f) %>
|
||||||
|
|
||||||
|
<% unless current_user.manager? %>
|
||||||
|
|
||||||
|
<div class="small-12 column">
|
||||||
|
<%= 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")
|
||||||
|
) %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="actions small-12 medium-6 large-4 end column">
|
||||||
|
<%= f.submit(nil, class: "button expanded") %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
21
app/components/budgets/investments/form_component.rb
Normal file
21
app/components/budgets/investments/form_component.rb
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
class Budgets::Investments::FormComponent < ApplicationComponent
|
||||||
|
include TranslatableFormHelper
|
||||||
|
include GlobalizeHelper
|
||||||
|
attr_reader :investment, :url
|
||||||
|
delegate :current_user, :budget_heading_select_options, :suggest_data, to: :helpers
|
||||||
|
|
||||||
|
def initialize(investment, url:)
|
||||||
|
@investment = investment
|
||||||
|
@url = url
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def budget
|
||||||
|
investment.budget
|
||||||
|
end
|
||||||
|
|
||||||
|
def categories
|
||||||
|
Tag.category.order(:name)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -22,7 +22,7 @@ module Budgets
|
|||||||
before_action :load_ballot, only: [:index, :show]
|
before_action :load_ballot, only: [:index, :show]
|
||||||
before_action :load_heading, only: [:index, :show]
|
before_action :load_heading, only: [:index, :show]
|
||||||
before_action :set_random_seed, only: :index
|
before_action :set_random_seed, only: :index
|
||||||
before_action :load_categories, only: [:index, :new, :create, :edit, :update]
|
before_action :load_categories, only: :index
|
||||||
before_action :set_default_investment_filter, only: :index
|
before_action :set_default_investment_filter, only: :index
|
||||||
before_action :set_view, only: :index
|
before_action :set_view, only: :index
|
||||||
before_action :load_content_blocks, only: :index
|
before_action :load_content_blocks, only: :index
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ class Management::Budgets::InvestmentsController < Management::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
load_categories
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@@ -30,7 +29,6 @@ class Management::Budgets::InvestmentsController < Management::BaseController
|
|||||||
notice = t("flash.actions.create.notice", resource_name: Budget::Investment.model_name.human, count: 1)
|
notice = t("flash.actions.create.notice", resource_name: Budget::Investment.model_name.human, count: 1)
|
||||||
redirect_to management_budget_investment_path(@budget, @investment), notice: notice
|
redirect_to management_budget_investment_path(@budget, @investment), notice: notice
|
||||||
else
|
else
|
||||||
load_categories
|
|
||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -59,8 +57,4 @@ class Management::Budgets::InvestmentsController < Management::BaseController
|
|||||||
def load_budget
|
def load_budget
|
||||||
@budget = Budget.find_by_slug_or_id! params[:budget_id]
|
@budget = Budget.find_by_slug_or_id! params[:budget_id]
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_categories
|
|
||||||
@categories = Tag.category.order(:name)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,109 +1 @@
|
|||||||
<%= translatable_form_for(@investment, url: form_url, html: { multipart: true }) do |f| %>
|
<%= render Budgets::Investments::FormComponent.new(@investment, url: form_url) %>
|
||||||
|
|
||||||
<%= render "shared/errors", resource: @investment %>
|
|
||||||
|
|
||||||
<div class="row column">
|
|
||||||
<% unless @budget.single_heading? %>
|
|
||||||
<div class="small-12 medium-8 column">
|
|
||||||
<%= f.select :heading_id, budget_heading_select_options(@budget), { include_blank: true } %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="small-12 column">
|
|
||||||
<%= render "shared/globalize_locales", resource: @investment %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%= f.translatable_fields do |translations_form| %>
|
|
||||||
<div class="small-12 column">
|
|
||||||
<%= translations_form.text_field :title,
|
|
||||||
maxlength: Budget::Investment.title_max_length,
|
|
||||||
data: suggest_data(@investment) %>
|
|
||||||
</div>
|
|
||||||
<div class="js-suggest" data-locale="<%= translations_form.locale %>"></div>
|
|
||||||
|
|
||||||
<div class="small-12 column">
|
|
||||||
<%= translations_form.text_area :description,
|
|
||||||
maxlength: Budget::Investment.description_max_length,
|
|
||||||
class: "html-area" %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<%= f.invisible_captcha :subtitle %>
|
|
||||||
|
|
||||||
<% if feature?(:allow_images) %>
|
|
||||||
<div class="images small-12 column">
|
|
||||||
<%= render "images/nested_image", imageable: @investment, f: f %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if feature?(:allow_attached_documents) %>
|
|
||||||
<div class="documents small-12 column">
|
|
||||||
<%= render "documents/nested_documents", documentable: @investment, f: f %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if feature?(:map) %>
|
|
||||||
<div class="small-12 column">
|
|
||||||
|
|
||||||
<%= render "map_locations/form_fields",
|
|
||||||
form: f,
|
|
||||||
map_location: @investment.map_location || MapLocation.new,
|
|
||||||
label: t("budgets.investments.form.map_location"),
|
|
||||||
help: t("budgets.investments.form.map_location_instructions"),
|
|
||||||
remove_marker_label: t("budgets.investments.form.map_remove_marker"),
|
|
||||||
parent_class: "budget_investment",
|
|
||||||
i18n_namespace: "budgets.investments" %>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="small-12 column">
|
|
||||||
<%= f.text_field :location %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="small-12 column">
|
|
||||||
<%= f.text_field :organization_name %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="small-12 column">
|
|
||||||
<%= f.label :tag_list, t("budgets.investments.form.tags_label") %>
|
|
||||||
<p class="help-text" id="tags-list-help-text"><%= t("budgets.investments.form.tags_instructions") %></p>
|
|
||||||
|
|
||||||
<div id="category_tags" class="tags">
|
|
||||||
<%= f.label :category_tag_list, t("budgets.investments.form.tag_category_label") %>
|
|
||||||
<% @categories.each do |tag| %>
|
|
||||||
<a class="js-add-tag-link"><%= tag.name %></a>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<%= f.text_field :tag_list, value: @investment.tag_list.to_s,
|
|
||||||
label: false,
|
|
||||||
placeholder: t("budgets.investments.form.tags_placeholder"),
|
|
||||||
aria: { describedby: "tags-list-help-text" },
|
|
||||||
class: "js-tag-list tag-autocomplete",
|
|
||||||
data: { js_url: suggest_tags_path } %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%= render SDG::RelatedListSelectorComponent.new(f) %>
|
|
||||||
|
|
||||||
<% unless current_user.manager? %>
|
|
||||||
|
|
||||||
<div class="small-12 column">
|
|
||||||
<%= 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")
|
|
||||||
) %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="actions small-12 medium-6 large-4 end column">
|
|
||||||
<%= f.submit(nil, class: "button expanded") %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user