22
33namespace Ark4ne \JsonApi \Resources \Concerns ;
44
5+ use Ark4ne \JsonApi \Descriptors \Relations \Relation ;
56use Ark4ne \JsonApi \Descriptors \Resolver ;
67use Ark4ne \JsonApi \Descriptors \Values \Value ;
8+ use Ark4ne \JsonApi \Resources \Relationship ;
79use Ark4ne \JsonApi \Support \Config ;
810use Ark4ne \JsonApi \Support \Values ;
911use Illuminate \Http \Request ;
@@ -16,46 +18,61 @@ trait PrepareData
1618 /**
1719 * @template TKey as array-key
1820 * @template TValue
19-
2021 * @param iterable<TKey, TValue> $data
2122 *
2223 * @return iterable<TKey, TValue>
2324 */
24- protected function mergeValues (iterable $ data ) : iterable {
25+ protected function mergeValues (iterable $ data ): iterable
26+ {
2527
2628 return Values::mergeValues ($ data );
2729 }
2830
2931 /**
3032 * @template TKey as array-key
3133 * @template TValue
32-
3334 * @param iterable<TKey, TValue> $data
3435 *
3536 * @return iterable<TKey, TValue>
3637 */
37- protected function autoWhenHas (iterable $ data ): iterable
38+ protected function autoWhenHas (iterable $ data , string $ for ): iterable
39+ {
40+ $ autoWhenHas = $ this ->autoWhenHas ?? null ;
41+
42+ if ($ autoWhenHas || (Config::autoWhenHas ($ for ) && $ autoWhenHas !== false )) {
43+ (new Collection ($ data ))
44+ ->each (fn ($ value , int |string $ key ) => $ value instanceof Value
45+ ? $ value ->autoWhenHas ()
46+ : $ value );
47+ }
48+
49+ return $ data ;
50+ }
51+
52+ protected function autoWhenIncluded (iterable $ data ): iterable
3853 {
39- if (!Config::$ autoWhenHas ) {
40- return $ data ;
54+ $ autoWhenIncluded = $ this ->autoWhenIncluded ?? null ;
55+
56+ if ($ autoWhenIncluded || (Config::$ autoWhenIncluded && $ autoWhenIncluded !== false )) {
57+ (new Collection ($ data ))
58+ ->each (fn ($ relation , int |string $ key ) => $ relation instanceof Relation || $ relation instanceof Relationship
59+ ? $ relation ->whenIncluded ()
60+ : $ relation );
4161 }
4262
43- return (new Collection ($ data ))
44- ->map (fn ($ value , int |string $ key ) => $ value instanceof Value
45- ? $ value ->whenHas ()
46- : $ this ->whenHas ($ key , $ value ));
63+ return $ data ;
4764 }
4865
4966 /**
67+ * @param \Illuminate\Http\Request $request
68+ * @param iterable<TKey, TValue>|null $data
69+ *
70+ * @return iterable<TKey, TValue>
5071 * @deprecated
5172 *
5273 * @template TKey as array-key
5374 * @template TValue
5475 *
55- * @param \Illuminate\Http\Request $request
56- * @param iterable<TKey, TValue>|null $data
57- *
58- * @return iterable<TKey, TValue>
5976 */
6077 protected function prepareData (Request $ request , ?iterable $ data ): iterable
6178 {
0 commit comments