chore(plan): 10-10 조사 AD(노면공 범위 고름)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LLCk2y5xE8YGVgjbTntWsY
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
# 조사 AD — B06 목록에서 다른 구조물을 골랐는데 노면공 범위 전체가 켜짐 (요구 98)
|
||||
|
||||
## 1. 한눈 결론
|
||||
|
||||
- 목록을 누르는 길 자체는 정상 — 다른 구조물을 고르면 노면공 강조가 꺼짐(스크래치 재현 12 경우 · 무작위 3000 차례에서 샌 경우 0).
|
||||
- 노면공이 켜지는 자리 = B06 이 폼을 다시 세우는 `load()`(보기 오감 · 새로고침 · 재진입). 측점만 남은 고름(구조물 id 없음)을 「그 측점을 덮는 첫 구조물」로 여는데, 노면공을 빼는 거름(152-5)을 안 넘겨 목록 맨 앞의 노면공이 열림.
|
||||
- 목록과 잇는 고리 = 이미 고른 카드에 있는 구조물을 목록에서 고르면 고름 한 칸(세션)이 안 바뀜 → 옛 「측점만」 고름이 남아 있다가 위 `load()` 에서 노면공으로 바뀜.
|
||||
|
||||
## 2. 클릭 길 표
|
||||
|
||||
| 단계 | 어디 | 하는 일 |
|
||||
| --- | --- | --- |
|
||||
| 목록 줄 누름 | `B05_Profile_UI_Structures_List.ts:225`(구조물) · `:235`(관) | 패널 콜백 부름 |
|
||||
| 폼 올림 | `B05_Profile_UI_Structures_Panel.ts:438-455` → `_Commit.ts:94-158`(loadForm → onSelect) · `:163-205`(loadPipeForm) | 폼 = 고른 것 · 알림 |
|
||||
| B06 받음 | `B06_Section_UI_Page_Structures_Panel.ts:212-230` onSelect · `:314-324` onPipeSelect | preferredId = 고른 id · 카드 찾기 · 알약 · **세션은 노면공일 때만 직접 적음(:229)** · 관은 늘 적음 |
|
||||
| 카드 찾기 | `design_view_cross.ts:118-126` → `B06_Section_UI_Section_View.ts:587-597` focusStation · `:598-606` revealStation | 다른 카드면 카드 리스너 돎 · **같은 카드면 스크롤만(리스너 안 돎)** · 노면공 = 카드 고르지 않고 스크롤만 |
|
||||
| 카드 리스너 | `design_view_cross.ts:384-411` | showAtChainage(`B06 panel :556-572` · 노면공 뺀 거름) · 세션 = 목록이 고른 것만 id(:397) · 알약 맞춤 selectMark(…, false)(:403) |
|
||||
| 범위 강조 | `B06_Section_UI_Section_View.ts:607-612` selectMark → `:246-270` applySpan | 테두리 = 고른 구간형 · 노면공이면 span 끔이어도 늘 켬 + 포장층 `is-active` |
|
||||
| 다시 그릴 때 | `design_view_cross.ts:464-495` restoreStructurePick | 세션 값이 바뀐 때만 다시 얹음(prefer → 카드 → selectStructure) |
|
||||
| 보기 다시 보임 · 진입 | `design_view_cross.ts:564-572`(onShow) · `:619`(첫 마운트) → `B06 panel load() :406-414` | 세션으로 폼 다시 세움 — **`section.selectAt` 에 거름 없음** |
|
||||
|
||||
## 3. 까닭(근거)
|
||||
|
||||
① 본 원인 — `load()` 가 노면공을 덮어 엶
|
||||
- `B06_Section_UI_Page_Structures_Panel.ts:410` — `section.selectAt({ chainageM, structureId })` 를 거름(coverable) 없이 부름.
|
||||
- 공용 `selectAt`(`B05_Profile_UI_Structures_Panel.ts:620-623`) → `resolveSelection` 기본 거름 = 전부(`design_selection.ts:86`) → 「덮는 첫 구조물」(`:96`) = 노면공(목록 맨 앞 · 시점 30).
|
||||
- 이어지는 일: selectById(노면공) → onSelect(노면공) → 177-4 길(범위 첫 카드로 스크롤 · 알약 · 세션 = {첫 카드, 노면공}) → 범위 카드 전부 테두리 + 포장층 → `.then(restoreStructurePick)` 이 노면공을 한 번 더 얹음.
|
||||
- `load()` 는 폼에 이미 고른 것이 있어도(`hasSelection`) 보지 않고 덮음 — 목록으로 고른 구조물이 노면공으로 바뀜.
|
||||
- 같은 파일 `:561-563` 주석이 「공용 selectAt 은 노면공을 덮어 엶」이라 적고 showAtChainage 는 피했으나 `load()` 한 곳이 빠짐(216-1 은 B05 측점선만 고침).
|
||||
|
||||
② 목록 고름이 세션에 안 적히는 경우
|
||||
- onSelect 는 노면공일 때만 selectDesign(`:229`) · 그 밖은 카드 리스너(`design_view_cross.ts:397-398`)에 맡김.
|
||||
- 그 구조물이 가는 카드가 이미 고른 카드면 focusStation 이 스크롤만(`Section_View.ts:590-596`) → 리스너 안 돎 → 세션 = 옛 값 그대로.
|
||||
|
||||
③ 「측점만」 세션이 흔한 까닭
|
||||
- 189-1 카드 하나 고름 = id 없음(`design_view_cross.ts:397`) — 카드가 옹벽 폼을 열어도 세션은 측점만.
|
||||
- 216-1 B05 종단 측점선 = `remember(측점, null)`(`design_view_profile.ts:244`).
|
||||
- 위 ② 의 같은 카드 목록 고름.
|
||||
|
||||
## 4. 재현 조건
|
||||
|
||||
스크래치(시스템 임시 폴더 · 저장소 밖) — `helper_165_pavement_flow.cjs` 를 옮겨 진짜 B06 패널 · 세션 · 넘김 모듈에 `load()` 끝 · `restoreStructurePick` 을 덧붙임. 자료 = 226fc805 꼴(노면공 30~405 맨 앞 · 소단 35~45 · 표지 127.86 · 관 95.38 · 세월교 195.3 · 카드 20 m + 35 · 45 · 관 측점).
|
||||
|
||||
| 차례 | 결과 |
|
||||
| --- | --- |
|
||||
| 카드 120 누름(관 없는 범위 안) → B05↔B06 오감 | 폼 = 노면공 · 범위 카드 23 · 포장층 켬 · 세션 id = 노면공 |
|
||||
| 카드 120 → 목록 표지(같은 카드 120 · 폼 표지 · 세션 {120, 없음} 그대로) → 오감 | 노면공 · 23 |
|
||||
| B05 측점선 120 → B06 | 노면공 · 23 |
|
||||
| 대조 — 세션이 관 자리(95.38) · 목록 표지(카드 바뀜 · 세션 id 표지) → 오감 | 관 · 표지 그대로(안 샘) |
|
||||
| 대조 — 노면공 고름 뒤 목록 관 · 소단 · 표지 · 세월교(오감 없음) | 모두 노면공 강조 꺼짐 |
|
||||
|
||||
- 조건 셋: 그 측점이 노면공 범위 안 · 0.51 m 안에 관 없음 · 세션에 구조물 id 없음 + B06 폼 다시 세움(B05↔B06 오감 · F5 · 다른 페이지 갔다 옴).
|
||||
- 관 자리 측점은 관이 먼저라 안 생김 · 옹벽 등을 다른 카드로 고르면 세션에 id 가 적혀 안 생김.
|
||||
- 사용자 화면 차례(오감 · 새로고침 여부)는 미확인 — 오감 없이 목록 누름 즉시 켜졌다면 다른 길 · 화면 재현 필요.
|
||||
|
||||
## 5. 고칠 방향 제안(고치지 않음)
|
||||
|
||||
1안(본 원인 · 한 곳 · 1줄) — `B06_Section_UI_Page_Structures_Panel.ts:410` 의 `section.selectAt(…)` 에 `coverable` 을 둘째 인자로 넘김.
|
||||
- 효과: 측점만 남은 세션은 노면공을 덮어 열지 않음(152-5 · 189-1 ③ 과 같은 규칙) · id 있는 세션(노면공 고름 포함)과 관은 그대로.
|
||||
- 위험 낮음 — 바뀌는 것은 「id 없음 + 관 없음 + 노면공만 덮음」 한 갈래. 시험: test_189_1 · 188_1 · 165 · 216_1 + 새 시험(오감 뒤 노면공 안 엶).
|
||||
|
||||
2안(세션 맞춤 · 1~2줄) — 같은 파일 `:229` 의 `if (pave)` 를 떼어 구조물 고름은 늘 selectDesign({기준 카드, id}).
|
||||
- 효과: 같은 카드 목록 고름도 고름 한 칸이 그 구조물로(188-1 「마지막 고름 하나」) → `load()` 가 id 로 엶.
|
||||
- 위험 낮음 — 리스너가 같은 값을 또 적어도 selectDesign 의 같은 값 거름으로 알림 없음 · 부재키는 다른 대상이면 버리는 규칙 그대로.
|
||||
|
||||
덧 — `load()` 에 `if (!section.hasSelection())` 가드(B05 `restorePick` `design_view_profile.ts:250` 꼴)도 가능하나 1안과 겹침 · 선택.
|
||||
권 — 1안 + 2안(파일 하나 · 2~3줄).
|
||||
|
||||
같은 구멍(별건 · 사용자 판단): B05 3D 고름 `B05_Profile_UI_Structure_Pick_Session.ts:64-67` 도 기본 거름이라 노면공 id 를 세션에 적음 → B06 에서 노면공.
|
||||
|
||||
곁가지(스크래치에서 봄):
|
||||
- 옹벽 범위 안 카드 120 누름 → 옹벽 폼이 열리며 카드가 옹벽 기준 카드 100 으로 옮겨 감(showAtChainage → onSelect → focusChainage).
|
||||
- 넘김 되얹기의 카드 찾기가 「0.51 m 안 첫 카드」(`B06_Section_UI_Page_Structure_Pick.ts:60`) — 관 80.17 세션이 카드 80 으로 감.
|
||||
Reference in New Issue
Block a user