123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- <?php
- namespace Dcat\Admin\Grid\Tools;
- use Dcat\Admin\Admin;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Widgets\Checkbox;
- use Illuminate\Support\Collection;
- class ColumnSelector extends AbstractTool
- {
- const SELECT_COLUMN_NAME = '_columns_';
- /**
- * @var Grid
- */
- protected $grid;
- /**
- * @var array
- */
- protected $ignoredColumns = [
- Grid\Column::SELECT_COLUMN_NAME,
- Grid\Column::ACTION_COLUMN_NAME,
- ];
- /**
- * Create a new Export button instance.
- *
- * @param Grid $grid
- */
- public function __construct(Grid $grid)
- {
- $this->grid = $grid;
- }
- /**
- * {@inheritdoc}
- *
- * @return string
- */
- public function render()
- {
- $show = $this->getVisibleColumnNames();
- $all = $this->getGridColumns();
- $list = Checkbox::make()
- ->class('column-select-item')
- ->options($all)
- ->check(
- $this->getGridColumns()->filter(function ($label, $key) use ($show) {
- if (empty($show)) {
- return true;
- }
- return in_array($key, $show) ? true : false;
- }
- )
- ->keys()
- );
- $selectAll = Checkbox::make('_all_', [1 => trans('admin.all')])->check(
- $all->count() === count($show) ? 1 : null
- );
- return Admin::view('admin::grid.column-selector', [
- 'checkbox' => $list,
- 'defaults' => $this->grid->getDefaultVisibleColumnNames(),
- 'selectAll' => $selectAll,
- 'columnName' => $this->grid->getColumnSelectorQueryName(),
- ]);
- }
- /**
- * @return array
- */
- protected function getVisibleColumnNames()
- {
- $visible = $this->grid->getVisibleColumnsFromQuery();
- $columns = $this->grid->getComplexHeaderNames() ?: $this->grid->getColumnNames();
- if (! empty($visible)) {
- array_push($visible, Grid\Column::SELECT_COLUMN_NAME, Grid\Column::ACTION_COLUMN_NAME);
- $columns = collect($columns)->filter(function ($column) use ($visible) {
- return in_array($column, $visible);
- })->toArray();
- }
- return array_filter($columns, function ($v) {
- return ! in_array($v, [Grid\Column::SELECT_COLUMN_NAME, Grid\Column::ACTION_COLUMN_NAME]);
- });
- }
- /**
- * @return Collection
- */
- protected function getGridColumns()
- {
- $columns = $this->grid->getComplexHeaders() ?: $this->grid->columns();
- return $columns->map(function ($column) {
- $name = $column->getName();
- if ($this->isColumnIgnored($name)) {
- return;
- }
- return [$name => $column->getLabel()];
- })->filter()->collapse();
- }
- /**
- * Is column ignored in column selector.
- *
- * @param string $name
- *
- * @return bool
- */
- protected function isColumnIgnored($name)
- {
- return in_array($name, $this->ignoredColumns);
- }
- /**
- * Ignore a column to display in column selector.
- *
- * @param string|array $name
- *
- * @return $this
- */
- public function ignore($name)
- {
- $this->ignoredColumns = array_merge($this->ignoredColumns, (array) $name);
- return $this;
- }
- }
|