diff --git a/composer.json b/composer.json index 9afa69f..80c71a3 100644 --- a/composer.json +++ b/composer.json @@ -4,13 +4,14 @@ "type": "library", "license": ["MIT", "BSD-3-Clause", "GPL-2.0", "GPL-3.0"], "require": { - "php": ">=7.1", - "nette/forms": "^3.0", + "php": ">=8.3", + "adt/nette-forms-components": "^2.3", "nette/di": "^3.0", "nette/utils": "^3.0 | ^4.0", "nette/application": "*", - "adt/doctrine-components": "^2.9" - }, + "adt/doctrine-components": "^3.0", + "nette/forms": "^3.2.9" + }, "autoload": { "psr-4": { "ADT\\": "src/" diff --git a/src/Components/AjaxSelect/Entities/AbstractEntity.php b/src/Components/AjaxSelect/Entities/AbstractEntity.php index d6a8ada..2bd32cd 100644 --- a/src/Components/AjaxSelect/Entities/AbstractEntity.php +++ b/src/Components/AjaxSelect/Entities/AbstractEntity.php @@ -3,7 +3,7 @@ namespace ADT\Components\AjaxSelect\Entities; use ADT\Components\AjaxSelect; -use ADT\DoctrineComponents\QueryObject; +use ADT\DoctrineComponents\QueryObject\QueryObject; use Nette\Application\UI\Presenter; use Nette\SmartObject; @@ -15,7 +15,7 @@ abstract class AbstractEntity const OPTION_QUERY = 'q'; public abstract function formatValues($values): array; - public abstract function hydrateValues($values): array; + public abstract function hydrateValues($values, array $formValues = []): array; protected abstract function createQueryObject(): QueryObject; @@ -122,21 +122,23 @@ public function findValues($limit) { * @param array $values * @return array List of items. */ - public function formatJsonValues($values) { + public function formatJsonValues($values, array $formValues = []) { $result = [ ]; - $titles = $this->formatValues($values); - + $titles = $this->formatValues($this->hydrateValues($values, $formValues)); + $count = count($titles); + $i = 1; foreach ($titles as $id => $item) { if (!is_array($item)) { $item = [ 'text' => $item, ]; } - $item['id'] = $id; + $item['aria-posinset'] = $i; + $item['aria-setsize'] = $count; $result[] = $item; + $i++; } - return $result; } @@ -198,7 +200,8 @@ public function done() { ? $this->formatJsonValues( is_array($controlValue) ? $controlValue - : [ $controlValue ] + : [ $controlValue ], + $control->getForm()->getValidatedValues('array') ) : [], 'queryParam' => static::OPTION_QUERY, diff --git a/src/Components/AjaxSelect/Services/AjaxService.php b/src/Components/AjaxSelect/Services/AjaxService.php index b309862..54aff8c 100644 --- a/src/Components/AjaxSelect/Services/AjaxService.php +++ b/src/Components/AjaxSelect/Services/AjaxService.php @@ -32,7 +32,7 @@ public function addEntityFactory($entityName, $entityFactory) { * @param AjaxSelect\Interfaces\IAjaxServiceControl $clientControl * @return AjaxSelect\Entities\AbstractEntity */ - public function createEntity($entityName, AjaxSelect\Interfaces\IAjaxServiceControl $clientControl = NULL) { + public function createEntity($entityName, ?AjaxSelect\Interfaces\IAjaxServiceControl $clientControl = NULL) { if ($entityName instanceof AjaxSelect\Entities\AbstractEntity) { $entity = $entityName; } else { diff --git a/src/Components/AjaxSelect/Traits/AjaxServiceControlTrait.php b/src/Components/AjaxSelect/Traits/AjaxServiceControlTrait.php index 100d0ec..4e7f639 100644 --- a/src/Components/AjaxSelect/Traits/AjaxServiceControlTrait.php +++ b/src/Components/AjaxSelect/Traits/AjaxServiceControlTrait.php @@ -53,7 +53,7 @@ protected function processValues($values) { $validValues = array_merge($validValues, $invalidValues); } - $validItems = $this->getAjaxEntity()->formatValues($this->getAjaxEntity()->hydrateValues($validValues)); + $validItems = $this->getAjaxEntity()->formatValues($this->getAjaxEntity()->hydrateValues($validValues, $this->getForm()->getValidatedValues('array'))); // add to list of valid values $this->setItems($this->getItems() + $validItems); diff --git a/src/Components/AjaxSelect/Traits/InvalidSetValueTrait.php b/src/Components/AjaxSelect/Traits/InvalidSetValueTrait.php index e2f5afe..6f75a61 100644 --- a/src/Components/AjaxSelect/Traits/InvalidSetValueTrait.php +++ b/src/Components/AjaxSelect/Traits/InvalidSetValueTrait.php @@ -35,7 +35,7 @@ public function setInvalidValueMode($mode) { return $this; } - protected abstract function getHttpData($type, ?string $htmlTail = NULL); + protected abstract function getHttpData(int $type, ?string $htmlTail = NULL): mixed; protected abstract function isDisabled(); /** diff --git a/src/Components/AjaxSelect/Traits/OrByIdFilterTrait.php b/src/Components/AjaxSelect/Traits/OrByIdFilterTrait.php index 4e0969a..c4b89d4 100644 --- a/src/Components/AjaxSelect/Traits/OrByIdFilterTrait.php +++ b/src/Components/AjaxSelect/Traits/OrByIdFilterTrait.php @@ -15,7 +15,7 @@ public function applyOrByIdFilter(array $config, \Nette\Forms\Container $form, s $defaultValue = $form->getEntity()->{'get' . ucfirst($attributeName)}(); //It can be Kdyby\Doctrine\Collections\Readonly\ReadOnlyCollectionWrapper - if (method_exists($defaultValue, 'toArray')) { + if ($defaultValue && !is_array($defaultValue) && method_exists($defaultValue, 'toArray')) { $defaultValue = $defaultValue->toArray(); }