import React, { useState } from 'react'; import {View , Text, TextInput, Button,StyleSheet} from 'react-native'; import { Icon } from 'react-native-elements' import TypeHandler from './TypeHandler.js'; import Library from 'trapilib/dist/lib'; let { DataTypes } = Library; export default class ContainerEditor extends React.Component { constructor(props) { super(props); } createHandler(Structure, viewNodeProps, key, onChange, title) { let Editor = TypeHandler(Structure); let editorProps = { title: title || key, onChange: (value) => { onChange && onChange(value, key) } }; switch(Structure.type){ case DataTypes.Types.Array: editorProps.value = viewNodeProps[key]; break; case DataTypes.Types.Integer: case DataTypes.Types.Real: case DataTypes.Types.Bool: editorProps.number = viewNodeProps[key]; break; case DataTypes.Types.Text: editorProps.text = viewNodeProps[key]; break; default: //Must create a generic Vuiew Component return () } return } update(key, val) { this.props.onChange && this.props.onChange(key, val); } render() { let { structure, nodeProps } = this.props; return ( {this.createHandler(structure, nodeProps, 'width', (val) => this.update('width', val), 'W')} {this.createHandler(structure, nodeProps, 'height', (val) => this.update('height', val), 'H')} {this.createHandler(structure, nodeProps, 'paddingTop', (val) => this.update('paddingTop', val), 'Top')} {this.createHandler(structure, nodeProps, 'paddingBottom', (val) => this.update('paddingBottom', val), 'Bottom')} {this.createHandler(structure, nodeProps, 'marginLeft', (val) => this.update('marginLeft', val), 'Left')} {this.createHandler(structure, nodeProps, 'marginRight', (val) => this.update('marginRight', val), 'Right')} ); } } const styles = StyleSheet.create({ container:{ padding:15, flexDirection: 'column', justifyContent: 'space-around', borderBottomColor: '#B4B4B4', borderBottomWidth: 1 }, row: { flexDirection: 'row', justifyContent: 'space-around' }, defaultInput: { marginTop:6, borderWidth:1, width:200 }, title: { }, iconStyle: { fontSize: 18, opacity: 0.6, cursor: 'pointer' } })