import { createButton } from "@ui/ui_template_elements"; import { table, text } from "@ui/ui_template_general_blocks"; import { createStepBar } from "@ui/ui_template_workflow_layout"; import { workflowSteps } from "../A00_Common/b_page_scaffold"; import { goToWorkflowStage, WORKFLOW_STEP_ROUTES } from "../A00_Common/b_workflow_nav"; import { groupFlowOf } from "../A00_Common/group_workflow"; import type { DashboardUser, ProjectItem } from "./B01_Dashboard_Api_Fetch"; import { canDeleteProject, canEditProject } from "./B01_Dashboard_UI_Helper"; import { openDeleteProjectModal, openEditProjectModal } from "./B01_Dashboard_UI_Modals"; import { DASHBOARD_VISIBLE_ROWS, formatDate, L } from "./B01_Dashboard_UI_Common"; /** 종류 열 글(528-2) — 칸이 없는 옛 응답 = 임도 */ const KIND_LABEL = { ROAD: "DE_New_Road", PLAN: "DE_New_Plan", STABILITY: "DE_New_Stability", EROSION: "DE_New_Erosion", } as const; const kindText = (project: ProjectItem): string => L(KIND_LABEL[(project.project_kind ?? "ROAD") as keyof typeof KIND_LABEL] ?? "DE_New_Road"); export function projectTable(projects: ProjectItem[], currentUser: DashboardUser): HTMLElement { return table( [ L("B01_Dashboard_Table_Project"), L("DE_Kind_Column"), L("B01_Dashboard_Table_Region"), // 진행도(%) 열은 없앴다 (2026-09-06 사용자 지시) — 워크플로 배지가 같은 것을 보여 준다. L("B01_Dashboard_Table_Workflow"), L("B01_Dashboard_Table_Updated"), L("B01_Dashboard_Table_Action"), ], projects.map((project) => { const actCell = document.createElement("div"); actCell.className = "b01-dashboard__actions"; if (canEditProject(currentUser, project)) { actCell.append( createButton({ label: L("Common_Btn_Edit"), variant: "ghost", onClick: () => openEditProjectModal(currentUser, project), }), ); } if (canDeleteProject(currentUser)) { actCell.append( createButton({ label: L("Common_Btn_Delete"), variant: "danger", onClick: () => openDeleteProjectModal(currentUser, project), }), ); } return [ text(project.name), text(kindText(project)), text(project.region), workflow(project), text(formatDate(project.updated_at)), actCell, ]; }), DASHBOARD_VISIBLE_ROWS, ); } /** 단계 막대 — 종류별 단계(ROAD = B03~B09 · PLAN = D02~D04 · STABILITY = E02~E05) · 누름 = 그 단계 화면 */ export function workflow(project: ProjectItem): HTMLElement { const group = groupFlowOf(project.project_kind); const routes = group?.routes ?? WORKFLOW_STEP_ROUTES; return createStepBar( group?.steps ?? workflowSteps(), project.workflow_state?.current_stage ?? project.workflow_stage, { stages: project.workflow_state?.stages, currentStage: project.workflow_state?.current_stage, routes, compact: true, onStepClick: (stepIndex) => goToWorkflowStage(project.id, routes[stepIndex]), }, ); }