Skip to content

Commit bbf23c6

Browse files
authored
Merge pull request #2504 from Laravel-Backpack/select2-ajax-delay
[4.0][Feature] Allow delay on AJAX calls for select2_from_ajax fields
2 parents 6bf7166 + 3be481d commit bbf23c6

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/resources/views/crud/fields/select2_from_ajax.blade.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
$connected_entity = new $field['model'];
44
$connected_entity_key_name = $connected_entity->getKeyName();
55
$old_value = old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? false;
6+
7+
// by default set ajax query delay to 500ms
8+
// this is the time we wait before send the query to the search endpoint, after the user as stopped typing.
9+
$field['delay'] = $field['delay'] ?? 500;
610
@endphp
711

812
<div @include('crud::inc.field_wrapper_attributes') >
@@ -22,6 +26,7 @@
2226
data-field-attribute="{{ $field['attribute'] }}"
2327
data-connected-entity-key-name="{{ $connected_entity_key_name }}"
2428
data-include-all-form-fields="{{ $field['include_all_form_fields'] ?? 'true' }}"
29+
data-ajax-delay="{{ $field['delay'] }}"
2530
@include('crud::inc.field_attributes', ['default_class' => 'form-control'])
2631
>
2732

@@ -99,6 +104,7 @@ function bpFieldInitSelect2FromAjaxElement(element) {
99104
var $includeAllFormFields = element.attr('data-include-all-form-fields')=='false' ? false : true;
100105
var $allowClear = element.attr('data-column-nullable') == 'true' ? true : false;
101106
var $dependencies = JSON.parse(element.attr('data-dependencies'));
107+
var $ajaxDelay = element.attr('data-ajax-delay');
102108
103109
if (!$(element).hasClass("select2-hidden-accessible"))
104110
{
@@ -112,7 +118,7 @@ function bpFieldInitSelect2FromAjaxElement(element) {
112118
url: $dataSource,
113119
type: $method,
114120
dataType: 'json',
115-
quietMillis: 250,
121+
delay: $ajaxDelay,
116122
data: function (params) {
117123
if ($includeAllFormFields) {
118124
return {

src/resources/views/crud/fields/select2_from_ajax_multiple.blade.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
$connected_entity = new $field['model'];
44
$connected_entity_key_name = $connected_entity->getKeyName();
55
$old_value = old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? false;
6+
7+
// by default set ajax query delay to 500ms
8+
// this is the time we wait before send the query to the search endpoint, after the user as stopped typing.
9+
$field['delay'] = $field['delay'] ?? 500;
610
@endphp
711

812
<div @include('crud::inc.field_wrapper_attributes') >
@@ -21,6 +25,7 @@
2125
data-field-attribute="{{ $field['attribute'] }}"
2226
data-connected-entity-key-name="{{ $connected_entity_key_name }}"
2327
data-include-all-form-fields="{{ $field['include_all_form_fields'] ?? 'true' }}"
28+
data-ajax-delay="{{ $field['delay'] }}"
2429
@include('crud::inc.field_attributes', ['default_class' => 'form-control'])
2530
multiple>
2631

@@ -85,6 +90,7 @@ function bpFieldInitSelect2FromAjaxMultipleElement(element) {
8590
var $includeAllFormFields = element.attr('data-include-all-form-fields')=='false' ? false : true;
8691
var $allowClear = element.attr('data-column-nullable') == 'true' ? true : false;
8792
var $dependencies = JSON.parse(element.attr('data-dependencies'));
93+
var $ajaxDelay = element.attr('data-ajax-delay');
8894
8995
if (!$(element).hasClass("select2-hidden-accessible"))
9096
{
@@ -97,7 +103,7 @@ function bpFieldInitSelect2FromAjaxMultipleElement(element) {
97103
url: $dataSource,
98104
type: $method,
99105
dataType: 'json',
100-
quietMillis: 250,
106+
delay: $ajaxDelay,
101107
data: function (params) {
102108
if ($includeAllFormFields) {
103109
return {

0 commit comments

Comments
 (0)