diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
index 42fff45..6aea49a 100644
--- a/app/Http/Controllers/UserController.php
+++ b/app/Http/Controllers/UserController.php
@@ -48,7 +48,7 @@ class UserController extends Controller
{
$request->validate([
'name' => 'required|string|max:255',
- 'email' => 'required|email|unique:users,email,' . $user->id,
+ 'email' => 'required|email|unique:users,email,'.$user->id,
'password' => 'nullable|string|max:255',
]);
diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php
index 9dc5ef9..0b92957 100644
--- a/app/Http/Middleware/HandleInertiaRequests.php
+++ b/app/Http/Middleware/HandleInertiaRequests.php
@@ -36,6 +36,7 @@ class HandleInertiaRequests extends Middleware
'flash' => [
'message' => fn () => $request->session()->get('message'),
],
+ 'app_name' => env('APP_NAME', 'App Name'),
]);
}
}
diff --git a/app/Http/Middleware/HttpSecureAware.php b/app/Http/Middleware/HttpSecureAware.php
index dc9acac..dc32d07 100644
--- a/app/Http/Middleware/HttpSecureAware.php
+++ b/app/Http/Middleware/HttpSecureAware.php
@@ -23,4 +23,4 @@ class HttpSecureAware
return $next($request);
}
-}
\ No newline at end of file
+}
diff --git a/database/seeders/DummySeeder.php b/database/seeders/DummySeeder.php
index e237efc..fb70403 100644
--- a/database/seeders/DummySeeder.php
+++ b/database/seeders/DummySeeder.php
@@ -2,7 +2,9 @@
namespace Database\Seeders;
+use App\Models\Setting;
use Illuminate\Database\Seeder;
+use Illuminate\Support\Str;
class DummySeeder extends Seeder
{
@@ -13,6 +15,10 @@ class DummySeeder extends Seeder
*/
public function run()
{
- //
+ $settings = [
+ ['id' => Str::ulid(), 'key' => 'app_name', 'value' => 'Customer Point', 'type' => 'text'],
+ ];
+
+ Setting::insert($settings);
}
}
diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php
index 50d22e9..5300234 100644
--- a/database/seeders/PermissionSeeder.php
+++ b/database/seeders/PermissionSeeder.php
@@ -30,6 +30,8 @@ class PermissionSeeder extends Seeder
['id' => Str::ulid(), 'label' => 'Update Role', 'name' => 'update-role'],
['id' => Str::ulid(), 'label' => 'View Role', 'name' => 'view-role'],
['id' => Str::ulid(), 'label' => 'Delete Role', 'name' => 'delete-role'],
+
+ ['id' => Str::ulid(), 'label' => 'View Setting', 'name' => 'view-setting'],
];
foreach ($permissions as $permission) {
diff --git a/resources/js/Components/Defaults/ApplicationLogo.jsx b/resources/js/Components/Defaults/ApplicationLogo.jsx
index 08b4984..092d6da 100644
--- a/resources/js/Components/Defaults/ApplicationLogo.jsx
+++ b/resources/js/Components/Defaults/ApplicationLogo.jsx
@@ -1,7 +1,10 @@
-import React from 'react';
+import { usePage } from '@inertiajs/react'
+import React from 'react'
export default function ApplicationLogo({ className }) {
- return (
-
App Name
- );
+ const {
+ props: { app_name },
+ } = usePage()
+
+ return {app_name}
}
diff --git a/resources/js/Components/FormInput.jsx b/resources/js/Components/FormInput.jsx
index 41073e8..483b005 100644
--- a/resources/js/Components/FormInput.jsx
+++ b/resources/js/Components/FormInput.jsx
@@ -1,11 +1,31 @@
-import React from "react";
-import Input from "./Input";
+import React from 'react'
+import Input from './Input'
-export default function FormInput({ type, name, onChange, value, label, className, error, autoComplete, autoFocus, placeholder, disabled, readOnly}) {
+export default function FormInput({
+ type,
+ name,
+ onChange,
+ value,
+ label,
+ className,
+ error,
+ autoComplete,
+ autoFocus,
+ placeholder,
+ disabled,
+ readOnly,
+}) {
+ const id = `${name}-${label}`
return (
-
+
)
-}
\ No newline at end of file
+}
diff --git a/resources/js/Components/Input.jsx b/resources/js/Components/Input.jsx
index 1e64a6a..4ae2795 100644
--- a/resources/js/Components/Input.jsx
+++ b/resources/js/Components/Input.jsx
@@ -1,24 +1,43 @@
import React from 'react'
-export default function Input({ type = 'text', name, onChange, value, error = "", autoComplete = false, autoFocus = false, placeholder , className ,disabled, readOnly}) {
+export default function Input({
+ type = 'text',
+ name,
+ onChange,
+ value,
+ error = '',
+ autoComplete = false,
+ autoFocus = false,
+ placeholder,
+ className,
+ disabled,
+ readOnly,
+ id,
+}) {
return (
<>
-
{error && (
- {error}
+
+ {error}
+
)}
>
-
)
-}
\ No newline at end of file
+}
diff --git a/resources/js/Layouts/Partials/SidebarNav.jsx b/resources/js/Layouts/Partials/SidebarNav.jsx
index c7fb390..bff94df 100644
--- a/resources/js/Layouts/Partials/SidebarNav.jsx
+++ b/resources/js/Layouts/Partials/SidebarNav.jsx
@@ -1,21 +1,21 @@
-import React from 'react';
-import { router } from '@inertiajs/react';
-import { Sidebar } from 'flowbite-react';
-import { HiLogout } from 'react-icons/hi';
-import { filterOpenMenu } from './helpers';
-import routes from './routes';
-import { formatDate } from '@/utils';
+import React from 'react'
+import { router } from '@inertiajs/react'
+import { Sidebar } from 'flowbite-react'
+import { HiLogout } from 'react-icons/hi'
+import { filterOpenMenu } from './helpers'
+import routes from './routes'
+import { formatDate } from '@/utils'
export default function SidebarNav({ user }) {
- const menus = routes.filter(item => {
+ const menus = routes.filter((item) => {
item.open = false
if (!item.show) {
return null
}
- if (+user.is_superadmin === 1) {
+ if (user.role === null) {
return filterOpenMenu(user, item)
}
- if(user.role.permissions.find(p => p.name === item.permission)) {
+ if (user.role.permissions.find((p) => p.name === item.permission)) {
return item
}
@@ -26,33 +26,36 @@ export default function SidebarNav({ user }) {
- {menus.map(item => (
+ {menus.map((item) => (
{item.items === undefined ? (
- router.visit(item.route)}
- icon={item.icon}
- active={route().current(item.active)}
- >
- {item.name}
-
+ router.visit(item.route)}
+ icon={item.icon}
+ active={route().current(item.active)}
+ >
+ {item.name}
+
) : (
- {item.items.map(item => (
- (
+ router.visit(item.route)}
+ onClick={() =>
+ router.visit(item.route)
+ }
icon={item.icon}
- active={route().current(item.active)}
+ active={route().current(
+ item.active
+ )}
>
{item.name}
))}
-
)}
@@ -64,10 +67,10 @@ export default function SidebarNav({ user }) {
Logout
-
- App Name © {(new Date()).getFullYear()}
+
+ App Name © {new Date().getFullYear()}
)
-}
\ No newline at end of file
+}
diff --git a/resources/js/Layouts/Partials/helpers.js b/resources/js/Layouts/Partials/helpers.js
index 4450946..7a6fa74 100644
--- a/resources/js/Layouts/Partials/helpers.js
+++ b/resources/js/Layouts/Partials/helpers.js
@@ -1,21 +1,25 @@
export const filterOpenMenu = (user, item) => {
- const isAdmin = +user.is_superadmin === 1
+ const isAdmin = user.role === null
if ('items' in item) {
let items = []
if (isAdmin) {
items = item.items
} else {
- items = item.items.filter(item => user.role.permissions.find(p => p.name === item.permission) ? item : null)
+ items = item.items.filter((item) =>
+ user.role.permissions.find((p) => p.name === item.permission)
+ ? item
+ : null
+ )
}
if (items.length > 0) {
- let activeItem = items.map(item => route().current(item.active))
+ let activeItem = items.map((item) => route().current(item.active))
item.open = activeItem.includes(true)
- item.items = items.filter(item => item.show ? item : null)
+ item.items = items.filter((item) => (item.show ? item : null))
return item
}
}
if (isAdmin) {
return item
}
-}
\ No newline at end of file
+}
diff --git a/resources/js/Layouts/Partials/routes.js b/resources/js/Layouts/Partials/routes.js
index c4b349e..cab5b08 100644
--- a/resources/js/Layouts/Partials/routes.js
+++ b/resources/js/Layouts/Partials/routes.js
@@ -18,39 +18,47 @@ import {
HiHome,
HiInboxIn,
HiOutlineCash,
- HiOutlineTable
-} from "react-icons/hi";
+ HiOutlineTable,
+} from 'react-icons/hi'
export default [
{
- name: "Dashboard",
+ name: 'Dashboard',
show: true,
icon: HiChartPie,
- route: route("dashboard"),
- active: "dashboard",
- permission: "view-dashboard",
+ route: route('dashboard'),
+ active: 'dashboard',
+ permission: 'view-dashboard',
},
{
- name: "User",
+ name: 'User',
show: true,
icon: HiUser,
items: [
{
- name: "Roles",
+ name: 'Roles',
show: true,
icon: HiUserGroup,
- route: route("roles.index"),
- active: "roles.*",
- permission: "view-role",
+ route: route('roles.index'),
+ active: 'roles.*',
+ permission: 'view-role',
},
{
- name: "Users",
+ name: 'Users',
show: true,
icon: HiUsers,
- route: route("user.index"),
- active: "user.index",
- permission: "view-user",
+ route: route('user.index'),
+ active: 'user.index',
+ permission: 'view-user',
},
],
},
-];
+ {
+ name: 'Setting',
+ show: true,
+ icon: HiChartPie,
+ route: route('setting.index'),
+ active: 'setting.index',
+ permission: 'view-setting',
+ },
+]
diff --git a/routes/auth.php b/routes/auth.php
index 8b7f6bd..a126089 100644
--- a/routes/auth.php
+++ b/routes/auth.php
@@ -13,47 +13,47 @@ use Illuminate\Support\Facades\Route;
Route::middleware('guest')->group(function () {
Route::get('register', [RegisteredUserController::class, 'create'])
- ->name('register');
+ ->name('register');
Route::post('register', [RegisteredUserController::class, 'store']);
Route::get('login', [AuthenticatedSessionController::class, 'create'])
- ->name('login');
+ ->name('login');
Route::post('login', [AuthenticatedSessionController::class, 'store']);
Route::get('forgot-password', [PasswordResetLinkController::class, 'create'])
- ->name('password.request');
+ ->name('password.request');
Route::post('forgot-password', [PasswordResetLinkController::class, 'store'])
- ->name('password.email');
+ ->name('password.email');
Route::get('reset-password/{token}', [NewPasswordController::class, 'create'])
- ->name('password.reset');
+ ->name('password.reset');
Route::post('reset-password', [NewPasswordController::class, 'store'])
- ->name('password.store');
+ ->name('password.store');
});
Route::middleware('auth')->group(function () {
Route::get('verify-email', [EmailVerificationPromptController::class, '__invoke'])
- ->name('verification.notice');
+ ->name('verification.notice');
Route::get('verify-email/{id}/{hash}', [VerifyEmailController::class, '__invoke'])
- ->middleware(['signed', 'throttle:6,1'])
- ->name('verification.verify');
+ ->middleware(['signed', 'throttle:6,1'])
+ ->name('verification.verify');
Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store'])
- ->middleware('throttle:6,1')
- ->name('verification.send');
+ ->middleware('throttle:6,1')
+ ->name('verification.send');
Route::get('confirm-password', [ConfirmablePasswordController::class, 'show'])
- ->name('password.confirm');
+ ->name('password.confirm');
Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
Route::put('password', [PasswordController::class, 'update'])->name('password.update');
Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
- ->name('logout');
+ ->name('logout');
});