fix: DetailPanel above PlayerPanel , FeaturedBrandsPanel-2
This commit is contained in:
@@ -132,6 +132,60 @@ export const panelsReducer = (state = initialState, action) => {
|
||||
case types.UPDATE_PANEL: {
|
||||
let lastIndex = -1;
|
||||
let lastAction = 'update';
|
||||
const hasDetailPanel = state.panels.some((p) => p.name === panel_names.DETAIL_PANEL);
|
||||
const isPlayerPanel =
|
||||
action.payload.name === panel_names.PLAYER_PANEL ||
|
||||
action.payload.name === panel_names.PLAYER_PANEL_NEW;
|
||||
const existingPanel = state.panels.find((p) => p.name === action.payload.name);
|
||||
let nextPanelInfo = action.payload.panelInfo || {};
|
||||
|
||||
// lockModalFalse 플래그 처리: DetailPanel이 스택에 있거나 lock이 이미 true면 modal=true 업데이트를 차단
|
||||
if (isPlayerPanel && existingPanel) {
|
||||
const lockFlag =
|
||||
existingPanel.panelInfo?.lockModalFalse === true || nextPanelInfo.lockModalFalse === true;
|
||||
|
||||
// unlock 명시 시 그대로 진행
|
||||
if (nextPanelInfo.lockModalFalse === false) {
|
||||
// do nothing
|
||||
} else if (lockFlag && nextPanelInfo.modal === true) {
|
||||
nextPanelInfo = {
|
||||
...nextPanelInfo,
|
||||
modal: false,
|
||||
modalContainerId: undefined,
|
||||
lockModalFalse: true,
|
||||
modalStyle: undefined,
|
||||
modalScale: undefined,
|
||||
shouldShrinkTo1px: false,
|
||||
isHidden: false,
|
||||
};
|
||||
} else if (lockFlag && nextPanelInfo.modal === undefined && hasDetailPanel) {
|
||||
nextPanelInfo = {
|
||||
...nextPanelInfo,
|
||||
modal:
|
||||
existingPanel.panelInfo?.modal === true ? false : existingPanel.panelInfo?.modal,
|
||||
modalContainerId:
|
||||
existingPanel.panelInfo?.modal === true
|
||||
? undefined
|
||||
: existingPanel.panelInfo?.modalContainerId,
|
||||
lockModalFalse: true,
|
||||
modalStyle: existingPanel.panelInfo?.modal === true ? undefined : nextPanelInfo.modalStyle,
|
||||
modalScale: existingPanel.panelInfo?.modal === true ? undefined : nextPanelInfo.modalScale,
|
||||
shouldShrinkTo1px: false,
|
||||
isHidden: false,
|
||||
};
|
||||
} else if (hasDetailPanel && nextPanelInfo.modal === true) {
|
||||
// DetailPanel 존재 시 modal=true 업데이트 차단
|
||||
nextPanelInfo = {
|
||||
...nextPanelInfo,
|
||||
modal: false,
|
||||
modalContainerId: undefined,
|
||||
modalStyle: undefined,
|
||||
modalScale: undefined,
|
||||
shouldShrinkTo1px: false,
|
||||
isHidden: false,
|
||||
};
|
||||
}
|
||||
}
|
||||
// 배열의 끝에서부터 시작하여 조건에 맞는 마지막 인덱스 찾기
|
||||
for (let i = state.panels.length - 1; i >= 0; i--) {
|
||||
if (state.panels[i].name === action.payload.name) {
|
||||
@@ -143,7 +197,7 @@ export const panelsReducer = (state = initialState, action) => {
|
||||
index === lastIndex
|
||||
? {
|
||||
...panel,
|
||||
panelInfo: { ...panel.panelInfo, ...action.payload.panelInfo },
|
||||
panelInfo: { ...panel.panelInfo, ...nextPanelInfo },
|
||||
}
|
||||
: panel
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user