diff --git a/app/Http/Controllers/Admin/Master/UserController.php b/app/Http/Controllers/Admin/Master/UserController.php index 909781d..030be45 100644 --- a/app/Http/Controllers/Admin/Master/UserController.php +++ b/app/Http/Controllers/Admin/Master/UserController.php @@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Hash; use Inertia\Inertia; use Inertia\Response; +use Spatie\Permission\Models\Role; class UserController extends Controller { @@ -19,13 +20,16 @@ public function index(): Response { return Inertia::render('admin/master/user/index', [ 'users' => User::with(['profile', 'roles'])->latest()->get(), + 'roles' => Role::all(), 'defaultPassword' => config('auth.password_default', 'password'), ]); } public function create(): Response { - return Inertia::render('admin/master/user/create'); + return Inertia::render('admin/master/user/create', [ + 'roles' => Role::all(), + ]); } public function store(UserRequest $request): RedirectResponse @@ -49,6 +53,10 @@ public function store(UserRequest $request): RedirectResponse 'birth_date' => $validated['birth_date'], 'base_salary' => $validated['base_salary'], ]); + + if (! empty($validated['roles'])) { + $user->assignRole($validated['roles']); + } }); return redirect()->route('user.index')->with('success', 'Data berhasil disimpan'); @@ -67,10 +75,11 @@ public function store(UserRequest $request): RedirectResponse public function edit(User $user): Response { - $user->load('profile'); + $user->load(['profile', 'roles']); return Inertia::render('admin/master/user/edit', [ 'user' => $user, + 'roles' => Role::all(), ]); } @@ -94,6 +103,10 @@ public function update(UserRequest $request, User $user): RedirectResponse 'birth_date' => $validated['birth_date'], 'base_salary' => $validated['base_salary'], ]); + + if (isset($validated['roles'])) { + $user->syncRoles($validated['roles']); + } }); return redirect()->route('user.index')->with('success', 'Data berhasil diperbarui'); diff --git a/app/Http/Requests/Admin/Master/UserRequest.php b/app/Http/Requests/Admin/Master/UserRequest.php index f2d2455..2f4f180 100644 --- a/app/Http/Requests/Admin/Master/UserRequest.php +++ b/app/Http/Requests/Admin/Master/UserRequest.php @@ -37,6 +37,7 @@ public function rules(): array 'birth_place' => ['required', 'string', 'max:100'], 'birth_date' => ['required', 'date'], 'base_salary' => ['required', 'integer', 'min:0'], + 'roles' => ['nullable', 'array'], ]; } } diff --git a/resources/js/pages/admin/master/user/create.tsx b/resources/js/pages/admin/master/user/create.tsx index 1c73afb..8b37e9c 100644 --- a/resources/js/pages/admin/master/user/create.tsx +++ b/resources/js/pages/admin/master/user/create.tsx @@ -1,14 +1,27 @@ import { Button } from '@/components/ui/button'; -import { Calendar } from "@/components/ui/calendar"; +import { Calendar } from '@/components/ui/calendar'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; -import { Field, FieldError } from "@/components/ui/field"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; +import { Field, FieldError } from '@/components/ui/field'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; import { Popover, PopoverContent, PopoverTrigger, -} from "@/components/ui/popover"; +} from '@/components/ui/popover'; + +import { + Combobox, + ComboboxChip, + ComboboxChips, + ComboboxChipsInput, + ComboboxContent, + ComboboxEmpty, + ComboboxItem, + ComboboxList, + ComboboxValue, + useComboboxAnchor, +} from '@/components/ui/combobox'; import { Textarea } from '@/components/ui/textarea'; import userRoutes from '@/routes/user'; import { Head, Link, useForm } from '@inertiajs/react'; @@ -17,7 +30,7 @@ import React from 'react'; import { NumericFormat } from 'react-number-format'; import { toast } from 'sonner'; -export default function UserCreate() { +export default function UserCreate({ roles }: { roles: any[] }) { const [isCalendarOpen, setIsCalendarOpen] = React.useState(false); const { data, setData, post, processing, errors } = useForm({ @@ -30,6 +43,7 @@ export default function UserCreate() { birth_place: '', birth_date: '', base_salary: 0, + roles: [] as string[], }); const onSubmit = (e: React.FormEvent) => { @@ -41,16 +55,20 @@ export default function UserCreate() { }); }; + const anchor = useComboboxAnchor(); + return (