Skip to content

Commit

Permalink
updated solution picker to more closely match new design, also had to…
Browse files Browse the repository at this point in the history
… update some js dependencies
  • Loading branch information
dereke committed Mar 25, 2021
1 parent 8d47acb commit 207e998
Show file tree
Hide file tree
Showing 11 changed files with 2,881 additions and 3,175 deletions.
30 changes: 22 additions & 8 deletions app/controllers/initiatives_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ def edit

# rubocop:disable Metrics/MethodLength
def create
create_proposed_solutions
@initiative = Initiative.new(initiative_params.merge(owner: current_user))
add_solutions(@initiative)
find_or_create_group
@initiative.update_location_from_postcode

Expand All @@ -67,7 +67,7 @@ def update

initiative_params.delete(:publication_status) if publication_status == 'rejected' && current_user.role != 'admin'

clear_solutions_and_themes && create_proposed_solutions
update_solutions(@initiative)
images = initiative_params.delete 'images'
find_or_create_group
@initiative.assign_attributes initiative_params
Expand Down Expand Up @@ -95,11 +95,31 @@ def set_group_types
end
end

def solutions_params
(params[:initiative][:solutions] || []).filter(&:present?)
end

def clear_solutions_and_themes
@initiative.themes.clear if params[:themes_attributes]
@initiative.solutions.clear if params[:solutions_attributes]
end

def add_solutions(initiative)
solutions_params.each do |line|
solution_id, solution_class_id = line.split(',').map(&:to_i)
solution = Solution.find(solution_id)
solution_class = SolutionClass.find(solution_class_id)

initiative.solutions.build(solution: solution, solution_class: solution_class)
end
end

def update_solutions(initiative)
initiative.solutions.each(&:destroy!) && initiative.solutions.clear unless solutions_params.empty?

add_solutions(initiative)
end

def set_initiative
@initiative = Initiative.find(params[:id])

Expand Down Expand Up @@ -204,12 +224,6 @@ def initiative_params
:consent_to_share,
:related_initiatives,
:administrative_notes,
themes_attributes: %i[theme_id],
solutions_attributes: %i[
solution_id
solution_class_id
proposed_solution
],
images: [],
websites_attributes: %i[url id _destroy],
lead_group_attributes: %i[
Expand Down
18 changes: 0 additions & 18 deletions app/helpers/initiatives_helper.rb
Original file line number Diff line number Diff line change
@@ -1,24 +1,6 @@
# frozen_string_literal: true

module InitiativesHelper
def themes_as_json(initiative)
theme_map = initiative.themes.map { |initiative_theme| { theme_id: initiative_theme.theme.id } }

theme_map.to_json
end

def solutions_as_json(initiative)
solution_map =
initiative.solutions.map do |solution_mapping|
{
solution_id: solution_mapping.solution.id,
solution_class_id: solution_mapping.solution_class.id
}
end

solution_map.to_json
end

def publication_statuses
statuses = Initiative.publication_statuses.to_h
statuses.reject! { |status| %w[rejected archived].include?(status) } unless user_is_admin?
Expand Down
26 changes: 22 additions & 4 deletions app/views/initiatives/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -172,12 +172,30 @@
<% end %>
<h2 class="u-mb">Solutions</h2>

<%= f.form_field :solution, required: true do %>
<input type="hidden" id="initial_themes" value="<%=themes_as_json(initiative)%>">
<input type="hidden" id="initial_solutions" value="<%=solutions_as_json(initiative)%>">
<div id="solution_picker"></div>
<%= f.form_field :solution do %>
<%= f.label 'What categories does your project relate to?' %>
<input class="FormField-input" type="text" id="solution_search" />
<%= f.hidden_field :solution_attributes %>

<div id="solution_results_container" class="u-hidden">
<div class="SolutionSearchResultHeading"><span>Please check the categories your project relates to</span><button id="close_solution_results"><%=inline_icon('close')%></button></div>
<div id="solution_search_results" class="SolutionSearchResults">
</div>
</div>
<% end %>

<h2>Chosen Solutions</h2>
<div class="ChosenSolutions">
<ul id="chosenSolutions">
<% initiative.solutions.each do |solution| %>
<li class="ChosenSolution">
<input type="hidden" name="initiative[solutions][]" value="<%=solution.solution.id%>,<%=solution.solution_class.id%>" data-name="<%=solution.name%>" />
<%=solution.name%>
</li>
<% end %>
</ul>
</div>

<h2 class="u-mb">Notes</h2>

<%= f.form_field :administrative_notes do %>
Expand Down
3 changes: 3 additions & 0 deletions frontend/icons/close.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 207e998

Please sign in to comment.