@@ -2,24 +2,16 @@ import React, { FC, useContext } from 'react';
22import { KeyType , FormItemsProps } from './types' ;
33import { isObjectEmpty } from './utils/is' ;
44import { Context } from './hooks/context' ;
5- import Radio from '../Radio' ;
6- import CheckBox from '../CheckBox' ;
7- import Rating from '../Rating' ;
8- import Switch from '../Switch' ;
9- import SearchBar from '../SearchBar' ;
10- import FormDatePicker from './comps/datePicker' ;
115import Stepper from '../Stepper' ;
12- import TextArea from '../TextArea' ;
13- import Slider from '../Slider' ;
146import Label from './comps/label' ;
157import Tip from './comps/tip' ;
168import FormList from './formList' ;
17- import { View , SafeAreaView , StyleSheet , TextInput } from 'react-native' ;
9+ import { View , SafeAreaView } from 'react-native' ;
1810import styles from './styles' ;
1911
2012const FormItems : FC < any > = ( { formDatas = [ ] } ) => {
2113 const {
22- innerMethods : { store = { } , updateStore, validator , innerValidate, watch, customComponentList } ,
14+ innerMethods : { store = { } , updateStore, innerValidate, watch, customComponentList, initialValues } ,
2315 } = useContext ( Context ) ;
2416
2517 const change = ( field : KeyType , value : unknown ) => {
@@ -28,141 +20,14 @@ const FormItems: FC<any> = ({ formDatas = [] }) => {
2820 } ;
2921
3022 const _renderComponent = ( v : FormItemsProps ) => {
31- const options = v . options || [ ] ;
32- if ( v . type === 'input' ) {
33- return (
34- < TextInput
35- value = { store [ v . field ] }
36- onChangeText = { ( value ) => {
37- change ( v . field , value ) ;
38- innerValidate ( ) ;
39- } }
40- { ...v . attr }
41- />
42- ) ;
43- }
44- if ( v . type === 'textArea' ) {
45- return (
46- < TextArea
47- onChange = { ( value : string ) => {
48- change ( v . field , value ) ;
49- innerValidate ( ) ;
50- } }
51- value = { store [ v . field ] }
52- { ...v . attr }
53- />
54- ) ;
55- }
56- if ( v . type === 'radio' ) {
57- return options . map ( ( item , idx ) => (
58- < Radio
59- key = { idx }
60- checked = { item . value === store [ v . field ] }
61- onPress = { ( ) => {
62- change ( v . field , item . value ) ;
63- innerValidate ( ) ;
64- } }
65- { ...v . attr }
66- >
67- { item . label }
68- </ Radio >
69- ) ) ;
70- }
71- if ( v . type === 'checkBox' ) {
72- return options . map ( ( item , idx ) => {
73- const values = store [ v . field ] || [ ] ;
74- return (
75- < CheckBox
76- key = { idx }
77- checked = { values . includes ( item . value ) }
78- onChange = { ( ) => {
79- let data = store [ v . field ] || [ ] ;
80- if ( ! data . includes ( item . value ) ) {
81- data . push ( item . value ) ;
82- } else {
83- const idx = data . findIndex ( ( v : KeyType ) => v === item . value ) ;
84- data . splice ( idx , 1 ) ;
85- }
86- change ( v . field , data ) ;
87- innerValidate ( ) ;
88- } }
89- { ...v . attr }
90- >
91- { item . label }
92- </ CheckBox >
93- ) ;
94- } ) ;
95- }
96- if ( v . type === 'rate' ) {
97- return (
98- < Rating
99- onPress = { ( number ) => {
100- change ( v . field , number ) ;
101- innerValidate ( ) ;
102- } }
103- { ...v . attr }
104- />
105- ) ;
106- }
107- if ( v . type === 'switch' ) {
108- return (
109- < Switch
110- checked = { store [ v . field ] }
111- onValueChange = { ( value ) => {
112- change ( v . field , ! store [ v . field ] ) ;
113- innerValidate ( ) ;
114- } }
115- { ...v . attr }
116- />
117- ) ;
118- }
119- if ( v . type === 'search' ) {
120- return (
121- < SearchBar
122- options = { options }
123- onChange = { ( value ) => {
124- change ( v . field , value ) ;
125- innerValidate ( ) ;
126- } }
127- contentStyle = { { paddingHorizontal : 0 } }
128- { ...v . attr }
129- />
130- ) ;
131- }
132- if ( v . type === 'datePicker' ) {
133- return < FormDatePicker value = { store [ v . field ] } ok = { ( value ) => change ( v . field , value ) } { ...v . attr } /> ;
134- }
135- if ( v . type === 'stepper' ) {
136- return (
137- < Stepper
138- value = { store [ v . field ] }
139- onChange = { ( value ) => {
140- change ( v . field , value ) ;
141- innerValidate ( ) ;
142- } }
143- { ...v . attr }
144- />
145- ) ;
146- }
147- if ( v . type === 'slider' ) {
148- return (
149- < Slider
150- value = { store [ v . field ] }
151- onChange = { ( value ) => {
152- change ( v . field , value ) ;
153- innerValidate ( ) ;
154- } }
155- { ...v . attr }
156- />
157- ) ;
158- }
15923 if ( v . type === 'cardList' ) {
16024 return < FormList formListValue = { v } /> ;
16125 }
16226 // 自定义组件
16327 if ( ! isObjectEmpty ( customComponentList ) && Object . keys ( customComponentList ) . includes ( v . type ) ) {
16428 return React . isValidElement ( customComponentList [ v . type ] )
16529 ? React . cloneElement ( customComponentList [ v . type ] , {
30+ ...v ,
16631 ...v . attr ,
16732 value : store [ v . field ] ,
16833 onChange : ( value : unknown ) => {
0 commit comments