/home/bdqbpbxa/api-uniferx.goodface.com.ua/app/Nova/Crop.php
<?php
namespace App\Nova;
use Acme\MultilangText\MultilangText;
use Acme\MultilangTextarea\MultilangTextarea;
use App\Models\Country;
use App\Models\Language;
use App\Models\Product;
use App\Nova\Actions\AttachFlyerToCrop;
use App\Nova\Layouts\Resources\CropLayout;
use App\Nova\Layouts\Resources\CropTrialsLayout;
use Eminiarts\Tabs\Tab;
use Eminiarts\Tabs\Tabs;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Laravel\Nova\Fields\BelongsToMany;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\BooleanGroup;
use Laravel\Nova\Fields\Heading;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Image;
use Laravel\Nova\Fields\MorphedByMany;
use Laravel\Nova\Fields\MultiSelect;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Slug;
use Laravel\Nova\Http\Requests\NovaRequest;
use Oneduo\NovaFileManager\FileManager;
use Whitecube\NovaFlexibleContent\Flexible;
class Crop extends Resource
{
/**
* The model the resource corresponds to.
*
* @var class-string<\App\Models\Crop>
*/
public static string $model = \App\Models\Crop::class;
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'slug';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'title',
];
public static $trafficCop = false;
/**
* Get the fields displayed by the resource.
*
* @param NovaRequest $request
* @return array
*/
public function fields(NovaRequest $request): array
{
$countries = Country::query()->get();
$languages = Language::query()->get();
$uploadLink = route('nova.fields.upload.image');
// $trialCountries = [];
// foreach ($countries as $country) {
// $trialCountries[$country->code] = $country->name;
// }
return [
Tabs::make('Some Title', [
Tab::make('General info', [
ID::make()->sortable()->hide(),
Boolean::make(__('Visibility'), 'is_enabled'),
Slug::make(__('Slug'),'slug')
->placeholder('cereals'),
MultilangText::make(__('Title'), 'title')
->required()
->placeholder('Cereals')
->slice(25)
->fullWidth()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
FileManager::make(__('Icon'), 'icon'),
// Image::make(__('Icon'), 'icon') ->disk('public')
// ->disableDownload()
// ->deletable()
// ->prunable()
// ->path('crops')
// ->preview(function ($value, $disk) {
// return $value
// ? Storage::disk($disk)->url($value)
// : null;
// })
// ->thumbnail(function ($value, $disk) {
// return $value
// ? Storage::disk($disk)->url($value)
// : null;
// }),
// FileManager::make(__('Title Image'), 'title_image')
// ->hideFromIndex(),
// Image::make(__('Title Image'), 'title_image')
// ->disk('public')
// ->disableDownload()
// ->deletable()
// ->prunable()
// ->path('crops')
// ->preview(function ($value, $disk) {
// return $value
// ? Storage::disk($disk)->url($value)
// : null;
// })
// ->thumbnail(function ($value, $disk) {
// return $value
// ? Storage::disk($disk)->url($value)
// : null;
// }),
]),
Tab::make(__('Crop nutrition program info'), [
FileManager::make(__('Title background'), 'fs_background->nutrition')
->hideFromIndex(),
MultilangText::make('View button', 'fs_view_button->nutrition')->languages($languages)->countries($countries)->uploadLink($uploadLink)
->fullWidth()
->hideFromIndex(),
MultilangText::make('Sidebar text', 'sidebar_text->nutrition')->languages($languages)->countries($countries)->uploadLink($uploadLink)
->fullWidth()
->hideFromIndex(),
Flexible::make('Nutrition program content', 'detailed')
->addLayout(CropLayout::class)
// ->limit(1)
->button('New nutrition program')
->fullWidth(),
]),
Tab::make(__('Trial results'), [
FileManager::make(__('Title background'), 'fs_background->trials')
->hideFromIndex(),
MultilangText::make('View button', 'fs_view_button->trials')->languages($languages)->countries($countries)->uploadLink($uploadLink)
->fullWidth()
->hideFromIndex(),
MultilangText::make('Sidebar text', 'sidebar_text->trials')->languages($languages)->countries($countries)->uploadLink($uploadLink)
->fullWidth()
->hideFromIndex(),
MultilangText::make('Show more text', 'sidebar_text->show_more')->languages($languages)->countries($countries)->uploadLink($uploadLink)
->fullWidth()
->hideFromIndex(),
// BooleanGroup::make('Field trial in countries', 'trial_countries')->options($trialCountries),
// Flexible::make('', 'trials')
// ->addLayout(CropTrialsLayout::class)
// ->fullWidth(),
// BelongsToMany::make(__('Trial Results Flyers'), 'flyers', Flyer::class),
MorphedByMany::make(__('Trial Results Flyers'), 'flyers', Flyer::class)
->fields(function ($request, $relatedModel) {
// dd($relatedModel);
$products = Product::query()->where('is_enabled', true)->get();
$options = [];
foreach ($products as $product) {
$options[$product->id] = $product->system_name;
}
if ($this->product_id) {
// dd($this->product_id);
}
// dd($options);
return [
Select::make('Product', 'product_id')->options($options)->displayUsingLabels()->required(),
];
}),
]),
]),
// BelongsToMany::make(__('Field trial in countries'), 'countries', \App\Nova\Country::class)
];
}
/**
* Get the cards available for the request.
*
* @param NovaRequest $request
* @return array
*/
public function cards(NovaRequest $request)
{
return [];
}
/**
* Get the filters available for the resource.
*
* @param NovaRequest $request
* @return array
*/
public function filters(NovaRequest $request)
{
return [];
}
/**
* Get the lenses available for the resource.
*
* @param NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [];
}
/**
* Get the actions available for the resource.
*
* @param NovaRequest $request
* @return array
*/
public function actions(NovaRequest $request)
{
return [
(new AttachFlyerToCrop())->onlyOnDetail(),
];
}
}