/** * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose */ import * as React from 'react' import { ParamDefinition as PD } from '../../mol-util/param-definition'; import { BooleanParamComponent } from './parameter/boolean'; import { NumberParamComponent } from './parameter/number'; import { SelectParamComponent } from './parameter/select'; import { MultiSelectParamComponent } from './parameter/multi-select'; import { TextParamComponent } from './parameter/text'; import { ColorParamComponent } from './parameter/color'; import { camelCaseToWords } from '../../mol-util/string'; interface ParametersProps

{ params: P values: { [k in keyof P]: P[k]['defaultValue'] } onChange(k: K, v: P[K]['defaultValue']): void } type ParametersState = {} function getParamComponent

(label: string, param: PD.Any, value: P['defaultValue'], onChange: (v: P['defaultValue']) => void) { switch (param.type) { case 'boolean': return case 'number': return case 'select': return case 'multi-select': return case 'text': return case 'color': return } return '' } function getLabel(name: string, param: PD.Base) { return param.label === undefined ? camelCaseToWords(name) : param.label } export class ParametersComponent

extends React.Component, ParametersState> { onChange(k: string, value: any) { this.props.onChange(k, value) } render() { return

{ Object.keys(this.props.params).map(k => { const param = this.props.params[k] const value = this.props.values[k] const label = getLabel(k, param) return
{getParamComponent(label, param, value, v => this.onChange(k, v))}
})}
; } }