From 110fe57ff4dcaf6416107c734fd8c55686715f48 Mon Sep 17 00:00:00 2001 From: "johannes.hammersen" Date: Tue, 2 Jul 2024 11:14:11 +0200 Subject: [PATCH] FIX: Readonly transformation of lazy-loaded searchable dropdown --- src/Forms/LazyLoadedLookupField.php | 51 +++++++++++++++++++++++++++ src/Forms/SearchableDropdownTrait.php | 9 +++++ 2 files changed, 60 insertions(+) create mode 100644 src/Forms/LazyLoadedLookupField.php diff --git a/src/Forms/LazyLoadedLookupField.php b/src/Forms/LazyLoadedLookupField.php new file mode 100644 index 00000000000..2552782b1a9 --- /dev/null +++ b/src/Forms/LazyLoadedLookupField.php @@ -0,0 +1,51 @@ +getValueArray(); + if (empty($values) || $this->sourceList === null) { + $selectedValuesList = ArrayList::create(); + } else { + $selectedValuesList = $this->sourceList->filterAny(['ID' => $values]); + } + return $this->getListMap($selectedValuesList); + } + + /* + * @param mixed $source + */ + public function setSource($source): static + { + // Setting to $this->sourceList instead of $this->source because SelectField.source + // docblock type is array|ArrayAccess i.e. does not allow DataList + + if ($source instanceof DataList) { + $this->sourceList = $source; + } else { + $this->sourceList = null; + } + return $this; + } +} diff --git a/src/Forms/SearchableDropdownTrait.php b/src/Forms/SearchableDropdownTrait.php index 97923f711d0..63be6945bf2 100644 --- a/src/Forms/SearchableDropdownTrait.php +++ b/src/Forms/SearchableDropdownTrait.php @@ -586,4 +586,13 @@ private function updateOptionsForSchema( } return $options; } + + public function performReadonlyTransformation() + { + $field = FormField::castedCopy(LazyLoadedLookupField::class); + $field->setSource($this->sourceList); + $field->setReadonly(true); + + return $field; + } }