Skip to content

Commit 3b654de

Browse files
TomoTom0claude
andcommitted
予約実行時のUI表示問題を修正
## 問題 - 予約実行時にFABが「予約中断」にならない - 予約対象が表示されない ## 根本原因 統一状態管理システムによる予約開始時に、予約対象の設定処理が欠如していた ## 修正内容 ### 1. 予約対象設定の追加 統一状態管理による予約開始時に以下を追加: - DOM状態から選択中の時間帯を取得 - setReservationTarget()で予約対象を統一状態管理に設定 - locationIndex, selector情報も含めて正確に設定 ### 2. 処理フロー改善 ```typescript // 統一状態管理による予約開始 unifiedStateManager.startReservation(); // 予約対象をDOM状態から同期設定 const selectedSlot = document.querySelector(timeSlotSelectors.selectedSlot); if (selectedSlot) { unifiedStateManager.setReservationTarget(timeText, locationIndex, selector); } // レガシー状態管理同期 entranceReservationState.isRunning = true; // UI即座更新 updateMainButtonDisplay(); updateMonitoringTargetsDisplay(); ``` ### 3. 効果 - FABボタンが正しく「予約中断」表示になる - 予約対象情報(例: "予約対象(08/10) 東11:00-")が表示される - 統一状態管理とUI表示の完全同期 ## テスト確認 - TypeScript静的チェック: ✅ 成功 - Webpack ビルド: ✅ 成功 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 36f79e6 commit 3b654de

2 files changed

Lines changed: 115 additions & 2 deletions

File tree

