Skip to content

Commit d17a882

Browse files
committed
Update TransitionTracker to handle callback errors and adjust keyboard dismiss logic to start transition before subscribing to listeners
1 parent e191958 commit d17a882

4 files changed

Lines changed: 10 additions & 7 deletions

File tree

src/libs/Navigation/TransitionTracker.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import Log from '@libs/Log';
12
import CONST from '@src/CONST';
23

34
type CancelHandle = {cancel: () => void};
@@ -28,12 +29,17 @@ let promiseForNextTransitionStart = new Promise<void>((resolve) => {
2829

2930
/**
3031
* Invokes and removes all pending callbacks.
32+
* Each callback is isolated so that one exception does not prevent the rest from running.
3133
*/
3234
function flushCallbacks(): void {
3335
const callbacks = pendingCallbacks;
3436
pendingCallbacks = [];
3537
for (const callback of callbacks) {
36-
callback();
38+
try {
39+
callback();
40+
} catch (error) {
41+
Log.warn('[TransitionTracker] A pending callback threw an error', {error});
42+
}
3743
}
3844
}
3945

src/utils/keyboard/index.android.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@ const dismiss = (options?: DismissKeyboardOptions): Promise<void> => {
3232
return;
3333
}
3434

35+
TransitionTracker.startTransition();
3536
const subscription = Keyboard.addListener('keyboardDidHide', () => {
3637
resolve();
3738
TransitionTracker.endTransition();
3839
subscription.remove();
3940
});
40-
41-
TransitionTracker.startTransition();
4241
Keyboard.dismiss();
4342

4443
if (options?.afterTransition) {

src/utils/keyboard/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ const dismiss = (options?: DismissKeyboardOptions): Promise<void> => {
3131
return;
3232
}
3333

34+
TransitionTracker.startTransition();
3435
const subscription = Keyboard.addListener('keyboardDidHide', () => {
3536
resolve();
3637
TransitionTracker.endTransition();
3738
subscription.remove();
3839
});
39-
40-
TransitionTracker.startTransition();
4140
Keyboard.dismiss();
4241

4342
if (options?.afterTransition) {

src/utils/keyboard/index.website.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,8 @@ const dismiss = (options?: DismissKeyboardOptions): Promise<void> => {
6464
return resolve();
6565
};
6666

67-
window.visualViewport?.addEventListener('resize', handleDismissResize);
68-
6967
TransitionTracker.startTransition();
68+
window.visualViewport?.addEventListener('resize', handleDismissResize);
7069
Keyboard.dismiss();
7170

7271
if (options?.afterTransition) {

0 commit comments

Comments
 (0)