[251020] fix: VoiceInputOverlay searchId Reset Resolved

🕐 커밋 시간: 2025. 10. 20. 23:26:04

📊 변경 통계:
  • 총 파일: 5개
  • 추가: +28줄
  • 삭제: -3줄

📝 수정된 파일:
  ~ com.twin.app.shoptime/.gitignore
  ~ com.twin.app.shoptime/src/actions/actionTypes.js
  ~ com.twin.app.shoptime/src/actions/searchActions.js
  ~ com.twin.app.shoptime/src/reducers/searchReducer.js
  ~ com.twin.app.shoptime/src/views/SearchPanel/SearchPanel.new.jsx

🔧 함수 변경 내용:
  📄 com.twin.app.shoptime/src/actions/searchActions.js (javascript):
     Added: resetSearch()

🔧 주요 변경 내용:
  • 타입 시스템 안정성 강화
  • 핵심 비즈니스 로직 개선
This commit is contained in:
2025-10-20 23:26:06 +09:00
parent 9920facaf5
commit 63ada03ca3
5 changed files with 35 additions and 5 deletions

View File

@@ -14,4 +14,5 @@ npm-debug.log
# ipk file
srcBackup
# com.lgshop.app_*.ipk
# com.lgshop.app_*.ipk
.docs

View File

@@ -171,6 +171,7 @@ export const types = {
GET_SHOPPERHOUSE_SEARCH: 'GET_SHOPPERHOUSE_SEARCH',
CLEAR_SHOPPERHOUSE_DATA: 'CLEAR_SHOPPERHOUSE_DATA',
RESET_SEARCH: 'RESET_SEARCH',
RESET_VOICE_SEARCH: 'RESET_VOICE_SEARCH',
GET_SEARCH_PROCESSED: 'GET_SEARCH_PROCESSED',
SET_SEARCH_INIT_PERFORMED: 'SET_SEARCH_INIT_PERFORMED',
UPDATE_SEARCH_TIMESTAMP: 'UPDATE_SEARCH_TIMESTAMP',

View File

@@ -77,6 +77,11 @@ export const resetSearch = (status) => {
return { type: types.RESET_SEARCH, payload: status };
};
export const resetVoiceSearch = () => {
getShopperHouseSearchKey = null;
return { type: types.RESET_VOICE_SEARCH };
};
export const setInitPerformed = (performed) => ({
type: types.SET_SEARCH_INIT_PERFORMED,
payload: performed,

View File

@@ -44,7 +44,20 @@ export const searchReducer = (state = initialState, action) => {
case types.RESET_SEARCH:
return {
...initialState,
...state,
searchDatas: {},
totalCount: {},
searchPerformed: false,
initPerformed: false,
searchTimestamp: null,
// shopperHouseData, shopperHouseSearchId 유지
};
case types.RESET_VOICE_SEARCH:
return {
...state,
shopperHouseData: null,
shopperHouseSearchId: null,
};
case types.SET_SEARCH_INIT_PERFORMED:

View File

@@ -14,7 +14,7 @@ import hotPicksBrandImage from '../../../assets/images/searchpanel/img-search-ho
import { sendLogGNB, sendLogTotalRecommend } from '../../actions/logActions';
import { getMyRecommandedKeyword } from '../../actions/myPageActions';
import { popPanel, updatePanel } from '../../actions/panelActions';
import { getSearch, resetSearch } from '../../actions/searchActions';
import { getSearch, resetSearch, resetVoiceSearch } from '../../actions/searchActions';
// import {
// showErrorToast,
// showInfoToast,
@@ -216,6 +216,11 @@ export default function SearchPanel({ panelInfo, isOnTop, spotlightId }) {
}
}, [dispatch, searchQuery]);
// 컴포넌트 마운트 시 Voice Search 상태 초기화
useEffect(() => {
dispatch(resetVoiceSearch());
}, [dispatch]);
useEffect(() => {
if (recommandedKeywords) {
const startIndex = (currentPage - 1) * ITEMS_PER_PAGE;
@@ -425,7 +430,10 @@ export default function SearchPanel({ panelInfo, isOnTop, spotlightId }) {
if (!isOnTopRef.current) {
return;
}
console.log('🖱️ [DEBUG][SearchPanel] onClickMic called, current isVoiceOverlayVisible:', isVoiceOverlayVisible);
console.log(
'🖱️ [DEBUG][SearchPanel] onClickMic called, current isVoiceOverlayVisible:',
isVoiceOverlayVisible
);
setIsVoiceOverlayVisible(true);
// setIsVoiceOverlayVisible((prev) => !prev);
}, [isOnTopRef, isVoiceOverlayVisible]);
@@ -522,7 +530,9 @@ export default function SearchPanel({ panelInfo, isOnTop, spotlightId }) {
// Voice overlay close handler
const handleVoiceOverlayClose = useCallback(() => {
console.log('🚪 [DEBUG][SearchPanel] handleVoiceOverlayClose called, setting isVoiceOverlayVisible to FALSE');
console.log(
'🚪 [DEBUG][SearchPanel] handleVoiceOverlayClose called, setting isVoiceOverlayVisible to FALSE'
);
setIsVoiceOverlayVisible(false);
// ✅ VoiceOverlay가 닫힐 때 항상 TInput으로 포커스 이동