mode = $mode; } /** * Get the root selector for the component. */ public function selector(): string { return '[role="dialog"], .fixed.inset-0'; } /** * Assert that the browser page contains the component. */ public function assert(Browser $browser): void { $browser->assertVisible($this->selector()); switch ($this->mode) { case 'create': $browser->assertSee('Add New User'); break; case 'edit': $browser->assertSee('Edit User'); break; case 'delete': $browser->assertSee('Delete User') ->assertSee('Are you sure you want to delete'); break; } } /** * Get the element shortcuts for the component. * * @return array */ public function elements(): array { $submitText = match ($this->mode) { 'create' => 'Create User', 'edit' => 'Update User', 'delete' => 'Delete User' }; return [ '@name-input' => 'input[wire\\:model="name"]', '@submit-button' => "button:contains('{$submitText}')", '@cancel-button' => 'button:contains("Cancel")', '@validation-error' => '.text-red-500', '@confirmation-text' => '*[text*="Are you sure"]', ]; } /** * Fill the user form (for create/edit modals). */ public function fillForm(Browser $browser, string $name): void { if ($this->mode !== 'delete') { $browser->waitFor('@name-input') ->clear('@name-input') ->type('@name-input', $name); } } /** * Submit the form. */ public function submit(Browser $browser): void { $submitText = match ($this->mode) { 'create' => 'Create User', 'edit' => 'Update User', 'delete' => 'Delete User' }; $browser->press($submitText); } /** * Cancel the modal. */ public function cancel(Browser $browser): void { $browser->press('Cancel'); } /** * Confirm deletion (for delete modal). */ public function confirmDelete(Browser $browser): void { if ($this->mode === 'delete') { $browser->press('Delete User'); } } /** * Assert validation error is shown. */ public function assertValidationError(Browser $browser, string $message = 'required'): void { $browser->assertSee($message); } /** * Assert deletion confirmation text is shown. */ public function assertDeleteConfirmation(Browser $browser, string $userName): void { if ($this->mode === 'delete') { $browser->assertSee('Are you sure you want to delete') ->assertSee($userName) ->assertSee('This action cannot be undone'); } } }