feat(project): 전체 뷰에 우클릭 컨텍스트 메뉴 + optimistic update 전면 적용

- 공용 우클릭 메뉴(showContextMenu)와 토스트(showToast)를 도입해 보드 카드,
  리스트 행, 달력 막대, 타임라인 아이템, 세션 컬럼 헤더, 홈 프로젝트 카드,
  사이드바 프로젝트 트리, 멤버 행, 알림 행까지 9곳에 열기/완료토글/삭제 등
  빠른 조작 메뉴를 추가.
- 프로젝트 생성/수정/삭제, 멤버 추가/삭제, 홈 업무모달 저장/삭제/완료토글,
  알림 모두읽음 등 남아있던 location.reload() 를 모두 로컬 DOM/상태 patch
  기반 optimistic update 로 전환.
- 8초 주기 실시간 동기화 폴러도 전체 새로고침 대신 업무/세션/멤버만 조용히
  재조회해 병합하도록 변경(softSyncProjectRef).
- 로컬에 Postgres+세션 우회 로그인으로 실제 서버 붙여 헤드리스 크롬으로
  검증하는 과정에서 실사용 버그 2건 발견해 같이 수정: 폴러가 재조회한
  업무에 context_project_id 가 없어 스코프 필터에 걸려 화면에서 사라지던
  문제, 서버가 최초 렌더한 업무 행은 data-task-id 가 <li> 가 아니라 안쪽
  <a> 에만 있어 수정/삭제가 조용히 씹히던 문제.
This commit is contained in:
2026-09-16 12:31:01 +09:00
parent 59b7f904bf
commit 27d91b9f6b
5 changed files with 670 additions and 119 deletions
+18
View File
@@ -701,3 +701,21 @@ label.pj-desc-fmtbtn { line-height: 26px; }
.pj-inbox-sub { font-size: 12.5px; color: #525860; margin-top: 2px; }
.pj-inbox-meta { font-size: 11px; color: #9aa1a9; margin-top: 4px; }
.pj-inbox-go { align-self: center; padding: 4px 12px; font-size: 12px; }
/* ── 우클릭 컨텍스트 메뉴 — 클릭 좌표 기준 고정 위치(.pj-daypop 은 앵커
엘리먼트 기준이라 좌표 배치가 다름). z-index 는 .pj-daypop(2100) 보다
위, .erp-dialog(9999) 보다 아래. ── */
.pj-ctxmenu {
position: fixed; z-index: 2200; min-width: 180px;
background: #fff; border: 1px solid var(--pj-border);
border-radius: 10px; box-shadow: var(--pj-card-shadow-hover); padding: 6px;
}
.pj-ctxmenu-item {
display: flex; align-items: center; gap: 8px; width: 100%; text-align: left;
border: none; background: transparent; padding: 8px 10px; border-radius: 7px;
font-size: 13px; color: var(--pj-ink); cursor: pointer;
}
.pj-ctxmenu-item:hover { background: var(--pj-accent-tint); }
.pj-ctxmenu-item.is-danger { color: #c22b10; }
.pj-ctxmenu-item.is-danger:hover { background: #fbecea; }
.pj-ctxmenu-sep { height: 1px; background: var(--pj-border); margin: 4px 2px; }