lost-sia
Version:
Single Image Annotation Tool
107 lines (97 loc) • 2.63 kB
JSX
import React, { useState, useEffect } from 'react'
import { List, Label } from 'semantic-ui-react'
import InfoBox from './InfoBox'
import * as colorlut from '../utils/color'
// import actions from '../../../../actions'
// import * as transform from '../utils/transform'
// const { siaShowImgBar } = actions
const AnnoStats = (props) => {
const [hideList, setHideList] = useState([])
useEffect(() => {
setHideList([])
}, [props.imgLoadCount])
const onDismiss = () => {
if (props.onDismiss) {
props.onDismiss()
}
}
const onLblClick = (lbl) => {
let hideLbl = false
if (hideList.includes(lbl.id)) {
setHideList(hideList.filter((e) => e !== lbl.id))
hideLbl = false
} else {
// hideList.push(lbl.id)
setHideList([...hideList, lbl.id])
hideLbl = true
}
if (props.onHideLbl) {
props.onHideLbl(lbl, hideLbl)
}
}
const renderRow = (s) => {
const opacity = hideList.includes(s.id) ? 0.5 : 1.0
return (
<List.Item key={s.id}>
<List.Content>
<Label
as="a"
tag
style={{ background: s.color, opacity: opacity }}
onClick={() => onLblClick(s)}
>
{s.label}
<Label.Detail>{s.amount}</Label.Detail>
</Label>
</List.Content>
</List.Item>
)
}
const renderRows = () => {
let stats = {}
props.annos.forEach((a) => {
// // console.log('render rows', a)
if (a.status !== 'deleted') {
a.labelIds.forEach((lblId) => {
if (lblId in stats) {
stats[lblId] += 1
} else {
stats[lblId] = 1
}
})
if (a.labelIds.length === 0) {
if ((-1) in stats) {
stats[-1] += 1
} else {
stats[-1] = 1
}
}
}
})
const res = Object.entries(stats).map(([key, value]) => {
let lbl = props.possibleLabels.find((e) => {
return e.id === parseInt(key)
})
if (!lbl) {
lbl = { id: -1, label: 'No Label', color: colorlut.getDefaultColor() }
}
lbl.amount = value
// return renderRow({class:idToLbl[key], amount:value, color:idToColor[key]})
return renderRow(lbl)
})
return res
}
const renderDescription = () => {
return <List>{renderRows()}</List>
}
return (
<InfoBox
header={'Annotations per Label'}
content={renderDescription()}
visible={props.visible}
defaultPos={props.defaultPos}
onDismiss={(e) => onDismiss()}
/>
)
}
export default AnnoStats