@@ -238,7 +238,28 @@ public function mapRelated(Request $request, Model $model, Model $related): arra
238238
239239 $ pivot ->setRelation ('related ' , $ related );
240240
241- return parent ::mapRelated ($ request , $ model , $ pivot );
241+ return [
242+ 'id ' => $ related ->getKey (),
243+ 'model ' => $ pivot ,
244+ 'url ' => $ this ->relatedUrl ($ pivot ),
245+ 'fields ' => $ this ->resolveFields ($ request )
246+ ->subResource (false )
247+ ->authorized ($ request , $ related )
248+ ->visible ('index ' )
249+ ->mapToDisplay ($ request , $ pivot ),
250+ 'abilities ' => $ this ->mapRelatedAbilities ($ request , $ model , $ related ),
251+ ];
252+ }
253+
254+ /**
255+ * Get the related URL.
256+ */
257+ public function relatedUrl (Model $ related ): string
258+ {
259+ return match (true ) {
260+ $ related instanceof Pivot => sprintf ('%s/%s ' , $ this ->modelUrl ($ related ->pivotParent ), $ related ->getKey ()),
261+ default => parent ::relatedUrl ($ related ),
262+ };
242263 }
243264
244265 /**
@@ -316,15 +337,17 @@ public function toCreate(Request $request, Model $model): array
316337
317338 $ pivot ->setRelation ('related ' , $ relation ->make ());
318339
319- return array_merge (parent ::toCreate ($ request , $ model ), [
340+ return array_merge ($ this ->toSubResource ($ request , $ model ), [
341+ 'template ' => 'root::resources.form ' ,
320342 'title ' => __ ('Attach :model ' , ['model ' => $ this ->getRelatedName ()]),
321343 'model ' => $ pivot ,
322344 'action ' => $ this ->modelUrl ($ model ),
323345 'method ' => 'POST ' ,
346+ 'uploads ' => $ this ->hasFileField ($ request ),
324347 'fields ' => $ this ->resolveFields ($ request )
325348 ->subResource (false )
326349 ->authorized ($ request , $ pivot )
327- ->visible ('relation. create ' )
350+ ->visible ('create ' )
328351 ->mapToInputs ($ request , $ pivot ),
329352 ]);
330353 }
@@ -340,7 +363,26 @@ public function toShow(Request $request, Model $model, Model $related): array
340363
341364 $ pivot ->setRelation ('related ' , $ related );
342365
343- return parent ::toShow ($ request , $ model , $ pivot );
366+ return array_merge ($ this ->toSubResource ($ request , $ model ), [
367+ 'template ' => 'root::resources.show ' ,
368+ 'title ' => $ this ->resolveDisplay ($ related ),
369+ 'model ' => $ pivot ,
370+ 'action ' => $ this ->relatedUrl ($ pivot ),
371+ 'fields ' => $ this ->resolveFields ($ request )
372+ ->subResource (false )
373+ ->authorized ($ request , $ related )
374+ ->visible ('show ' )
375+ ->mapToDisplay ($ request , $ pivot ),
376+ 'actions ' => $ this ->resolveActions ($ request )
377+ ->authorized ($ request , $ related )
378+ ->visible ('show ' )
379+ ->standalone (false )
380+ ->mapToForms ($ request , $ pivot ),
381+ 'abilities ' => array_merge (
382+ $ this ->mapRelationAbilities ($ request , $ model ),
383+ $ this ->mapRelatedAbilities ($ request , $ model , $ related )
384+ ),
385+ ]);
344386 }
345387
346388 /**
@@ -354,6 +396,22 @@ public function toEdit(Request $request, Model $model, Model $related): array
354396
355397 $ pivot ->setRelation ('related ' , $ related );
356398
357- return parent ::toEdit ($ request , $ model , $ pivot );
399+ return array_merge ($ this ->toSubResource ($ request , $ model ), [
400+ 'template ' => 'root::resources.form ' ,
401+ 'title ' => __ ('Edit :model ' , ['model ' => $ this ->resolveDisplay ($ related )]),
402+ 'model ' => $ pivot ,
403+ 'action ' => $ this ->relatedUrl ($ pivot ),
404+ 'method ' => 'PATCH ' ,
405+ 'uploads ' => $ this ->hasFileField ($ request ),
406+ 'fields ' => $ this ->resolveFields ($ request )
407+ ->subResource (false )
408+ ->authorized ($ request , $ related )
409+ ->visible ('update ' )
410+ ->mapToInputs ($ request , $ pivot ),
411+ 'abilities ' => array_merge (
412+ $ this ->mapRelationAbilities ($ request , $ model ),
413+ $ this ->mapRelatedAbilities ($ request , $ model , $ related )
414+ ),
415+ ]);
358416 }
359417}
0 commit comments