Skip to content

Commit c0ef6e5

Browse files
committed
fix: Error recover/retry buttons should reset error state
1 parent 4c27551 commit c0ef6e5

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

src/room/GroupCallErrorBoundary.test.tsx

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@ Please see LICENSE in the repository root for full details.
77

88
import { describe, expect, test, vi } from "vitest";
99
import { render, screen } from "@testing-library/react";
10-
import { type ReactElement, type ReactNode } from "react";
10+
import {
11+
type FC,
12+
type ReactElement,
13+
type ReactNode,
14+
useCallback,
15+
useState,
16+
} from "react";
1117
import { BrowserRouter } from "react-router-dom";
1218
import userEvent from "@testing-library/user-event";
1319

@@ -131,6 +137,42 @@ test("should have a reconnect button for ConnectionLostError", async () => {
131137
expect(reconnectCallback).toHaveBeenCalledWith("reconnect");
132138
});
133139

140+
test("Action handling should reset error state", async () => {
141+
const user = userEvent.setup();
142+
143+
const TestComponent: FC<{ fail: boolean }> = ({ fail }): ReactNode => {
144+
if (fail) {
145+
throw new ConnectionLostError();
146+
}
147+
return <div>HELLO</div>;
148+
};
149+
150+
const WrapComponent = (): ReactNode => {
151+
const [failState, setFailState] = useState(true);
152+
const reconnectCallback = useCallback(() => {
153+
setFailState(false);
154+
}, [setFailState]);
155+
156+
return (
157+
<BrowserRouter>
158+
<GroupCallErrorBoundary recoveryActionHandler={reconnectCallback}>
159+
<TestComponent fail={failState} />
160+
</GroupCallErrorBoundary>
161+
</BrowserRouter>
162+
);
163+
};
164+
165+
render(<WrapComponent />);
166+
167+
// Should fail first
168+
await screen.findByText("Connection lost");
169+
170+
await user.click(screen.getByRole("button", { name: "Reconnect" }));
171+
172+
// reconnect should have reset the error, thus rendering should be ok
173+
await screen.findByText("HELLO");
174+
});
175+
134176
describe("Rageshake button", () => {
135177
function setupTest(testError: ElementCallError): void {
136178
mockConfig({

src/room/GroupCallErrorBoundary.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ export const GroupCallErrorBoundary = ({
120120
<ErrorPage
121121
error={callError}
122122
resetError={resetError}
123-
recoveryActionHandler={recoveryActionHandler}
123+
recoveryActionHandler={(action: CallErrorRecoveryAction) => {
124+
resetError();
125+
recoveryActionHandler?.(action);
126+
}}
124127
/>
125128
);
126129
},

0 commit comments

Comments
 (0)