diff --git a/app/Filament/Resources/UserResource.php b/app/Filament/Resources/UserResource.php index a03b689e..888255ac 100644 --- a/app/Filament/Resources/UserResource.php +++ b/app/Filament/Resources/UserResource.php @@ -110,9 +110,12 @@ public static function form(Schema $schema): Schema Forms\Components\Placeholder::make('developerAccount.accepted_plugin_terms_at') ->label('Plugin Terms Accepted') ->content(fn (User $record) => $record->developerAccount->accepted_plugin_terms_at?->format('M j, Y g:i A') ?? '—'), - Forms\Components\Placeholder::make('developerAccount.payout_percentage') + Forms\Components\TextInput::make('developerAccount.payout_percentage') ->label('Payout Percentage') - ->content(fn (User $record) => $record->developerAccount->payout_percentage.'%'), + ->numeric() + ->minValue(0) + ->maxValue(100) + ->suffix('%'), Forms\Components\Placeholder::make('developerAccount.plugin_terms_version') ->label('Terms Version') ->content(fn (User $record) => $record->developerAccount->plugin_terms_version ?? '—'), diff --git a/app/Filament/Resources/UserResource/Pages/EditUser.php b/app/Filament/Resources/UserResource/Pages/EditUser.php index 5843618a..b83f7ae4 100644 --- a/app/Filament/Resources/UserResource/Pages/EditUser.php +++ b/app/Filament/Resources/UserResource/Pages/EditUser.php @@ -19,6 +19,26 @@ class EditUser extends EditRecord { protected static string $resource = UserResource::class; + protected function mutateFormDataBeforeFill(array $data): array + { + $data['developerAccount']['payout_percentage'] = $this->getRecord()->developerAccount?->payout_percentage; + + return $data; + } + + protected function mutateFormDataBeforeSave(array $data): array + { + if (isset($data['developerAccount']['payout_percentage']) && $this->getRecord()->developerAccount) { + $this->getRecord()->developerAccount->update([ + 'payout_percentage' => $data['developerAccount']['payout_percentage'], + ]); + } + + unset($data['developerAccount']); + + return $data; + } + protected function getHeaderActions(): array { return [ diff --git a/tests/Feature/Filament/UserResourceDeveloperTest.php b/tests/Feature/Filament/UserResourceDeveloperTest.php index 75d52524..e4982aae 100644 --- a/tests/Feature/Filament/UserResourceDeveloperTest.php +++ b/tests/Feature/Filament/UserResourceDeveloperTest.php @@ -101,6 +101,35 @@ public function test_developer_plugins_relation_manager_renders_successfully(): ->assertCountTableRecords(0); } + public function test_payout_percentage_can_be_updated(): void + { + $developerAccount = DeveloperAccount::factory()->create([ + 'user_id' => $this->user->id, + 'payout_percentage' => 70, + ]); + + Livewire::actingAs($this->admin) + ->test(EditUser::class, ['record' => $this->user->id]) + ->fillForm(['developerAccount.payout_percentage' => 80]) + ->call('save') + ->assertHasNoFormErrors(); + + $this->assertEquals(80, $developerAccount->fresh()->payout_percentage); + } + + public function test_payout_percentage_is_validated(): void + { + DeveloperAccount::factory()->create([ + 'user_id' => $this->user->id, + ]); + + Livewire::actingAs($this->admin) + ->test(EditUser::class, ['record' => $this->user->id]) + ->fillForm(['developerAccount.payout_percentage' => 101]) + ->call('save') + ->assertHasFormErrors(['developerAccount.payout_percentage']); + } + public function test_users_index_shows_developer_column(): void { DeveloperAccount::factory()->create([