diff --git a/src/index.ts b/src/index.ts index 96d57af..01ba20b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -252,6 +252,9 @@ export const useTravel = ( nextPosition = 0; } if (nextPosition === position) return; + if (shouldArchive) { + _allPatches.inversePatches.slice(-1)[0].reverse(); + } setState( () => apply( diff --git a/test/index.test.ts b/test/index.test.ts index 21eed9c..9294f40 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -1485,4 +1485,39 @@ describe('useTravel', () => { } `); }); + + it('[useTravel] - back() with autoArchive: false', () => { + let { result } = renderHook(() => + useTravel(0, { + maxHistory: 3, + autoArchive: false, + }) + ); + let [nextState, setState, controls] = result.current; + expect(nextState).toEqual(0); + expect(controls.position).toEqual(0); + expect(controls.getHistory()).toEqual([0]); + + act(() => setState(() => 1)); + [nextState, setState, controls] = result.current; + expect(nextState).toEqual(1); + expect(controls.position).toEqual(1); + expect(controls.getHistory()).toEqual([0, 1]); + + act(() => setState(() => 2)); + [nextState, setState, controls] = result.current; + expect(nextState).toEqual(2); + expect(controls.position).toEqual(1); + expect(controls.getHistory()).toEqual([0, 2]); + + + // act(() => controls.archive()); + // [nextState, setState, controls] = result.current; + + act(() => controls.back()); + [nextState, setState, controls] = result.current; + expect(nextState).toEqual(0); + expect(controls.position).toEqual(0); + expect(controls.getHistory()).toEqual([0, 2]); + }); });