@tomorrowevening/hermes
Version:
An extendable set of Web Tools controlled via a separate window for non-intereference with content.
2 lines (1 loc) • 2.69 kB
JavaScript
;const u=require("react/jsx-runtime"),c=require("react"),l=require("../../core/remote/RemoteThree.cjs"),d=require("./inspector/InspectorGroup.cjs");class e extends c.Component{static instance;static groups=[];static groupsRefs=[];static groupTitles=[];static three;constructor(s){super(s),this.state={lastUpdate:Date.now()},e.instance=this,e.three=s.three,s.three.addEventListener(l.ToolEvents.ADD_GROUP,this.addGroup),s.three.addEventListener(l.ToolEvents.REMOVE_GROUP,this.removeGroup)}componentWillUnmount(){this.props.three.removeEventListener(l.ToolEvents.ADD_GROUP,this.addGroup),this.props.three.removeEventListener(l.ToolEvents.REMOVE_GROUP,this.removeGroup)}render(){return u.jsx("div",{className:"customGroups",children:e.groups},this.state.lastUpdate)}addGroup=s=>{const n=JSON.parse(s.value),r=[];n.items.forEach(o=>{r.push({type:o.type,prop:o.prop,title:o.title!==void 0?o.title:o.prop,value:o.value,min:o.min,max:o.max,step:o.step,options:o.options,disabled:o.disabled,onChange:(h,t)=>{this.props.three.updateGroup(n.title,h,t)}})}),e.groups.push(u.jsx(d,{three:this.props.three,title:n.title,items:r},n.title)),e.groupTitles.push(n.title),this.setState({lastUpdate:Date.now()})};removeGroup=s=>{const n=s.value,r=e.groupTitles.length;for(let o=0;o<r;o++)if(n===e.groupTitles[o]){e.groups.splice(o,1),e.groupTitles.splice(o,1),this.setState({lastUpdate:Date.now()});return}};static addEditorGroup(s){const n=e.groupTitles.length;for(let t=0;t<n;t++)if(e.groupTitles[t]===s.title)return e.groupsRefs[t];const r=[];s.items.forEach(t=>{r.push({type:t.type,prop:t.prop,title:t.title!==void 0?t.title:t.prop,value:t.value,min:t.min,max:t.max,step:t.step,options:t.options,disabled:t.disabled,onChange:(i,p)=>{s.onUpdate(i,p)}})}),s.subgroups&&s.subgroups.length>0&&s.subgroups.forEach(t=>{const i=[];t.items.forEach(p=>{i.push({type:p.type,prop:p.prop,title:p.title!==void 0?p.title:p.prop,value:p.value,min:p.min,max:p.max,step:p.step,options:p.options,disabled:p.disabled,onChange:(v,a)=>{t.onUpdate(v,a)}})}),r.push({three:e.three,title:t.title,expanded:t.expanded,items:i})});const o=c.createRef(),h=u.jsx(d,{three:e.three,ref:o,title:s.title,expanded:s.expanded,items:r},s.title);return e.groups.push(h),e.groupsRefs.push(o),e.groupTitles.push(s.title),setTimeout(()=>{e.instance?.setState({lastUpdate:Date.now()})},0),o}static removeEditorGroup(s){const n=e.groupTitles.length;for(let r=0;r<n;r++)if(s===e.groupTitles[r]){e.groups.splice(r,1),e.groupTitles.splice(r,1),e.instance?.setState({lastUpdate:Date.now()});return}}static removeAllGroups(){e.groups=[],e.groupTitles=[],e.groupsRefs=[],e.instance?.setState({lastUpdate:Date.now()})}}module.exports=e;