isLazy($gridField)) { if ($dataList instanceof Filterable) { // If our original list can be filtered, filter out all results. $dataList = $dataList->byIDs([-1]); } else { // If not, create an empty list instead. $dataList = ArrayList::create([]); } } return $dataList; } /** * @inheritDoc */ public function getHTMLFragments($gridField) { $gridField->addExtraClass($this->isLazy($gridField) ? 'grid-field-lazy-loadable' : 'grid-field-lazy-loaded'); return []; } /** * Detect if the current request should include results. * @param GridField $gridField * @return bool */ private function isLazy(GridField $gridField) { return $gridField->getRequest()->getHeader('X-Pjax') !== 'CurrentField' && $this->isInTabSet($gridField); } /** * Recursively check if $field is inside a TabSet. * @param FormField $field * @return bool */ private function isInTabSet(FormField $field) { $list = $field->getContainerFieldList(); if ($list && $containerField = $list->getContainerField()) { // Classes that extends TabSet might not have the expected JS to lazy load. return get_class($containerField) === TabSet::class ?: $this->isInTabSet($containerField); } else { return false; } } }