import state, { useSelector } from 'state'
import styled from 'styles'
import { ControlType, NumberCodeControl, VectorCodeControl } from 'types'
export default function Control({ id }: { id: string }): JSX.Element {
const control = useSelector((s) => s.data.codeControls[id])
if (!control) return null
return (
<>
{control.type === ControlType.Number ? (
) : control.type === ControlType.Vector ? (
) : null}
>
)
}
function NumberControl({ id, min, max, step, value }: NumberCodeControl) {
return (
state.send('CHANGED_CODE_CONTROL', {
[id]: Number(e.currentTarget.value),
})
}
/>
state.send('CHANGED_CODE_CONTROL', {
[id]: Number(e.currentTarget.value),
})
}
/>
)
}
function VectorControl({ id, value, isNormalized }: VectorCodeControl) {
return (
state.send('CHANGED_CODE_CONTROL', {
[id]: [Number(e.currentTarget.value), value[1]],
})
}
/>
state.send('CHANGED_CODE_CONTROL', {
[id]: [Number(e.currentTarget.value), value[1]],
})
}
/>
state.send('CHANGED_CODE_CONTROL', {
[id]: [value[0], Number(e.currentTarget.value)],
})
}
/>
state.send('CHANGED_CODE_CONTROL', {
[id]: [value[0], Number(e.currentTarget.value)],
})
}
/>
)
}
const Inputs = styled('div', {
display: 'flex',
gap: '8px',
height: '100%',
'& input': {
font: '$ui',
width: '64px',
fontSize: '$1',
border: '1px solid $inputBorder',
backgroundColor: '$input',
color: '$text',
height: '100%',
padding: '0px 6px',
},
"& input[type='range']": {
padding: 0,
flexGrow: 2,
},
})