feat: use full-width row buttons for history list to avoid radio button selection
This commit is contained in:
@@ -782,43 +782,43 @@ def page_history():
|
||||
if st.session_state["selected_analysis_id"] not in valid_ids and records:
|
||||
st.session_state["selected_analysis_id"] = records[0]["id"]
|
||||
|
||||
# 2컬럼 대시보드 레이아웃 구성
|
||||
col_list, col_detail = st.columns([1, 2.5])
|
||||
st.write("### 📋 분석 이력 목록")
|
||||
st.caption("💡 아래 목록에서 **원하는 행(보고서 카드)**을 누르시면 하단의 상세 분석 내역이 즉시 갱신됩니다.")
|
||||
|
||||
# 1. 왼쪽 컬럼: 분석 이력 카드 버튼 목록 (마우스로 편하게 누르는 영역)
|
||||
with col_list:
|
||||
st.write("### 📋 보고서 목록")
|
||||
st.caption("아래 목록을 클릭하시면 상세 내역이 오른쪽에 즉시 표시됩니다.")
|
||||
status_emoji = {"critical": "🔴", "warning": "🟡", "healthy": "🟢"}
|
||||
|
||||
with st.container(height=650):
|
||||
# 스크롤 가능한 컨테이너 내부에 라디오 버튼이 없는 가로형 통짜 클릭 행 렌더링
|
||||
with st.container(height=380):
|
||||
for r in records:
|
||||
emoji = status_emoji.get(r['overall_status'], '🟢')
|
||||
is_selected = (r["id"] == st.session_state["selected_analysis_id"])
|
||||
|
||||
# 선택된 보고서는 강조 표시
|
||||
prefix = "▶️ " if is_selected else ""
|
||||
btn_label = f"{prefix}{emoji} [ID: {r['id']}] {r['filename'][:23]}\n({r['created_at'].split()[0]})"
|
||||
# 행 전체를 하나의 널찍한 버튼으로 구성 (마우스 클릭 영역 극대화)
|
||||
# 라벨 포맷: 상태이모지 | 파일명 | 분석일시 | 요약통계
|
||||
btn_label = (
|
||||
f"{emoji} [ID: {r['id']}] {r['filename'][:30]} | "
|
||||
f"🕒 {r['created_at']} | "
|
||||
f"🎮 GPU {r['gpu_count']}개 / ⚠️ XID {r['xid_count']}건 / 🔧 RMA {r['rma_count']}대"
|
||||
)
|
||||
|
||||
# 버튼으로 구현하여 일반 마우스 클릭이 100% 동작하도록 처리
|
||||
# 버튼 클릭 시 해당 보고서 ID로 세션 상태를 저장하고 화면 갱신
|
||||
if st.button(
|
||||
btn_label,
|
||||
key=f"btn_hist_{r['id']}",
|
||||
key=f"btn_row_{r['id']}",
|
||||
use_container_width=True,
|
||||
type="primary" if is_selected else "secondary"
|
||||
):
|
||||
st.session_state["selected_analysis_id"] = r["id"]
|
||||
st.rerun()
|
||||
|
||||
# 2. 오른쪽 컬럼: 선택된 보고서의 상세 분석 내용 렌더링
|
||||
with col_detail:
|
||||
# 상세 조회
|
||||
st.markdown("---")
|
||||
selected_id = st.session_state["selected_analysis_id"]
|
||||
detail = get_analysis_detail(selected_id)
|
||||
|
||||
if not detail:
|
||||
st.warning(f"ID {selected_id}에 해당하는 분석 결과가 없습니다.")
|
||||
else:
|
||||
st.write(f"### 🔎 상세 분석 결과 (보고서 ID: {selected_id})")
|
||||
return
|
||||
|
||||
# 메모 편집 (editor/admin만)
|
||||
perms = get_perms()
|
||||
|
||||
Reference in New Issue
Block a user