Getting Started
Components
- Animated Number
- Auto Submit
- Carousel
- Character Counter
- Chartjs
- Checkbox Select All
- Clipboard
- Color Picker
- Confirmation
- Content Loader
- Dialog
- Dropdown
- Glow
- Lightbox
- Notification
- Password Visibility
- Places Autocomplete
- Popover
- Prefetch
- Rails Nested Form
- Read More
- Remote Rails
- Reveal Controller
- Scroll Progress
- Scroll Reveal
- Scroll To
- Sortable
- Sound
- Textarea Autogrow
- Timeago
Video Tutorial
Chris Oliver from GoRails has released a presentation video on how to use this package with a real life example with Ruby on Rails.
👉 Take a look: Bulk Operations in Rails
Installation
Install the package
Terminal$ yarn add @stimulus-components/checkbox-select-all
Register the controller in your application
app/javascript/controllers/index.jsimport { Application } from '@hotwired/stimulus' import CheckboxSelectAll from '@stimulus-components/checkbox-select-all' const application = Application.start() application.register('checkbox-select-all', CheckboxSelectAll)
Example
Checkbox Select All
Usage
Without Rails
app/views/index.html.erb
<table data-controller="checkbox-select-all"> <tbody> <tr> <td class="block"> <label> <input type="checkbox" data-checkbox-select-all-target="checkboxAll" /> <span>Select All / Deselect All</span> </label> </td> <td class="block"> <label> <input type="checkbox" data-checkbox-select-all-target="checkbox" value="1" /> <span>Team 1</span> </label> </td> <td class="block"> <label> <input type="checkbox" data-checkbox-select-all-target="checkbox" checked="checked" value="2" /> <span>Team 2</span> </label> </td> <td class="block"> <label> <input type="checkbox" data-checkbox-select-all-target="checkbox" value="3" /> <span>Team 3</span> </label> </td> </tr> </tbody> </table>
With Rails
In your models:
app/models/user.rb
class User < ApplicationRecord has_many :teams end
app/models/team.rb
class Team < ApplicationRecord belongs_to :user end
In your controller:
app/controllers/users_controller.rb
class UsersController < ApplicationController def update if user.update(user_params) redirect_to users_path else render :edit end end private def user_params params .require(:user) .permit( team_ids: [] ) end end
app/views/index.html
<%= form_with model: @user, data: { controller: 'checkbox-select-all' } do |f| %> <label> <input type="checkbox" data-checkbox-select-all-target="checkboxAll" /> <span>Select All / Deselect All</span> </label> <%= f.collection_check_boxes :team_ids, Team.all, :id, :name do |b| %> <%= b.label do %> <%= b.check_box data: { checkbox_select_all_target: 'checkbox' } %> <%= b.text %> <% end %> <% end %> <% end %>
Configuration
Attribute | Default | Description | Optional |
---|---|---|---|
data-checkbox-select-all-disable-indeterminate-value | false | Disable the indeterminate state. | ✅ |
Extending Controller
You can use inheritance to extend the functionality of any Stimulus component:
app/javascript/controllers/checkbox_select_all_controller.js
import CheckboxSelectAll from "@stimulus-components/checkbox-select-all" export default class extends CheckboxSelectAll { connect() { super.connect() console.log("Do what you want here.") // Get all checked checkboxes this.checked // Get all unchecked checkboxes this.unchecked } }
This controller will automatically have access to targets defined in the parent class.
If you override the connect
, disconnect
or any other methods from the parent, you'll want to call super.method()
to make sure the parent functionality is executed.