<?php namespace Xentral\Widgets\DataTable\Feature; use Xentral\Widgets\DataTable\Column\Column; use Xentral\Widgets\DataTable\Column\ColumnCollection; use Xentral\Widgets\DataTable\DataTableInterface; use Xentral\Widgets\DataTable\Options\DataTableOptions; /** * @see https://datatables.net/extensions/responsive/ */ final class ResponsiveFeature implements DataTableFeatureInterface { /** @var int PRIO_HIGHEST */ const PRIO_HIGHEST = 1; /** @var int PRIO_HIGHER */ const PRIO_HIGHER = 10; /** @var int PRIO_NORMAL */ const PRIO_NORMAL = 100; /** @var int PRIO_LOWER */ const PRIO_LOWER = 1000; /** @var int PRIO_LOWEST */ const PRIO_LOWEST = 10000; /** @var array $responsiveProperty */ private $responsiveProperty = [ 'details' => false, ]; /** @var array $columnPriorities */ private $columnPriorities = []; /** @var int $defaultPriority */ private $defaultPriority = self::PRIO_NORMAL; /** * @param DataTableInterface $table * * @return void */ public function modifyTable(DataTableInterface $table) { $this->modifyOptions($table->getOptions()); $this->modifyColumns($table->getColumns()); } /** * @param string $columnName * @param int $priority * * @return void */ public function setPriority($columnName, $priority) { $this->columnPriorities[$columnName] = (int)$priority; } /** * @param int $priority * * @return void */ public function setDefaultPriority($priority) { $this->defaultPriority = (int)$priority; } /** * @param DataTableOptions $options * * @return void */ private function modifyOptions(DataTableOptions $options) { $options->setOption('responsive', $this->responsiveProperty); $options->removeOption('scrollX'); } /** * @param ColumnCollection $columns * * @return void */ private function modifyColumns(ColumnCollection $columns) { /** @var Column $column */ foreach ($columns as $column) { $name = $column->getName(); if (isset($this->columnPriorities[$name])) { $column->set('responsivePriority', $this->columnPriorities[$name]); } else { if (!$column->has('responsivePriority')) { $column->set('responsivePriority', $this->defaultPriority); } } } } }