Skip to content

Commit 6c751de

Browse files
authored
Merge pull request #3042 from Laravel-Backpack/fix-select-all-select2-multiple
[4.X] Fix Select All in select2 multiple fields
2 parents aea59bc + 404d701 commit 6c751de

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
<!-- select2 multiple -->
22
@php
33
if (!isset($field['options'])) {
4-
$options = $field['model']::all();
4+
$field['options'] = $field['model']::all();
55
} else {
6-
$options = call_user_func($field['options'], $field['model']::query());
6+
$field['options'] = call_user_func($field['options'], $field['model']::query());
77
}
8-
$multiple = isset($field['multiple']) && $field['multiple']===false ? '': 'multiple';
8+
9+
//build option keys array to use with Select All in javascript.
10+
$model_instance = new $field['model'];
11+
$options_ids_array = $field['options']->pluck($model_instance->getKeyName())->toArray();
12+
13+
$field['multiple'] = $field['multiple'] ?? true;
914
@endphp
1015

1116
@include('crud::fields.inc.wrapper_start')
@@ -16,15 +21,16 @@
1621
style="width: 100%"
1722
data-init-function="bpFieldInitSelect2MultipleElement"
1823
data-select-all="{{ var_export($field['select_all'] ?? false)}}"
24+
data-options-for-js="{{json_encode(array_values($options_ids_array))}}"
1925
@include('crud::fields.inc.attributes', ['default_class' => 'form-control select2_multiple'])
20-
{{$multiple}}>
26+
{{ $field['multiple'] ? 'multiple' : '' }}>
2127

2228
@if (isset($field['allows_null']) && $field['allows_null']==true)
2329
<option value="">-</option>
2430
@endif
2531

2632
@if (isset($field['model']))
27-
@foreach ($options as $option)
33+
@foreach ($field['options'] as $option)
2834
@if( (old(square_brackets_to_dots($field["name"])) && in_array($option->getKey(), old($field["name"]))) || (is_null(old(square_brackets_to_dots($field["name"]))) && isset($field['value']) && in_array($option->getKey(), $field['value']->pluck($option->getKeyName(), $option->getKeyName())->toArray())))
2935
<option value="{{ $option->getKey() }}" selected>{{ $option->{$field['attribute']} }}</option>
3036
@else
@@ -72,19 +78,14 @@
7278
function bpFieldInitSelect2MultipleElement(element) {
7379
7480
var $select_all = element.attr('data-select-all');
75-
7681
if (!element.hasClass("select2-hidden-accessible"))
7782
{
7883
var $obj = element.select2({
7984
theme: "bootstrap"
8085
});
8186
82-
var options = [];
83-
@if (count($options))
84-
@foreach ($options as $option)
85-
options.push('{{ $option->getKey() }}');
86-
@endforeach
87-
@endif
87+
//get options ids stored in the field.
88+
var options = JSON.parse(element.attr('data-options-for-js'));
8889
8990
if($select_all) {
9091
element.parent().find('.clear').on("click", function () {

0 commit comments

Comments
 (0)