File "StatusSort.php"
Full Path: /var/www/html/back/app/Domain/Payment/Sorting/StatusSort.php
File size: 1013 B
MIME-type: text/x-php
Charset: utf-8
<?php
declare(strict_types=1);
namespace App\Domain\Payment\Sorting;
use App\BaseClasses\BasePaymentsSort;
use App\Domain\Payment\Enums\PaymentStatusEnum;
use Illuminate\Database\Eloquent\Collection;
class StatusSort extends BasePaymentsSort
{
public static function sort(Collection $data, bool $desc = false): Collection
{
$statuses = PaymentStatusEnum::cases();
// Массив статусов в нужном порядке
$sortOrder = collect($statuses)
->sortBy(fn ($status) => $status->title(), null, $desc)
->pluck('value')
->toArray();
// Пересортируем коллекцию
$data = $data->sortBy(function ($item) use ($sortOrder) {
$index = array_search($item->status, $sortOrder, true);
return $index === false ? PHP_INT_MAX : $index;
});
// DESC?
if ($desc) {
$data = $data->reverse();
}
return $data->values();
}
}