Skip to content

Commit 5d7e84d

Browse files
authored
Fix: Update 'current' to Reflect Last Overlay When Closing Intermediate Overlays (#50)
* fix: Ensure 'current' reflects the last overlay when closing intermediate overlays - Resolve issue where 'current' does not update to the last overlay when closing an intermediate overlay - Add logic to correctly update 'current' in reducer * chore: changeset
1 parent 43731c3 commit 5d7e84d

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

.changeset/quiet-bobcats-pretend.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'overlay-kit': patch
3+
---
4+
5+
Fix: Ensure 'current' reflects the last overlay when closing intermediate overlays
6+
7+
- Resolve issue where 'current' does not update to the last overlay when closing an intermediate overlay
8+
- Add logic to correctly update 'current' in reducer

packages/src/context/reducer.ts

+20-3
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,29 @@ export function overlayReducer(state: OverlayData, action: OverlayReducerAction)
3333
};
3434
}
3535
case 'CLOSE': {
36-
const closedCurrentIndex = state.overlayOrderList.findIndex((item) => item === action.overlayId);
37-
const current = state.overlayOrderList[closedCurrentIndex - 1] ?? null;
36+
const openedOverlayOrderList = state.overlayOrderList.filter(
37+
(orderedOverlayId) => state.overlayData[orderedOverlayId].isOpen === true
38+
);
39+
const targetIndexInOpenedList = openedOverlayOrderList.findIndex((item) => item === action.overlayId);
40+
41+
/**
42+
* @description If closing the last overlay, specify the overlay before it.
43+
* @description If closing intermediate overlays, specifies the last overlay.
44+
*
45+
* @example open - [1, 2, 3, 4]
46+
* close 2 => current: 4
47+
* close 4 => current: 3
48+
* close 2 => current: 1
49+
* close 1 => current: null
50+
*/
51+
const currentOverlayId =
52+
targetIndexInOpenedList === openedOverlayOrderList.length - 1
53+
? openedOverlayOrderList[targetIndexInOpenedList - 1] ?? null
54+
: openedOverlayOrderList.at(-1) ?? null;
3855

3956
return {
4057
...state,
41-
current,
58+
current: currentOverlayId,
4259
overlayData: {
4360
...state.overlayData,
4461
[action.overlayId]: {

0 commit comments

Comments
 (0)