@react-navigation/native 7.3.5 → 7.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,12 @@ import isEqual from 'fast-deep-equal';
5
5
  import * as React from 'react';
6
6
  import { createMemoryHistory } from "./createMemoryHistory.js";
7
7
  import { ServerContext } from "./ServerContext.js";
8
+
9
+ /**
10
+ * History delta already applied by the browser when handling `popstate`
11
+ * The value 'replace' means the delta is unknown, so we can only replace
12
+ */
13
+
8
14
  const getRoutesUntilIndex = state => state.routes.slice(0, state.index + 1);
9
15
 
10
16
  /**
@@ -24,6 +30,9 @@ const findMatchingState = (a, b) => {
24
30
  const bHistoryLength = getHistoryLength(b);
25
31
  const aRoute = a.routes[a.index];
26
32
  const bRoute = b.routes[b.index];
33
+ if (aRoute == null || bRoute == null) {
34
+ return [a, b];
35
+ }
27
36
  const aChildState = aRoute.state;
28
37
  const bChildState = bRoute.state;
29
38
 
@@ -48,7 +57,10 @@ const isPoppingLastEntry = (current, record) => {
48
57
  const currentRoutes = getRoutesUntilIndex(current);
49
58
  const recordRoutes = getRoutesUntilIndex(record);
50
59
  if (currentRoutes.length === recordRoutes.length + 1) {
51
- return recordRoutes.every((route, i) => route.key === currentRoutes[i].key);
60
+ return recordRoutes.every((route, i) => {
61
+ const currentRoute = currentRoutes[i];
62
+ return currentRoute != null && route.key === currentRoute.key;
63
+ });
52
64
  }
53
65
  return false;
54
66
  };
@@ -60,7 +72,9 @@ export const series = cb => {
60
72
  let queue = Promise.resolve();
61
73
  const callback = () => {
62
74
  // eslint-disable-next-line promise/no-callback-in-promise
63
- queue = queue.then(cb);
75
+ queue = queue.then(cb).catch(e => {
76
+ console.error(e);
77
+ });
64
78
  };
65
79
  return callback;
66
80
  };
@@ -146,7 +160,7 @@ export function useLinking(ref, {
146
160
  }, []);
147
161
  const previousIndexRef = React.useRef(undefined);
148
162
  const previousStateRef = React.useRef(undefined);
149
- const pendingPopStatePathRef = React.useRef(undefined);
163
+ const pendingPopStateDeltaRef = React.useRef(undefined);
150
164
  React.useEffect(() => {
151
165
  previousIndexRef.current = history.index;
152
166
  return history.listen(() => {
@@ -161,20 +175,20 @@ export function useLinking(ref, {
161
175
  const index = history.index;
162
176
  const previousIndex = previousIndexRef.current ?? 0;
163
177
  previousIndexRef.current = index;
164
- pendingPopStatePathRef.current = path;
165
178
  const rollbackHistory = () => {
166
179
  const delta = previousIndex - index;
167
180
  if (delta === 0) {
168
181
  return;
169
182
  }
170
- pendingPopStatePathRef.current = undefined;
171
-
183
+ history.go(delta)
172
184
  // eslint-disable-next-line promise/always-return
173
- history.go(delta)?.then(() => {
185
+ ?.then(() => {
174
186
  previousIndexRef.current = history.index;
187
+ }).catch(() => {
188
+ // The navigation was interrupted
175
189
  });
176
190
  };
177
- const rollbackHistoryIfPrevented = callback => {
191
+ const rollbackHistoryIfPrevented = (callback, pendingDelta) => {
178
192
  let removePrevented = false;
179
193
  let actionChangedState = false;
180
194
  const unsubscribeEvent = navigation.addListener('__unsafe_event__', e => {
@@ -197,15 +211,19 @@ export function useLinking(ref, {
197
211
  unsubscribeEvent();
198
212
  unsubscribeAction();
199
213
  }
200
- if (removePrevented && !actionChangedState) {
214
+ if (actionChangedState) {
215
+ // The change may be committed later, e.g. with transitions
216
+ // Remember the delta so it can be subtracted when syncing the commit
217
+ pendingPopStateDeltaRef.current = pendingDelta;
218
+ } else if (removePrevented) {
201
219
  rollbackHistory();
202
220
  }
203
221
  };
204
- const dispatch = action => {
205
- rollbackHistoryIfPrevented(() => navigation.dispatch(action));
222
+ const dispatch = (action, pendingDelta) => {
223
+ rollbackHistoryIfPrevented(() => navigation.dispatch(action), pendingDelta);
206
224
  };
207
- const resetRoot = state => {
208
- rollbackHistoryIfPrevented(() => navigation.resetRoot(state));
225
+ const resetRoot = (state, pendingDelta) => {
226
+ rollbackHistoryIfPrevented(() => navigation.resetRoot(state), pendingDelta);
209
227
  };
210
228
 
211
229
  // When browser back/forward is clicked, we first need to check if state object for this index exists
@@ -216,12 +234,17 @@ export function useLinking(ref, {
216
234
  const currentState = navigation.getRootState();
217
235
  const [currentFocused, recordFocused] = findMatchingState(currentState, record.state);
218
236
  if (previousIndex - index === 1 && currentFocused && recordFocused && isPoppingLastEntry(currentFocused, recordFocused)) {
237
+ const pending = pendingPopStateDeltaRef.current;
238
+
219
239
  // If we detect that the state change is popping the last entry
220
240
  // Dispatch a back action instead of resetting to the state
221
241
  // This makes sure changes to history state since the entry was added don't get lost
222
- dispatch(CommonActions.goBack());
242
+ dispatch(CommonActions.goBack(),
243
+ // Stack on any delta from a previous `popstate` that hasn't committed yet
244
+ pending === 'replace' ? 'replace' : (pending ?? 0) - 1);
223
245
  } else {
224
- resetRoot(record.state);
246
+ // The browser already moved from the current state to the record's state
247
+ resetRoot(record.state, currentFocused && recordFocused ? getHistoryLength(recordFocused) - getHistoryLength(currentFocused) : 'replace');
225
248
  }
226
249
  return;
227
250
  }
@@ -245,21 +268,21 @@ export function useLinking(ref, {
245
268
  const action = getActionFromStateRef.current(state, configRef.current);
246
269
  if (action !== undefined) {
247
270
  try {
248
- dispatch(action);
271
+ dispatch(action, 'replace');
249
272
  } catch (e) {
250
273
  // Ignore any errors from deep linking.
251
274
  // This could happen in case of malformed links, navigation object not being initialized etc.
252
275
  console.warn(`An error occurred when trying to handle the link '${path}': ${typeof e === 'object' && e != null && 'message' in e ? e.message : e}`);
253
276
  }
254
277
  } else {
255
- resetRoot(state);
278
+ resetRoot(state, 'replace');
256
279
  }
257
280
  } else {
258
- resetRoot(state);
281
+ resetRoot(state, 'replace');
259
282
  }
260
283
  } else {
261
284
  // if current path didn't return any state, we should revert to initial state
262
- resetRoot(state);
285
+ resetRoot(state, 'replace');
263
286
  }
264
287
  });
265
288
  }, [enabled, history, ref, validateRoutesNotExistInRootState]);
@@ -327,11 +350,18 @@ export function useLinking(ref, {
327
350
  if (!state) {
328
351
  return;
329
352
  }
330
- const pendingPath = pendingPopStatePathRef.current;
353
+
354
+ // Skip if the state hasn't changed since we last synced it
355
+ // This avoids redundant work when the committed `state` event fires
356
+ // after we already synced from `__unsafe_action__`
357
+ if (previousState === state) {
358
+ return;
359
+ }
331
360
  const route = findFocusedRoute(state);
332
361
  const path = getPathForRoute(route, state);
362
+ const pendingPopStateDelta = pendingPopStateDeltaRef.current;
333
363
  previousStateRef.current = state;
334
- pendingPopStatePathRef.current = undefined;
364
+ pendingPopStateDeltaRef.current = undefined;
335
365
 
336
366
  // To detect the kind of state change, we need to:
337
367
  // - Find the common focused navigation state in previous and current state
@@ -339,10 +369,11 @@ export function useLinking(ref, {
339
369
  // - If no common focused navigation state found, it's a replace
340
370
  const [previousFocusedState, focusedState] = findMatchingState(previousState, state);
341
371
  if (previousFocusedState && focusedState &&
342
- // We should only handle push/pop if path changed from what was in last `popstate`
343
- // Otherwise it's likely a change triggered by `popstate`
344
- path !== pendingPath) {
345
- const historyDelta = getHistoryLength(focusedState) - getHistoryLength(previousFocusedState);
372
+ // If the delta from `popstate` is unknown, we can only replace
373
+ pendingPopStateDelta !== 'replace') {
374
+ const historyDelta = getHistoryLength(focusedState) - getHistoryLength(previousFocusedState) - (
375
+ // Subtract the delta already applied by the browser to sync only the remaining changes
376
+ pendingPopStateDelta ?? 0);
346
377
  if (historyDelta > 0) {
347
378
  // If history length is increased, we should pushState
348
379
  // Note that path might not actually change here, for example, drawer open should pushState
@@ -1 +1 @@
1
- {"version":3,"names":["CommonActions","findFocusedRoute","getActionFromState","getActionFromStateDefault","getPathFromState","getPathFromStateDefault","getStateFromPath","getStateFromPathDefault","useNavigationIndependentTree","isEqual","React","createMemoryHistory","ServerContext","getRoutesUntilIndex","state","routes","slice","index","getHistoryLength","history","length","findMatchingState","a","b","undefined","key","aHistoryLength","bHistoryLength","aRoute","bRoute","aChildState","bChildState","isPoppingLastEntry","current","record","currentRoutes","recordRoutes","every","route","i","series","cb","queue","Promise","resolve","callback","then","linkingHandlers","useLinking","ref","enabled","config","independent","useEffect","process","env","NODE_ENV","console","error","join","trim","handler","Symbol","push","indexOf","splice","useState","enabledRef","useRef","configRef","getStateFromPathRef","getPathFromStateRef","getActionFromStateRef","validateRoutesNotExistInRootState","useCallback","navigation","rootState","getRootState","some","r","routeNames","includes","name","server","useContext","getInitialState","value","location","window","path","pathname","search","e","thenable","onfulfilled","catch","previousIndexRef","previousStateRef","pendingPopStatePathRef","listen","previousIndex","rollbackHistory","delta","go","rollbackHistoryIfPrevented","removePrevented","actionChangedState","unsubscribeEvent","addListener","data","type","defaultPrevented","unsubscribeAction","noop","dispatch","action","resetRoot","get","currentState","currentFocused","recordFocused","goBack","warn","message","getPathForRoute","stateForPath","focusedRoute","params","previousRoute","hash","replace","onStateChange","previousState","pendingPath","previousFocusedState","focusedState","historyDelta","nextIndex","backIndex","currentIndex"],"sourceRoot":"../../src","sources":["useLinking.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CommonActions","findFocusedRoute","getActionFromState","getActionFromStateDefault","getPathFromState","getPathFromStateDefault","getStateFromPath","getStateFromPathDefault","useNavigationIndependentTree","isEqual","React","createMemoryHistory","ServerContext","getRoutesUntilIndex","state","routes","slice","index","getHistoryLength","history","length","findMatchingState","a","b","undefined","key","aHistoryLength","bHistoryLength","aRoute","bRoute","aChildState","bChildState","isPoppingLastEntry","current","record","currentRoutes","recordRoutes","every","route","i","currentRoute","series","cb","queue","Promise","resolve","callback","then","catch","e","console","error","linkingHandlers","useLinking","ref","enabled","config","independent","useEffect","process","env","NODE_ENV","join","trim","handler","Symbol","push","indexOf","splice","useState","enabledRef","useRef","configRef","getStateFromPathRef","getPathFromStateRef","getActionFromStateRef","validateRoutesNotExistInRootState","useCallback","navigation","rootState","getRootState","some","r","routeNames","includes","name","server","useContext","getInitialState","value","location","window","path","pathname","search","thenable","onfulfilled","previousIndexRef","previousStateRef","pendingPopStateDeltaRef","listen","previousIndex","rollbackHistory","delta","go","rollbackHistoryIfPrevented","pendingDelta","removePrevented","actionChangedState","unsubscribeEvent","addListener","data","type","defaultPrevented","unsubscribeAction","noop","dispatch","action","resetRoot","get","currentState","currentFocused","recordFocused","pending","goBack","warn","message","getPathForRoute","stateForPath","focusedRoute","params","previousRoute","hash","replace","onStateChange","previousState","pendingPopStateDelta","previousFocusedState","focusedState","historyDelta","nextIndex","backIndex","currentIndex"],"sourceRoot":"../../src","sources":["useLinking.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useLinking.d.ts","sourceRoot":"","sources":["../../../src/useLinking.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,gBAAgB,IAAI,uBAAuB,EAC3C,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAE9C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAuE9D;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,eAO7C,CAAC;AAIF,KAAK,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAE7C,wBAAgB,UAAU,CACxB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,EAClE,EACE,OAAc,EACd,MAAM,EACN,gBAA0C,EAC1C,gBAA0C,EAC1C,kBAA8C,GAC/C,EAAE,OAAO;2BAsGW,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC;EAyV1D"}
1
+ {"version":3,"file":"useLinking.d.ts","sourceRoot":"","sources":["../../../src/useLinking.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,gBAAgB,IAAI,uBAAuB,EAC3C,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAE9C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAqF9D;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,eAS7C,CAAC;AAIF,KAAK,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAE7C,wBAAgB,UAAU,CACxB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,EAClE,EACE,OAAc,EACd,MAAM,EACN,gBAA0C,EAC1C,gBAA0C,EAC1C,kBAA8C,GAC/C,EAAE,OAAO;2BAsGW,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC;EAsY1D"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-navigation/native",
3
3
  "description": "React Native integration for React Navigation",
4
- "version": "7.3.5",
4
+ "version": "7.3.7",
5
5
  "keywords": [
6
6
  "react-native",
7
7
  "react-navigation",
@@ -42,7 +42,7 @@
42
42
  "clean": "del lib"
43
43
  },
44
44
  "dependencies": {
45
- "@react-navigation/core": "^7.21.3",
45
+ "@react-navigation/core": "^7.21.5",
46
46
  "escape-string-regexp": "^4.0.0",
47
47
  "fast-deep-equal": "^3.1.3",
48
48
  "nanoid": "^3.3.11",
@@ -84,5 +84,5 @@
84
84
  ]
85
85
  ]
86
86
  },
87
- "gitHead": "ce68b20b516d7d523fe85b567055516fdd49464b"
87
+ "gitHead": "8a863290c256c426a03b0298d8b1568420d7a400"
88
88
  }
@@ -18,6 +18,12 @@ import type { LinkingOptions } from './types';
18
18
 
19
19
  type ResultState = ReturnType<typeof getStateFromPathDefault>;
20
20
 
21
+ /**
22
+ * History delta already applied by the browser when handling `popstate`
23
+ * The value 'replace' means the delta is unknown, so we can only replace
24
+ */
25
+ type PopStateDelta = number | 'replace';
26
+
21
27
  const getRoutesUntilIndex = (state: NavigationState) =>
