60 lines
1.3 KiB
PHP
60 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace Laravel\Prompts;
|
|
|
|
use Closure;
|
|
|
|
class FormStep
|
|
{
|
|
protected readonly Closure $condition;
|
|
|
|
public function __construct(
|
|
protected readonly Closure $step,
|
|
bool|Closure $condition,
|
|
public readonly ?string $name,
|
|
protected readonly bool $ignoreWhenReverting,
|
|
) {
|
|
$this->condition = is_bool($condition)
|
|
? fn () => $condition
|
|
: $condition;
|
|
}
|
|
|
|
/**
|
|
* Execute this step.
|
|
*
|
|
* @param array<mixed> $responses
|
|
*/
|
|
public function run(array $responses, mixed $previousResponse): mixed
|
|
{
|
|
if (! $this->shouldRun($responses)) {
|
|
return null;
|
|
}
|
|
|
|
return ($this->step)($responses, $previousResponse);
|
|
}
|
|
|
|
/**
|
|
* Whether the step should run based on the given condition.
|
|
*
|
|
* @param array<mixed> $responses
|
|
*/
|
|
protected function shouldRun(array $responses): bool
|
|
{
|
|
return ($this->condition)($responses);
|
|
}
|
|
|
|
/**
|
|
* Whether this step should be skipped over when a subsequent step is reverted.
|
|
*
|
|
* @param array<mixed> $responses
|
|
*/
|
|
public function shouldIgnoreWhenReverting(array $responses): bool
|
|
{
|
|
if (! $this->shouldRun($responses)) {
|
|
return true;
|
|
}
|
|
|
|
return $this->ignoreWhenReverting;
|
|
}
|
|
}
|