From 17f92d08bad15f91289b7385430ca6ca70eb687a Mon Sep 17 00:00:00 2001 From: Steve Boyd Date: Thu, 6 Apr 2023 10:30:12 +1200 Subject: [PATCH] FIX Handle arrays in default_sort --- src/GridFieldOrderableRows.php | 7 +++++++ tests/GridFieldOrderableRowsTest.php | 13 +++++++++++++ tests/Stub/TitleArraySortedObject.php | 22 ++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 tests/Stub/TitleArraySortedObject.php diff --git a/src/GridFieldOrderableRows.php b/src/GridFieldOrderableRows.php index 6b3d8bb..57f57c2 100755 --- a/src/GridFieldOrderableRows.php +++ b/src/GridFieldOrderableRows.php @@ -365,6 +365,13 @@ class GridFieldOrderableRows extends RequestHandler implements if ($list instanceof DataList) { $classname = $list->dataClass(); if ($defaultSort = Config::inst()->get($classname, 'default_sort')) { + if (is_array($defaultSort)) { + $defaultSortArray = []; + foreach ($defaultSort as $column => $direction) { + $defaultSortArray[] = "\"$column\" $direction"; + } + $defaultSort = implode(', ', $defaultSortArray); + } // Append the default sort to the end of the sort string // This may result in redundancy... but it seems to work $sortterm .= ($sortterm ? ', ' : '') . $defaultSort; diff --git a/tests/GridFieldOrderableRowsTest.php b/tests/GridFieldOrderableRowsTest.php index 1b23da9..333cfa8 100644 --- a/tests/GridFieldOrderableRowsTest.php +++ b/tests/GridFieldOrderableRowsTest.php @@ -24,6 +24,7 @@ use Symbiote\GridFieldExtensions\Tests\Stub\ThroughDefinerVersioned; use Symbiote\GridFieldExtensions\Tests\Stub\ThroughIntermediary; use Symbiote\GridFieldExtensions\Tests\Stub\TitleObject; use Symbiote\GridFieldExtensions\Tests\Stub\TitleSortedObject; +use Symbiote\GridFieldExtensions\Tests\Stub\TitleArraySortedObject; use Symbiote\GridFieldExtensions\Tests\Stub\ThroughIntermediaryVersioned; /** @@ -53,6 +54,7 @@ class GridFieldOrderableRowsTest extends SapphireTest ThroughBelongs::class, TitleObject::class, TitleSortedObject::class, + TitleArraySortedObject::class, ThroughDefinerVersioned::class, ThroughIntermediaryVersioned::class, ThroughBelongsVersioned::class, @@ -332,6 +334,17 @@ class GridFieldOrderableRowsTest extends SapphireTest $this->assertSame(['B', 'A', 'C'], $sortedList->column('Iden')); } + + public function testGetManipulatedDataWithDefaultSortArray() + { + $sortedList = $this->getTitleSortedListForManipuatedData(TitleArraySortedObject::class, [ + ['Title' => 'X', 'Iden' => 'C', 'OtherSort' => 3], + ['Title' => 'Z', 'Iden' => 'A', 'OtherSort' => 2], + ['Title' => 'Z', 'Iden' => 'B', 'OtherSort' => 1], + ]); + $this->assertSame(['C', 'B', 'A'], $sortedList->column('Iden')); + } + private function getTitleSortedListForManipuatedData(string $dataClass, array $data): DataList { $list = new DataList($dataClass); diff --git a/tests/Stub/TitleArraySortedObject.php b/tests/Stub/TitleArraySortedObject.php new file mode 100644 index 0000000..25d3f1a --- /dev/null +++ b/tests/Stub/TitleArraySortedObject.php @@ -0,0 +1,22 @@ + 'Varchar', + 'Iden' => 'Varchar', + 'OtherSort' => 'Int' + ]; + + private static array $default_sort = [ + 'Title' => 'ASC', + 'OtherSort' => 'ASC', + ]; + + private static $table_name = 'TitleArraySortedObject'; +}