From b09c48cdd3847524515c2637fe825eca4b79046f Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Fri, 27 Sep 2024 20:09:10 +0300 Subject: [PATCH 1/5] Fix #183: Add classes to data column --- src/Column/DataColumn.php | 3 +++ src/Column/DataColumnRenderer.php | 14 +++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Column/DataColumn.php b/src/Column/DataColumn.php index 84e1fabad..b1631e59c 100644 --- a/src/Column/DataColumn.php +++ b/src/Column/DataColumn.php @@ -57,6 +57,9 @@ public function __construct( public readonly array|RuleInterface|null $filterValidation = null, bool|callable|null $filterEmpty = null, private readonly bool $visible = true, + public readonly ?string $columnClass = null, + public readonly ?string $headerClass = null, + public readonly ?string $bodyClass = null, ) { $this->filterEmpty = $filterEmpty; } diff --git a/src/Column/DataColumnRenderer.php b/src/Column/DataColumnRenderer.php index 7365e7591..821d9d5f7 100644 --- a/src/Column/DataColumnRenderer.php +++ b/src/Column/DataColumnRenderer.php @@ -58,14 +58,20 @@ public function __construct( public function renderColumn(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell { $this->checkColumn($column); - return $cell->addAttributes($column->columnAttributes); + /** @var DataColumn $column This annotation is for IDE only */ + + return $cell + ->addClass($column->columnClass) + ->addAttributes($column->columnAttributes); } public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext $context): Cell { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ $cell = $cell + ->addClass($column->headerClass) ->addAttributes($column->headerAttributes) ->encode(false); @@ -91,6 +97,7 @@ public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext public function renderFilter(ColumnInterface $column, Cell $cell, FilterContext $context): ?Cell { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ if ($column->property === null || $column->filter === false) { return null; @@ -127,6 +134,8 @@ public function renderFilter(ColumnInterface $column, Cell $cell, FilterContext public function makeFilter(ColumnInterface $column, MakeFilterContext $context): ?FilterInterface { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ + if ($column->property === null) { return null; } @@ -198,6 +207,7 @@ public function renderBody(ColumnInterface $column, Cell $cell, DataContext $con } return $cell + ->addClass($column->bodyClass) ->addAttributes($attributes) ->content($content) ->encode(false); @@ -206,6 +216,7 @@ public function renderBody(ColumnInterface $column, Cell $cell, DataContext $con public function renderFooter(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ if ($column->footer !== null) { $cell = $cell->content($column->footer); @@ -263,6 +274,7 @@ private function checkColumn(ColumnInterface $column): void public function getOverrideOrderFields(ColumnInterface $column): array { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ if ($column->property === null || $column->field === null From d7ec01571ed1da41834fe9de5db44ea288829e35 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Fri, 27 Sep 2024 20:19:50 +0300 Subject: [PATCH 2/5] Add tests --- tests/Column/DataColumnTest.php | 38 +++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tests/Column/DataColumnTest.php b/tests/Column/DataColumnTest.php index 2a5e99dce..afc0772e7 100644 --- a/tests/Column/DataColumnTest.php +++ b/tests/Column/DataColumnTest.php @@ -494,4 +494,42 @@ public function testValueClosure(): void ->render() ); } + + public function testColumnClasses(): void + { + Assert::equalsWithoutLE( + << + + + + + + + + + + + + + + +
Name
John
Mary
+
Page 1 of 1
+ + HTML, + GridView::widget() + ->columns( + new DataColumn( + 'name', + columnClass: 'columnClass', + headerClass: 'headerClass', + bodyClass: 'bodyClass' + ), + ) + ->id('w1-grid') + ->dataReader($this->createOffsetPaginator($this->data, 10)) + ->render() + ); + } } From 2dc449b4e98f5f68e7b7cfbf0ba944b91fe7b995 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Sun, 29 Sep 2024 12:15:22 +0300 Subject: [PATCH 3/5] Adjust calls order --- src/Column/DataColumnRenderer.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Column/DataColumnRenderer.php b/src/Column/DataColumnRenderer.php index 821d9d5f7..eb79982ee 100644 --- a/src/Column/DataColumnRenderer.php +++ b/src/Column/DataColumnRenderer.php @@ -61,8 +61,8 @@ public function renderColumn(ColumnInterface $column, Cell $cell, GlobalContext /** @var DataColumn $column This annotation is for IDE only */ return $cell - ->addClass($column->columnClass) - ->addAttributes($column->columnAttributes); + ->addAttributes($column->columnAttributes) + ->addClass($column->columnClass); } public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext $context): Cell @@ -71,8 +71,8 @@ public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext /** @var DataColumn $column This annotation is for IDE only */ $cell = $cell - ->addClass($column->headerClass) ->addAttributes($column->headerAttributes) + ->addClass($column->headerClass) ->encode(false); if ($column->header === null) { @@ -207,8 +207,8 @@ public function renderBody(ColumnInterface $column, Cell $cell, DataContext $con } return $cell - ->addClass($column->bodyClass) ->addAttributes($attributes) + ->addClass($column->bodyClass) ->content($content) ->encode(false); } From 3ea9ef0030b4d344c545440e3a33c9a8545cbd1b Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Sun, 29 Sep 2024 12:18:22 +0300 Subject: [PATCH 4/5] Add test --- tests/Column/DataColumnTest.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/Column/DataColumnTest.php b/tests/Column/DataColumnTest.php index afc0772e7..6d0956ae2 100644 --- a/tests/Column/DataColumnTest.php +++ b/tests/Column/DataColumnTest.php @@ -503,15 +503,15 @@ public function testColumnClasses(): void - + - + - +
NameName
JohnJohn
MaryMary
@@ -522,6 +522,15 @@ public function testColumnClasses(): void ->columns( new DataColumn( 'name', + columnAttributes: [ + 'custom' => 'columnAttributes', + ], + headerAttributes: [ + 'custom' => 'headerAttributes', + ], + bodyAttributes: [ + 'custom' => 'bodyAttributes', + ], columnClass: 'columnClass', headerClass: 'headerClass', bodyClass: 'bodyClass' From df0d2f63e9bf41ddef40101c9d27383d23e3dcfb Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sun, 29 Sep 2024 14:22:17 +0300 Subject: [PATCH 5/5] improve test --- tests/Column/DataColumnTest.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/Column/DataColumnTest.php b/tests/Column/DataColumnTest.php index 6d0956ae2..3ed78e69b 100644 --- a/tests/Column/DataColumnTest.php +++ b/tests/Column/DataColumnTest.php @@ -5,6 +5,7 @@ namespace Yiisoft\Yii\DataView\Tests\Column; use PHPUnit\Framework\TestCase; +use Yiisoft\Data\Reader\Iterable\IterableDataReader; use Yiisoft\Definitions\Exception\CircularReferenceException; use Yiisoft\Definitions\Exception\InvalidConfigException; use Yiisoft\Definitions\Exception\NotInstantiableException; @@ -499,19 +500,22 @@ public function testColumnClasses(): void { Assert::equalsWithoutLE( << +
+ + + - + - + - +
NameName
JohnJohn
MaryMary
@@ -524,20 +528,23 @@ public function testColumnClasses(): void 'name', columnAttributes: [ 'custom' => 'columnAttributes', + 'class' => 'columnClassAttr', ], headerAttributes: [ 'custom' => 'headerAttributes', + 'class' => 'headerClassAttr', ], bodyAttributes: [ 'custom' => 'bodyAttributes', + 'class' => ['bodyClassAttr'], ], columnClass: 'columnClass', headerClass: 'headerClass', bodyClass: 'bodyClass' ), ) - ->id('w1-grid') - ->dataReader($this->createOffsetPaginator($this->data, 10)) + ->columnGroupEnabled() + ->dataReader(new IterableDataReader($this->data)) ->render() ); }