ValidationPatterns::nameRules(), 'description' => ValidationPatterns::descriptionRules(), ]; } protected function messages(): array { return array_merge( ValidationPatterns::combinedMessages(), [ 'name.required' => 'The Name field is required.', ] ); } protected $validationAttributes = [ 'name' => 'name', 'description' => 'description', ]; /** * Sync data between component properties and model * * @param bool $toModel If true, sync FROM properties TO model. If false, sync FROM model TO properties. */ private function syncData(bool $toModel = false): void { if ($toModel) { // Sync TO model (before save) $this->team->name = $this->name; $this->team->description = $this->description; } else { // Sync FROM model (on load/refresh) $this->name = $this->team->name; $this->description = $this->team->description; } } public function mount() { $this->team = currentTeam(); $this->syncData(false); if (auth()->user()->isAdminFromSession()) { $this->invitations = TeamInvitation::whereTeamId(currentTeam()->id)->get(); } } public function render() { return view('livewire.team.index'); } public function submit() { $this->validate(); try { $this->authorize('update', $this->team); $this->syncData(true); $this->team->save(); refreshSession(); $this->dispatch('success', 'Team updated.'); } catch (\Throwable $e) { return handleError($e, $this); } } public function delete() { $currentTeam = currentTeam(); $this->authorize('delete', $currentTeam); $currentTeam->delete(); $currentTeam->members->each(function ($user) use ($currentTeam) { if ($user->id === Auth::id()) { return; } $user->teams()->detach($currentTeam); $session = DB::table('sessions')->where('user_id', $user->id)->first(); if ($session) { DB::table('sessions')->where('id', $session->id)->delete(); } }); refreshSession(); return redirect()->route('team.index'); } }