Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions app/components/saved_scenarios/filters/filter_component.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<% area_codes.each do |area_code, count|%>
<div class="mt-2">
<%= form.check_box :"area_codes[#{area_code}]",
class: "rounded-md mr-5 border-midnight-400 !checked:bg-midnight-920 text-midnight-920",
data: { action: "input->search-form#search" }
%>
<%= form.label :area_codes, t("areas.#{area_code}") + " (#{count})",
class: "text-sm text-midnight-450"
%>
</div>
<%end%>
6 changes: 6 additions & 0 deletions app/components/saved_scenarios/filters/filter_component.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module SavedScenarios::Filters
class FilterComponent < ApplicationComponent
option :form
option :area_codes
end
end
9 changes: 7 additions & 2 deletions app/controllers/saved_scenarios_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ class SavedScenariosController < ApplicationController

# GET /saved_scenarios
def index
@pagy_saved_scenarios, @saved_scenarios = pagy_countless(user_saved_scenarios)
@pagy_saved_scenarios, @saved_scenarios = pagy_countless(ordered_user_saved_scenarios)
@area_codes = user_saved_scenarios.group(:area_code).count.sort_by { |_k, v| v }.reverse

respond_to do |format|
format.html
Expand All @@ -34,6 +35,7 @@ def list
.viewable_by?(current_user)
.available
.includes(:featured_scenario, :users)
.order("updated_at DESC")

@pagy_saved_scenarios, @saved_scenarios = pagy(filtered)

Expand Down Expand Up @@ -173,7 +175,10 @@ def user_saved_scenarios
.saved_scenarios
.available
.includes(:featured_scenario, :users)
.order("updated_at DESC")
end

def ordered_user_saved_scenarios
user_saved_scenarios.order("updated_at DESC")
end

# Use callbacks to share common setup or constraints between actions.
Expand Down
8 changes: 5 additions & 3 deletions app/models/saved_scenario.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class SavedScenario < ApplicationRecord
AUTO_DELETES_AFTER = 60.days

# Used by Fiterable Concern
FILTER_PARAMS = %i[title].freeze
FILTER_PARAMS = [ :title, area_codes: {} ].freeze

has_one :featured_scenario, dependent: :destroy
has_many :saved_scenario_users, dependent: :destroy
Expand All @@ -34,7 +34,6 @@ class SavedScenario < ApplicationRecord

# Returns all saved scenarios whose areas are avaliable.
def self.available
# kept.where(area_code: Engine::Area.keys)
kept
end

Expand All @@ -44,7 +43,10 @@ def self.available
def self.filter(filters)
scenarios = order(created_at: :desc)

area_codes = filters["area_codes"]&.filter_map { |area, picked| area if picked == "1" }

scenarios = scenarios.by_title(filters["title"]) if filters["title"].present?
scenarios = scenarios.where(area_code: area_codes) if area_codes.present?

scenarios
end
Expand Down Expand Up @@ -74,7 +76,7 @@ def scenario=(x)
end

def as_json(*)
json = super(except: ["version_id", "tmp_description"])
json = super(except: [ "version_id", "tmp_description" ])
json.merge(
"version" => version.tag,
"title" => localized_title(:en),
Expand Down
3 changes: 3 additions & 0 deletions app/views/saved_scenarios/_block_right_with_filters.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
%>
<%= heroicon 'magnifying-glass', options: {class: 'w-5 h-5 ml-2 my-auto'} %>
</div>
<div>
<%= render(SavedScenarios::Filters::FilterComponent.new(form: form, area_codes: area_codes))%>
</div>
</div>
<% end %>
<% end %>
Expand Down
2 changes: 1 addition & 1 deletion app/views/saved_scenarios/index.html.haml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- content_for :title, "#{t('saved_scenarios.title')} - #{t('meta.title')}"
- content_for :menu_title, t('saved_scenarios.title')

= render(partial: "block_right_with_filters", locals: { has_saved_scenarios: @saved_scenarios.present? })
= render(partial: "block_right_with_filters", locals: { has_saved_scenarios: @saved_scenarios.present?, area_codes: @area_codes})

- if @saved_scenarios.present?
= render(partial: "saved_scenarios", locals: {pagy_saved_scenarios: @pagy_saved_scenarios, saved_scenarios: @saved_scenarios})
Expand Down
Loading