<?php namespace App\Web\Pages\Settings\Projects\Widgets; use App\Models\Project; use App\Models\User; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; use Filament\Forms\Form; use Filament\Notifications\Notification; use Filament\Widgets\Widget; class AddUser extends Widget implements HasForms { use InteractsWithForms; protected static string $view = 'components.form'; public Project $project; public ?int $user; public function mount(Project $project): void { $this->project = $project; } public function form(Form $form): Form { return $form ->schema([ Section::make() ->heading('Add User') ->schema([ Select::make('user') ->name('user') ->options(fn () => User::query() ->whereNotExists(function ($query) { $query->select('user_id') ->from('user_project') ->whereColumn('users.id', 'user_project.user_id') ->where('user_project.project_id', $this->project->id); }) ->pluck('name', 'id') ) ->searchable() ->rules(\App\Actions\Projects\AddUser::rules($this->project)['user']), ]) ->footerActions([ Action::make('add') ->label('Add') ->action(fn () => $this->submit()), ]), ]); } public function submit(): void { $this->authorize('update', $this->project); $this->validate(); app(\App\Actions\Projects\AddUser::class) ->add($this->project, [ 'user' => $this->user, ]); Notification::make() ->title('User added!') ->success() ->send(); $this->user = null; } public function updated(): void { $this->dispatch('userAdded'); } }