Default
Inertia’s default progress indicator is a light-weight wrapper around the NProgress library. You can customize it via theprogress property of the createInertiaApp() function.
progress property to false.
Custom
It’s also possible to setup your own custom page loading indicators using Inertia events. Let’s explore how to do this using the NProgress library as an example. First, disable Inertia’s default loading indicator.NProgress and the Inertia router into your application.
start event listener. We’ll use this listener to show the progress bar when a new Inertia visit begins.
finish event listener to hide the progress bar when the page visit finishes.
Handling Cancelled Visits
While this custom progress implementation works great for page visits that finish properly, it would be nice to handle cancelled visits as well. First, for interrupted visits (those that get cancelled as a result of a new visit), the progress bar should simply be reset back to the start position. Second, for manually cancelled visits, the progress bar should be immediately removed from the page. We can accomplish this by inspecting theevent.detail.visit object that’s provided to the finish event.
File Upload Progress
Let’s take this a step further. When files are being uploaded, it would be great to update the loading indicator to reflect the upload progress. This can be done using theprogress event.
Loading Indicator Delay
The last thing we’re going to implement is a loading indicator delay. It’s often preferable to delay showing the loading indicator until a request has taken longer than 250-500 milliseconds. This prevents the loading indicator from appearing constantly on quick page visits, which can be visually distracting. To implement the delay behavior, we’ll use thesetTimeout and clearTimeout functions. Let’s start by defining a variable to keep track of the timeout.
start event listener to start a new timeout that will show the progress bar after 250 milliseconds.
finish event listener to clear any existing timeouts in the event that the page visit finishes before the timeout does.
finish event listener, we need to determine if the progress bar has actually started displaying progress, otherwise we’ll inadvertently cause it to show before the timeout has finished.
progress event listener.