# Nova Resource Example

<?php

namespace App\Nova;

...
use OptimistDigital\MultiselectField\Multiselect;
use MOIREI\Vouchers\Models\Voucher;

class Vouchers extends Resource
{
    /**
     * The model the resource corresponds to.
     *
     * @var string
     */
    public static $model = 'MOIREI\Vouchers\Models\Voucher';

    /**
     * Get the fields displayed by the resource.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function fields(Request $request)
    {

        $users = [];
        foreach(\App\Models\User::all() as $user){
            $users[json_encode([
                'voucherable_type' => $user->getMorphClass(),
                'voucherable_id' => $user->getKey(),
            ])] = "$user->name (User)";
            // $users[$user->id] = $user->name;
        }
        foreach(\App\Models\General\Reseller::all() as $user){
            $users[json_encode([
                'voucherable_type' => $user->getMorphClass(),
                'voucherable_id' => $user->getKey(),
            ])] = "$user->name (Reseller)";
        }
        foreach(\App\Models\Guest::all() as $user){
            $users[json_encode([
                'voucherable_type' => $user->getMorphClass(),
                'voucherable_id' => $user->getKey(),
            ])] = "$user->name (Guest)";
        }

        return [
            ID::make()->sortable(),

            MorphTo::make('Product', 'model')->readOnly(function(){
                return !is_null($this->model);
            })->types([
                Product::class,
            ]),

            ...

            MorphOne::make('Data', 'modeldata', ModelData::class), // you'll have to create a ModelData resource

            Multiselect::make('Only users', 'can_redeem')->options($users),

            Multiselect::make('Except users', 'cannot_redeem')->options($users),
        ];

    }

}