add default setting

v1
Aji Kamaludin 1 year ago
parent 4c32170aa2
commit b7ce034122
No known key found for this signature in database
GPG Key ID: 19058F67F0083AD3

@ -36,6 +36,7 @@ class HandleInertiaRequests extends Middleware
'flash' => [ 'flash' => [
'message' => fn () => $request->session()->get('message'), 'message' => fn () => $request->session()->get('message'),
], ],
'app_name' => env('APP_NAME', 'App Name'),
]); ]);
} }
} }

@ -2,7 +2,9 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\Setting;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class DummySeeder extends Seeder class DummySeeder extends Seeder
{ {
@ -13,6 +15,10 @@ class DummySeeder extends Seeder
*/ */
public function run() public function run()
{ {
// $settings = [
['id' => Str::ulid(), 'key' => 'app_name', 'value' => 'Customer Point', 'type' => 'text'],
];
Setting::insert($settings);
} }
} }

@ -30,6 +30,8 @@ class PermissionSeeder extends Seeder
['id' => Str::ulid(), 'label' => 'Update Role', 'name' => 'update-role'], ['id' => Str::ulid(), 'label' => 'Update Role', 'name' => 'update-role'],
['id' => Str::ulid(), 'label' => 'View Role', 'name' => 'view-role'], ['id' => Str::ulid(), 'label' => 'View Role', 'name' => 'view-role'],
['id' => Str::ulid(), 'label' => 'Delete Role', 'name' => 'delete-role'], ['id' => Str::ulid(), 'label' => 'Delete Role', 'name' => 'delete-role'],
['id' => Str::ulid(), 'label' => 'View Setting', 'name' => 'view-setting'],
]; ];
foreach ($permissions as $permission) { foreach ($permissions as $permission) {

@ -1,7 +1,10 @@
import React from 'react'; import { usePage } from '@inertiajs/react'
import React from 'react'
export default function ApplicationLogo({ className }) { export default function ApplicationLogo({ className }) {
return ( const {
<h1 className={className}>App Name</h1> props: { app_name },
); } = usePage()
return <h1 className={className}>{app_name}</h1>
} }

@ -1,11 +1,31 @@
import React from "react"; import React from 'react'
import Input from "./Input"; 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 ( return (
<div className={className}> <div className={className}>
<label htmlFor="first_name" className="block mb-2 text-sm font-medium text-gray-900 dark:text-white">{label}</label> <label
htmlFor={id}
className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
>
{label}
</label>
<Input <Input
id={id}
type={type} type={type}
name={name} name={name}
onChange={onChange} onChange={onChange}

@ -1,24 +1,43 @@
import React from 'react' 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 ( return (
<> <>
<input <input
id={id}
type={type} type={type}
className={`mb-2 bg-gray-50 border text-gray-900 text-sm rounded-lg block w-full p-2.5 dark:bg-gray-700 dark:placeholder-gray-400 dark:text-white ${error ? "border-red-500 dark:border-red-500 focus:ring-red-500 focus:border-red-500 dark:focus:ring-red-500 dark:focus:border-red-500" : "border-gray-300 dark:border-gray-600 focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-blue-500 dark:focus:border-blue-500"} ${className}`} className={`mb-2 bg-gray-50 border text-gray-900 text-sm rounded-lg block w-full p-2.5 dark:bg-gray-700 dark:placeholder-gray-400 dark:text-white ${
error
? 'border-red-500 dark:border-red-500 focus:ring-red-500 focus:border-red-500 dark:focus:ring-red-500 dark:focus:border-red-500'
: 'border-gray-300 dark:border-gray-600 focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-blue-500 dark:focus:border-blue-500'
} ${className}`}
onChange={onChange} onChange={onChange}
name={name} name={name}
value={value} value={value}
autoComplete={autoComplete ? "on" : "off"} autoComplete={autoComplete ? 'on' : 'off'}
autoFocus={autoFocus} autoFocus={autoFocus}
placeholder={placeholder} placeholder={placeholder}
disabled={disabled} disabled={disabled}
readOnly={readOnly} readOnly={readOnly}
/> />
{error && ( {error && (
<p className="mb-2 text-sm text-red-600 dark:text-red-500">{error}</p> <p className="mb-2 text-sm text-red-600 dark:text-red-500">
{error}
</p>
)} )}
</> </>
) )
} }

@ -1,21 +1,21 @@
import React from 'react'; import React from 'react'
import { router } from '@inertiajs/react'; import { router } from '@inertiajs/react'
import { Sidebar } from 'flowbite-react'; import { Sidebar } from 'flowbite-react'
import { HiLogout } from 'react-icons/hi'; import { HiLogout } from 'react-icons/hi'
import { filterOpenMenu } from './helpers'; import { filterOpenMenu } from './helpers'
import routes from './routes'; import routes from './routes'
import { formatDate } from '@/utils'; import { formatDate } from '@/utils'
export default function SidebarNav({ user }) { export default function SidebarNav({ user }) {
const menus = routes.filter(item => { const menus = routes.filter((item) => {
item.open = false item.open = false
if (!item.show) { if (!item.show) {
return null return null
} }
if (+user.is_superadmin === 1) { if (user.role === null) {
return filterOpenMenu(user, item) 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 return item
} }
@ -26,7 +26,7 @@ export default function SidebarNav({ user }) {
<Sidebar aria-label="Sidebar with multi-level dropdown example"> <Sidebar aria-label="Sidebar with multi-level dropdown example">
<Sidebar.Items> <Sidebar.Items>
<Sidebar.ItemGroup> <Sidebar.ItemGroup>
{menus.map(item => ( {menus.map((item) => (
<div key={item.name}> <div key={item.name}>
{item.items === undefined ? ( {item.items === undefined ? (
<Sidebar.Item <Sidebar.Item
@ -42,17 +42,20 @@ export default function SidebarNav({ user }) {
label={item.name} label={item.name}
open={item.open} open={item.open}
> >
{item.items.map(item => ( {item.items.map((item) => (
<Sidebar.Item <Sidebar.Item
key={item.name} key={item.name}
onClick={() => router.visit(item.route)} onClick={() =>
router.visit(item.route)
}
icon={item.icon} icon={item.icon}
active={route().current(item.active)} active={route().current(
item.active
)}
> >
{item.name} {item.name}
</Sidebar.Item> </Sidebar.Item>
))} ))}
</Sidebar.Collapse> </Sidebar.Collapse>
)} )}
</div> </div>
@ -64,8 +67,8 @@ export default function SidebarNav({ user }) {
Logout Logout
</Sidebar.Item> </Sidebar.Item>
</Sidebar.ItemGroup> </Sidebar.ItemGroup>
<p className='text-sm font-light text-gray-900 dark:text-gray-100 text-center bottom-4 left-4 pt-10'> <p className="text-sm font-light text-gray-900 dark:text-gray-100 text-center bottom-4 left-4 pt-10">
App Name &copy; {(new Date()).getFullYear()} App Name &copy; {new Date().getFullYear()}
</p> </p>
</Sidebar.Items> </Sidebar.Items>
</Sidebar> </Sidebar>

@ -1,17 +1,21 @@
export const filterOpenMenu = (user, item) => { export const filterOpenMenu = (user, item) => {
const isAdmin = +user.is_superadmin === 1 const isAdmin = user.role === null
if ('items' in item) { if ('items' in item) {
let items = [] let items = []
if (isAdmin) { if (isAdmin) {
items = item.items items = item.items
} else { } 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) { 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.open = activeItem.includes(true)
item.items = items.filter(item => item.show ? item : null) item.items = items.filter((item) => (item.show ? item : null))
return item return item
} }
} }

@ -18,39 +18,47 @@ import {
HiHome, HiHome,
HiInboxIn, HiInboxIn,
HiOutlineCash, HiOutlineCash,
HiOutlineTable HiOutlineTable,
} from "react-icons/hi"; } from 'react-icons/hi'
export default [ export default [
{ {
name: "Dashboard", name: 'Dashboard',
show: true, show: true,
icon: HiChartPie, icon: HiChartPie,
route: route("dashboard"), route: route('dashboard'),
active: "dashboard", active: 'dashboard',
permission: "view-dashboard", permission: 'view-dashboard',
}, },
{ {
name: "User", name: 'User',
show: true, show: true,
icon: HiUser, icon: HiUser,
items: [ items: [
{ {
name: "Roles", name: 'Roles',
show: true, show: true,
icon: HiUserGroup, icon: HiUserGroup,
route: route("roles.index"), route: route('roles.index'),
active: "roles.*", active: 'roles.*',
permission: "view-role", permission: 'view-role',
}, },
{ {
name: "Users", name: 'Users',
show: true, show: true,
icon: HiUsers, icon: HiUsers,
route: route("user.index"), route: route('user.index'),
active: "user.index", active: 'user.index',
permission: "view-user", permission: 'view-user',
}, },
], ],
}, },
]; {
name: 'Setting',
show: true,
icon: HiChartPie,
route: route('setting.index'),
active: 'setting.index',
permission: 'view-setting',
},
]

Loading…
Cancel
Save