DisclosureList.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import '../style.scss';
  2. import Link from 'next/link';
  3. import { DisclosureRow, CORP_CLS_LABEL, CorpClsCode } from '@/types/market';
  4. import { dartViewerUrl } from '@/lib/utils/market';
  5. function corpClsLabel(cls: string): string {
  6. return CORP_CLS_LABEL[cls as CorpClsCode] ?? cls;
  7. }
  8. // 공시 컴팩트 리스트 — 개요/피드 공용 (RSC). 회사명 | 법인구분 | 보고서명(DART 링크) | 접수일
  9. export default function DisclosureList({ rows }: { rows: DisclosureRow[] })
  10. {
  11. if (rows.length === 0) {
  12. return <p className='market__empty'>표시할 공시가 없습니다.</p>;
  13. }
  14. return (
  15. <ul className='market__disclosure-list'>
  16. {rows.map(row => (
  17. <li key={row.rceptNo} className='market__disclosure-item'>
  18. {row.stockCode ? (
  19. <Link href={`/stock/${row.stockCode}?tab=disclosure`} className='market__disclosure-corp'>
  20. {row.corpName}
  21. </Link>
  22. ) : (
  23. <span className='market__disclosure-corp'>{row.corpName}</span>
  24. )}
  25. <span className='market__cls-badge'>{corpClsLabel(row.corpCls)}</span>
  26. <a
  27. href={dartViewerUrl(row.rceptNo)}
  28. target='_blank'
  29. rel='noopener noreferrer'
  30. className='market__disclosure-report'
  31. title={row.reportNm}
  32. >
  33. {row.reportNm}
  34. </a>
  35. <span className='market__disclosure-date'>{row.rceptDt}</span>
  36. </li>
  37. ))}
  38. </ul>
  39. );
  40. }