File: /home/posscale/public_html/printmanager/vendor/filament/forms/src/Concerns/CanBeValidated.php
<?php
namespace Filament\Forms\Concerns;
use Filament\Forms\Components;
use Filament\Forms\Components\Component;
trait CanBeValidated
{
/**
* @return array<string, string>
*/
public function getValidationAttributes(): array
{
$attributes = [];
foreach ($this->getComponents(withHidden: true) as $component) {
if ($component->isHiddenAndNotDehydrated()) {
continue;
}
if ($component instanceof Components\Contracts\HasValidationRules) {
$component->dehydrateValidationAttributes($attributes);
}
foreach ($component->getChildComponentContainers() as $container) {
if ($container->isHidden()) {
continue;
}
$attributes = [
...$attributes,
...$container->getValidationAttributes(),
];
}
}
return $attributes;
}
/**
* @return array<string, string>
*/
public function getValidationMessages(): array
{
$messages = [];
foreach ($this->getComponents(withHidden: true) as $component) {
if ($component->isHiddenAndNotDehydrated()) {
continue;
}
if ($component instanceof Components\Contracts\HasValidationRules) {
$component->dehydrateValidationMessages($messages);
}
foreach ($component->getChildComponentContainers() as $container) {
if ($container->isHidden()) {
continue;
}
$messages = [
...$messages,
...$container->getValidationMessages(),
];
}
}
return $messages;
}
/**
* @return array<string, array<mixed>>
*/
public function getValidationRules(): array
{
$rules = [];
foreach ($this->getComponents(withHidden: true) as $component) {
if ($component->isHiddenAndNotDehydrated()) {
continue;
}
if ($component instanceof Components\Contracts\HasValidationRules) {
$component->dehydrateValidationRules($rules);
}
foreach ($component->getChildComponentContainers() as $container) {
if ($container->isHidden()) {
continue;
}
$rules = [
...$rules,
...$container->getValidationRules(),
];
}
}
return $rules;
}
/**
* @return array<string, mixed>
*/
public function validate(): array
{
if (! count(array_filter(
$this->getComponents(withHidden: true),
fn (Component $component): bool => ! $component->isHiddenAndNotDehydrated(),
))) {
return [];
}
$rules = $this->getValidationRules();
if (! count($rules)) {
return [];
}
$livewire = $this->getLivewire();
// By storing the currently validating form in the Livewire component, we can optimize the validation process
// so that the `prepareForValidation()` method is only called for the current form instead of all forms.
// This can also prevent infinite loops involving schemas that self-validate, such as the table query
// builder which crashes when it is being used while an action is submitted.
$livewire->currentlyValidatingForm($this);
try {
return $livewire->validate($rules, $this->getValidationMessages(), $this->getValidationAttributes());
} finally {
$livewire->currentlyValidatingForm(null);
}
}
}