Skip to content

Commit 307446d

Browse files
dmitrytragerdcollie2
authored andcommitted
add form for switching providers
1 parent 57f773a commit 307446d

File tree

7 files changed

+46
-22
lines changed

7 files changed

+46
-22
lines changed

app/controllers/application_controller.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ def current_provider
1010
Current.user.providers.first
1111
end
1212
end
13+
helper_method :current_provider
1314
end

app/controllers/settings_controller.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
class SettingsController < ApplicationController
22
def provider
3-
provider = provider_scope.find(params[:id])
3+
provider = provider_scope.find(provider_params[:id])
44
cookies.signed[:current_provider_id] = provider.id if provider
55
redirect_to request.referer || root_path
66
end
77

88
private
99

10+
def provider_params
11+
params.expect(provider: :id)
12+
end
13+
1014
def provider_scope
1115
@provider_scope ||= if Current.user.is_admin?
1216
Provider.all

app/controllers/topics_controller.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class TopicsController < ApplicationController
33

44
def index
55
@topics = scope.search_with_params(search_params)
6-
@providers = scope.map(&:provider).uniq.sort_by(&:name)
6+
@available_providers = other_available_providers
77
@languages = scope.map(&:language).uniq.sort_by(&:name)
88
end
99

@@ -45,16 +45,22 @@ def archive
4545

4646
private
4747

48+
def other_available_providers
49+
return unless Current.user.providers.any?
50+
51+
Current.user.providers.where.not(id: current_provider.id)
52+
end
53+
4854
def topic_params
4955
params.require(:topic).permit(:title, :description, :uid, :language_id, :provider_id, documents: [])
5056
end
5157

52-
helper_method :search_params
5358
def search_params
5459
return {} unless params[:search].present?
5560

5661
params.require(:search).permit(:query, :state, :provider_id, :language_id, :year, :month, :order)
5762
end
63+
helper_method :search_params
5864

5965
def set_topic
6066
@topic = Topic.find(params[:id])

app/javascript/controllers/topics_controller.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@ import { Controller } from "@hotwired/stimulus"
22
import { useDebounce } from "stimulus-use"
33

