From 741143a40738c0779fd4ae73fe5b3b9f66b19415 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Fri, 3 Oct 2025 08:24:04 +0700 Subject: [PATCH] feat(user): sync user dengan outlet saat crud dan menampilkan outlet di tabel --- .../Datatable/Studio/Master/UsersTable.php | 7 +++++++ app/Livewire/Forms/Studio/Master/UserForm.php | 12 ++++++++++++ app/Livewire/Studio/Master/User/Create.php | 11 ++++++++++- app/Livewire/Studio/Master/User/Edit.php | 7 ++++++- .../livewire/studio/master/user/form.blade.php | 18 ++++++++++++++++++ 5 files changed, 53 insertions(+), 2 deletions(-) diff --git a/app/Livewire/Datatable/Studio/Master/UsersTable.php b/app/Livewire/Datatable/Studio/Master/UsersTable.php index 5a015c8..3157da9 100644 --- a/app/Livewire/Datatable/Studio/Master/UsersTable.php +++ b/app/Livewire/Datatable/Studio/Master/UsersTable.php @@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Blade; use Rappasoft\LaravelLivewireTables\DataTableComponent; use Rappasoft\LaravelLivewireTables\Views\Column; +use Rappasoft\LaravelLivewireTables\Views\Columns\ArrayColumn; use Rappasoft\LaravelLivewireTables\Views\Filters\MultiSelectFilter; class UsersTable extends DataTableComponent @@ -80,6 +81,11 @@ public function columns(): array Column::make('Alamat', 'address')->searchable(), + ArrayColumn::make('Outlet') + ->data(fn ($value, $row) => $row->user->outlets->pluck('name')->toArray()) + ->outputFormat(fn ($index, $value) => Blade::render(''.$value.'')) + ->flexRow(['class' => 'gap-2 flex-wrap']), + Column::make('Tanggal') ->label(function ($row) { $birthdate = formatDate($row->birthdate); @@ -162,6 +168,7 @@ public function builder(): Builder ->with([ 'user', 'user.referralCode', + 'user.outlets', ]); } diff --git a/app/Livewire/Forms/Studio/Master/UserForm.php b/app/Livewire/Forms/Studio/Master/UserForm.php index 4e19391..669fbcb 100644 --- a/app/Livewire/Forms/Studio/Master/UserForm.php +++ b/app/Livewire/Forms/Studio/Master/UserForm.php @@ -38,6 +38,8 @@ class UserForm extends Form public string $status = '1'; + public array $outlet_ids = []; + public function rules(): array { return [ @@ -51,6 +53,8 @@ public function rules(): array 'address' => ['required', 'string'], 'gender' => ['required', Rule::in(Gender::cases())], 'status' => ['required', Rule::in(UserStatus::cases())], + 'outlet_ids' => ['required', 'array', 'min:1'], + 'outlet_ids.*' => Rule::exists('outlets', 'id'), ]; } @@ -65,11 +69,14 @@ public function validationAttributes(): array 'hire_date' => 'tanggal bergabung', 'address' => 'alamat', 'gender' => 'jenis kelamin', + 'outlet_ids' => 'outlet', ]; } public function setUser(User $user) { + $user->load(['employee', 'outlets']); + $this->user = $user; $employee = $user->employee; @@ -83,6 +90,7 @@ public function setUser(User $user) $this->address = $employee->address; $this->gender = $employee->gender->value; $this->status = $user->status->value; + $this->outlet_ids = $user->outlets->pluck('id')->toArray(); } public function store() @@ -116,6 +124,8 @@ public function store() 'address' => $data['address'], 'gender' => $data['gender'], ]); + + $user->outlets()->attach($this->outlet_ids); }); } @@ -147,6 +157,8 @@ public function update() 'address' => $data['address'], 'gender' => $data['gender'], ]); + + $this->user->outlets()->sync($this->outlet_ids); }); } } diff --git a/app/Livewire/Studio/Master/User/Create.php b/app/Livewire/Studio/Master/User/Create.php index af7b6ec..fae94ec 100644 --- a/app/Livewire/Studio/Master/User/Create.php +++ b/app/Livewire/Studio/Master/User/Create.php @@ -3,7 +3,9 @@ namespace App\Livewire\Studio\Master\User; use App\Livewire\Forms\Studio\Master\UserForm; +use App\Models\Outlet; use App\Traits\WithAuthorization; +use App\Traits\WithOutletSelector; use App\Traits\WithToast; use App\Traits\WithUpdatedData; use Livewire\Attributes\Title; @@ -12,10 +14,17 @@ #[Title('Tambah Pegawai')] class Create extends Component { - use WithAuthorization, WithToast, WithUpdatedData; + use WithAuthorization, WithOutletSelector, WithToast, WithUpdatedData; public UserForm $form; + public array $outlets = []; + + public function mount() + { + $this->outlets = Outlet::pluck('name', 'id')->toArray(); + } + public function save() { $this->canOrAbort('create user'); diff --git a/app/Livewire/Studio/Master/User/Edit.php b/app/Livewire/Studio/Master/User/Edit.php index 61a6db4..744107c 100644 --- a/app/Livewire/Studio/Master/User/Edit.php +++ b/app/Livewire/Studio/Master/User/Edit.php @@ -3,8 +3,10 @@ namespace App\Livewire\Studio\Master\User; use App\Livewire\Forms\Studio\Master\UserForm; +use App\Models\Outlet; use App\Models\User; use App\Traits\WithAuthorization; +use App\Traits\WithOutletSelector; use App\Traits\WithToast; use App\Traits\WithUpdatedData; use Livewire\Attributes\Title; @@ -13,13 +15,16 @@ #[Title('Ubah Pegawai')] class Edit extends Component { - use WithAuthorization, WithToast, WithUpdatedData; + use WithAuthorization, WithOutletSelector, WithToast, WithUpdatedData; public UserForm $form; + public array $outlets = []; + public function mount(User $user) { $this->form->setUser($user); + $this->outlets = Outlet::pluck('name', 'id')->toArray(); } public function save() diff --git a/resources/views/livewire/studio/master/user/form.blade.php b/resources/views/livewire/studio/master/user/form.blade.php index 7c19c26..311beac 100644 --- a/resources/views/livewire/studio/master/user/form.blade.php +++ b/resources/views/livewire/studio/master/user/form.blade.php @@ -119,6 +119,24 @@ + + + + Outlet * + + Pilih Semua + + Hapus Semua + + @foreach ($outlets as $key => $value) + {{ $value }} + + @endforeach + + + +