Skip to content

Commit 6ce75a4

Browse files
committed
Merge branch 'add-backwards-compatible-javascript-coallescing'
2 parents f4a6ad9 + 6f5afa3 commit 6ce75a4

File tree

5 files changed

+62
-15
lines changed

5 files changed

+62
-15
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ function bpFieldInitFetchElement(element) {
186186
var $dependencies = JSON.parse(element.attr('data-dependencies'));
187187
var $allows_null = element.attr('data-column-nullable') == 'true' ? true : false;
188188
var $appLang = element.attr('data-app-current-lang');
189-
var $selectedOptions = JSON.parse(element.attr('data-selected-options') ?? null);
189+
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse(null);
190190
var $multiple = element.prop('multiple');
191191
192192
var FetchAjaxFetchSelectedEntry = function (element) {

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

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,19 @@
7171
7272
//route to modal
7373
$field['inline_create']['modal_route'] = route($field['inline_create']['entity']."-inline-create");
74+
75+
//include main form fields in the request when asking for modal data,
76+
//allow the developer to modify the inline create modal
77+
//based on some field on the main form
78+
$field['inline_create']['include_main_form_fields'] = $field['inline_create']['include_main_form_fields'] ?? false;
79+
80+
if($field['inline_create']['include_main_form_fields'] !== false || $field['inline_create']['include_main_form_fields'] !== true) {
81+
if(is_array($field['inline_create']['include_main_form_fields'])) {
82+
$field['inline_create']['include_main_form_fields'] = json_encode($field['inline_create']['include_main_form_fields']);
83+
}else{
84+
$field['inline_create']['include_main_form_fields'] = json_encode([$field['inline_create']['include_main_form_fields']]);
85+
}
86+
}
7487
}
7588
}
7689
@@ -105,6 +118,7 @@
105118
data-field-ajax="{{var_export($field['ajax'])}}"
106119
data-inline-modal-class="{{ $field['inline_create']['modal_class'] }}"
107120
data-app-current-lang="{{ app()->getLocale() }}"
121+
data-include-main-form-fields="{{$field['inline_create']['include_main_form_fields']}}"
108122

109123
@if($activeInlineCreate)
110124
@include('crud::fields.relationship.field_attributes')
@@ -236,6 +250,9 @@ function setupInlineCreateButtons(element) {
236250
var $inlineModalRoute = element.attr('data-inline-modal-route');
237251
var $inlineModalClass = element.attr('data-inline-modal-class');
238252
var $parentLoadedFields = element.attr('data-parent-loaded-fields');
253+
var $includeMainFormFields = element.attr('data-include-main-form-fields');
254+
var $form = element.closest('form');
255+
239256
$inlineCreateButtonElement.on('click', function () {
240257
241258
//we change button state so users know something is happening.
@@ -245,14 +262,44 @@ function setupInlineCreateButtons(element) {
245262
$inlineCreateButtonElement.html(loadingText);
246263
247264
265+
}
266+
//prepare main form fields to be submited in case there are some.
267+
//if result is "1" it means all form fields will be passed, developer passed "true".
268+
if($includeMainFormFields == 1) {
269+
var $toPass = $form.serializeArray();
270+
$includeMainFormFields = true;
271+
}else{
272+
$fields = JSON.parse($includeMainFormFields);
273+
$serializedForm = $form.serializeArray();
274+
var $toPass = [];
275+
$fields.forEach(function(value, index) {
276+
$valueFromForm = $serializedForm.filter(field => field.name === value);
277+
$toPass.push($valueFromForm[0]);
278+
279+
});
280+
//if it's undefined here, developer passed false.
281+
if(typeof $toPass[0] === "undefined") {
282+
$includeMainFormFields = false;
283+
}
248284
}
249285
$.ajax({
250286
url: $inlineModalRoute,
251-
data: {
252-
'entity': $fieldEntity,
253-
'modal_class' : $inlineModalClass,
254-
'parent_loaded_fields' : $parentLoadedFields,
255-
},
287+
data: (function() {
288+
if($includeMainFormFields) {
289+
return {
290+
'entity': $fieldEntity,
291+
'modal_class' : $inlineModalClass,
292+
'parent_loaded_fields' : $parentLoadedFields,
293+
'main_form_fields' : $toPass
294+
};
295+
}else{
296+
return {
297+
'entity': $fieldEntity,
298+
'modal_class' : $inlineModalClass,
299+
'parent_loaded_fields' : $parentLoadedFields
300+
};
301+
}
302+
})(),
256303
type: 'POST',
257304
success: function (result) {
258305
$('body').append(result);
@@ -463,7 +510,7 @@ function bpFieldInitFetchOrCreateElement(element) {
463510
var $modelKey = element.attr('data-model-local-key');
464511
var $allows_null = (element.attr('data-allows-null') == 'true') ? true : false;
465512
var $appLang = element.attr('data-app-current-lang');
466-
var $selectedOptions = JSON.parse(element.attr('data-selected-options') ?? null);
513+
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse(null);
467514
var $multiple = element.prop('multiple');
468515
469516
var FetchOrCreateAjaxFetchSelectedEntry = function (element) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ function bpFieldInitRelationshipSelectElement(element) {
143143
var $includeAllFormFields = element.attr('data-include-all-form-fields') == 'false' ? false : true;
144144
var $dependencies = JSON.parse(element.attr('data-dependencies'));
145145
var $multiple = element.attr('data-field-multiple') == 'false' ? false : true;
146-
var $selectedOptions = JSON.parse(element.attr('data-selected-options') ?? null);
146+
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse(null);
147147
var $allows_null = (element.attr('data-column-nullable') == 'true') ? true : false;
148148
var $allowClear = $allows_null;
149149

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ function bpFieldInitSelect2FromAjaxElement(element) {
108108
var $allowClear = element.attr('data-column-nullable') == 'true' ? true : false;
109109
var $dependencies = JSON.parse(element.attr('data-dependencies'));
110110
var $ajaxDelay = element.attr('data-ajax-delay');
111-
var $selectedOptions = JSON.parse(element.attr('data-selected-options') ?? null);
111+
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse(null);
112112
113113
var select2AjaxFetchSelectedEntry = function (element) {
114114
return new Promise(function (resolve, reject) {
@@ -184,11 +184,11 @@ function bpFieldInitSelect2FromAjaxElement(element) {
184184
185185
// if we have selected options here we are on a repeatable field, we need to fetch the options with the keys
186186
// we have stored from the field and append those options in the select.
187-
if (typeof $selectedOptions !== typeof undefined &&
188-
$selectedOptions !== false &&
189-
$selectedOptions != '' &&
190-
$selectedOptions != null &&
191-
$selectedOptions != [])
187+
if (typeof $selectedOptions !== typeof undefined &&
188+
$selectedOptions !== false &&
189+
$selectedOptions != '' &&
190+
$selectedOptions != null &&
191+
$selectedOptions != [])
192192
{
193193
var optionsForSelect = [];
194194
select2AjaxFetchSelectedEntry(element).then(result => {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ function bpFieldInitSelect2FromAjaxMultipleElement(element) {
9292
var $allowClear = element.attr('data-column-nullable') == 'true' ? true : false;
9393
var $dependencies = JSON.parse(element.attr('data-dependencies'));
9494
var $ajaxDelay = element.attr('data-ajax-delay');
95-
var $selectedOptions = JSON.parse(element.attr('data-selected-options') ?? '[]');
95+
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse("[]");
9696
9797
var select2AjaxMultipleFetchSelectedEntries = function (element) {
9898
return new Promise(function (resolve, reject) {

0 commit comments

Comments
 (0)