/home/bdqbpbxa/api-uniferx.goodface.com.ua/vendor/laravel/nova/src/ResourceCollection.php
<?php

namespace Laravel\Nova;

use Illuminate\Http\Request;
use Illuminate\Support\Collection;

/**
 * @template TKey of array-key
 * @template TValue
 *
 * @extends \Illuminate\Support\Collection<TKey, TValue>
 */
class ResourceCollection extends Collection
{
    /**
     * Return the authorized resources of the collection.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return static<TKey, TValue>
     */
    public function authorized(Request $request)
    {
        return $this->filter(function ($resource) use ($request) {
            return $resource::authorizedToViewAny($request);
        });
    }

    /**
     * Return the resources available to be displayed in the navigation.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return static<TKey, TValue>
     */
    public function availableForNavigation(Request $request)
    {
        return $this->filter(function ($resource) use ($request) {
            return $resource::availableForNavigation($request);
        });
    }

    /**
     * Return the searchable resources for the collection.
     *
     * @return static<TKey, TValue>
     */
    public function searchable()
    {
        return $this->filter(function ($resource) {
            return $resource::$globallySearchable;
        });
    }

    /**
     * Sort the resources by their group property.
     *
     * @return \Illuminate\Support\Collection<string, \Laravel\Nova\ResourceCollection<array-key, TValue>>
     */
    public function grouped()
    {
        return $this->groupBy(function ($resource, $key) {
            return (string) $resource::group();
        })->toBase()->sortKeys();
    }

    /**
     * Group the resources for display in navigation.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Support\Collection<string, \Laravel\Nova\ResourceCollection<array-key, TValue>>
     */
    public function groupedForNavigation(Request $request)
    {
        return $this->availableForNavigation($request)->grouped();
    }
}