$fieldAttributes['api']['fieldName'] = $field->getEntity() . '.' . $groupName . '.' . $field->name;
$element = $qf->addAutocomplete($elementName, $label, $fieldAttributes, $useRequired && !$search);
}
+ // Autocomplete for field with option values
else {
- // FIXME: This won't work with customFieldOptions hook
- $fieldAttributes += [
- 'entity' => 'OptionValue',
- 'placeholder' => $placeholder,
- 'multiple' => $search ? TRUE : !empty($field->serialize),
- 'api' => [
- 'params' => ['option_group_id' => $field->option_group_id, 'is_active' => 1],
- ],
- ];
- $element = $qf->addEntityRef($elementName, $label, $fieldAttributes, $useRequired && !$search);
+ $fieldAttributes['entity'] = 'OptionValue';
+ $fieldAttributes['placeholder'] = $placeholder;
+ $fieldAttributes['api']['fieldName'] = $field->getEntity() . '.' . $groupName . '.' . $field->name;
+ $fieldAttributes['select']['multiple'] = $search ? TRUE : !empty($field->serialize);
+ $fieldAttributes['select']['minimumInputLength'] = 0;
+ $element = $qf->addAutocomplete($elementName, $label, $fieldAttributes, $useRequired && !$search);
}
$qf->assign('customUrls', $customUrls);
--- /dev/null
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC. All rights reserved. |
+ | |
+ | This work is published under the GNU AGPLv3 license with some |
+ | permitted exceptions and without any warranty. For full license |
+ | and copyright information, see https://civicrm.org/licensing |
+ +--------------------------------------------------------------------+
+ */
+
+namespace Civi\Api4\Service\Autocomplete;
+
+use Civi\Core\Event\GenericHookEvent;
+use Civi\Core\HookInterface;
+
+/**
+ * @service
+ * @internal
+ */
+class OptionValueAutocompleteProvider extends \Civi\Core\Service\AutoService implements HookInterface {
+
+ /**
+ * Provide default SearchDisplay for Country autocompletes
+ *
+ * @param \Civi\Core\Event\GenericHookEvent $e
+ */
+ public static function on_civi_search_defaultDisplay(GenericHookEvent $e) {
+ if ($e->display['settings'] || $e->display['type'] !== 'autocomplete' || $e->savedSearch['api_entity'] !== 'OptionValue') {
+ return;
+ }
+ $e->display['settings'] = [
+ 'sort' => [
+ ['weight', 'ASC'],
+ ['label', 'ASC'],
+ ],
+ 'extra' => ['color' => 'color'],
+ 'columns' => [
+ [
+ 'type' => 'field',
+ 'key' => 'label',
+ 'icons' => [
+ ['field' => 'icon'],
+ ],
+ ],
+ [
+ 'type' => 'field',
+ 'key' => 'description',
+ ],
+ ],
+ ];
+ }
+
+}
$map = [
'Select Date' => 'Date',
'Link' => 'Url',
+ 'Autocomplete-Select' => 'EntityRef',
];
$inputType = $map[$inputType] ?? $inputType;
if ($dataTypeName === 'ContactReference' || $dataTypeName === 'EntityReference') {
$inputAttrs['filter'] = $filters;
}
}
+ // Custom autocompletes
+ if (!empty($data['option_group_id']) && $inputType === 'EntityRef') {
+ $fieldSpec->setFkEntity('OptionValue');
+ $inputAttrs['filter']['option_group_id'] = $data['option_group_id'];
+ }
$fieldSpec
->setInputType($inputType)
->setInputAttrs($inputAttrs);