File: /home/posscale/www/printmanager/vendor/filament/actions/src/Exports/Concerns/CanFormatState.php
<?php
namespace Filament\Actions\Exports\Concerns;
use Closure;
use Illuminate\Support\Str;
trait CanFormatState
{
protected ?Closure $formatStateUsing = null;
protected int | Closure | null $characterLimit = null;
protected string | Closure | null $characterLimitEnd = null;
protected int | Closure | null $wordLimit = null;
protected string | Closure | null $wordLimitEnd = null;
protected string | Closure | null $prefix = null;
protected string | Closure | null $suffix = null;
protected bool $isListedAsJson = false;
public function limit(int | Closure | null $length = 100, string | Closure | null $end = '...'): static
{
$this->characterLimit = $length;
$this->characterLimitEnd = $end;
return $this;
}
public function words(int | Closure | null $words = 100, string | Closure | null $end = '...'): static
{
$this->wordLimit = $words;
$this->wordLimitEnd = $end;
return $this;
}
public function prefix(string | Closure | null $prefix): static
{
$this->prefix = $prefix;
return $this;
}
public function suffix(string | Closure | null $suffix): static
{
$this->suffix = $suffix;
return $this;
}
public function formatStateUsing(?Closure $callback): static
{
$this->formatStateUsing = $callback;
return $this;
}
public function formatState(mixed $state): mixed
{
$state = $this->evaluate($this->formatStateUsing ?? $state, [
'state' => $state,
]);
if ($characterLimit = $this->getCharacterLimit()) {
$state = Str::limit($state, $characterLimit, $this->getCharacterLimitEnd());
}
if ($wordLimit = $this->getWordLimit()) {
$state = Str::words($state, $wordLimit, $this->getWordLimitEnd());
}
$prefix = $this->getPrefix();
$suffix = $this->getSuffix();
if (filled($prefix)) {
$state = $prefix . $state;
}
if (filled($suffix)) {
$state = $state . $suffix;
}
return $state;
}
public function getFormattedState(): ?string
{
$state = $this->getState();
if (! is_array($state)) {
return $this->formatState($state);
}
$state = array_map($this->formatState(...), $state);
if ($this->isListedAsJson()) {
return json_encode($state);
}
return implode(', ', $state);
}
public function getCharacterLimit(): ?int
{
return $this->evaluate($this->characterLimit);
}
public function getCharacterLimitEnd(): ?string
{
return $this->evaluate($this->characterLimitEnd);
}
public function getWordLimit(): ?int
{
return $this->evaluate($this->wordLimit);
}
public function getWordLimitEnd(): ?string
{
return $this->evaluate($this->wordLimitEnd);
}
public function getPrefix(): ?string
{
return $this->evaluate($this->prefix);
}
public function getSuffix(): ?string
{
return $this->evaluate($this->suffix);
}
public function listAsJson(bool $condition = true): static
{
$this->isListedAsJson = $condition;
return $this;
}
public function isListedAsJson(): bool
{
return $this->isListedAsJson;
}
}