110 lines
3.1 KiB
JavaScript
110 lines
3.1 KiB
JavaScript
![]() |
import React from 'react'
|
||
|
|
||
|
const Develop = (props) => {
|
||
|
// Methods
|
||
|
const renderAttributes = (attr) => {
|
||
|
let list = []
|
||
|
for (let a in attr.list)
|
||
|
list.push(
|
||
|
<li key={a}>
|
||
|
<b>{a}</b>: {renderAttributeValue(attr.list[a])}
|
||
|
</li>
|
||
|
)
|
||
|
|
||
|
return list
|
||
|
}
|
||
|
|
||
|
const renderAttributeValue = (val) => {
|
||
|
if (Array.isArray(val)) {
|
||
|
if (val.length === 1) return val.pop()
|
||
|
let list = []
|
||
|
for (let v of val) list.push(<li key={v}>{v}</li>)
|
||
|
return <ul>{list}</ul>
|
||
|
}
|
||
|
|
||
|
return val
|
||
|
}
|
||
|
|
||
|
const round = (val) => Math.round(val * 10) / 10
|
||
|
|
||
|
if (!props.develop || props.focus === null || Object.keys(props.focus).length < 1) return null
|
||
|
let info = []
|
||
|
for (let part of Object.keys(props.focus)) {
|
||
|
let points = []
|
||
|
let paths = []
|
||
|
for (let i in props.focus[part].paths) {
|
||
|
let name = props.focus[part].paths[i]
|
||
|
let path = props.parts[part].paths[name]
|
||
|
paths.push(
|
||
|
<details key={'patitle-' + name} className={'path c' + (i % 8)}>
|
||
|
<summary>
|
||
|
<span>path.<b>{name}</b></span>
|
||
|
<button
|
||
|
className="px-2 py-1 rounded text-secondary border-secondary border text-sm ml-4"
|
||
|
onClick={() => console.log(`parts.${part}.paths.${name}:`, path)}
|
||
|
>
|
||
|
console.log
|
||
|
</button>
|
||
|
</summary>
|
||
|
{path.attributes.length > 0 && (
|
||
|
<ul key={'ops-' + name}>
|
||
|
<li>
|
||
|
<b>attributes</b>: {renderAttributes(path.attributes)}
|
||
|
</li>
|
||
|
</ul>
|
||
|
)}
|
||
|
</details>
|
||
|
)
|
||
|
}
|
||
|
for (let i in props.focus[part].points) {
|
||
|
let name = props.focus[part].points[i]
|
||
|
let point = props.parts[part].points[name]
|
||
|
points.push(
|
||
|
<details key={'potitle-' + name} className={'point c' + (i % 8)}>
|
||
|
<summary>
|
||
|
<span>point.<b>{name}</b></span>
|
||
|
<button
|
||
|
className="px-2 py-1 rounded text-secondary border-secondary border text-sm hover:bold ml-4"
|
||
|
onClick={() => console.log(`parts.${part}.points.${name}:`, point)}
|
||
|
>
|
||
|
console.log
|
||
|
</button>
|
||
|
</summary>
|
||
|
<ul key={'pdata-' + name} className="text-sm">
|
||
|
<li>
|
||
|
<b>x</b>: {round(point.x)}
|
||
|
</li>
|
||
|
<li>
|
||
|
<b>y</b>: {round(point.y)}
|
||
|
</li>
|
||
|
{point.attributes.length > 0 && (
|
||
|
<li>
|
||
|
<b>attributes</b>: {renderAttributes(point.attributes)}
|
||
|
</li>
|
||
|
)}
|
||
|
</ul>
|
||
|
</details>
|
||
|
)
|
||
|
}
|
||
|
info.push(
|
||
|
<details key={'part-' + part} open>
|
||
|
<summary className="flex flex-row justify-between py-2 mr-2">
|
||
|
<span>parts.<b>{part}</b></span>
|
||
|
<button
|
||
|
className="px-2 rounded text-secondary border-secondary border text-sm"
|
||
|
onClick={() => props.raiseEvent('part', part)}
|
||
|
>
|
||
|
isolate
|
||
|
</button>
|
||
|
</summary>
|
||
|
{points.length > 0 && <ul>{points}</ul>}
|
||
|
{paths.length > 0 && <ul>{paths}</ul>}
|
||
|
</details>
|
||
|
)
|
||
|
}
|
||
|
|
||
|
return <div className="develop">{info}</div>
|
||
|
}
|
||
|
|
||
|
export default Develop
|