@@ -663,6 +663,9 @@ type RouteFeatureProps = {
663663/**
664664 * 選んだ訪問予定リスト(旅程)の経路。そのリストのスポットをリスト順に並べる
665665 * (見えないスポット=未ダウンロード等は除いて残りを繋ぐ)。
666+ * **訪問済みの経由スポットは経路に載せない** —— 済んだ場所を通り続ける線が
667+ * 残ると「次にどこへ行くか」が読めなくなるため。リスト自体からは消えないので、
668+ * 訪問予定リストの詳細では訪問済みとして並んだままになる。
666669 */
667670function buildPlanListPath (
668671 planLists : VisitPlanList [ ] ,
@@ -672,7 +675,9 @@ function buildPlanListPath(
672675 if ( ! filters . planListId ) return [ ] ;
673676 const list = planLists . find ( ( l ) => l . id === filters . planListId ) ;
674677 if ( ! list ) return [ ] ;
678+ const visited = new Set ( list . visited_spot_ids ) ;
675679 return list . spot_ids
680+ . filter ( ( id ) => ! visited . has ( id ) )
676681 . map ( ( id ) => spotById . get ( id ) )
677682 . filter ( ( s ) : s is Spot => s !== undefined ) ;
678683}
@@ -1381,31 +1386,6 @@ export default function MapView({
13811386 [ filters , setFilters , planLists , pathSpotById , fitMapToSpots ]
13821387 ) ;
13831388
1384- // 地図で訪問予定リストを経路表示中に、そのリスト内のスポットへ新しく訪問記録したら、
1385- // 自動でそのスポットをリストから外す(訪問済みが経路に残り続けないように)。
1386- // 表示中のリスト(filters.planListId)にそのスポットが含まれるときだけ動く
1387- const handleVisitRecorded = useCallback (
1388- async ( spotId : string ) => {
1389- const listId = filters . planListId ;
1390- if ( ! listId ) return ;
1391- const list = planLists . find ( ( l ) => l . id === listId ) ;
1392- if ( ! list || ! list . spot_ids . includes ( spotId ) ) return ;
1393- const nextSpotIds = list . spot_ids . filter ( ( id ) => id !== spotId ) ;
1394- const { data } = await api . visitPlanLists . update ( listId , {
1395- title : list . title ,
1396- description : list . description ,
1397- start_date : list . start_date ,
1398- end_date : list . end_date ,
1399- spot_ids : nextSpotIds ,
1400- } ) ;
1401- setPlanLists ( ( prev ) =>
1402- prev . map ( ( l ) =>
1403- l . id === listId ? ( data ?? { ...l , spot_ids : nextSpotIds } ) : l
1404- )
1405- ) ;
1406- } ,
1407- [ filters . planListId , planLists ]
1408- ) ;
14091389 // マウント時と、マウント中に種別が切り替わった場合に、その種別の保存済み条件を読む
14101390 useEffect ( ( ) => {
14111391 setFiltersState ( loadSavedFilters ( spotTypeKey ) ) ;
@@ -3793,7 +3773,6 @@ export default function MapView({
37933773 allowPlanList
37943774 onClose = { ( ) => setOverlayDetailSpotId ( null ) }
37953775 onVisitChange = { loadVisits }
3796- onVisitRecorded = { handleVisitRecorded }
37973776 // 重ね表示スポットを現在の種別のリストへ追加したら、経路表示中のリストの
37983777 // 線にも反映されるようリスト一覧を取り直す
37993778 onPlanListChange = { loadPlanLists }
@@ -3868,7 +3847,6 @@ export default function MapView({
38683847 spots = { spots }
38693848 onClose = { ( ) => setDetailSpotId ( null ) }
38703849 onVisitChange = { loadVisits }
3871- onVisitRecorded = { handleVisitRecorded }
38723850 // 既存の訪問予定リストへの追加をリスト一覧へ反映する(経路表示中の
38733851 // リストに追加した場合、地図の紫の経路も引き直される)
38743852 onPlanListChange = { loadPlanLists }
0 commit comments