2525 */ 
2626final  class  ComponentFactory implements  ResetInterface
2727{
28-     private  static   array  $ mountMethods  = [];
28+     private  array  $ mountMethods  = [];
2929
3030    /** 
3131     * @param array<string, array>        $config 
3232     * @param array<class-string, string> $classMap 
33-      * @param array<class-string, array<string, string[]> $classMounts 
3433     */ 
3534    public  function  __construct (
3635        private  ComponentTemplateFinderInterface   $ componentTemplateFinder ,
3736        private  ServiceLocator   $ components ,
3837        private  PropertyAccessorInterface   $ propertyAccessor ,
3938        private  EventDispatcherInterface   $ eventDispatcher ,
4039        private  array  $ config ,
41-         private  array  $ classMap ,
40+         private  readonly   array  $ classMap ,
4241    ) {
4342    }
4443
@@ -88,22 +87,23 @@ public function create(string $name, array $data = []): MountedComponent
8887    public  function  mountFromObject (object   $ component , array  $ data , ComponentMetadata   $ componentMetadata ): MountedComponent 
8988    {
9089        $ originalData  = $ data ;
91-         $ data  = $ this  ->preMount ($ component , $ data , $ componentMetadata );
90+         $ event  = $ this  ->preMount ($ component , $ data , $ componentMetadata );
91+         $ data  = $ event ->getData ();
9292
9393        $ this  ->mount ($ component , $ data , $ componentMetadata );
9494
95-         // set data that wasn't set in mount on the component directly 
96-         foreach  ($ data  as  $ property  => $ value ) {
97-             if  ($ this  ->propertyAccessor ->isWritable ($ component , $ property )) {
98-                 $ this  ->propertyAccessor ->setValue ($ component , $ property , $ value );
99- 
100-                 unset($ data [$ property ]);
95+         if  (!$ componentMetadata ->isAnonymous ()) {
96+             // set data that wasn't set in mount on the component directly 
97+             foreach  ($ data  as  $ property  => $ value ) {
98+                 if  ($ this  ->propertyAccessor ->isWritable ($ component , $ property )) {
99+                     $ this  ->propertyAccessor ->setValue ($ component , $ property , $ value );
100+                     unset($ data [$ property ]);
101+                 }
101102            }
102103        }
103104
104105        $ postMount  = $ this  ->postMount ($ component , $ data , $ componentMetadata );
105-         $ data  = $ postMount ['data ' ];
106-         $ extraMetadata  = $ postMount ['extraMetadata ' ];
106+         $ data  = $ postMount ->getData ();
107107
108108        // create attributes from "attributes" key if exists 
109109        $ attributesVar  = $ componentMetadata ->getAttributesVar ();
@@ -120,9 +120,9 @@ public function mountFromObject(object $component, array $data, ComponentMetadat
120120        return  new  MountedComponent (
121121            $ componentMetadata ->getName (),
122122            $ component ,
123-             new  ComponentAttributes (array_merge ( $ attributes , $ data) ),
123+             new  ComponentAttributes ([... $ attributes , ... $ data] ),
124124            $ originalData ,
125-             $ extraMetadata  ,
125+             $ postMount -> getExtraMetadata () ,
126126        );
127127    }
128128
@@ -154,7 +154,7 @@ private function mount(object $component, array &$data, ComponentMetadata $compo
154154            return ;
155155        }
156156
157-         $ mount  = self :: $ mountMethods [$ component ::class] ??= (new  \ReflectionClass ($ component ))->getMethod ('mount ' );
157+         $ mount  = $ this -> mountMethods [$ component ::class] ??= (new  \ReflectionClass ($ component ))->getMethod ('mount ' );
158158
159159        $ parameters  = [];
160160        foreach  ($ mount ->getParameters () as  $ refParameter ) {
@@ -172,40 +172,34 @@ private function mount(object $component, array &$data, ComponentMetadata $compo
172172        $ mount ->invoke ($ component , ...$ parameters );
173173    }
174174
175-     private  function  preMount (object   $ component , array  $ data , ComponentMetadata   $ componentMetadata ): array 
175+     private  function  preMount (object   $ component , array  $ data , ComponentMetadata   $ componentMetadata ): PreMountEvent 
176176    {
177177        $ event  = new  PreMountEvent ($ component , $ data , $ componentMetadata );
178178        $ this  ->eventDispatcher ->dispatch ($ event );
179-         $ data  = $ event ->getData ();
180179
180+         $ data  = $ event ->getData ();
181181        foreach  ($ componentMetadata ->getPreMounts () as  $ preMount ) {
182182            if  (null  !== $ newData  = $ component ->$ preMount ($ data )) {
183-                 $ data  = $ newData ;
183+                 $ event -> setData ( $ data  = $ newData) ;
184184            }
185185        }
186186
187-         return  $ data  ;
187+         return  $ event  ;
188188    }
189189
190-     /** 
191-      * @return array{data: array<string, mixed>, extraMetadata: array<string, mixed>} 
192-      */ 
193-     private  function  postMount (object   $ component , array  $ data , ComponentMetadata   $ componentMetadata ): array 
190+     private  function  postMount (object   $ component , array  $ data , ComponentMetadata   $ componentMetadata ): PostMountEvent 
194191    {
195192        $ event  = new  PostMountEvent ($ component , $ data , $ componentMetadata );
196193        $ this  ->eventDispatcher ->dispatch ($ event );
197-         $ data  = $ event ->getData ();
198194
195+         $ data  = $ event ->getData ();
199196        foreach  ($ componentMetadata ->getPostMounts () as  $ postMount ) {
200197            if  (null  !== $ newData  = $ component ->$ postMount ($ data )) {
201-                 $ data  = $ newData ;
198+                 $ event -> setData ( $ data  = $ newData) ;
202199            }
203200        }
204201
205-         return  [
206-             'data '  => $ data ,
207-             'extraMetadata '  => $ event ->getExtraMetadata (),
208-         ];
202+         return  $ event ;
209203    }
210204
211205    /** 
@@ -244,6 +238,6 @@ private function throwUnknownComponentException(string $name): void
244238
245239    public  function  reset (): void 
246240    {
247-         self :: $ mountMethods  = [];
241+         $ this -> mountMethods  = [];
248242    }
249243}
0 commit comments