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 (
-

Tambah Pegawai

+

+ Tambah Pegawai +

- @@ -58,56 +76,88 @@ export default function UserCreate() {
-
-
- +
+
+ Informasi Profil -
+
- + setData('full_name', e.target.value)} - autoComplete='off' - placeholder='Contoh: John Doe' + onChange={(e) => + setData( + 'full_name', + e.target.value, + ) + } + autoComplete="off" + placeholder="Contoh: John Doe" + /> + - - + setData('nik', e.target.value)} - autoComplete='off' - placeholder='Contoh: 3213051307900001' + onChange={(e) => + setData('nik', e.target.value) + } + autoComplete="off" + placeholder="Contoh: 3213051307900001" maxLength={16} /> - + - + setData('phone_number', e.target.value)} - autoComplete='off' - placeholder='Contoh: 08123456789' + onChange={(e) => + setData( + 'phone_number', + e.target.value, + ) + } + autoComplete="off" + placeholder="Contoh: 08123456789" + /> + - - + { - setData('base_salary', values.floatValue || 0) + setData( + 'base_salary', + values.floatValue || 0, + ); }} placeholder="Rp 0" - autoComplete='off' + autoComplete="off" + /> + - - + setData('birth_place', e.target.value)} - autoComplete='off' - placeholder='Contoh: Jakarta' + onChange={(e) => + setData( + 'birth_place', + e.target.value, + ) + } + autoComplete="off" + placeholder="Contoh: Jakarta" + /> + - - - + + - + { + onSelect={( + selectedDate: + | Date + | undefined, + ) => { if (selectedDate) { - setData('birth_date', selectedDate.getFullYear() + "-" + String(selectedDate.getMonth() + 1).padStart(2, '0') + "-" + String(selectedDate.getDate()).padStart(2, '0')); + setData( + 'birth_date', + selectedDate.getFullYear() + + '-' + + String( + selectedDate.getMonth() + + 1, + ).padStart( + 2, + '0', + ) + + '-' + + String( + selectedDate.getDate(), + ).padStart( + 2, + '0', + ), + ); } else { - setData('birth_date', ''); + setData( + 'birth_date', + '', + ); } - setIsCalendarOpen(false); + setIsCalendarOpen( + false, + ); }} /> - +
- -