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 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"; export function projectTable(projects: ProjectItem[], currentUser: DashboardUser): HTMLElement { return table( [ L("B01_Dashboard_Table_Project"), 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(project.region), workflow(project), text(formatDate(project.updated_at)), actCell, ]; }), DASHBOARD_VISIBLE_ROWS, ); } export function workflow(project: ProjectItem): HTMLElement { return createStepBar( workflowSteps(), project.workflow_state?.current_stage ?? project.workflow_stage, { stages: project.workflow_state?.stages, currentStage: project.workflow_state?.current_stage, routes: WORKFLOW_STEP_ROUTES, compact: true, onStepClick: (stepIndex) => goToWorkflowStage(project.id, WORKFLOW_STEP_ROUTES[stepIndex]), }, ); }