AutoComplete Form Control

class Atk4\Ui\Form\Control\AutoComplete

Agile UI uses “Form\Control\Dropdown” by default on the form, but there is also implementation for AutoComplete form control. Although they look similar, there are some differences:

  • AutoComplete will perform callback to fetch values.
  • AutoComplete can use callback to format options (both keys and values).
  • AutoComplete can search in multiple fields.
  • AutoComplete can use form current (dirty) values to apply dependency and limit options.
  • AutoComplete can have multiple selection.
  • AutoComplete has additional feature called “Plus”
  • AutoComplete only works with models. Won’t work for pre-defined value lists.

AutoComplete can be a drop-in replacement for Dropdown.

Using Plus mode

In your application, it is handy if you can automatically add a missing “client” from the form where you add an invoice. AutoComplete implements “Plus” mode which will automatically open a modal form where you can enter new record details.

The form save will re-use the model of your auto-complete, so be sure to set() defaults and addCondition()s:

$form->addControl('test', [\Atk4\Ui\Form\Control\AutoComplete::class, 'plus' => true])
    ->setModel(new Country($db));

Specifying in Model

You can also specify that you prefer to use AutoComplete inside your model definition:

$model->hasOne('country_id', ['model' => [Country::class], 'ui' => ['form' => [\Atk4\Ui\Form\Control\AutoComplete::class]]]);

Advanced Usage

You can do much more with AutoComplete form control by passing dropdown settings:

$form->addControl('test', [
    \Atk4\Ui\Form\Control\AutoComplete::class,
    'settings' => [
        'allowReselection' => true,
        'selectOnKeydown' => false,
        'onChange' => new \Atk4\Ui\Js\JsExpression('function (value, t, c) {
            if ($(this).data(\'value\') !== value) {
                $(this).parents(\'.form\').form(\'submit\');
                $(this).data(\'value\', value);
            }}'),
    ],
])->setModel(new Country($db));

Lookup Form Control

In 1.6 we have introduced Lookup form control, which is identical to AutoComplete but additionally allows use of Filters:

$form = \Atk4\Ui\Form::addTo($app, ['class.segment' => true]);
\Atk4\Ui\Label::addTo($form, ['Add city', 'class.top attached' => true], ['AboveControls']);

$l = $form->addControl('city', [\Atk4\Ui\Form\Control\Lookup::class]);

// will restraint possible city value in droddown base on country and/or language.
$l->addFilter('country', 'Country');
$l->addFilter('language', 'Lang');

// make sure country and language belong to your model.
$l->setModel(new City($db));

Possibly this feature will be introduced into “AutoComplete” class.