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
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 ) {
0 commit comments