diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-21 06:04:56 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-21 06:04:56 +0000 |
| commit | b845ccde2910894911233cda273657d2b52e63f9 (patch) | |
| tree | f12032484952225d099b3399f800d912bfdbda88 /lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx | |
| parent | eacfa3f36274e495838a7114d68ff80a0f257a6a (diff) | |
(임수민) 준법 Red Flag 수정
Diffstat (limited to 'lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx')
| -rw-r--r-- | lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx b/lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx index c872aede..b2c811fd 100644 --- a/lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx +++ b/lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx @@ -38,6 +38,8 @@ interface GetColumnsProps { isLoadingGtcData: boolean redFlagData: Record<number, boolean> isLoadingRedFlagData: boolean + redFlagResolutionData: Record<number, { resolved: boolean; resolvedAt: Date | null }> + isLoadingRedFlagResolutionData: boolean isComplianceTemplate: boolean router: NextRouter; } @@ -61,6 +63,8 @@ export function getDetailColumns({ isLoadingGtcData, redFlagData, isLoadingRedFlagData, + redFlagResolutionData, + isLoadingRedFlagResolutionData, isComplianceTemplate, router }: GetColumnsProps): ColumnDef<BasicContractView>[] { @@ -223,6 +227,44 @@ export function getDetailColumns({ enableHiding: false, } + // Red Flag 해제 컬럼 (준법서약 템플릿만) + const redFlagResolutionColumn: ColumnDef<BasicContractView> = { + id: "redFlagResolution", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="Red Flag 해제" /> + ), + cell: ({ row }) => { + const contract = row.original; + const contractId = contract.id; + + // 로딩 중이면 로딩 표시 + if (isLoadingRedFlagResolutionData) { + return <Loader2 className="h-4 w-4 animate-spin text-muted-foreground" />; + } + + const resolution = redFlagResolutionData[contractId]; + + if (resolution?.resolved && resolution.resolvedAt) { + return ( + <div className="text-sm"> + <Badge variant="default" className="font-medium bg-green-600"> + 해제됨 + </Badge> + <div className="text-xs text-gray-500 mt-1"> + {formatDateTime(resolution.resolvedAt, "KR")} + </div> + </div> + ); + } + + return ( + <div className="text-sm text-gray-400">-</div> + ); + }, + minSize: 140, + enableHiding: false, + } + // 기본 컬럼 배열 const baseColumns: ColumnDef<BasicContractView>[] = [ selectColumn, @@ -421,8 +463,9 @@ export function getDetailColumns({ ), cell: ({ row }) => { const status = row.getValue("legalReviewStatus") as string | null - const requestedDate = row.getValue("legalReviewRequestedAt") as Date | null - const completedDate = row.getValue("legalReviewCompletedAt") as Date | null + const contract = row.original + const requestedDate = contract.legalReviewRequestedAt as Date | null + const completedDate = contract.legalReviewCompletedAt as Date | null // 법무검토 상태 우선, 없으면 기존 로직으로 판단 if (status) { @@ -554,7 +597,7 @@ export function getDetailColumns({ actionsColumn, ] - // 준법서약 템플릿인 경우 Red Flag 컬럼을 법무검토 상태 뒤에 추가 + // 준법서약 템플릿인 경우 Red Flag 컬럼과 해제 컬럼을 법무검토 상태 뒤에 추가 if (isComplianceTemplate) { const legalReviewStatusIndex = baseColumns.findIndex((col) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -562,7 +605,7 @@ export function getDetailColumns({ }) if (legalReviewStatusIndex !== -1) { - baseColumns.splice(legalReviewStatusIndex + 1, 0, redFlagColumn) + baseColumns.splice(legalReviewStatusIndex + 1, 0, redFlagColumn, redFlagResolutionColumn) } } |
