백엔드에 추가된 문정원 담당자·담당 변호사 필드를 화면에 반영한다.
- 사이드바 "채널생성"을 "채널관리"로 이름을 바꾸고 기관관리 위로 이동
- 채널관리(OrgDetail) 담당자 입력을 신청기관/문정원/변호사 3열 그리드로 확장,
저장 버튼 하나로 세 그룹을 함께 저장 (필수값 규칙은 신청기관 담당자만 그대로 유지)
- 기관관리(OrgOverview) 카드 3개(신청기관 카드 + 추후연동 2개)를 담당자 3종
가로 표 하나로 교체
- 업무메모 담당자 선택에 신청기관/문정원/변호사 중 이름이 채워진 사람을
모두 옵션으로 제공 (중복 제거, 기존 직접입력 유지)
- 관련 컴포넌트 테스트와 org() 픽스처에 신규 필드 반영, 신규 동작 테스트 추가
placeholder였던 업무메모 탭을 실제 화면으로 교체한다. 담당자를 기관
담당자 중에서 고르거나 직접 입력할 수 있고, 등록한 메모는 최신순으로
보여주며 확인 후 삭제할 수 있다.
- client.ts: WorkMemo 타입 및 getMemos/createMemo/deleteMemo 추가
- WorkMemos.tsx: 담당자 선택(기관 담당자/직접 입력) + 메모 등록/목록/삭제
- OrgOverview.tsx: 업무메모 탭에 WorkMemos 연결
- WorkMemos.test.tsx, OrgOverview.test.tsx: getMemos 목업 포함 테스트 추가
Co-Authored-By: Claude Opus 4.8 (1M context)
- ChannelPosts: 문정원/법률검토 채널 선택 칩 + 3초 폴링으로 최근 게시글을 보여주고,
시스템 메시지·첨부파일 다운로드 칩·자동 스크롤을 처리한다
- ChannelFiles: 같은 채널 선택으로 자료실 파일 전체를 표로 보여주고 새로고침을 지원한다
- client.ts에 getPosts/getFiles/fileDownloadUrl 추가, OrgOverview는 게시물/자료 탭에서
자리표시 대신 위 컴포넌트를 렌더링(org.id로 key를 잡아 기관 전환 시 폴링을 재시작)
- OrgDetail의 초기화 effect를 org 객체 identity 대신 org.id에 키잉해, 채널 생성
성공 후 App.reload()가 만드는 새 객체가 방금 받은 provision 결과/에러/입력 중이던
담당자 정보를 지워버리지 않게 함(다른 기관으로 전환할 때는 그대로 초기화).
- 양쪽 채널이 모두 실패했을 때 "문정원 채널은 살아있다"는 잘못된 안내를 보여주던
문제를 3분기(둘 다 실패/법률검토만 실패/문정원만 실패)로 재구성해 해결.
- 정보 저장/채널 생성/시드 업로드에 busy 상태를 추가해 처리 중 중복 클릭으로 두
요청이 동시에 나가는 것을 방지. ConfirmDialog도 busy 중엔 두 버튼을 비활성화.
- api/client에 상태코드를 담는 ApiError를 도입해 401만 로그아웃으로 취급하고,
그 외 오류는 재시도 버튼이 있는 오류 화면으로 안내(App.tsx).
- 필수 담당자 정보(부서명/담당자명/연락처/이메일)가 비어 있으면 정보 저장 버튼을
비활성화(직급/직함은 선택 유지).
- 로그인/기관검색 입력에 aria-label과 autoComplete 추가, StatusBadge READY 케이스
테스트 추가.
Co-Authored-By: Claude Opus 4.8 (1M context)