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
#...
end
So 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
#...
end
The 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?