Project

General

Profile

Bug #93270

Updated by Benjamin Franzke about 3 years ago

If BroadcastMessage is recreated using @BroadcastMessage.fromData()@ it does not retain the original object structure. This is because @BroadcastMessage.fromData()@ nests the entrire data (which includes a @payload@ property itself) into another wrapping @payload@ property. 

 Given following JavaScript code (executable in a Browser console in a window of the TYPO3 Backend): 

 <pre><code class="javascript"> 
 window.require(['TYPO3/CMS/Backend/BroadcastMessage'], ({BroadcastMessage}) => { 
   const bm1 = new BroadcastMessage('component', 'eventName', {foo: 'bar'}) 
   // Create bm2 from bm1, as if bm1 has been sent via broadcastchannel 
   const bm2 = BroadcastMessage.fromData(bm1) 
   console.log('bm1', bm1.payload) 
   console.log('bm2', bm2.payload) 
 }) 
 </code></pre> 

 The expected result/output is that @payload@ contains the same value for both @BroadcastMessage@ instances: 
 <pre> 
 bm1 {foo: "bar"} 
 bm2 {foo: "bar"} 
 </pre> 

 While it actually is: 
 <pre> 
 bm1 {foo: "bar"} 
 bm2 {payload: {payload: {foo: "bar"}} 
 </pre> 

 @BroadcastMessage.fromData()@ should be fixed to be idempotent, while keeping backwards compatibility (to existing event-subscribers) by doing the "additional" payload wrapping in @BroadcastMessage.createCustomEvent@. The "good" thing is, that BroadcastMessage isn't used directly by subscribers, it is transformed into a @CustomEvent@, therefore this can be fixed without breaking BC.

Back