<?php
namespace App\Nova;
use Acme\MultilangText\MultilangText;
use Acme\MultilangTextarea\MultilangTextarea;
use App\Models\Country;
use App\Models\Language;
use App\Nova\Repeater\ArticleSection;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\Heading;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Image;
use Laravel\Nova\Fields\Repeater;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Slug;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
use Oneduo\NovaFileManager\FileManager;
use Outl1ne\DependencyContainer\DependencyContainer;
use Whitecube\NovaFlexibleContent\Flexible;
class Post extends Resource
{
/**
* The model the resource corresponds to.
*
* @var class-string<\App\Models\Post>
*/
public static $model = \App\Models\Post::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',
'type',
'data',
];
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');
return [
ID::make()->sortable()->hide(),
Boolean::make(__('Visibility'), 'is_enabled'),
Slug::make(__('Slug'),'slug')
->creationRules('unique:posts,slug')
->placeholder('challenges_of_the_21st_century'),
Select::make(__('Type'), 'type')
->rules('required')
->options(config('posts.types')),
Heading::make('Preview'),
MultilangText::make(__('Preview Title'), 'data->preview_title')
->placeholder('Challenges of the 21st century')
->slice(25)
->required()
->fullWidth()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
FileManager::make(__('Preview image'), 'data->preview_image'),
MultilangText::make('Time to read', 'time_to_read')->placeholder('5 min to read')->fullWidth()->languages($languages)->countries($countries),
Heading::make('First screen'),
// Text::make('Title', 'title'),
MultilangText::make('Title', 'title')->placeholder('Challenges of the 21st century')->slice(25)->required()->fullWidth()->languages($languages)->countries($countries)->uploadLink($uploadLink),
FileManager::make(__('Title Image'), 'title_image'),
MultilangText::make(__('Button text'), 'data->button_text')->placeholder('Challenges of the 21st century')->slice(25)->required()->fullWidth()->languages($languages)->countries($countries)->uploadLink($uploadLink),
MultilangTextarea::make(__('Text'), 'data->up_text')
->fullWidth()
->hideFromIndex()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
Flexible::make('Article text section', 'data->section_text')
->addLayout('Section', 'section', [
FileManager::make(__('Image'), 'image')
->hideFromIndex(),
MultilangTextarea::make(__('Text'), 'text')
->fullWidth()
->hideFromIndex()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
])->fullWidth(),
MultilangTextarea::make('Article down text', 'data->down_text')
->fullWidth()
->hideFromIndex()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
];
}
public function articleFields($languages, $countries, $uploadLink)
{
return [
MultilangTextarea::make(__('Content'), 'data->up_text')
->fullWidth()
->hideFromIndex()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
Repeater::make('Line Items', 'data->section_text')
->repeatables([
ArticleSection::make()
]),
Flexible::make('Countries', 'data->section_text')
->addLayout('Country', 'country', [
MultilangTextarea::make(__('Content'), 'text')
->fullWidth()
->hideFromIndex()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
FileManager::make(__('Country icon'), 'image')
->hideFromIndex(),
])->fullWidth(),
MultilangTextarea::make(__('Content'), 'data->down_text')
->fullWidth()
->hideFromIndex()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
];
}
public function newsFields($languages, $countries, $uploadLink)
{
return [
MultilangTextarea::make(__('Content'), 'data->text')
->fullWidth()
->hideFromIndex()
->languages($languages)
->countries($countries)
->uploadLink($uploadLink),
];
}
/**
* 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 [];
}
}