Фильтры столбцов

Фильтры столбцов используются для фильтрации списка.

В случае с AdminDisplay::datatables() поиск производится через API библиотеки datatables.

Пример использования:

$display = AdminDisplay::datatables();

$display->setColumnFilters([
  null, // Не ищем по первому столбцу

  // Поиск текста
  AdminColumnFilter::text()
    ->setPlaceholder('Full Name'),

  // Поиск по диапазону
  AdminColumnFilter::range()->setFrom(
      AdminColumnFilter::text()
        ->setPlaceholder('From')
  )->setTo(
      AdminColumnFilter::text()
        ->setPlaceholder('To')
  ),

  // Поиск по диапазону дат
  AdminColumnFilter::range()->setFrom(
      AdminColumnFilter::date()
        ->setPlaceholder('From Date')
        ->setFormat('d.m.Y')
  )->setTo(
      AdminColumnFilter::date()
        ->setPlaceholder('To Date')
        ->setFormat('d.m.Y')
  ),

  // Поиск по выпадающему списку значений
  AdminColumnFilter::select(new Country, 'Title')
    ->setDisplay('title')
    ->setPlaceholder('Select Country')
    ->setColumnName('country_id')
]);

При указании столбцов необходимо, чтобы кол-во столбцов поиска соответствовало кол-ву столбцов в таблице (если поиск по определенному столбцу не нужен, то необходимо передать null) и была соблюдена последовательность

Так же фильтры можно вынести из таблицы:

$display = AdminDisplay::datatables();

$filters = [
  //нужные фильтры
];

$display->setColumnFilters($filters);
//любая доступная позиция
$display->getColumnFilters()->setPlacement('card.heading');

API

В классах фильтров столбцов используется трейт:

Методы доступные во всех фильтрах

setOperator

Указание оператора, который будет использован при фильтрации. По умолчанию equal

  static::setOperator(string $operator): return self

Список доступных операторов сравнения:

Text

Фильтрация данных по строке

AdminColumnFilter::text()
  ->setPlaceholder('Full Name')
  ->setOperator(\SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::CONTAINS)

setPlaceholder

Указание плейсхолдера для поля.

  static::setPlaceholder(string $placeholder): return self

Date

Фильтрация данных по дате

AdminColumnFilter::date()->setPlaceholder('Date')->setFormat('d.m.Y')

setFormat

Указание формата даты в которой приходит дата из инпута

  static::setFormat(string $format): return self

setPickerFormat

Указание формата даты отображаемой в инпуте и понятной для Javascript

  static::setPickerFormat(string $pickerFormat): return self

setSearchFormat

Указание формата даты в котором данные хранятся в БД

  static::setSearchFormat(string $searchFormat): return self

setWidth (доступно в v6+, вернулось в v7.20+)

Минимальная ширина блока Доступно во всех фильтрах, в рейдж блоке и во внутренних частях рейндж блока

  static::setWidth(string $width): return self

  AdminColumnFilter::text()
    ->setPlaceholder('Full Name')
    ->setColumnName('title')
    ->setWidth('20rem') //min-width: 20rem / em / px / %
    ->setOperator('contains'),

Select

Фильтрация данных по данным из выпадающего списка. В опции можно указать массив или передать модель:

  //массивом
  AdminColumnFilter::select()
    ->setOptions([
      'sender' => 'Отправитель',
      'recipient' => 'Получатель',
    ])
    ->setWidth('15rem')
    ->setColumnName('payer_type')
    ->setPlaceholder('Все'),

  //моделью
  AdminColumnFilter::select()
    ->setModelForOptions(Sender::class)
    ->setDisplay(function($filter){
      return $filter->id . ' - ' . $filter->description;
    })
    ->setWidth('15rem')
    ->setFetchColumns('description') //id и так выбирается
    ->setColumnName('sender_id')
    ->setLoadOptionsQueryPreparer(function($element, $query) {
      //любая своя логика либо скоуп
      return $query->active();
    })
    ->setPlaceholder('Все отправители'),

  //другое
  AdminColumnFilter::select()
    ->setOptions([
      'http://' => 'Внешние изображения',
      'https://' => 'Внешние изображения 2',
      'http' => 'Внешние все',
    ])
    ->setWidth('20rem')
    ->setOperator(\SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::BEGINS_WITH)
    ->setColumnName('image')
    ->setPlaceholder('Все'),

Range

Фильтрация данных по диазону.

setInline(true) (dev или v7.20 +)

Выравнивание инпутов Range в одну строку

setFrom

Указание поля начала диапазона

  static::setFrom(ColumnFilterInterface $from): return self

setTo

Указание поля конца диапазона

  static::setTo(ColumnFilterInterface $from): return self