schema([ TextInput::make('name') ->label(__('filament-companies::default.labels.company_name')) ->autofocus() ->maxLength(255) ->required(), TextInput::make('profile.email') ->label('Company Email') ->email() ->required(), Select::make('profile.entity_type') ->label('Entity Type') ->options(EntityType::class) ->required(), Select::make('profile.country') ->label('Country') ->live() ->searchable() ->options(Country::getAvailableCountryOptions()) ->required(), Select::make('locale.language') ->label('Language') ->searchable() ->options(Localization::getAllLanguages()) ->required(), Select::make('currencies.code') ->label('Currency') ->searchable() ->options(CurrencyAccessor::getAllCurrencyOptions()) ->optionsLimit(5) ->required(), ]) ->model(FilamentCompanies::companyModel()) ->statePath('data'); } protected function handleRegistration(array $data): Model { $user = Auth::user(); Gate::forUser($user)->authorize('create', FilamentCompanies::newCompanyModel()); AddingCompany::dispatch($user); $personalCompany = $user?->personalCompany() === null; /** @var Company $company */ $company = $user?->ownedCompanies()->create([ 'name' => $data['name'], 'personal_company' => $personalCompany, ]); $company->profile()->create([ 'email' => $data['profile']['email'], 'entity_type' => $data['profile']['entity_type'], 'country' => $data['profile']['country'], ]); $user?->switchCompany($company); $name = $data['name']; CompanyGenerated::dispatch($user ?? Auth::user(), $company, $data['profile']['country'], $data['locale']['language'], $data['currencies']['code']); $this->companyCreated($name); return $company; } }