mirror of
https://github.com/Novaloop-AG/healthchat-web.git
synced 2026-11-07 06:58:25 +00:00
Ensure we react to RTC transport changes in useRoomCall (#31691)
This commit is contained in:
@@ -116,9 +116,12 @@ export const useRoomCall = (
|
|||||||
return SdkConfig.get("element_call").use_exclusively;
|
return SdkConfig.get("element_call").use_exclusively;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const serverIsConfiguredForElementCall = CallStore.instance
|
const serverIsConfiguredForElementCall = useEventEmitterState(
|
||||||
.getConfiguredRTCTransports()
|
CallStore.instance,
|
||||||
.some((s) => s.type === "livekit" && s.livekit_service_url);
|
CallStoreEvent.TransportsUpdated,
|
||||||
|
() =>
|
||||||
|
CallStore.instance.getConfiguredRTCTransports().some((s) => s.type === "livekit" && s.livekit_service_url),
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (useElementCallExclusively && !serverIsConfiguredForElementCall) {
|
if (useElementCallExclusively && !serverIsConfiguredForElementCall) {
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ export enum CallStoreEvent {
|
|||||||
Call = "call",
|
Call = "call",
|
||||||
// Signals a change in the active calls
|
// Signals a change in the active calls
|
||||||
ConnectedCalls = "connected_calls",
|
ConnectedCalls = "connected_calls",
|
||||||
|
// Signals a change in the configured RTC transports.
|
||||||
|
TransportsUpdated = "transports_updated",
|
||||||
}
|
}
|
||||||
|
|
||||||
export class CallStore extends AsyncStoreWithClient<EmptyObject> {
|
export class CallStore extends AsyncStoreWithClient<EmptyObject> {
|
||||||
@@ -53,6 +55,7 @@ export class CallStore extends AsyncStoreWithClient<EmptyObject> {
|
|||||||
*/
|
*/
|
||||||
protected async fetchTransports(): Promise<void> {
|
protected async fetchTransports(): Promise<void> {
|
||||||
if (!this.matrixClient) return;
|
if (!this.matrixClient) return;
|
||||||
|
this.configuredMatrixRTCTransports.clear();
|
||||||
// Prefer checking the proper endpoint for transports.
|
// Prefer checking the proper endpoint for transports.
|
||||||
try {
|
try {
|
||||||
const transports = await this.matrixClient._unstable_getRTCTransports();
|
const transports = await this.matrixClient._unstable_getRTCTransports();
|
||||||
@@ -70,6 +73,7 @@ export class CallStore extends AsyncStoreWithClient<EmptyObject> {
|
|||||||
if (Array.isArray(foci)) {
|
if (Array.isArray(foci)) {
|
||||||
foci.forEach((foci) => this.configuredMatrixRTCTransports.add(foci));
|
foci.forEach((foci) => this.configuredMatrixRTCTransports.add(foci));
|
||||||
}
|
}
|
||||||
|
this.emit(CallStoreEvent.TransportsUpdated);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async onReady(): Promise<any> {
|
protected async onReady(): Promise<any> {
|
||||||
|
|||||||
@@ -129,5 +129,25 @@ describe("useRoomCall", () => {
|
|||||||
expect(result.current.callOptions).toEqual([PlatformCallType.ElementCall, PlatformCallType.LegacyCall]),
|
expect(result.current.callOptions).toEqual([PlatformCallType.ElementCall, PlatformCallType.LegacyCall]),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it("Ensure handler reacts to transport changes", async () => {
|
||||||
|
// Clear all transports
|
||||||
|
client._unstable_getRTCTransports.mockResolvedValue([]);
|
||||||
|
client.getClientWellKnown.mockReturnValue({});
|
||||||
|
|
||||||
|
await setupAsyncStoreWithClient(CallStore.instance, client);
|
||||||
|
const { result } = render();
|
||||||
|
|
||||||
|
// Ensure Element Call is not a call option.
|
||||||
|
expect(result.current.callOptions).toEqual([PlatformCallType.LegacyCall]);
|
||||||
|
|
||||||
|
// Now enable a transport and ensure that useRoomCall picks it up reactively.
|
||||||
|
client._unstable_getRTCTransports.mockResolvedValue([
|
||||||
|
{ type: "livekit", livekit_service_url: "https://example.org" },
|
||||||
|
]);
|
||||||
|
await setupAsyncStoreWithClient(CallStore.instance, client);
|
||||||
|
await waitFor(() =>
|
||||||
|
expect(result.current.callOptions).toEqual([PlatformCallType.ElementCall, PlatformCallType.LegacyCall]),
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user