환자 선택을 제목줄로 올린다 — 한 번 고르면 앱 전체가 그 환자를 본다
테마 버튼 오른쪽에 user 아이콘. 전에는 미리보기 창 안에만 있어서 쿼리 편집처럼 환자 값이 필요한 다른 화면에서는 고를 방법이 없었다. ## 방향을 뒤집었다 전에는 미리보기 창이 환자를 들고 있고 세션에 <b>밀어 올렸다</b>. 그러면 제목줄에서 바꿀 때 창이 모르고, 세션과 창이 어긋나는 경로가 생긴다. 이제 모든 진입점이 PatientSession 에만 쓰고, 창들은 Changed 를 <b>듣는다</b>. 제목줄·미리보기·쿼리 편집 어디서 바꿔도 나머지가 따라온다. 미리보기 창은 열 때 세션의 환자를 물려받는다 — 창을 열 때마다 초기화하면 "앱 전체 적용"이 거짓이 된다. ## 아이콘이라 상태를 색으로 알린다 늘 보이는 자리라 글자를 둘 폭이 없다. 고르면 강조색, 이름은 툴팁에 둔다 — 제목줄에 환자 이름을 상시 노출하지 않는다. 이미 고른 상태에서 누르면 <b>메뉴</b>가 뜬다(바꾸기 / 해제). "누르면 해제"로 두면 늘 보이는 아이콘이라 실수로 지운다. ## 말뿐인지 값인지 확인했다 제목줄 아이콘은 세션만 건드린다. 열려 있는 창이 그것을 듣지 않으면 아이콘은 켜지는데 종이는 그대로다 — "설정했는데 안 먹는다"가 된다. 그래서 판정은 <b>창의 메서드를 부르지 않고</b> 세션에만 써서 종이가 따라오는지 본다. 구독을 떼는지도 본다. 정적 이벤트라 안 떼면 창이 회수되지 않고 죽은 창이 계속 그리려 든다 — 닫은 뒤 세션을 흔들어 예외 없이 지나가는지 확인한다. ## 게이트 - dotnet test 323/323 - --edit-smoke 실패 0 (전체 적용 판정 3건 신규) - --dialog-shots FAIL 0 · --query-popup 실패 0 - --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
1baf805f02
commit
5ecc7b514a
@@ -705,7 +705,32 @@ public static class EditSmoke
|
||||
!previewCleared.Contains("C-9003", StringComparison.Ordinal)
|
||||
&& previewCleared.Contains("[PAT_차트번호", StringComparison.Ordinal),
|
||||
previewCleared);
|
||||
|
||||
// ── "앱 전체 적용" 이 말뿐인지 값인지 ──
|
||||
// 제목줄 아이콘은 PatientSession 만 건드린다. 열려 있는 창들이 그것을 <b>듣지 않으면</b>
|
||||
// 아이콘은 켜지는데 종이는 그대로다 — 사용자에게는 "설정했는데 안 먹는다"가 된다.
|
||||
// 세션에만 쓰고 종이가 따라오는지 본다(창의 메서드를 직접 부르지 않는다).
|
||||
Services.PatientSession.Set(Fake("C-9004", "세션환자"), "표본");
|
||||
var afterSession = PreviewPaper();
|
||||
Check("전체 적용: 세션에 넣으면 열린 미리보기가 따라온다",
|
||||
afterSession.Contains("C-9004", StringComparison.Ordinal)
|
||||
&& afterSession.Contains("세션환자", StringComparison.Ordinal),
|
||||
afterSession);
|
||||
|
||||
Services.PatientSession.Set(null, string.Empty);
|
||||
var afterSessionClear = PreviewPaper();
|
||||
Check("전체 적용: 세션에서 떼면 열린 미리보기도 따라 뗀다",
|
||||
!afterSessionClear.Contains("C-9004", StringComparison.Ordinal)
|
||||
&& afterSessionClear.Contains("[PAT_차트번호", StringComparison.Ordinal),
|
||||
afterSessionClear);
|
||||
|
||||
// 창을 닫은 뒤에도 이벤트가 남아 있으면 회수되지 않고, 죽은 창이 계속 그린다.
|
||||
// 닫고 다시 세션을 건드려 <b>예외 없이</b> 지나가는지 본다(구독이 남아 있으면
|
||||
// 죽은 창의 PagesHost 를 만지다 터진다).
|
||||
patientPreview.Close();
|
||||
Services.PatientSession.Set(Fake("C-9005", "닫힌뒤"), "표본");
|
||||
Services.PatientSession.Set(null, string.Empty);
|
||||
Check("전체 적용: 창을 닫으면 구독이 떨어진다", true, "예외 없이 통과");
|
||||
|
||||
var emptyName = PatientPaper(
|
||||
new Services.PatientTagResolver(Fake("C-9002", string.Empty), new StubTagResolver()));
|
||||
|
||||
Reference in New Issue
Block a user