({ pid, files, locale }: { pid: string; files: Artifact[]; locale: string })
| 103 | |
| 104 | return ( |
| 105 | <div className="shelf-project"> |
| 106 | <div className="shelf-project-name" onClick={() => setOpen(!open)}> |
| 107 | <span className="folder-icon">{open ? '📂' : '📁'}</span> |
| 108 | <span className="folder-name">{pid}</span> |
| 109 | <span className="shelf-count">{files.length}</span> |
| 110 | <span className={`folder-arrow ${open ? 'open' : ''}`}>▶</span> |
| 111 | </div> |
| 112 | {open && ( |
| 113 | <div className="shelf-artifacts"> |
| 114 | {stageGroups.map((g) => ( |
| 115 | <div key={g.stage} className="stage-group"> |
| 116 | <div className="stage-group-label">{g.stageName}</div> |
| 117 | {g.artifacts.map((a) => ( |
| 118 | <ArtifactItem key={a.id} a={a} locale={locale} /> |
| 119 | ))} |
| 120 | </div> |
| 121 | ))} |
| 122 | </div> |
| 123 | )} |
| 124 | </div> |
| 125 | ); |
| 126 | } |
| 127 | |
| 128 | export default memo(function DataShelf({ repoId, artifacts }: Props) { |
| 129 | const [open, setOpen] = useState(false); |
| 130 | const { t, locale } = useLocale(); |
| 131 | const meta = REPO_META[repoId]; |
| 132 | const fromColor = LAYER_META[meta.fromLayer].color; |
| 133 | const repoName = t(`repo.${repoId}.name`); |
| 134 | const repoDesc = t(`repo.${repoId}.desc`); |
nothing calls this directly
no test coverage detected