<?php
namespace App\Filament\Pages;
use Filament\Forms\Form;
use Filament\Pages\Auth\Login;
use Illuminate\Support\HtmlString;
use Illuminate\Support\Facades\Blade;
use Filament\Forms\Components\Component;
use Filament\Forms\Components\TextInput;
use Filament\Forms;
use Illuminate\Validation\ValidationException;
class CustomLogin extends Login
{
protected ?string $maxWidth = 'xl';
public function form(Form $form): Form
{
return $form
->schema([
// $this->getEmailFormComponent(),
$this->getEmailOrPhoneFormComponent(),
$this->getPasswordFormComponent(),
$this->getRememberFormComponent(),
])
->statePath('data');
}
// public function getFormActions(): array
// {
// return [];
// }
protected function getEmailOrPhoneFormComponent(): Component
{
return TextInput::make('emailOrPhone')
->label(__('forms.sign_in.email_or_phone.label'))
->placeholder(__('forms.sign_in.email_or_phone.placeholder'))
->required();
}
protected function getPasswordFormComponent(): Component
{
return parent::getPasswordFormComponent()
->label(__('forms.sign_in.password.label'))
->placeholder(__('forms.sign_in.password.placeholder'));
}
/**
* @param array<string, mixed> $data
* @return array<string, mixed>
*/
protected function getCredentialsFromFormData(array $data): array
{
$emailOrPhone = filter_var($data['emailOrPhone'], FILTER_VALIDATE_EMAIL) ? 'email' : 'phone';
return [
$emailOrPhone => $data['emailOrPhone'],
'password' => $data['password'],
];
}
protected function throwFailureValidationException(): never
{
throw ValidationException::withMessages([
'data.emailOrPhone' => __('filament-panels::pages/auth/login.messages.failed'),
]);
}
}