src-modules/entrance-page-fab.ts

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,66 @@ function createEntranceReservationUI(config: ReservationConfig): void {
318318
} else if (preferredAction === 'reservation') {
319319
console.log('🚀 統一状態管理システムによる予約開始');
320320
unifiedStateManager.startReservation();
321-
// 予約処理は下の通常処理で実行
321+
322+
// 予約対象を統一状態管理システムに設定(DOM状態から同期)
323+
const selectedSlot = document.querySelector(timeSlotSelectors.selectedSlot);
324+
if (selectedSlot) {
325+
const tdElement = selectedSlot.closest('td[data-gray-out]') as HTMLTableCellElement;
326+
const timeText = selectedSlot.querySelector('dt span')?.textContent?.trim();
327+
328+
if (tdElement && timeText) {
329+
const locationIndex = LocationHelper.getIndexFromElement(tdElement);
330+
const selector = generateUniqueTdSelector(tdElement);
331+
332+
console.log(`🎯 予約対象設定: ${timeText} (位置: ${locationIndex})`);
333+
unifiedStateManager.setReservationTarget(timeText, locationIndex, selector);
334+
}
335+
}
336+
337+
// レガシー状態管理との同期
338+
entranceReservationState.isRunning = true;
339+
entranceReservationState.shouldStop = false;
340+
entranceReservationState.startTime = Date.now();
341+
entranceReservationState.attempts = 0;
342+
343+
// UI即座更新
344+
showStatus('予約処理実行中...', 'blue');
345+
updateMainButtonDisplay();
346+
updateMonitoringTargetsDisplay(); // 予約対象を表示
347+
348+
// 予約処理を開始
349+
try {
350+
const result = await entranceReservationHelper(config);
351+
if (result.success) {
352+
showStatus(`🎉 予約成功!(${result.attempts}回試行)`, 'green');
353+
354+
// 統一状態管理に予約成功情報を設定
355+
const reservationTarget = unifiedStateManager.getReservationTarget();
356+
if (reservationTarget) {
357+
unifiedStateManager.setReservationSuccess(reservationTarget.timeSlot, reservationTarget.locationIndex);
358+
updateMainButtonDisplay(); // FAB表示更新
359+
}
360+
361+
if (cacheManager) {
362+
cacheManager.clearTargetSlots(); // 成功時はキャッシュクリア
363+
cacheManager.clearMonitoringFlag(); // 監視継続フラグもクリア
364+
}
365+
} else {
366+
showStatus(`予約失敗 (${result.attempts}回試行)`, 'red');
367+
}
368+
} catch (error) {
369+
console.error('統一状態管理による予約処理エラー:', error);
370+
const errorMessage = error instanceof Error ? error.message : String(error);
371+
showStatus(`エラー: ${errorMessage}`, 'red');
372+
} finally {
373+
entranceReservationState.isRunning = false;
374+
entranceReservationState.shouldStop = false;
375+
entranceReservationState.startTime = null;
376+
entranceReservationState.attempts = 0;
377+
updateMainButtonDisplay();
378+
updateMonitoringTargetsDisplay(); // 予約終了時に表示更新
379+
}
380+
return; // 統一状態管理による処理完了、通常処理はスキップ
322381
} else {
323382
console.log('⚠️ 統一状態管理システム: 実行可能なアクションなし');
324383
return;

src/index.js

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4961,7 +4961,61 @@ function createEntranceReservationUI(config) {
49614961
else if (preferredAction === 'reservation') {
49624962
console.log('🚀 統一状態管理システムによる予約開始');
49634963
unifiedStateManager.startReservation();
4964-
// 予約処理は下の通常処理で実行
4964+
// 予約対象を統一状態管理システムに設定(DOM状態から同期)
4965+
const selectedSlot = document.querySelector(entrance_page_dom_utils/* timeSlotSelectors */.eN.selectedSlot);
4966+
if (selectedSlot) {
4967+
const tdElement = selectedSlot.closest('td[data-gray-out]');
4968+
const timeText = selectedSlot.querySelector('dt span')?.textContent?.trim();
4969+
if (tdElement && timeText) {
4970+
const locationIndex = unified_state/* LocationHelper */.Qs.getIndexFromElement(tdElement);
4971+
const selector = (0,entrance_page_dom_utils/* generateUniqueTdSelector */.sN)(tdElement);
4972+
console.log(`🎯 予約対象設定: ${timeText} (位置: ${locationIndex})`);
4973+
unifiedStateManager.setReservationTarget(timeText, locationIndex, selector);
4974+
}
4975+
}
4976+
// レガシー状態管理との同期
4977+
entrance_page_state.entranceReservationState.isRunning = true;
4978+
entrance_page_state.entranceReservationState.shouldStop = false;
4979+
entrance_page_state.entranceReservationState.startTime = Date.now();
4980+
entrance_page_state.entranceReservationState.attempts = 0;
4981+
// UI即座更新
4982+
showStatus('予約処理実行中...', 'blue');
4983+
(0,entrance_page_ui/* updateMainButtonDisplay */.vp)();
4984+
updateMonitoringTargetsDisplay(); // 予約対象を表示
4985+
// 予約処理を開始
4986+
try {
4987+
const result = await entranceReservationHelper(config);
4988+
if (result.success) {
4989+
showStatus(`🎉 予約成功!(${result.attempts}回試行)`, 'green');
4990+
// 統一状態管理に予約成功情報を設定
4991+
const reservationTarget = unifiedStateManager.getReservationTarget();
4992+
if (reservationTarget) {
4993+
unifiedStateManager.setReservationSuccess(reservationTarget.timeSlot, reservationTarget.locationIndex);
4994+
(0,entrance_page_ui/* updateMainButtonDisplay */.vp)(); // FAB表示更新
4995+
}
4996+
if (cacheManager) {
4997+
cacheManager.clearTargetSlots(); // 成功時はキャッシュクリア
4998+
cacheManager.clearMonitoringFlag(); // 監視継続フラグもクリア
4999+
}
5000+
}
5001+
else {
5002+
showStatus(`予約失敗 (${result.attempts}回試行)`, 'red');
5003+
}
5004+
}
5005+
catch (error) {
5006+
console.error('統一状態管理による予約処理エラー:', error);
5007+
const errorMessage = error instanceof Error ? error.message : String(error);
5008+
showStatus(`エラー: ${errorMessage}`, 'red');
5009+
}
5010+
finally {
5011+
entrance_page_state.entranceReservationState.isRunning = false;
5012+
entrance_page_state.entranceReservationState.shouldStop = false;
5013+
entrance_page_state.entranceReservationState.startTime = null;
5014+
entrance_page_state.entranceReservationState.attempts = 0;
5015+
(0,entrance_page_ui/* updateMainButtonDisplay */.vp)();
5016+
updateMonitoringTargetsDisplay(); // 予約終了時に表示更新
5017+
}
5018+
return; // 統一状態管理による処理完了、通常処理はスキップ
49655019
}
49665020
else {
49675021
console.log('⚠️ 統一状態管理システム: 実行可能なアクションなし');

0 commit comments

Comments
 (0)