lost-sia
Version:
Single Image Annotation Tool
2 lines (1 loc) • 1.92 kB
JavaScript
import{jsxs as p,jsx as i}from"react/jsx-runtime";import r,{Component as f}from"react";import{getTopPoint as d,getMostLeftPoint as c}from"../utils/transform.js";import{CREATE as a,VIEW as u}from"../types/modes.js";const n=10,b=15;class R extends f{constructor(t){super(t),this.state={top:0,left:0,width:50,height:b,fontSize:n},this.textRef=r.createRef()}componentWillMount(){this.props.mode!==a&&this.setPosition()}componentDidUpdate(){this.props.mode!==a&&this.setPosition()}handleClick(t){t.preventDefault(),this.props.onClick&&this.props.onClick(t)}setPosition(){let t=d(this.props.anno.data);if(t=c(t)[0],this.textRef.current){let h=(this.textRef.current.getBoundingClientRect().width+2)/this.props.svg.scale;h!==this.state.width&&this.setState({width:h,fontSize:Math.ceil(n/this.props.svg.scale)})}let e=t.y-10,s=t.x+7;e<0&&(e=t.y+10),(this.state.top!==e||this.state.left!==s)&&this.setState({top:e,left:s})}render(){let t="";if(!this.props.possibleLabels)return null;let e;switch(this.props.anno.labelIds&&this.props.anno.labelIds.length>0?this.props.anno.labelIds.forEach((s,o)=>{e=this.props.possibleLabels.find(l=>l.id===s),o>0&&(t+=", "),t+=e.label}):this.props.defaultLabel?Number.isInteger(this.props.defaultLabel)?(e=this.props.possibleLabels.find(s=>s.id===this.props.defaultLabel),t=e.label):t=this.props.defaultLabel:t="no label",this.props.mode){case u:return p("g",{children:[i("rect",{x:this.state.left,y:this.state.top-6,width:this.state.width,height:this.state.height,rx:"5",opacity:"0.5",style:this.props.style}),i("text",{x:this.state.left,y:this.state.top,fill:"white",onClick:s=>this.handleClick(s),textAnchor:"start",alignmentBaseline:"central",ref:this.textRef,fontSize:this.state.fontSize+"pt",children:t}),i("rect",{x:this.state.left,y:this.state.top-6,width:this.state.width,height:this.state.height,rx:"5",opacity:"0.01",style:this.props.style})]});default:return null}}}export{R as default};