Browse Source

[autocomplete] Allow to configure the number of milliseconds to wait for the
user to stop typing before issuing the ajax request

Bruno Galeotti 9 years ago
parent
commit
658eae7178

+ 2 - 0
Form/Type/ModelAutocompleteType.php

@@ -73,6 +73,7 @@ class ModelAutocompleteType extends AbstractType
         $view->vars['req_param_name_search'] = $options['req_param_name_search'];
         $view->vars['req_param_name_search'] = $options['req_param_name_search'];
         $view->vars['req_param_name_page_number'] = $options['req_param_name_page_number'];
         $view->vars['req_param_name_page_number'] = $options['req_param_name_page_number'];
         $view->vars['req_param_name_items_per_page'] = $options['req_param_name_items_per_page'];
         $view->vars['req_param_name_items_per_page'] = $options['req_param_name_items_per_page'];
+        $view->vars['quiet_millis'] = $options['quiet_millis'];
 
 
         // CSS classes
         // CSS classes
         $view->vars['container_css_class'] = $options['container_css_class'];
         $view->vars['container_css_class'] = $options['container_css_class'];
@@ -120,6 +121,7 @@ class ModelAutocompleteType extends AbstractType
             'placeholder'                   => '',
             'placeholder'                   => '',
             'minimum_input_length'          => 3, //minimum 3 chars should be typed to load ajax data
             'minimum_input_length'          => 3, //minimum 3 chars should be typed to load ajax data
             'items_per_page'                => 10, //number of items per page
             'items_per_page'                => 10, //number of items per page
+            'quiet_millis'                  => 100,
 
 
             'to_string_callback'            => null,
             'to_string_callback'            => null,
 
 

+ 3 - 0
Resources/doc/reference/form_types.rst

@@ -252,6 +252,9 @@ minimum_input_length
 items_per_page
 items_per_page
   defaults to 10. Number of items per one ajax request.
   defaults to 10. Number of items per one ajax request.
 
 
+quiet_millis
+  defaults to 100. Number of milliseconds to wait for the user to stop typing before issuing the ajax request.
+
 url
 url
   defaults to "". Target external remote URL for ajax requests.
   defaults to "". Target external remote URL for ajax requests.
   You usually should not need to set this manually.
   You usually should not need to set this manually.

+ 1 - 1
Resources/views/Form/Type/sonata_type_model_autocomplete.html.twig

@@ -44,7 +44,7 @@ file that was distributed with this source code.
                 ajax: {
                 ajax: {
                     url:  '{{ url ?: path(route.name, route.parameters|default([]))|e('js') }}',
                     url:  '{{ url ?: path(route.name, route.parameters|default([]))|e('js') }}',
                     dataType: 'json',
                     dataType: 'json',
-                    quietMillis: 100,
+                    quietMillis: {{ quiet_millis }},
                     data: function (term, page) { // page is the one-based page number tracked by Select2
                     data: function (term, page) { // page is the one-based page number tracked by Select2
                         {% block sonata_type_model_autocomplete_ajax_request_parameters %}
                         {% block sonata_type_model_autocomplete_ajax_request_parameters %}
                         return {
                         return {

+ 1 - 0
Tests/Form/Type/ModelAutocompleteTypeTest.php

@@ -38,6 +38,7 @@ class ModelAutocompleteTypeTest extends TypeTestCase
         $this->assertSame('', $options['placeholder']);
         $this->assertSame('', $options['placeholder']);
         $this->assertSame(3, $options['minimum_input_length']);
         $this->assertSame(3, $options['minimum_input_length']);
         $this->assertSame(10, $options['items_per_page']);
         $this->assertSame(10, $options['items_per_page']);
+        $this->assertSame(100, $options['quiet_millis']);
         $this->assertSame('', $options['width']);
         $this->assertSame('', $options['width']);
         $this->assertFalse($options['dropdown_auto_width']);
         $this->assertFalse($options['dropdown_auto_width']);