Skip to content

Commit ec93c99

Browse files
NEW Extend new AbstractGridFieldComponent class (#332)
This makes this module's `GridFieldComponent` classes `Injectable`, and allows any future enhancements in the new abstract class to automatically apply without requiring additional changes in this module. The class is introduced in silverstripe/framework 4.11.0 so the dependency constraint needs to be updated. Also update docs to encourage use of dependency injection.
1 parent 8c4e924 commit ec93c99

6 files changed

Lines changed: 30 additions & 20 deletions

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"require": {
2222
"php": "^7.4 || ^8.0",
2323
"silverstripe/vendor-plugin": "^1.0",
24-
"silverstripe/framework": "^4.10"
24+
"silverstripe/framework": "^4.11"
2525
},
2626
"require-dev": {
2727
"phpunit/phpunit": "^9.5",

docs/en/index.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ existing records than a basic autocomplete. It uses the search context construct
99
class to provide the search form.
1010

1111
```php
12-
$grid->getConfig()->addComponent(new GridFieldAddExistingSearchButton());
12+
$grid->getConfig()->addComponent(GridFieldAddExistingSearchButton::create());
1313
```
1414

1515
Inline Editing
@@ -19,17 +19,17 @@ This example replaces the default data columns component with an inline editable
1919
default add new button with one that adds new records inline.
2020

2121
```php
22-
$grid = new GridField(
22+
$grid = GridField::create(
2323
'ExampleGrid',
2424
'Example Grid',
2525
$this->Items(),
2626
GridFieldConfig::create()
27-
->addComponent(new GridFieldButtonRow('before'))
28-
->addComponent(new GridFieldToolbarHeader())
29-
->addComponent(new GridFieldTitleHeader())
30-
->addComponent(new GridFieldEditableColumns())
31-
->addComponent(new GridFieldDeleteAction())
32-
->addComponent(new GridFieldAddNewInlineButton())
27+
->addComponent(GridFieldButtonRow::create('before'))
28+
->addComponent(GridFieldToolbarHeader::create())
29+
->addComponent(GridFieldTitleHeader::create())
30+
->addComponent(GridFieldEditableColumns::create())
31+
->addComponent(GridFieldDeleteAction::create())
32+
->addComponent(GridFieldAddNewInlineButton::create())
3333
);
3434
```
3535

@@ -39,7 +39,7 @@ inline editing component. By default field scaffolding will be used.
3939
```php
4040
$grid->getConfig()->getComponentByType(GridFieldEditableColumns::class)->setDisplayFields(array(
4141
'FirstField' => function($record, $column, $grid) {
42-
return new TextField($column);
42+
return TextField::create($column);
4343
},
4444
'SecondField' => array(
4545
'title' => 'Custom Title',
@@ -69,7 +69,7 @@ use SilverStripe\Forms\GridField\GridFieldAddNewButton;
6969

7070
$grid->getConfig()
7171
->removeComponentsByType(GridFieldAddNewButton::class)
72-
->addComponent(new GridFieldAddNewMultiClass());
72+
->addComponent(GridFieldAddNewMultiClass::create());
7373
```
7474

7575
Orderable Rows
@@ -82,10 +82,10 @@ the relationship.
8282

8383
```php
8484
// Basic usage, defaults to "Sort" for the sort field.
85-
$grid->getConfig()->addComponent(new GridFieldOrderableRows());
85+
$grid->getConfig()->addComponent(GridFieldOrderableRows::create());
8686

8787
// Specifying the sort field.
88-
$grid->getConfig()->addComponent(new GridFieldOrderableRows('SortField'));
88+
$grid->getConfig()->addComponent(GridFieldOrderableRows::create('SortField'));
8989
```
9090

9191
By default, when you create a new item, it is created with a sort order of "0" - that is, it is added
@@ -118,7 +118,7 @@ To use this component you should remove the original paginator component first:
118118
```php
119119
$gridField->getConfig()
120120
->removeComponentsByType('GridFieldPaginator')
121-
->addComponent(new GridFieldConfigurablePaginator());
121+
->addComponent(GridFieldConfigurablePaginator::create());
122122
```
123123

124124
You can configure the page sizes with the configuration system. Note that merging is the default strategy, so to replace
@@ -133,7 +133,7 @@ Config::inst()->update('GridFieldConfigurablePaginator', 'default_page_sizes', a
133133
You can also override these at call time:
134134

135135
```php
136-
$paginator = new GridFieldConfigurablePaginator(100, array(100, 200, 500));
136+
$paginator = GridFieldConfigurablePaginator::create(100, array(100, 200, 500));
137137

138138
$paginator->setPageSizes(array(200, 500, 1000));
139139
$paginator->setItemsPerPage(500);

src/GridFieldAddExistingSearchButton.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Symbiote\GridFieldExtensions;
44

5+
use SilverStripe\Forms\GridField\AbstractGridFieldComponent;
56
use SilverStripe\Forms\GridField\GridField_HTMLProvider;
67
use SilverStripe\Forms\GridField\GridField_URLHandler;
78
use SilverStripe\ORM\SS_List;
@@ -11,7 +12,9 @@
1112
* A modal search dialog which uses search context to search for and add
1213
* existing records to a grid field.
1314
*/
14-
class GridFieldAddExistingSearchButton implements GridField_HTMLProvider, GridField_URLHandler
15+
class GridFieldAddExistingSearchButton extends AbstractGridFieldComponent implements
16+
GridField_HTMLProvider,
17+
GridField_URLHandler
1518
{
1619

1720
private static $allowed_actions = array(
@@ -111,6 +114,6 @@ public function getURLHandlers($grid)
111114

112115
public function handleSearch($grid, $request)
113116
{
114-
return new GridFieldAddExistingSearchHandler($grid, $this);
117+
return GridFieldAddExistingSearchHandler::create($grid, $this);
115118
}
116119
}

src/GridFieldAddNewInlineButton.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use SilverStripe\Core\Convert;
66
use SilverStripe\Core\Injector\Injector;
77
use SilverStripe\Forms\Form;
8+
use SilverStripe\Forms\GridField\AbstractGridFieldComponent;
89
use SilverStripe\Forms\GridField\GridField;
910
use SilverStripe\Forms\GridField\GridField_HTMLProvider;
1011
use SilverStripe\Forms\GridField\GridField_SaveHandler;
@@ -21,7 +22,9 @@
2122
/**
2223
* Builds on the {@link GridFieldEditableColumns} component to allow creating new records.
2324
*/
24-
class GridFieldAddNewInlineButton implements GridField_HTMLProvider, GridField_SaveHandler
25+
class GridFieldAddNewInlineButton extends AbstractGridFieldComponent implements
26+
GridField_HTMLProvider,
27+
GridField_SaveHandler
2528
{
2629
/**
2730
* @skipUpgrade

src/GridFieldAddNewMultiClass.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use SilverStripe\Core\Config\Config;
1010
use SilverStripe\Core\Injector\Injector;
1111
use SilverStripe\Forms\DropdownField;
12+
use SilverStripe\Forms\GridField\AbstractGridFieldComponent;
1213
use SilverStripe\Forms\GridField\GridField;
1314
use SilverStripe\Forms\GridField\GridField_HTMLProvider;
1415
use SilverStripe\Forms\GridField\GridField_URLHandler;
@@ -23,7 +24,9 @@
2324
* By default the list of classes that are createable is the grid field's model class, and any
2425
* subclasses. This can be customised using {@link setClasses()}.
2526
*/
26-
class GridFieldAddNewMultiClass implements GridField_HTMLProvider, GridField_URLHandler
27+
class GridFieldAddNewMultiClass extends AbstractGridFieldComponent implements
28+
GridField_HTMLProvider,
29+
GridField_URLHandler
2730
{
2831
/**
2932
* @skipUpgrade

src/GridFieldTitleHeader.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
namespace Symbiote\GridFieldExtensions;
44

5+
use SilverStripe\Forms\GridField\AbstractGridFieldComponent;
56
use SilverStripe\Forms\GridField\GridField_HTMLProvider;
67
use SilverStripe\ORM\ArrayList;
78
use SilverStripe\View\ArrayData;
89

910
/**
1011
* A simple header which displays column titles.
1112
*/
12-
class GridFieldTitleHeader implements GridField_HTMLProvider
13+
class GridFieldTitleHeader extends AbstractGridFieldComponent implements GridField_HTMLProvider
1314
{
1415

1516
public function getHTMLFragments($grid)

0 commit comments

Comments
 (0)