diff options
Diffstat (limited to 'lib/vendor-document-list/ship/send-to-shi-button.tsx')
| -rw-r--r-- | lib/vendor-document-list/ship/send-to-shi-button.tsx | 108 |
1 files changed, 105 insertions, 3 deletions
diff --git a/lib/vendor-document-list/ship/send-to-shi-button.tsx b/lib/vendor-document-list/ship/send-to-shi-button.tsx index 52874702..7bb85710 100644 --- a/lib/vendor-document-list/ship/send-to-shi-button.tsx +++ b/lib/vendor-document-list/ship/send-to-shi-button.tsx @@ -325,21 +325,123 @@ export function SendToSHIButton({ <div className="space-y-3"> <Separator /> + {/* 전체 통계 */} <div className="grid grid-cols-3 gap-4 text-sm"> <div className="text-center"> <div className="text-muted-foreground">{t('shiSync.labels.pending')}</div> - <div className="font-medium text-orange-600">{t('shiSync.labels.itemCount', { count: totalStats.totalPending })}</div> + <div className="font-medium text-orange-600"> + {t('shiSync.labels.itemCount', { count: totalStats.totalPending })} + </div> </div> <div className="text-center"> <div className="text-muted-foreground">{t('shiSync.labels.synced')}</div> - <div className="font-medium text-emerald-600 dark:text-emerald-400">{t('shiSync.labels.itemCount', { count: totalStats.totalSynced })}</div> + <div className="font-medium text-emerald-600 dark:text-emerald-400"> + {t('shiSync.labels.itemCount', { count: totalStats.totalSynced })} + </div> </div> <div className="text-center"> <div className="text-muted-foreground">{t('shiSync.labels.failed')}</div> - <div className="font-medium text-destructive">{t('shiSync.labels.itemCount', { count: totalStats.totalFailed })}</div> + <div className="font-medium text-destructive"> + {t('shiSync.labels.itemCount', { count: totalStats.totalFailed })} + </div> </div> </div> + {/* EntityType별 상세 통계 추가 */} + {totalStats.entityTypeDetailsTotals && ( + <> + <Separator className="my-2" /> + <div className="space-y-2"> + <div className="text-sm font-medium flex items-center gap-2"> + {t('shiSync.labels.detailsByType')} + <Badge variant="outline" className="text-xs"> + {t('shiSync.labels.experimental')} + </Badge> + </div> + + <div className="space-y-1 text-xs"> + {/* Document 통계 */} + {totalStats.entityTypeDetailsTotals.document && ( + <div className="flex items-center justify-between p-2 rounded bg-muted/50"> + <span className="font-medium"> + {t('shiSync.labels.documents')} + </span> + <div className="flex gap-3 text-xs"> + {totalStats.entityTypeDetailsTotals.document.pending > 0 && ( + <span className="text-orange-600"> + {totalStats.entityTypeDetailsTotals.document.pending} {t('shiSync.labels.pendingShort')} + </span> + )} + {totalStats.entityTypeDetailsTotals.document.synced > 0 && ( + <span className="text-emerald-600"> + {totalStats.entityTypeDetailsTotals.document.synced} {t('shiSync.labels.syncedShort')} + </span> + )} + {totalStats.entityTypeDetailsTotals.document.failed > 0 && ( + <span className="text-destructive"> + {totalStats.entityTypeDetailsTotals.document.failed} {t('shiSync.labels.failedShort')} + </span> + )} + </div> + </div> + )} + + {/* Revision 통계 */} + {totalStats.entityTypeDetailsTotals.revision && ( + <div className="flex items-center justify-between p-2 rounded bg-muted/50"> + <span className="font-medium"> + {t('shiSync.labels.revisions')} + </span> + <div className="flex gap-3 text-xs"> + {totalStats.entityTypeDetailsTotals.revision.pending > 0 && ( + <span className="text-orange-600"> + {totalStats.entityTypeDetailsTotals.revision.pending} {t('shiSync.labels.pendingShort')} + </span> + )} + {totalStats.entityTypeDetailsTotals.revision.synced > 0 && ( + <span className="text-emerald-600"> + {totalStats.entityTypeDetailsTotals.revision.synced} {t('shiSync.labels.syncedShort')} + </span> + )} + {totalStats.entityTypeDetailsTotals.revision.failed > 0 && ( + <span className="text-destructive"> + {totalStats.entityTypeDetailsTotals.revision.failed} {t('shiSync.labels.failedShort')} + </span> + )} + </div> + </div> + )} + + {/* Attachment 통계 */} + {totalStats.entityTypeDetailsTotals.attachment && ( + <div className="flex items-center justify-between p-2 rounded bg-muted/50"> + <span className="font-medium"> + {t('shiSync.labels.attachments')} + </span> + <div className="flex gap-3 text-xs"> + {totalStats.entityTypeDetailsTotals.attachment.pending > 0 && ( + <span className="text-orange-600"> + {totalStats.entityTypeDetailsTotals.attachment.pending} {t('shiSync.labels.pendingShort')} + </span> + )} + {totalStats.entityTypeDetailsTotals.attachment.synced > 0 && ( + <span className="text-emerald-600"> + {totalStats.entityTypeDetailsTotals.attachment.synced} {t('shiSync.labels.syncedShort')} + </span> + )} + {totalStats.entityTypeDetailsTotals.attachment.failed > 0 && ( + <span className="text-destructive"> + {totalStats.entityTypeDetailsTotals.attachment.failed} {t('shiSync.labels.failedShort')} + </span> + )} + </div> + </div> + )} + </div> + </div> + </> + )} + {/* 계약별 상세 상태 */} {contractStatuses.length > 1 && ( <div className="space-y-2"> |
