2024-10-06 21:46:03 +02:00

74 lines
1.8 KiB
PHP

<?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\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 getFormSchema(): array
{
return [
Section::make()
->heading('Add User')
->schema([
Select::make('user')
->name('user')
->options(fn () => User::query()->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');
}
}