mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #9341 from unclecheese/pulls/4/come-on-baby-make-it-search-so-good
NEW: Allow search field customisation
This commit is contained in:
commit
c466ca5ca5
@ -76,6 +76,12 @@ class GridFieldFilterHeader extends AbstractGridFieldComponent implements GridFi
|
||||
*/
|
||||
protected $updateSearchFormCallback = null;
|
||||
|
||||
/**
|
||||
* The name of the default search field
|
||||
* @var string|null
|
||||
*/
|
||||
protected ?string $searchField = null;
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
@ -125,6 +131,17 @@ class GridFieldFilterHeader extends AbstractGridFieldComponent implements GridFi
|
||||
return $this->throwExceptionOnBadDataType;
|
||||
}
|
||||
|
||||
public function getSearchField(): ?string
|
||||
{
|
||||
return $this->searchField;
|
||||
}
|
||||
|
||||
public function setSearchField(string $field): self
|
||||
{
|
||||
$this->searchField = $field;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check that this dataList is of the right data type.
|
||||
* Returns false if it's a bad data type, and if appropriate, throws an exception.
|
||||
@ -281,7 +298,7 @@ class GridFieldFilterHeader extends AbstractGridFieldComponent implements GridFi
|
||||
public function getSearchFieldSchema(GridField $gridField)
|
||||
{
|
||||
$schemaUrl = Controller::join_links($gridField->Link(), 'schema/SearchForm');
|
||||
|
||||
$inst = singleton($gridField->getModelClass());
|
||||
$context = $this->getSearchContext($gridField);
|
||||
$params = $gridField->getRequest()->postVar('filter') ?: [];
|
||||
if (array_key_exists($gridField->getName(), $params ?? [])) {
|
||||
@ -292,10 +309,13 @@ class GridFieldFilterHeader extends AbstractGridFieldComponent implements GridFi
|
||||
}
|
||||
$context->setSearchParams($params);
|
||||
|
||||
$searchField = $this->getSearchField() ?: $inst->config()->get('general_search_field');
|
||||
if (!$searchField) {
|
||||
$searchField = $context->getSearchFields()->first();
|
||||
$searchField = $searchField && property_exists($searchField, 'name') ? $searchField->name : null;
|
||||
}
|
||||
|
||||
$name = $gridField->Title ?: singleton($gridField->getModelClass())->i18n_plural_name();
|
||||
$name = $gridField->Title ?: $inst->i18n_plural_name();
|
||||
|
||||
// Prefix "Search__" onto the filters for the React component
|
||||
$filters = $context->getSearchParams();
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace SilverStripe\Forms\Tests\GridField;
|
||||
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\Form;
|
||||
@ -163,4 +164,20 @@ class GridFieldFilterHeaderTest extends SapphireTest
|
||||
$this->assertEquals('no-change-track', $field->extraClasses['no-change-track']);
|
||||
}
|
||||
}
|
||||
|
||||
public function testCustomSearchField()
|
||||
{
|
||||
$searchSchema = json_decode($this->component->getSearchFieldSchema($this->gridField));
|
||||
$this->assertEquals('Name', $searchSchema->name);
|
||||
|
||||
Config::modify()->set(Team::class, 'general_search_field', 'CustomSearch');
|
||||
$searchSchema = json_decode($this->component->getSearchFieldSchema($this->gridField));
|
||||
$this->assertEquals('CustomSearch', $searchSchema->name);
|
||||
|
||||
$this->component->setSearchField('ReallyCustomSearch');
|
||||
$searchSchema = json_decode($this->component->getSearchFieldSchema($this->gridField));
|
||||
$this->assertEquals('ReallyCustomSearch', $searchSchema->name);
|
||||
|
||||
$this->assertEquals('ReallyCustomSearch', $this->component->getSearchField());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user