forked from railsbridge/bridge_troll
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Region and Chapter leader dropdowns populate using ajax
The chapter leader dropdown has no real restrictions on who will show up in it, like the organizers dropdown used to. To avoid rendering a huge <select> on the page and stalling out the user's browser, it's better to fetch the data lazily! Also: change the chapter/region leader controller/routes: WAS: chapter_leaderships#create ("ChapterLeadershipsController") NOW: chapters/leaders#create ("Chapters::LeadersController")
- Loading branch information
1 parent
ee08e23
commit fc68358
Showing
15 changed files
with
188 additions
and
102 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
module Chapters | ||
class LeadersController < ApplicationController | ||
before_action :authenticate_user! | ||
before_action :load_chapter | ||
before_action :validate_authorized! | ||
|
||
def index | ||
@leaders = @chapter.leaders | ||
end | ||
|
||
def create | ||
leader = ChapterLeadership.new(chapter: @chapter, user_id: leader_params[:id]) | ||
if leader.save | ||
redirect_to chapter_leaders_path(@chapter), notice: "Booyah!" | ||
else | ||
redirect_to chapter_leaders_path(@chapter), error: "Whoops." | ||
end | ||
end | ||
|
||
def destroy | ||
leadership = ChapterLeadership.where( | ||
chapter: @chapter, | ||
user_id: leader_params[:id] | ||
).first | ||
|
||
leadership.destroy | ||
redirect_to chapter_leaders_path(@chapter), notice: "Removed #{leadership.user.full_name} as chapter leader." | ||
end | ||
|
||
def potential | ||
respond_to do |format| | ||
format.json do | ||
users_not_assigned = User.where(<<-SQL, @chapter.id) | ||
id NOT IN ( | ||
SELECT user_id FROM chapter_leaderships WHERE chapter_id = ? | ||
) | ||
SQL | ||
|
||
render json: UserSearcher.new(users_not_assigned, params[:q]) | ||
end | ||
end | ||
end | ||
|
||
private | ||
|
||
def load_chapter | ||
@chapter = Chapter.find(params[:chapter_id]) | ||
end | ||
|
||
def leader_params | ||
params.permit(:id, :chapter_id) | ||
end | ||
|
||
def validate_authorized! | ||
authorize @chapter, :modify_leadership? | ||
end | ||
end | ||
end |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
module Regions | ||
class LeadersController < ApplicationController | ||
before_action :authenticate_user! | ||
before_action :load_region | ||
before_action :validate_authorized! | ||
|
||
def index | ||
@leaders = @region.leaders | ||
end | ||
|
||
def create | ||
leader = RegionLeadership.new(region: @region, user_id: leader_params[:id]) | ||
if leader.save | ||
redirect_to region_leaders_path(@region), notice: "Booyah!" | ||
else | ||
redirect_to region_leaders_path(@region), error: "Whoops." | ||
end | ||
end | ||
|
||
def destroy | ||
leadership = RegionLeadership.where( | ||
region: @region, | ||
user_id: leader_params[:id] | ||
).first | ||
|
||
leadership.destroy | ||
redirect_to region_leaders_path(@region), notice: "Removed #{leadership.user.full_name} as region leader." | ||
end | ||
|
||
def potential | ||
respond_to do |format| | ||
format.json do | ||
users_not_assigned = @region.users.where(<<-SQL, @region.id) | ||
id NOT IN ( | ||
SELECT user_id FROM region_leaderships WHERE region_id = ? | ||
) | ||
SQL | ||
|
||
render json: UserSearcher.new(users_not_assigned, params[:q]) | ||
end | ||
end | ||
end | ||
|
||
private | ||
|
||
def load_region | ||
@region = Region.find(params[:region_id]) | ||
end | ||
|
||
def leader_params | ||
params.permit(:id, :region_id) | ||
end | ||
|
||
def validate_authorized! | ||
authorize @region, :modify_leadership? | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
require 'rails_helper' | ||
|
||
describe Chapters::LeadersController do | ||
let(:admin) { create(:user, admin: true, first_name: 'Admin', last_name: 'User') } | ||
let(:chapter) { create :chapter } | ||
|
||
describe "potential leaders" do | ||
before do | ||
sign_in admin | ||
end | ||
|
||
it "includes all users not currently assigned as leaders" do | ||
leader = create(:user, first_name: 'Steve') | ||
chapter.leaders << leader | ||
|
||
non_leader = create(:user, first_name: 'Steve') | ||
|
||
get :potential, format: :json, chapter_id: chapter.id, q: 'Steve' | ||
|
||
expect(JSON.parse(response.body).map { |u| u['id'] }).to eq([non_leader.id]) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
module FormHelper | ||
def fill_in_select2(option) | ||
page.find('.select2-selection').click | ||
page.find('.select2-search__field').set(option) | ||
expect(page.find('.select2-results__option')).to have_content(option) | ||
page.find('.select2-results__option').click | ||
end | ||
end |