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();

    }

}