Package Data | |
---|---|
Maintainer Username: | lepikhinb |
Maintainer Contact: | boris@lepikhin.com (Boris Lepikhin) |
Package Create Date: | 2022-06-22 |
Package Last Update: | 2024-03-21 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-23 03:04:08 |
Package Statistics | |
---|---|
Total Downloads: | 248,495 |
Monthly Downloads: | 14,669 |
Daily Downloads: | 804 |
Total Stars: | 450 |
Total Watchers: | 10 |
Total Forks: | 32 |
Total Open Issues: | 20 |
Momentum Modal is a Laravel package that lets you implement backend-driven modal dialogs for Inertia apps.
Define modal routes on the backend and dynamically render them when you visit a dialog route.
Check out the demo app demonstrating the Modal package in action.
Install the package into your Laravel app.
composer require based/momentum-modal
The frontend package is only for Vue 3 now due to its adoption within the Laravel community.
Install the frontend package.
npm i momentum-modal
# or
yarn add momentum-modal
Warning The package utilizes
axios
under the hood. If your app is already usingaxios
as a dependency, make sure to lock it to the same version Inertia uses.npm i axios@1.2.0
Modal is a headless component, meaning you have full control over its look, whether it's a modal dialog or a slide-over panel. You are free to use any 3rd-party solutions to power your modals, such as Headless UI.
Put the Modal
component somewhere within the layout.
<script setup>
import { Modal } from 'momentum-modal'
</script>
<template>
<div>
<!-- layout -->
<Modal />
</div>
</template>
Set up a modal
plugin with the same component resolver you use to render Inertia pages.
import { modal } from "momentum-modal"
createInertiaApp({
resolve: (name) => resolvePageComponent(name, import.meta.glob("./Pages/**/*.vue")),
setup({ el, app, props, plugin }) {
createApp({ render: () => h(app, props) })
.use(modal, {
resolve: (name) => resolvePageComponent(name, import.meta.glob("./Pages/**/*.vue")),
})
.use(plugin)
.mount(el)
}
})
import { modal } from "momentum-modal"
createInertiaApp({
resolve: (name) => require(`./Pages/${name}`),
setup({ el, App, props, plugin }) {
createApp({ render: () => h(App, props) })
.use(modal, {
resolve: (name) => import(`./Pages/${name}`),
})
.use(plugin)
.mount(el)
}
})
Modals have their own routes, letting you access them even via direct URLs. Define routes for your modal pages.
// background context / base page
Route::get('{user}', ShowUser::class)
->name('users.show');
// modal route
Route::get('{user}/{tweet}', ShowTweet::class)
->name('users.tweets.show');
Render a modal from a controller. Specify the base
route to render the background when the modal is accessed directly.
class ShowTweet extends Controller
{
public function __invoke(User $user, Tweet $tweet)
{
return Inertia::modal('Tweets/Show')
->with([
'user' => $user,
'tweet' => $tweet,
])
->baseRoute('users.show', $user);
}
}
Find the example frontend implementation here.
Take your Inertia.js skills to the next level with my book Advanced Inertia. Learn advanced concepts and make apps with Laravel and Inertia.js a breeze to build and maintain.
Momentum is a set of packages designed to improve your experience building Inertia-powered apps.
The MIT License (MIT). Please see License File for more information.