44
export default class extends Controller {
5-
static targets = [ "form" ]
5+
static targets = [ "searchForm", "chooseForm" ]
66
static debounces = [ "search" ]
77

88
connect() {
99
useDebounce(this, { wait: 300 })
1010
}
1111

12-
search() {
13-
this.formTarget.requestSubmit()
12+
searchTopics() {
13+
this.searchFormTarget.requestSubmit()
14+
}
15+
16+
chooseProvider() {
17+
this.chooseFormTarget.requestSubmit()
1418
}
1519
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<%= form_for :provider , url: provider_settings_path, method: :put, data: { controller: "topics", topics_target: "chooseForm" } do |f| %>
2+
<div class="form-body">
3+
<div class="row">
4+
<div class="col-md-6 col-12">
5+
<div class="form-group">
6+
<%= f.label :provider %>
7+
<%= f.select :id, options_from_collection_for_select(providers, :id, :name), { prompt: "Change provider" }, class: "form-select", data: { action: "change->topics#chooseProvider" } %>
8+
</div>
9+
</div>
10+
</div>
11+
</div>
12+
<% end %>

app/views/topics/_search.html.erb

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,43 @@
44
</div>
55
<div class="card-content">
66
<div class="card-body">
7-
<%= form_for :search, url: topics_path, method: :get, data: { controller: "topics", topics_target: "form", turbo_frame: "topic-list", turbo_action: "advance" } do |f| %>
7+
<%= form_for :search, url: topics_path, method: :get, data: { controller: "topics", topics_target: "searchForm", turbo_frame: "topic-list", turbo_action: "advance" } do |f| %>
88
<div class="form-body">
99
<div class="row">
10-
<div class="col-md-6 col-12">
10+
<div class="col-12">
1111
<div class="form-group">
12-
<%= f.label :provider %>
13-
<%= f.select :provider_id, options_from_collection_for_select(providers, :id, :name, params[:provider_id]), { prompt: "Select provider" }, class: "form-select", data: { action: "change->topics#search" } %>
12+
<%= f.label :query %>
13+
<%= f.text_field :query, value: params[:query], class: "form-control", data: { action: "input->topics#searchTopics" } %>
1414
</div>
1515
</div>
1616
<div class="col-md-6 col-12">
1717
<div class="form-group">
1818
<%= f.label :language %>
19-
<%= f.select :language_id, options_from_collection_for_select(languages, :id, :name, params[:provider_id]), { prompt: "Select language" }, class: "form-select", data: { action: "change->topics#search" } %>
20-
</div>
21-
</div>
22-
<div class="col-md-6 col-12">
23-
<div class="form-group">
24-
<%= f.label :query %>
25-
<%= f.text_field :query, value: params[:query], class: "form-control", data: { action: "input->topics#search" } %>
19+
<%= f.select :language_id, options_from_collection_for_select(languages, :id, :name, params[:provider_id]), { prompt: "Select language" }, class: "form-select", data: { action: "change->topics#searchTopics" } %>
2620
</div>
2721
</div>
2822
<div class="col-md-3 col-12">
2923
<div class="form-group">
3024
<%= f.label :year %>
31-
<%= f.select :year, options_for_select((Date.today.year-10..Date.today.year).to_a, params[:year]), { prompt: "Select year" }, class: "form-select", data: { action: "change->topics#search" } %>
25+
<%= f.select :year, options_for_select((Date.today.year-10..Date.today.year).to_a, params[:year]), { prompt: "Select year" }, class: "form-select", data: { action: "change->topics#searchTopics" } %>
3226
</div>
3327
</div>
3428
<div class="col-md-3 col-12">
3529
<div class="form-group">
3630
<%= f.label :month %>
37-
<%= f.select :month, options_for_select((1..12).to_a, params[:month]), { prompt: "Select month" }, class: "form-select", data: { action: "change->topics#search" } %>
31+
<%= f.select :month, options_for_select((1..12).to_a, params[:month]), { prompt: "Select month" }, class: "form-select", data: { action: "change->topics#searchTopics" } %>
3832
</div>
3933
</div>
4034
<div class="col-md-6 col-12">
4135
<div class="form-group">
4236
<%= f.label :state %>
43-
<%= f.select :state, options_for_select(Topic::STATES.index_with(&:itself), params[:state]), { prompt: "Select state" }, class: "form-select", data: { action: "change->topics#search" } %>
37+
<%= f.select :state, options_for_select(Topic::STATES.index_with(&:itself), params[:state]), { prompt: "Select state" }, class: "form-select", data: { action: "change->topics#searchTopics" } %>
4438
</div>
4539
</div>
4640
<div class="col-md-6 col-12">
4741
<div class="form-group">
4842
<%= f.label :order %>
49-
<%= f.select :order, options_for_select(Topic::SORTS.reverse.index_with(&:itself), params[:order]), {}, class: "form-select", data: { action: "change->topics#search" } %>
43+
<%= f.select :order, options_for_select(Topic::SORTS.reverse.index_with(&:itself), params[:order]), {}, class: "form-select", data: { action: "change->topics#searchTopics" } %>
5044
</div>
5145
</div>
5246
<div class="col-12 d-flex justify-content-end">

app/views/topics/index.html.erb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
<%= render "search", providers: @providers, languages: @languages, params: search_params %>
77
<div class="card">
88
<div class="card-header d-flex justify-content-between align-items-center">
9-
<h2 class="card-title">Topics</h2>
9+
<h2 class="card-title"><%= current_provider.name %>'s topics</h2>
1010
<%= link_to new_topic_path, class: "btn btn-primary" do %>
1111
<i class="bi bi-plus"></i> Add New Topic
1212
<% end %>
1313
</div>
1414
<div class="card-content">
1515
<div class="card-body">
16+
<% if @available_providers.any? %>
17+
<%= render "choose_provider", providers: @available_providers %>
18+
<% end %>
1619
<p class="card-text"> Some important information or instruction can be placed here.</p>
1720
<%= turbo_frame_tag "topic-list" do %>
1821
<div class="table-responsive">

0 commit comments

Comments
 (0)