Essential Guide 5: Toggle Component
Demo: Matestack Demo Github Repo: Matestack Demo Application
Welcome to the fifth part of our tutorial about building a web application with matestack.
Introduction
In this guide, we will introduce matestacks toggle and onclick components. For this we will
add a show more button to the person show page
add more content to the show page
Prerequisites
We expect you to have successfully finished the previous guide.
Adding a show more button with onclick
Let's add a show more button to the person show page. When clicked more information about the user should be shown. In our case when it was created and when it was last updated. To do this we will use matestacks onclick component and later the toggle component.
Edit the show page in app/matestack/demo/pages/persons/show.rb
class Demo::Pages::Persons::Show < Matestack::Ui::Page
def response
transition path: persons_path, text: 'All Persons'
heading size: 2, text: "Name: #{@person.first_name} #{@person.last_name}"
paragraph text: "Role: #{@person.role}"
onclick emit: 'show_more' do
button text: 'Show more'
end
transition path: :edit_person_path, params: { id: @person.id }, text: 'Edit'
action delete_person_config do
button text: 'Delete person'
end
end
#...
endSo what does the onclick component do? Onclick takes one argument called emit. The onclick component renders the given block and if its clicked emits an event with the specified name. In this case it emits an event with the name show_more when the button is clicked. In the next section you will find out, why this is useful.
Show more content with toggle
When the show more button is clicked, we want to show more content. Above we added a button which emits a show_more event when clicked. So we need a component which will show its content when this event is emitted. For this we use matestacks toggle component. It allows us to show or hide content depending on emitted events. Let's add more content inside a toggle component to the show page.
class Demo::Pages::Persons::Show < Matestack::Ui::Page
def response
transition path: persons_path, text: 'All Persons'
heading size: 2, text: "Name: #{@person.first_name} #{@person.last_name}"
paragraph text: "Role: #{@person.role}"
onclick emit: 'show_more' do
button text: 'Show more'
end
toggle show_on: 'show_more' do
paragraph text: "Created at: #{I18n.l(@person.created_at)}"
paragraph text: "Created at: #{I18n.l(@person.updated_at)}"
end
transition path: :edit_person_path, params: { id: @person.id }, text: 'Edit'
action delete_person_config do
button text: 'Delete person'
end
end
#...
endThe toggle component will be hidden on page loads. When we click our 'Show more' button, the content of our toggle component gets visible and you can see the localized time of the person created and updated timestamp.
Run rails s and head over to localhost:3000 and open the details of one person to test it out.
To learn more, check out the complete API documentation for the toggle component.
Saving the status quo
As usual, we want to commit the progress to Git. In the repo root, run
git add . && git commit -m "add show more toggle to person show page"Recap & outlook
We added a show more button to our persons show page and learned how to use the onclick and toggle components and what they can be used for.
Take a well deserved rest and make sure to come back to the next part of this series, introducing the powerful async component.
Last updated
Was this helpful?