import React, { Fragment } from 'react' import { generateDefaults } from '@xrengine/engine/src/renderer/materials/constants/DefaultArgs' import BooleanInput from './BooleanInput' import ColorInput from './ColorInput' import InputGroup from './InputGroup' import NumericInput from './NumericInput' import SelectInput from './SelectInput' import TexturePreviewInput from './TexturePreviewInput' export default function ParameterInput({ entity, values, onChange, defaults, thumbnails }: { entity: string values: Object defaults?: Object thumbnails?: Record onChange: (k: string) => (v) => void }) { function setArgsProp(k) { const thisOnChange = onChange(k) return (value) => { //values[k] = value thisOnChange(value) } } function setArgsArrayProp(k, idx) { const thisOnChange = onChange(k) return (value) => { const nuVals = values[k].map((oldVal, oldIdx) => (idx === oldIdx ? value : oldVal)) thisOnChange(nuVals) } } function setArgsObjectProp(k) { const thisOnChange = onChange(k) const oldVal = values[k] return (field) => { return (value) => { const nuVal = Object.fromEntries([ ...Object.entries(oldVal).filter(([_field, _value]) => _field !== field), [field, value] ]) thisOnChange(nuVal) } } } const _defaults = defaults ?? generateDefaults(values) return ( {Object.entries(_defaults).map(([k, parms]: [string, any]) => { const compKey = `${entity}-${k}` return ( {(() => { switch (parms.type) { case 'boolean': return case 'float': return case 'color': return case 'texture': if (thumbnails?.[k]) return else return case 'vec2': case 'vec3': return ( {typeof values[k]?.map === 'function' && (values[k] as number[]).map((arrayVal, idx) => { return ( ) })} ) case 'select': return case 'object': return ( ) default: return <> } })()} ) })} ) }