Run templating on the popout URL too
Fixes https://github.com/vector-im/element-web/issues/15443pull/21833/head
							parent
							
								
									2242e6b8c6
								
							
						
					
					
						commit
						3274e2aed5
					
				|  | @ -74,6 +74,16 @@ class ElementWidget extends Widget { | |||
|         return super.templateUrl; | ||||
|     } | ||||
| 
 | ||||
|     public get popoutTemplateUrl(): string { | ||||
|         if (WidgetType.JITSI.matches(this.type)) { | ||||
|             return WidgetUtils.getLocalJitsiWrapperUrl({ | ||||
|                 forLocalRender: false, // The only important difference between this and templateUrl()
 | ||||
|                 auth: super.rawData?.auth, | ||||
|             }); | ||||
|         } | ||||
|         return this.templateUrl; // use this instead of super to ensure we get appropriate templating
 | ||||
|     } | ||||
| 
 | ||||
|     public get rawData(): IWidgetData { | ||||
|         let conferenceId = super.rawData['conferenceId']; | ||||
|         if (conferenceId === undefined) { | ||||
|  | @ -94,8 +104,8 @@ class ElementWidget extends Widget { | |||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     public getCompleteUrl(params: ITemplateParams): string { | ||||
|         return runTemplate(this.templateUrl, { | ||||
|     public getCompleteUrl(params: ITemplateParams, asPopout=false): string { | ||||
|         return runTemplate(asPopout ? this.popoutTemplateUrl : this.templateUrl, { | ||||
|             // we need to supply a whole widget to the template, but don't have
 | ||||
|             // easy access to the definition the superclass is using, so be sad
 | ||||
|             // and gutwrench it.
 | ||||
|  | @ -109,7 +119,7 @@ class ElementWidget extends Widget { | |||
| 
 | ||||
| export class StopGapWidget extends EventEmitter { | ||||
|     private messaging: ClientWidgetApi; | ||||
|     private mockWidget: Widget; | ||||
|     private mockWidget: ElementWidget; | ||||
|     private scalarToken: string; | ||||
| 
 | ||||
|     constructor(private appTileProps: IAppTileProps) { | ||||
|  | @ -133,12 +143,23 @@ export class StopGapWidget extends EventEmitter { | |||
|      * The URL to use in the iframe | ||||
|      */ | ||||
|     public get embedUrl(): string { | ||||
|         return this.runUrlTemplate({asPopout: false}); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The URL to use in the popout | ||||
|      */ | ||||
|     public get popoutUrl(): string { | ||||
|         return this.runUrlTemplate({asPopout: true}); | ||||
|     } | ||||
| 
 | ||||
|     private runUrlTemplate(opts: {asPopout: boolean} = {asPopout: false}): string { | ||||
|         const templated = this.mockWidget.getCompleteUrl({ | ||||
|             currentRoomId: RoomViewStore.getRoomId(), | ||||
|             currentUserId: MatrixClientPeg.get().getUserId(), | ||||
|             userDisplayName: OwnProfileStore.instance.displayName, | ||||
|             userHttpAvatarUrl: OwnProfileStore.instance.getHttpAvatarUrl(), | ||||
|         }); | ||||
|         }, opts?.asPopout); | ||||
| 
 | ||||
|         // Add in some legacy support sprinkles
 | ||||
|         // TODO: Replace these with proper widget params
 | ||||
|  | @ -158,19 +179,6 @@ export class StopGapWidget extends EventEmitter { | |||
|         return parsed.toString().replace(/%24/g, '$'); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The URL to use in the popout | ||||
|      */ | ||||
|     public get popoutUrl(): string { | ||||
|         if (WidgetType.JITSI.matches(this.mockWidget.type)) { | ||||
|             return WidgetUtils.getLocalJitsiWrapperUrl({ | ||||
|                 forLocalRender: false, | ||||
|                 auth: this.mockWidget.rawData?.auth, | ||||
|             }); | ||||
|         } | ||||
|         return this.embedUrl; | ||||
|     } | ||||
| 
 | ||||
|     public get isManagedByManager(): boolean { | ||||
|         return !!this.scalarToken; | ||||
|     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Travis Ralston
						Travis Ralston