22
28
  state.routes.slice(0, state.index + 1);
23
29
 
@@ -45,6 +51,10 @@ const findMatchingState = <T extends NavigationState>(
45
51
  const aRoute = a.routes[a.index];
46
52
  const bRoute = b.routes[b.index];
47
53
 
54
+ if (aRoute == null || bRoute == null) {
55
+ return [a, b];
56
+ }
57
+
48
58
  const aChildState = aRoute.state as T | undefined;
49
59
  const bChildState = bRoute.state as T | undefined;
50
60
 
@@ -81,7 +91,11 @@ const isPoppingLastEntry = (
81
91
  const recordRoutes = getRoutesUntilIndex(record);
82
92
 
83
93
  if (currentRoutes.length === recordRoutes.length + 1) {
84
- return recordRoutes.every((route, i) => route.key === currentRoutes[i].key);
94
+ return recordRoutes.every((route, i) => {
95
+ const currentRoute = currentRoutes[i];
96
+
97
+ return currentRoute != null && route.key === currentRoute.key;
98
+ });
85
99
  }
86
100
 
87
101
  return false;
@@ -94,7 +108,9 @@ export const series = (cb: () => Promise<void>) => {
94
108
  let queue = Promise.resolve();
95
109
  const callback = () => {
96
110
  // eslint-disable-next-line promise/no-callback-in-promise
97
- queue = queue.then(cb);
111
+ queue = queue.then(cb).catch((e) => {
112
+ console.error(e);
113
+ });
98
114
  };
99
115
  return callback;
100
116
  };
@@ -219,7 +235,9 @@ export function useLinking(
219
235
 
220
236
  const previousIndexRef = React.useRef<number | undefined>(undefined);
221
237
  const previousStateRef = React.useRef<NavigationState | undefined>(undefined);
222
- const pendingPopStatePathRef = React.useRef<string | undefined>(undefined);
238
+ const pendingPopStateDeltaRef = React.useRef<PopStateDelta | undefined>(
239
+ undefined
240
+ );
223
241
 
224
242
  React.useEffect(() => {
225
243
  previousIndexRef.current = history.index;
@@ -239,7 +257,6 @@ export function useLinking(
239
257
  const previousIndex = previousIndexRef.current ?? 0;
240
258
 
241
259
  previousIndexRef.current = index;
242
- pendingPopStatePathRef.current = path;
243
260
 
244
261
  const rollbackHistory = () => {
245
262
  const delta = previousIndex - index;
@@ -248,15 +265,21 @@ export function useLinking(
248
265
  return;
249
266
  }
250
267
 
251
- pendingPopStatePathRef.current = undefined;
252
-
253
- // eslint-disable-next-line promise/always-return
254
- history.go(delta)?.then(() => {
255
- previousIndexRef.current = history.index;
256
- });
268
+ history
269
+ .go(delta)
270
+ // eslint-disable-next-line promise/always-return
271
+ ?.then(() => {
272
+ previousIndexRef.current = history.index;
273
+ })
274
+ .catch(() => {
275
+ // The navigation was interrupted
276
+ });
257
277
  };
258
278
 
259
- const rollbackHistoryIfPrevented = (callback: () => void) => {
279
+ const rollbackHistoryIfPrevented = (
280
+ callback: () => void,
281
+ pendingDelta: PopStateDelta
282
+ ) => {
260
283
  let removePrevented = false;
261
284
  let actionChangedState = false;
262
285
 
@@ -288,17 +311,33 @@ export function useLinking(
288
311
  unsubscribeAction();
289
312
  }
290
313
 
291
- if (removePrevented && !actionChangedState) {
314
+ if (actionChangedState) {
315
+ // The change may be committed later, e.g. with transitions
316
+ // Remember the delta so it can be subtracted when syncing the commit
317
+ pendingPopStateDeltaRef.current = pendingDelta;
318
+ } else if (removePrevented) {
292
319
  rollbackHistory();
293
320
  }
294
321
  };
295
322
 
296
- const dispatch = (action: Parameters<typeof navigation.dispatch>[0]) => {
297
- rollbackHistoryIfPrevented(() => navigation.dispatch(action));
323
+ const dispatch = (
324
+ action: Parameters<typeof navigation.dispatch>[0],
325
+ pendingDelta: PopStateDelta
326
+ ) => {
327
+ rollbackHistoryIfPrevented(
328
+ () => navigation.dispatch(action),
329
+ pendingDelta
330
+ );
298
331
  };
299
332
 
300
- const resetRoot = (state: Parameters<typeof navigation.resetRoot>[0]) => {
301
- rollbackHistoryIfPrevented(() => navigation.resetRoot(state));
333
+ const resetRoot = (
334
+ state: Parameters<typeof navigation.resetRoot>[0],
335
+ pendingDelta: PopStateDelta
336
+ ) => {
337
+ rollbackHistoryIfPrevented(
338
+ () => navigation.resetRoot(state),
339
+ pendingDelta
340
+ );
302
341
  };
303
342
 
304
343
  // When browser back/forward is clicked, we first need to check if state object for this index exists
@@ -320,12 +359,25 @@ export function useLinking(
320
359
  recordFocused &&
321
360
  isPoppingLastEntry(currentFocused, recordFocused)
322
361
  ) {
362
+ const pending = pendingPopStateDeltaRef.current;
363
+
323
364
  // If we detect that the state change is popping the last entry
324
365
  // Dispatch a back action instead of resetting to the state
325
366
  // This makes sure changes to history state since the entry was added don't get lost
326
- dispatch(CommonActions.goBack());
367
+ dispatch(
368
+ CommonActions.goBack(),
369
+ // Stack on any delta from a previous `popstate` that hasn't committed yet
370
+ pending === 'replace' ? 'replace' : (pending ?? 0) - 1
371
+ );
327
372
  } else {
328
- resetRoot(record.state);
373
+ // The browser already moved from the current state to the record's state
374
+ resetRoot(
375
+ record.state,
376
+ currentFocused && recordFocused
377
+ ? getHistoryLength(recordFocused) -
378
+ getHistoryLength(currentFocused)
379
+ : 'replace'
380
+ );
329
381
  }
330
382
 
331
383
  return;
@@ -358,7 +410,7 @@ export function useLinking(
358
410
 
359
411
  if (action !== undefined) {
360
412
  try {
361
- dispatch(action);
413
+ dispatch(action, 'replace');
362
414
  } catch (e) {
363
415
  // Ignore any errors from deep linking.
364
416
  // This could happen in case of malformed links, navigation object not being initialized etc.
@@ -371,14 +423,14 @@ export function useLinking(
371
423
  );
372
424
  }
373
425
  } else {
374
- resetRoot(state);
426
+ resetRoot(state, 'replace');
375
427
  }
376
428
  } else {
377
- resetRoot(state);
429
+ resetRoot(state, 'replace');
378
430
  }
379
431
  } else {
380
432
  // if current path didn't return any state, we should revert to initial state
381
- resetRoot(state);
433
+ resetRoot(state, 'replace');
382
434
  }
383
435
  });
384
436
  }, [enabled, history, ref, validateRoutesNotExistInRootState]);
@@ -478,12 +530,20 @@ export function useLinking(
478
530
  return;
479
531
  }
480
532
 
481
- const pendingPath = pendingPopStatePathRef.current;
533
+ // Skip if the state hasn't changed since we last synced it
534
+ // This avoids redundant work when the committed `state` event fires
535
+ // after we already synced from `__unsafe_action__`
536
+ if (previousState === state) {
537
+ return;
538
+ }
539
+
482
540
  const route = findFocusedRoute(state);
483
541
  const path = getPathForRoute(route, state);
484
542
 
543
+ const pendingPopStateDelta = pendingPopStateDeltaRef.current;
544
+
485
545
  previousStateRef.current = state;
486
- pendingPopStatePathRef.current = undefined;
546
+ pendingPopStateDeltaRef.current = undefined;
487
547
 
488
548
  // To detect the kind of state change, we need to:
489
549
  // - Find the common focused navigation state in previous and current state
@@ -497,13 +557,14 @@ export function useLinking(
497
557
  if (
498
558
  previousFocusedState &&
499
559
  focusedState &&
500
- // We should only handle push/pop if path changed from what was in last `popstate`
501
- // Otherwise it's likely a change triggered by `popstate`
502
- path !== pendingPath
560
+ // If the delta from `popstate` is unknown, we can only replace
561
+ pendingPopStateDelta !== 'replace'
503
562
  ) {
504
563
  const historyDelta =
505
564
  getHistoryLength(focusedState) -
506
- getHistoryLength(previousFocusedState);
565
+ getHistoryLength(previousFocusedState) -
566
+ // Subtract the delta already applied by the browser to sync only the remaining changes
567
+ (pendingPopStateDelta ?? 0);
507
568
 
508
569
  if (historyDelta > 0) {
509
570
  // If history length is increased, we should pushState