Completed
Push — master ( 65fa37...c7bb09 )
by Song
02:44
created

ColumnSelector::isColumnIgnored()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Encore\Admin\Grid\Tools;
4
5
use Encore\Admin\Admin;
6
use Encore\Admin\Grid;
7
use Illuminate\Support\Collection;
8
9
class ColumnSelector extends AbstractTool
10
{
11
    const SELECT_COLUMN_NAME = '_columns_';
12
13
    /**
14
     * @var array
15
     */
16
    protected static $ignored = [
17
        Grid\Column::SELECT_COLUMN_NAME,
18
        Grid\Column::ACTION_COLUMN_NAME,
19
    ];
20
21
    /**
22
     * Create a new Export button instance.
23
     *
24
     * @param Grid $grid
25
     */
26
    public function __construct(Grid $grid)
27
    {
28
        $this->grid = $grid;
29
    }
30
31
    /**
32
     * @return Collection
33
     */
34
    protected function getGridColumns()
35
    {
36
        return $this->grid->columns()->reject(function ($column) {
37
            return in_array($column->getName(), static::$ignored);
38
        })->map(function ($column) {
39
            return [$column->getName() => $column->getLabel()];
40
        })->collapse();
41
    }
42
43
    /**
44
     * Ignore a column to display in column selector.
45
     *
46
     * @param string|array $name
47
     */
48
    public static function ignore($name)
49
    {
50
        static::$ignored = array_merge(static::$ignored, (array)$name);
51
    }
52
53
    /**
54
     * {@inheritdoc}
55
     *
56
     * @return string
57
     */
58
    public function render()
59
    {
60
        if (!$this->grid->showColumnSelector()) {
61
            return '';
62
        }
63
64
        return Admin::component('admin::components.grid-column-selector', [
65
            'columns'  => $this->getGridColumns(),
66
            'visible'  => $this->grid->visibleColumnNames(),
67
            'defaults' => $this->grid->getDefaultVisibleColumnNames(),
68
        ]);
69
    }
70
}
71