Быстрые фильтры/Теги

# Основы

Иногда возникает потребность создать набор фильтров (подборку результатов) и отобразить ее на листинге. Для таких ситуаций созданы теги.

namespace App\MoonShine\Resources;
 
use App\Models\Post;
use MoonShine\QueryTags\QueryTag;
use MoonShine\Resources\ModelResource;
 
class PostResource extends ModelResource
{
protected string $model = Post::class;
 
protected string $title = 'Posts';
 
//...
 
public function queryTags(): array
{
return [
QueryTag::make(
'Post with author', // Tag Title
fn(Builder $query) => $query->whereNotNull('author_id') // Query builder
)
];
}
 
//...
}

# Иконка

Тега можно добавить иконку воспользовавшись методом icon().

QueryTag::make(
'Post without an author',
fn(Builder $query) => $query->whereNull('author_id')
)
->icon('heroicons.users')

За более подробной информацией обратитесь к разделу Icons

# Активный пункт

Можно сделать активным QueryTag по умолчанию. Для этого необходимо воспользоваться методом default().

default(Closure|bool|null $condition = null)
QueryTag::make(
'All posts',
fn(Builder $query) => $query
)
->default()

# Условие отображения

Может потребоваться отобразить теги только при определенных условиях, для этого можно воспользоваться методом canSee(), которому необходимо передать callback функцию возвращающее TRUE или FALSE.

QueryTag::make(
'Post with author', // Заголовок тега
fn(Builder $query) => $query->whereNotNull('author_id')
)
->canSee(fn() => auth()->user()->moonshine_user_role_id === 1)