@@ -7,20 +7,19 @@ import Rating from '../Rating';
77import Switch from '../Switch' ;
88import SearchBar from '../SearchBar' ;
99import FormDatePicker from './comps/datePicker' ;
10+ import Stepper from '../Stepper' ;
11+ import TextArea from '../TextArea' ;
12+ import Slider from '../Slider' ;
13+ import Flex from '../Flex' ;
1014import { View , Text , SafeAreaView , StyleSheet , TextInput } from 'react-native' ;
1115
1216const FormItems : FC < any > = ( { formDatas = [ ] } ) => {
1317 const {
14- innerMethods : { store = { } , updateStore, forceUpdate , validator } ,
18+ innerMethods : { store = { } , updateStore, validator , innerValidate } ,
1519 } = useContext ( Context ) ;
1620
1721 const change = ( field : KeyType , value : any ) => updateStore ?.( { store : { ...store , [ field ] : value } } ) ;
1822
19- const validate = ( ) => {
20- validator . showMessages ( ) ;
21- forceUpdate ( ) ;
22- } ;
23-
2423 const _renderComponent = ( v : FormItemsProps ) => {
2524 const options = v . options || [ ] ;
2625 if ( v . type === 'render' ) {
@@ -30,8 +29,24 @@ const FormItems: FC<any> = ({ formDatas = [] }) => {
3029 return (
3130 < TextInput
3231 value = { store [ v . field ] }
33- onChangeText = { ( value ) => change ( v . field , value ) }
34- onBlur = { ( ) => validate ( ) }
32+ onChangeText = { ( value ) => {
33+ change ( v . field , value ) ;
34+ v ?. attr ?. onChangeText ?.( value ) ;
35+ innerValidate ( ) ;
36+ } }
37+ { ...v . attr }
38+ />
39+ ) ;
40+ }
41+ if ( v . type === 'textArea' ) {
42+ return (
43+ < TextArea
44+ onChange = { ( value : string ) => {
45+ change ( v . field , value ) ;
46+ v ?. attr ?. onChange ?.( value ) ;
47+ innerValidate ( ) ;
48+ } }
49+ value = { store [ v . field ] }
3550 { ...v . attr }
3651 />
3752 ) ;
@@ -41,7 +56,11 @@ const FormItems: FC<any> = ({ formDatas = [] }) => {
4156 < Radio
4257 key = { idx }
4358 checked = { item . value === store [ v . field ] }
44- onPress = { ( ) => change ( v . field , item . value ) }
59+ onPress = { ( ) => {
60+ change ( v . field , item . value ) ;
61+ v ?. attr ?. onPress ?.( item . value ) ;
62+ innerValidate ( ) ;
63+ } }
4564 { ...v . attr }
4665 >
4766 { item . label }
@@ -64,8 +83,9 @@ const FormItems: FC<any> = ({ formDatas = [] }) => {
6483 data . splice ( idx , 1 ) ;
6584 }
6685 change ( v . field , data ) ;
86+ v ?. attr ?. onChange ?.( data ) ;
87+ innerValidate ( ) ;
6788 } }
68- onBlur = { ( ) => validate ( ) }
6989 { ...v . attr }
7090 >
7191 { item . label }
@@ -74,17 +94,39 @@ const FormItems: FC<any> = ({ formDatas = [] }) => {
7494 } ) ;
7595 }
7696 if ( v . type === 'rate' ) {
77- return < Rating onPress = { ( number ) => change ( v . field , number ) } { ...v . attr } /> ;
97+ return (
98+ < Rating
99+ onPress = { ( number ) => {
100+ change ( v . field , number ) ;
101+ v ?. attr ?. onPress ?.( number ) ;
102+ innerValidate ( ) ;
103+ } }
104+ { ...v . attr }
105+ />
106+ ) ;
78107 }
79108 if ( v . type === 'switch' ) {
80- return < Switch checked = { store [ v . field ] } onValueChange = { ( ) => change ( v . field , ! store [ v . field ] ) } { ...v . attr } /> ;
109+ return (
110+ < Switch
111+ checked = { store [ v . field ] }
112+ onValueChange = { ( value ) => {
113+ change ( v . field , ! store [ v . field ] ) ;
114+ v ?. attr ?. onValueChange ?.( value ) ;
115+ innerValidate ( ) ;
116+ } }
117+ { ...v . attr }
118+ />
119+ ) ;
81120 }
82121 if ( v . type === 'search' ) {
83122 return (
84123 < SearchBar
85124 options = { options }
86- onChange = { ( val ) => change ( v . field , val ) }
87- onBlur = { ( ) => validate ( ) }
125+ onChange = { ( value ) => {
126+ change ( v . field , value ) ;
127+ v ?. attr ?. onChange ?.( value ) ;
128+ innerValidate ( ) ;
129+ } }
88130 contentStyle = { { paddingHorizontal : 0 } }
89131 { ...v . attr }
90132 />
@@ -93,14 +135,43 @@ const FormItems: FC<any> = ({ formDatas = [] }) => {
93135 if ( v . type === 'datePicker' ) {
94136 return < FormDatePicker value = { store [ v . field ] } ok = { ( value ) => change ( v . field , value ) } { ...v . attr } /> ;
95137 }
138+ if ( v . type === 'stepper' ) {
139+ return (
140+ < Stepper
141+ value = { store [ v . field ] }
142+ onChange = { ( value ) => {
143+ change ( v . field , value ) ;
144+ v ?. attr ?. onChange ?.( value ) ;
145+ innerValidate ( ) ;
146+ } }
147+ { ...v . attr }
148+ />
149+ ) ;
150+ }
151+ if ( v . type === 'slider' ) {
152+ return (
153+ < Slider
154+ value = { store [ v . field ] }
155+ onChange = { ( value ) => {
156+ change ( v . field , value ) ;
157+ v ?. attr ?. onChange ?.( value ) ;
158+ innerValidate ( ) ;
159+ } }
160+ { ...v . attr }
161+ />
162+ ) ;
163+ }
96164 return null ;
97165 } ;
98166
99167 const Label = ( v : FormItemsProps ) => {
100168 return (
101- < Text style = { styles . label } { ...v . attr } >
102- { v . name }
103- </ Text >
169+ < Flex >
170+ { v . required && < Text style = { { color : 'red' , marginRight : 5 } } > *</ Text > }
171+ < Text style = { styles . label } { ...v . attr } >
172+ { v . name }
173+ </ Text >
174+ </ Flex >
104175 ) ;
105176 } ;
106177
0 commit comments