Skip to content

Commit 3f7e807

Browse files
committed
fix for dropdown parent in select2 inside inline modals
1 parent 63b7d8a commit 3f7e807

10 files changed

+58
-24
lines changed

src/resources/views/crud/fields/relationship/fetch.blade.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
style="width:100%"
6666
name="{{ $field['name'].($field['multiple']?'[]':'') }}"
6767
data-init-function="bpFieldInitFetchElement"
68+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
6869
data-column-nullable="{{ var_export($field['allows_null']) }}"
6970
data-dependencies="{{ isset($field['dependencies'])?json_encode(Arr::wrap($field['dependencies'])): json_encode([]) }}"
7071
data-model-local-key="{{$crud->model->getKeyName()}}"
@@ -193,6 +194,7 @@ function bpFieldInitFetchElement(element) {
193194
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse(null);
194195
var $multiple = element.prop('multiple');
195196
var $ajaxDelay = element.attr('data-ajax-delay');
197+
var $isFieldInline = element.data('field-is-inline');
196198
197199
var FetchAjaxFetchSelectedEntry = function (element) {
198200
return new Promise(function (resolve, reject) {
@@ -283,6 +285,7 @@ function bpFieldInitFetchElement(element) {
283285
placeholder: $placeholder,
284286
minimumInputLength: $minimumInputLength,
285287
allowClear: $allows_null,
288+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body,
286289
ajax: {
287290
url: $dataSource,
288291
type: $method,

src/resources/views/crud/fields/relationship/fetch_or_create.blade.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,11 @@
104104
@endif
105105
<select
106106
name="{{ $field['name'].($field['multiple']?'[]':'') }}"
107+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
107108
data-original-name="{{ $field['name'] }}"
108109
style="width: 100%"
109110
data-force-select="{{ var_export($field['inline_create']['force_select']) }}"
110111
data-init-function="bpFieldInitFetchOrCreateElement"
111-
data-is-inline="{{ $inlineCreate ?? 'false' }}"
112112
data-allows-null="{{var_export($field['allows_null'])}}"
113113
data-dependencies="{{ isset($field['dependencies'])?json_encode(Arr::wrap($field['dependencies'])): json_encode([]) }}"
114114
data-model-local-key="{{$crud->model->getKeyName()}}"
@@ -504,7 +504,7 @@ function selectOption(element, option) {
504504
505505
function bpFieldInitFetchOrCreateElement(element) {
506506
var form = element.closest('form');
507-
var $inlineField = element.attr('data-is-inline');
507+
var $isFieldInline = element.data('field-is-inline');
508508
var $ajax = element.attr('data-field-ajax') == 'true' ? true : false;
509509
var $placeholder = element.attr('data-placeholder');
510510
var $minimumInputLength = element.attr('data-minimum-input-length');
@@ -597,7 +597,7 @@ function bpFieldInitFetchOrCreateElement(element) {
597597
}
598598
599599
//Checks if field is not beeing inserted in one inline create modal and setup buttons
600-
if($inlineField == "false") {
600+
if(!$isFieldInline) {
601601
setupInlineCreateButtons(element);
602602
}
603603
@@ -610,6 +610,7 @@ function bpFieldInitFetchOrCreateElement(element) {
610610
allowClear: $allows_null,
611611
ajax: {
612612
url: $dataSource,
613+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body,
613614
type: $method,
614615
dataType: 'json',
615616
delay: $ajaxDelay,

src/resources/views/crud/fields/relationship/relationship_select.blade.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
style="width:100%"
6060
name="{{ $field['name'].($field['multiple']?'[]':'') }}"
6161
data-init-function="bpFieldInitRelationshipSelectElement"
62+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
6263
data-column-nullable="{{ var_export($field['allows_null']) }}"
6364
data-dependencies="{{ isset($field['dependencies'])?json_encode(Arr::wrap($field['dependencies'])): json_encode([]) }}"
6465
data-model-local-key="{{$crud->model->getKeyName()}}"
@@ -146,6 +147,7 @@ function bpFieldInitRelationshipSelectElement(element) {
146147
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse(null);
147148
var $allows_null = (element.attr('data-column-nullable') == 'true') ? true : false;
148149
var $allowClear = $allows_null;
150+
var $isFieldInline = element.data('field-is-inline');
149151
150152
var $item = false;
151153
@@ -175,6 +177,7 @@ function bpFieldInitRelationshipSelectElement(element) {
175177
multiple: $multiple,
176178
placeholder: $placeholder,
177179
allowClear: $allowClear,
180+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body
178181
};
179182
if (!$(element).hasClass("select2-hidden-accessible"))
180183
{

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<select
2323
name="{{ $field['name'] }}"
2424
style="width: 100%"
25+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
2526
data-init-function="bpFieldInitSelect2Element"
2627
data-language="{{ str_replace('_', '-', app()->getLocale()) }}"
2728
@include('crud::fields.inc.attributes', ['default_class' => 'form-control select2_field'])
@@ -73,9 +74,13 @@
7374
<script>
7475
function bpFieldInitSelect2Element(element) {
7576
// element will be a jQuery wrapped DOM node
76-
if (!element.hasClass("select2-hidden-accessible")) {
77+
if (!element.hasClass("select2-hidden-accessible"))
78+
{
79+
let $isFieldInline = element.data('field-is-inline');
80+
7781
element.select2({
78-
theme: "bootstrap"
82+
theme: "bootstrap",
83+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body
7984
});
8085
}
8186
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
name="{{ $field['name'] }}"
1616
style="width: 100%"
1717
data-init-function="bpFieldInitSelect2FromAjaxElement"
18+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
1819
data-column-nullable="{{ var_export($field['allows_null']) }}"
1920
data-dependencies="{{ isset($field['dependencies'])?json_encode(Arr::wrap($field['dependencies'])): json_encode([]) }}"
2021
data-placeholder="{{ $field['placeholder'] }}"
@@ -109,6 +110,7 @@ function bpFieldInitSelect2FromAjaxElement(element) {
109110
var $dependencies = JSON.parse(element.attr('data-dependencies'));
110111
var $ajaxDelay = element.attr('data-ajax-delay');
111112
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse(null);
113+
var $isFieldInline = element.data('field-is-inline');
112114
113115
var select2AjaxFetchSelectedEntry = function (element) {
114116
return new Promise(function (resolve, reject) {
@@ -141,6 +143,7 @@ function bpFieldInitSelect2FromAjaxElement(element) {
141143
placeholder: $placeholder,
142144
minimumInputLength: $minimumInputLength,
143145
allowClear: $allowClear,
146+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body,
144147
ajax: {
145148
url: $dataSource,
146149
type: $method,

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
name="{{ $field['name'] }}[]"
1717
style="width: 100%"
1818
data-init-function="bpFieldInitSelect2FromAjaxMultipleElement"
19+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
1920
data-dependencies="{{ isset($field['dependencies'])?json_encode(Arr::wrap($field['dependencies'])): json_encode([]) }}"
2021
data-placeholder="{{ $field['placeholder'] }}"
2122
data-minimum-input-length="{{ $field['minimum_input_length'] }}"
@@ -94,6 +95,7 @@ function bpFieldInitSelect2FromAjaxMultipleElement(element) {
9495
var $dependencies = JSON.parse(element.attr('data-dependencies'));
9596
var $ajaxDelay = element.attr('data-ajax-delay');
9697
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse("[]");
98+
var $isFieldInline = element.data('field-is-inline');
9799
98100
var select2AjaxMultipleFetchSelectedEntries = function (element) {
99101
return new Promise(function (resolve, reject) {
@@ -121,6 +123,7 @@ function bpFieldInitSelect2FromAjaxMultipleElement(element) {
121123
multiple: true,
122124
placeholder: $placeholder,
123125
minimumInputLength: $minimumInputLength,
126+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body,
124127
ajax: {
125128
url: $dataSource,
126129
type: $method,

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
name="{{ $field['name'] }}@if (isset($field['allows_multiple']) && $field['allows_multiple']==true)[]@endif"
99
style="width: 100%"
1010
data-init-function="bpFieldInitSelect2FromArrayElement"
11+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
1112
data-language="{{ str_replace('_', '-', app()->getLocale()) }}"
1213
@include('crud::fields.inc.attributes', ['default_class' => 'form-control select2_from_array'])
1314
@if (isset($field['allows_multiple']) && $field['allows_multiple']==true)multiple @endif
@@ -78,8 +79,11 @@
7879
function bpFieldInitSelect2FromArrayElement(element) {
7980
if (!element.hasClass("select2-hidden-accessible"))
8081
{
82+
let $isFieldInline = element.data('field-is-inline');
83+
8184
element.select2({
82-
theme: "bootstrap"
85+
theme: "bootstrap",
86+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body
8387
}).on('select2:unselect', function(e) {
8488
if ($(this).attr('multiple') && $(this).val().length == 0) {
8589
$(this).val(null).trigger('change');

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
name="{{ $field['name'] }}"
2121
style="width: 100%"
2222
data-init-function="bpFieldInitSelect2GroupedElement"
23+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
2324
data-language="{{ str_replace('_', '-', app()->getLocale()) }}"
2425
@include('crud::fields.inc.attributes', ['default_class' => 'form-control select2_field'])
2526
>
@@ -87,9 +88,12 @@
8788
<script>
8889
function bpFieldInitSelect2GroupedElement(element) {
8990
if (!element.hasClass("select2-hidden-accessible"))
90-
{
91+
{
92+
let $isFieldInline = element.data('field-is-inline');
93+
9194
element.select2({
92-
theme: "bootstrap"
95+
theme: "bootstrap",
96+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body
9397
});
9498
}
9599
}

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

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
name="{{ $field['name'] }}[]"
2222
style="width: 100%"
2323
data-init-function="bpFieldInitSelect2MultipleElement"
24+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
2425
data-select-all="{{ var_export($field['select_all'] ?? false)}}"
2526
data-options-for-js="{{json_encode(array_values($options_ids_array))}}"
2627
data-language="{{ str_replace('_', '-', app()->getLocale()) }}"
@@ -81,23 +82,26 @@ function bpFieldInitSelect2MultipleElement(element) {
8182
8283
var $select_all = element.attr('data-select-all');
8384
if (!element.hasClass("select2-hidden-accessible"))
84-
{
85-
var $obj = element.select2({
86-
theme: "bootstrap"
87-
});
85+
{
86+
let $isFieldInline = element.data('field-is-inline');
87+
88+
var $obj = element.select2({
89+
theme: "bootstrap",
90+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body
91+
});
92+
93+
//get options ids stored in the field.
94+
var options = JSON.parse(element.attr('data-options-for-js'));
8895
89-
//get options ids stored in the field.
90-
var options = JSON.parse(element.attr('data-options-for-js'));
91-
92-
if($select_all) {
93-
element.parent().find('.clear').on("click", function () {
94-
$obj.val([]).trigger("change");
95-
});
96-
element.parent().find('.select_all').on("click", function () {
97-
$obj.val(options).trigger("change");
98-
});
99-
}
96+
if($select_all) {
97+
element.parent().find('.clear').on("click", function () {
98+
$obj.val([]).trigger("change");
99+
});
100+
element.parent().find('.select_all').on("click", function () {
101+
$obj.val(options).trigger("change");
102+
});
100103
}
104+
}
101105
}
102106
</script>
103107
@endpush

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ function echoSelect2NestedChildren($entity, $field, $current_value)
4646
name="{{ $field['name'] }}"
4747
style="width: 100%"
4848
data-init-function="bpFieldInitSelect2NestedElement"
49+
data-field-is-inline="{{var_export($inlineCreate ?? false)}}"
4950
data-language="{{ str_replace('_', '-', app()->getLocale()) }}"
5051
@include('crud::fields.inc.attributes', ['default_class' => 'form-control select2_field'])
5152
>
@@ -101,8 +102,11 @@ function echoSelect2NestedChildren($entity, $field, $current_value)
101102
function bpFieldInitSelect2NestedElement(element) {
102103
if (!element.hasClass("select2-hidden-accessible"))
103104
{
105+
let $isFieldInline = element.data('field-is-inline');
106+
104107
element.select2({
105-
theme: "bootstrap"
108+
theme: "bootstrap",
109+
dropdownParent: $isFieldInline ? $('#inline-create-dialog .modal-content') : document.body
106110
});
107111
}
108112
}

0 commit comments

Comments
 (0)