From b63739bda7700982a2428ba04c381bcc1ecf13ec Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Wed, 4 Mar 2020 17:39:35 +0100 Subject: [PATCH 1/2] Handle no sort by value --- src/Model/ModelManager.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Model/ModelManager.php b/src/Model/ModelManager.php index 68fe615d..fe4122fd 100644 --- a/src/Model/ModelManager.php +++ b/src/Model/ModelManager.php @@ -374,7 +374,7 @@ public function getSortParameters(FieldDescriptionInterface $fieldDescription, D { $values = $datagrid->getValues(); - if ($fieldDescription->getName() === $values['_sort_by']->getName()) { + if (isset($values['_sort_by']) && $fieldDescription->getName() === $values['_sort_by']->getName()) { if ('ASC' === $values['_sort_order']) { $values['_sort_order'] = 'DESC'; } else { @@ -397,7 +397,9 @@ public function getPaginationParameters(DatagridInterface $datagrid, $page) { $values = $datagrid->getValues(); - $values['_sort_by'] = $values['_sort_by']->getName(); + if (isset($values['_sort_by'])) { + $values['_sort_by'] = $values['_sort_by']->getName(); + } $values['_page'] = $page; return ['filter' => $values]; From 0a21c5ebb5ac89a6d3a01f9d1e53dede7a101595 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Fri, 13 Mar 2020 14:50:36 +0100 Subject: [PATCH 2/2] Use private method --- src/Model/ModelManager.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Model/ModelManager.php b/src/Model/ModelManager.php index fe4122fd..53100e06 100644 --- a/src/Model/ModelManager.php +++ b/src/Model/ModelManager.php @@ -374,7 +374,7 @@ public function getSortParameters(FieldDescriptionInterface $fieldDescription, D { $values = $datagrid->getValues(); - if (isset($values['_sort_by']) && $fieldDescription->getName() === $values['_sort_by']->getName()) { + if ($this->isFieldAlreadySorted($fieldDescription, $datagrid)) { if ('ASC' === $values['_sort_order']) { $values['_sort_order'] = 'DESC'; } else { @@ -397,7 +397,7 @@ public function getPaginationParameters(DatagridInterface $datagrid, $page) { $values = $datagrid->getValues(); - if (isset($values['_sort_by'])) { + if (isset($values['_sort_by']) && $values['_sort_by'] instanceof FieldDescriptionInterface) { $values['_sort_by'] = $values['_sort_by']->getName(); } $values['_page'] = $page; @@ -552,4 +552,16 @@ protected function camelize($property) { return preg_replace(['/(^|_)+(.)/e', '/\.(.)/e'], ["strtoupper('\\2')", "'_'.strtoupper('\\1')"], $property); } + + private function isFieldAlreadySorted(FieldDescriptionInterface $fieldDescription, DatagridInterface $datagrid): bool + { + $values = $datagrid->getValues(); + + if (!isset($values['_sort_by']) || !$values['_sort_by'] instanceof FieldDescriptionInterface) { + return false; + } + + return $values['_sort_by']->getName() === $fieldDescription->getName() + || $values['_sort_by']->getName() === $fieldDescription->getOption('sortable'); + } }