Implementing a Data Store
Implement a data store in this lesson.
We'll cover the following...
Observing and responding to changes
If we want to use the DOM as a place to hold on to the state of the client-side system, it’s helpful to know when that state changes. In a Hotwire system, where new HTML text might be added to the DOM as a result of a form submission or an ActionCable text receipt, detecting that HTML change and performing an action based on it allows for much useful behavior while keeping the drawing logic on the server-side.
MutationObserver API
We can do this by using the MutationObserver API, which is a standard part of every contemporary browser. Stimulus itself is powered by MutationObserver
calls, so any browser that can run Stimulus can manage MutationObservers. Browsers that are older than, say, Internet Explorer 11 need the @stimulus/polyfill
package to run.
For our purposes, we’re going to use a MutationObserver
object to solve a minor problem on our schedule page. When we list the user’s favorite concerts, we want that list to be sorted by the date of the concert. The problem is that, even if we sort the initial server-side list, we can only append new favorites as they come in via Turbo Stream. What we want is to have them go into the list in their correctly sorted place. To do this, we’re going to use the MutationObserver
API to build a generic Stimulus controller that will sort its internal targets whenever a new target is added.
This code is a simplified version of what Hey.com uses to sort emails when they are added back into the ...