From 945ea7fc0b7396e9c351577ebc83f8280f85fa11 Mon Sep 17 00:00:00 2001 From: Guy Sartorelli Date: Wed, 22 May 2024 10:31:16 +1200 Subject: [PATCH] FIX Make child responsible for its own nested gridfield --- src/GridFieldNestedFormItemRequest.php | 35 ++++++++++++++------------ 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/GridFieldNestedFormItemRequest.php b/src/GridFieldNestedFormItemRequest.php index fdd104a..007587f 100644 --- a/src/GridFieldNestedFormItemRequest.php +++ b/src/GridFieldNestedFormItemRequest.php @@ -33,18 +33,9 @@ class GridFieldNestedFormItemRequest extends GridFieldDetailForm_ItemRequest { return Controller::join_links($this->component->Link($this->record->ID), $action); } - + public function ItemEditForm() { - $config = new GridFieldConfig_RecordEditor(); - /** @var GridFieldDetailForm */ - $detailForm = $config->getComponentByType(GridFieldDetailForm::class); - $detailForm->setItemEditFormCallback(function (Form $form, $itemRequest) { - $breadcrumbs = $itemRequest->Breadcrumbs(false); - if ($breadcrumbs && $breadcrumbs->exists()) { - $form->Backlink = $breadcrumbs->first()->Link; - } - }); $relationName = $this->component->getRelationName(); $list = $this->record->$relationName(); if ($relationName == 'Children' && $this->record->hasExtension(Hierarchy::class)) { @@ -55,10 +46,14 @@ class GridFieldNestedFormItemRequest extends GridFieldDetailForm_ItemRequest ->forForeignID($this->record->ID); } $relationClass = $list->dataClass(); + $singleton = singleton($relationClass); - if ($this->record->hasMethod('getNestedConfig')) { - $config = $this->record->getNestedConfig(); - } else { + $config = null; + if ($singleton->hasMethod('getNestedConfig')) { + $config = $singleton->getNestedConfig(get_class($this->record), $relationName); + } + if (!$config) { + $config = new GridFieldConfig_RecordEditor(); $canEdit = $this->record->canEdit(); if (!$canEdit) { $config->removeComponentsByType(GridFieldAddNewButton::class); @@ -97,11 +92,19 @@ class GridFieldNestedFormItemRequest extends GridFieldDetailForm_ItemRequest } } } + /** @var GridFieldDetailForm */ + $detailForm = $config->getComponentByType(GridFieldDetailForm::class); + $detailForm->setItemEditFormCallback(function (Form $form, $itemRequest) { + $breadcrumbs = $itemRequest->Breadcrumbs(false); + if ($breadcrumbs && $breadcrumbs->exists()) { + $form->Backlink = $breadcrumbs->first()->Link; + } + }); $this->record->invokeWithExtensions('updateNestedConfig', $config); $title = _t(get_class($this->record).'.'.strtoupper($relationName), ' '); - + $fields = new FieldList( $gridField = new GridField( sprintf( @@ -133,13 +136,13 @@ class GridFieldNestedFormItemRequest extends GridFieldDetailForm_ItemRequest $this->record->extend('updateNestedForm', $form); return $form; } - + public function Breadcrumbs($unlinked = false) { if (!$this->popupController->hasMethod('Breadcrumbs')) { return null; } - + /** @var ArrayList $items */ $items = $this->popupController->Breadcrumbs($unlinked);