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

namespace Laravel\Nova\Menu;

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

/**
 * @template TKey of int
 * @template TValue of \Laravel\Nova\Menu\MenuGroup|\Laravel\Nova\Menu\MenuItem|\Laravel\Nova\Menu\MenuList|non-empty-array
 *
 * @extends \Illuminate\Support\Collection<TKey, TValue>
 */
class MenuCollection extends Collection
{
    /**
     * Filter menus should be displayed for the given request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return static<int, TValue>
     */
    public function authorized(Request $request)
    {
        return $this->reject(function ($menu) use ($request) {
            return method_exists($menu, 'authorizedToSee') && ! $menu->authorizedToSee($request);
        })->values();
    }

    /**
     * Resolves menus and remove empty group or lists.
     *
     * @return static<int, TValue>
     */
    public function withoutEmptyItems()
    {
        return $this->transform(function ($menu) {
            if ($menu instanceof JsonSerializable) {
                $payload = $menu->jsonSerialize();

                if (($menu instanceof MenuGroup || $menu instanceof MenuList) && count($payload['items']) === 0) {
                    return null;
                }

                return $payload;
            }

            return $menu;
        })->filter()->values();
    }
}