|
1 | 1 | <!-- select2 multiple --> |
2 | 2 | @php |
3 | 3 | if (!isset($field['options'])) { |
4 | | - $options = $field['model']::all(); |
| 4 | + $field['options'] = $field['model']::all(); |
5 | 5 | } else { |
6 | | - $options = call_user_func($field['options'], $field['model']::query()); |
| 6 | + $field['options'] = call_user_func($field['options'], $field['model']::query()); |
7 | 7 | } |
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'] = isset($field['multiple']) && $field['multiple']===false ? '': 'multiple'; |
9 | 14 | @endphp |
10 | 15 |
|
11 | 16 | @include('crud::fields.inc.wrapper_start') |
|
16 | 21 | style="width: 100%" |
17 | 22 | data-init-function="bpFieldInitSelect2MultipleElement" |
18 | 23 | data-select-all="{{ var_export($field['select_all'] ?? false)}}" |
| 24 | + data-options-for-js="{{json_encode(array_values($options_ids_array))}}" |
19 | 25 | @include('crud::fields.inc.attributes', ['default_class' => 'form-control select2_multiple']) |
20 | 26 | {{$multiple}}> |
21 | 27 |
|
|
24 | 30 | @endif |
25 | 31 |
|
26 | 32 | @if (isset($field['model'])) |
27 | | - @foreach ($options as $option) |
| 33 | + @foreach ($field['options'] as $option) |
28 | 34 | @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()))) |
29 | 35 | <option value="{{ $option->getKey() }}" selected>{{ $option->{$field['attribute']} }}</option> |
30 | 36 | @else |
|
72 | 78 | function bpFieldInitSelect2MultipleElement(element) { |
73 | 79 |
|
74 | 80 | var $select_all = element.attr('data-select-all'); |
75 | | -
|
76 | 81 | if (!element.hasClass("select2-hidden-accessible")) |
77 | 82 | { |
78 | 83 | var $obj = element.select2({ |
79 | 84 | theme: "bootstrap" |
80 | 85 | }); |
81 | 86 |
|
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')); |
88 | 89 |
|
89 | 90 | if($select_all) { |
90 | 91 | element.parent().find('.clear').on("click", function () { |
|
0 commit comments