Extending Admin Dashboard with JavaScript
Spree Admin Dashboard can be easily extended with custom JavaScript. Most of the JavaScript in the Admin Dashboard is powered by a framework called Stimulus.js which is the Ruby on Rails default. It’s a very simple and minimalistic framework only enhancing our server-side rendered HTML with a bit of interactivity.3rd party JavaScript libraries
Spree Admin Dashboard comes with a few 3rd party JavaScript libraries already included. Main libraries we’re using:- Stimulus.js
- Turbo
- EasyPick (date picker)
- TomSelect (autocomplete/dropdowns)
- Sortable.js - sortable drag and drop lists
- Uppy - file uploader
Managing JavaScript dependencies
You’re probably wondering why these libraries are in thevendor
directory, and not in node_modules
.
That’s because we’re not using Node.js at all. So no Yarn or npm. We’re using a different approach to manage dependencies.
We’re using a tool called Importmaps to manage dependencies which is the Ruby on Rails default.
If you want to use a different JavaScript package manager you can do so by using jsbundling-rails gem.
Install dependencies
To install dependencies you need to run the following command:vendor/javascript
directory and add them to your config/importmap.rb
file, eg.
application.js
:
Application entry point
Mentioned above, the application entry point is theapplication.js
file. It’s located in the app/javascript
directory.
If you want to add custom JavaScript to your Spree Admin Dashboard, you can do so by adding a new file to the app/javascript
directory.
Stimulus Controllers
Stimulus controllers are a way to add interactivity to your Spree Admin Dashboard. Admin Dashboard controllers can be found in the Spree repository in the Admin Dashboard/app/javascript/spree/admin/controllers directory. You can find more information about Stimulus controllers in the Stimulus.js documentation. To add a new controller you need to create a new file in theapp/javascript/controllers
directory. It will be automatically picked up by the application.
data-controller
attribute to your element, eg.
JavaScript snippets
If you need to add a small piece of JavaScript code (eg. tracking, marketing, analytics, customer service etc.) you can do this by:-
Declaring a new head partial in the
config/initializers/spree.rb
file, eg. -
Creating a new file in the
app/views/spree/admin/shared/my_tracking_code.html.erb
, where you can add your tracking code, eg.