Server-side Masonite adapter for Inertia.js
Reason this release was yanked:
This release did not fix the bug.
Project description
Masonite Inertia
Introduction
Inertia is a new approach to building classic server-driven web apps. From their own web page:
Inertia allows you to create fully client-side rendered, single-page apps, without much of the complexity that comes with modern SPAs. It does this by leveraging existing server-side frameworks.
Inertia requires an adapter for each backend framework.
This repo contains the Masonite server-side adapter for Inertia.js. You can find the legacy Inertia PingCRM demo with Masonite here demo (WIP).
This package is compatible with both Masonite 2.X and Masonite 3.X.
Features
Almost all features of the official server-side adapters are present 😃
- Shared data
- Partial reloads
- Lazy loaded props
- Set root view in a provider
- Set root view per view
- Enable sharing Masonite routes (prefer using masonite-js-routes)
- Enable sharing Masonite flash messages
Official Masonite Documentation
New to Masonite ? Please first read the Official Documentation. Masonite strives to have extremely comprehensive documentation 😃. It would be wise to go through the tutorials there. If you find any discrepencies or anything that doesn't make sense, be sure to comment directly on the documentation to start a discussion!
Also be sure to join the Slack channel!
Installation
Requirements
To get started you will need the following:
- Masonite 3.X.X (use
masonite-inertia>=3.0) or Masonite 2.3.X (usemasonite-inertia>=2.X<3.0) - Laravel Mix installed (new Masonite 2.3 projects come with this installed already)
- a Node.js environment (npm or yarn)
pip install masonite-inertia
Install NPM dependencies
First we'll need to install some NPM packages (we are using Vue here as frontend framework and inertia-vue as Inertia.js client-side adapter):
You can find more info on this on Inertia.js documentation.
$ npm install vue @inertiajs/inertia @inertiajs/inertia-vue
Configuration
Add InertiaProvider to your project in config/providers.py:
# config/providers.py
# ...
from masonite.inertia import InertiaProvider
# ...
PROVIDERS = [
# ...
# Third Party Providers
InertiaProvider,
]
Inertia adapter comes with a middleware that will control some of the flow of data. Add InertiaMiddleware to your project in config/middleware.py:
# config/middleware.py
# ...
from masonite.inertia import InertiaMiddleware
# ...
HTTP_MIDDLEWARE = [
LoadUserMiddleware,
CsrfMiddleware,
#...
InertiaMiddleware,
]
Finally publish the package configuration (to get config/inertia.py) to your project:
python craft install:inertia
Congratulations! You have now setup Inertia in your project! For more information on how to use Inertia.js got to its documentation.
Install demo (optional)
To get started quickly, you can scaffold a demo to your project, by running:
python craft inertia:demo
This will automatically :
- publish a demo controller
- publish two routes
- create a demo view
- update npm dependencies and webpack.mix.js
- create Vue 3 demo app in
resources/js
Then run npm install && npm run watch and start the server python craft serve.
Finally browse to http://localhost:8000/inertia 🚀!
Usage [Doc In Progress]
How to use Inertia.js with Masonite adapter
We will create two routes and a controller which will load the two components scaffolded with previous command and see Inertia.js behaviour. In order to create Inertia response in our Controller, we are going to use newly available response InertiaResponse. And that's it !
If you scaffolded the inertia demo you will already have the files, else:
$ craft controller InertiaController
This will create a controller InertiaController but you can name it whatever you like. It would be good to keep the standard of whatever setup you have now for your home page. Then create two routes to that controller if you don't have them already:
ROUTES = [
Get('/', 'InertiaController@index'),
Get('/helloworld', 'InertiaController@helloworld')
]
And finally create the controller methods. We just need to use the new InertiaResponse to render our controller.
# app/controllers/InertiaController.py
from masonite.inertia import InertiaResponse
## ..
def inertia(self, view: InertiaResponse):
return view.render('Index')
def helloworld(self, view: InertiaResponse):
return view.render('HelloWorld')
## ..
This controller will render the view based on template templates/app.html and will load the Vue components into it depending on the route.
Note that instead of specifying a Jinja template like we normally do we can just specify a page here. So since we have ../pages/Index.vue we specify to render Index here.
Test it !
Ok now we need to do 2 more commands. The first thing is to run npm run dev (at root) to compile all of this (with webpack mix):
$ npm run dev
Now we can run the server like we normally do:
$ craft serve
When we go to our homepage we will see we see Index.vue component:
Home Page
Click on the link you can now see HelloWorld without page refresh !!!!
Contributing
Please read the Contributing Documentation here.
CONTRIBUTORS
License
Masonite Inertia is open-sourced software licensed under the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file masonite-inertia-2.2.1.tar.gz.
File metadata
- Download URL: masonite-inertia-2.2.1.tar.gz
- Upload date:
- Size: 17.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a87a45b793e7d1e89c7106b9a2100e4803f1b076b23535124062fad8dfea06f8
|
|
| MD5 |
eac1cb38f775e149848779f205a14410
|
|
| BLAKE2b-256 |
13e61564daa947c5b40d0f601112f48918973f06a8c755052df5ffdf56d0f73b
|
File details
Details for the file masonite_inertia-2.2.1-py3-none-any.whl.
File metadata
- Download URL: masonite_inertia-2.2.1-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee81e0ff1f42671fdc4f3db6a9fc95c666894ede2d230d9b3e548f8e5d4233f0
|
|
| MD5 |
afb81cf2a8cc539b51969c20c6504e73
|
|
| BLAKE2b-256 |
5cef45414c0723a43085dea25fc7c7ebcb0ea8884cd5e91198e48f27c00d8d11
|