diff --git a/app/Http/Middleware/Admin/HandleInertiaAdminRequests.php b/app/Http/Middleware/Admin/HandleInertiaAdminRequests.php
new file mode 100644
index 0000000..111027b
--- /dev/null
+++ b/app/Http/Middleware/Admin/HandleInertiaAdminRequests.php
@@ -0,0 +1,42 @@
+
+ */
+ public function share(Request $request): array
+ {
+ return [
+ ...parent::share($request),
+ 'navigation' => [
+ 'menu' => Menu::getMenuTree('admin', false, true),
+ 'breadcrumbs' => Breadcrumbs::generate(),
+ ],
+ ];
+ }
+}
diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php
index 0c5b182..d09eaf0 100644
--- a/app/Http/Middleware/HandleInertiaRequests.php
+++ b/app/Http/Middleware/HandleInertiaRequests.php
@@ -3,6 +3,7 @@
namespace App\Http\Middleware;
use BalajiDharma\LaravelMenu\Models\Menu;
+use Diglactic\Breadcrumbs\Breadcrumbs;
use Illuminate\Http\Request;
use Inertia\Middleware;
@@ -37,10 +38,7 @@ public function share(Request $request): array
],
'flash' => [
'message' => fn () => $request->session()->get('message'),
- ],
- 'navigation' => [
- 'menu' => Menu::getMenuTree('admin', false, true),
- ],
+ ]
];
}
}
diff --git a/resources/js/Components/Admin/Breadcrumb.vue b/resources/js/Components/Admin/Breadcrumb.vue
new file mode 100644
index 0000000..6710693
--- /dev/null
+++ b/resources/js/Components/Admin/Breadcrumb.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/js/Layouts/LayoutAuthenticated.vue b/resources/js/Layouts/LayoutAuthenticated.vue
index 497e690..6109eca 100644
--- a/resources/js/Layouts/LayoutAuthenticated.vue
+++ b/resources/js/Layouts/LayoutAuthenticated.vue
@@ -5,6 +5,7 @@ import { usePage, router } from '@inertiajs/vue3'
import menuNavBar from '@/menuNavBar.js'
import { useDarkModeStore } from '@/Stores/darkMode.js'
import BaseIcon from '@/Components/BaseIcon.vue'
+import Breadcrumb from '@/Components/Admin/Breadcrumb.vue'
import FormControl from '@/Components/FormControl.vue'
import NavBar from '@/Components/NavBar.vue'
import NavBarItemPlain from '@/Components/NavBarItemPlain.vue'
@@ -67,6 +68,7 @@ const menuClick = (event, item) => {
@menu-click="menuClick"
@aside-lg-close-click="isAsideLgActive = false"
/>
+
diff --git a/routes/admin.php b/routes/admin.php
index 4ae422a..41cd841 100644
--- a/routes/admin.php
+++ b/routes/admin.php
@@ -1,12 +1,13 @@
'App\Http\Controllers\Admin',
'prefix' => config('admin.prefix'),
- 'middleware' => ['auth', HasAccessAdmin::class],
+ 'middleware' => ['auth', HasAccessAdmin::class, HandleInertiaAdminRequests::class],
'as' => 'admin.',
], function () {
Route::get('/', function () {
@@ -18,7 +19,9 @@
Route::resource('menu', 'MenuController')->except([
'show',
]);
- Route::resource('menu.item', 'MenuItemController');
+ Route::resource('menu.item', 'MenuItemController')->except([
+ 'show',
+ ]);
Route::group([
'prefix' => 'category',
'as' => 'category.',
diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php
new file mode 100644
index 0000000..364c8e5
--- /dev/null
+++ b/routes/breadcrumbs.php
@@ -0,0 +1,79 @@
+push('Dashboard', route('admin.dashboard'));
+});
+
+Breadcrumbs::macro('resource', function (string $name, string $title, ?string $parentName = null) {
+ if ($parentName) {
+ Breadcrumbs::for("{$name}.index", function (BreadcrumbTrail $trail, $model) use ($name, $title, $parentName) {
+ $trail->parent("{$parentName}.show", $model);
+ $trail->push($title, route("{$name}.index", $model));
+ });
+
+ Breadcrumbs::for("{$name}.create", function (BreadcrumbTrail $trail, $model) use ($name) {
+ $trail->parent("{$name}.index", $model);
+ $trail->push('Create', route("{$name}.create", $model));
+ });
+
+ Breadcrumbs::for("{$name}.show", function (BreadcrumbTrail $trail, $model, $item) use ($name) {
+ $trail->parent("{$name}.index", $model, $item);
+ \Log::info("{$name}.show");
+ if (Route::has("{$name}.show")) {
+ $trail->push($item->name ?? $model, route("{$name}.show", [$model, $item]));
+ } else {
+ $trail->push($item->name ?? $model);
+ }
+ });
+
+ Breadcrumbs::for("{$name}.edit", function (BreadcrumbTrail $trail, $model, $item) use ($name) {
+ $trail->parent("{$name}.show", $model, $item);
+ $trail->push('Edit', route("{$name}.edit", [$model, $item]));
+ });
+
+ } else {
+ Breadcrumbs::for("{$name}.index", function (BreadcrumbTrail $trail) use ($name, $title) {
+ $trail->parent('admin.dashboard');
+ $trail->push($title, route("{$name}.index"));
+ });
+
+ Breadcrumbs::for("{$name}.create", function (BreadcrumbTrail $trail) use ($name) {
+ $trail->parent("{$name}.index");
+ $trail->push('Create', route("{$name}.create"));
+ });
+
+ Breadcrumbs::for("{$name}.show", function (BreadcrumbTrail $trail, $model) use ($name) {
+ $trail->parent("{$name}.index");
+ if (Route::has("$name.show")) {
+ $trail->push($model->name ?? $model, route("{$name}.show", $model));
+ } else {
+ $trail->push($model->name ?? $model);
+ }
+ });
+
+ Breadcrumbs::for("{$name}.edit", function (BreadcrumbTrail $trail, $model) use ($name) {
+ $trail->parent("{$name}.show", $model);
+ $trail->push('Edit', route("{$name}.edit", $model));
+ });
+ }
+});
+
+Breadcrumbs::resource('admin.permission', 'Permissions');
+Breadcrumbs::resource('admin.role', 'Roles');
+Breadcrumbs::resource('admin.user', 'Users');
+Breadcrumbs::resource('admin.media', 'Media');
+Breadcrumbs::resource('admin.menu', 'Menu');
+Breadcrumbs::resource('admin.menu.item', 'Menu Items', 'admin.menu');
+Breadcrumbs::resource('admin.category.type', 'Category Types');
+Breadcrumbs::resource('admin.category.type.item', 'Items', 'admin.category.type');
+
+// admin account Info
+Breadcrumbs::for('admin.account.info', function (BreadcrumbTrail $trail) {
+ $trail->parent('admin.dashboard');
+ $trail->push('Account Info', route('admin.account.info'));
+});
\ No newline at end of file