@@ -24,33 +24,44 @@ var {
2424 View,
2525} = React ;
2626
27+ var regionText = {
28+ latitude : '0' ,
29+ longitude : '0' ,
30+ latitudeDelta : '0' ,
31+ longitudeDelta : '0' ,
32+ }
33+
2734var MapRegionInput = React . createClass ( {
2835
2936 propTypes : {
3037 region : React . PropTypes . shape ( {
31- latitude : React . PropTypes . number ,
32- longitude : React . PropTypes . number ,
33- latitudeDelta : React . PropTypes . number ,
34- longitudeDelta : React . PropTypes . number ,
38+ latitude : React . PropTypes . number . isRequired ,
39+ longitude : React . PropTypes . number . isRequired ,
40+ latitudeDelta : React . PropTypes . number . isRequired ,
41+ longitudeDelta : React . PropTypes . number . isRequired ,
3542 } ) ,
3643 onChange : React . PropTypes . func . isRequired ,
3744 } ,
3845
3946 getInitialState : function ( ) {
4047 return {
41- latitude : 0 ,
42- longitude : 0 ,
43- latitudeDelta : 0 ,
44- longitudeDelta : 0 ,
48+ region : {
49+ latitude : 0 ,
50+ longitude : 0 ,
51+ latitudeDelta : 0 ,
52+ longitudeDelta : 0 ,
53+ }
4554 } ;
4655 } ,
4756
4857 componentWillReceiveProps : function ( nextProps ) {
49- this . setState ( nextProps . region ) ;
58+ this . setState ( {
59+ region : nextProps . region || this . getInitialState ( ) . region
60+ } ) ;
5061 } ,
5162
5263 render : function ( ) {
53- var region = this . state ;
64+ var region = this . state . region || this . getInitialState ( ) . region ;
5465 return (
5566 < View >
5667 < View style = { styles . row } >
@@ -61,6 +72,7 @@ var MapRegionInput = React.createClass({
6172 value = { '' + region . latitude }
6273 style = { styles . textInput }
6374 onChange = { this . _onChangeLatitude }
75+ selectTextOnFocus = { true }
6476 />
6577 </ View >
6678 < View style = { styles . row } >
@@ -71,6 +83,7 @@ var MapRegionInput = React.createClass({
7183 value = { '' + region . longitude }
7284 style = { styles . textInput }
7385 onChange = { this . _onChangeLongitude }
86+ selectTextOnFocus = { true }
7487 />
7588 </ View >
7689 < View style = { styles . row } >
@@ -81,6 +94,7 @@ var MapRegionInput = React.createClass({
8194 value = { '' + region . latitudeDelta }
8295 style = { styles . textInput }
8396 onChange = { this . _onChangeLatitudeDelta }
97+ selectTextOnFocus = { true }
8498 />
8599 </ View >
86100 < View style = { styles . row } >
@@ -91,6 +105,7 @@ var MapRegionInput = React.createClass({
91105 value = { '' + region . longitudeDelta }
92106 style = { styles . textInput }
93107 onChange = { this . _onChangeLongitudeDelta }
108+ selectTextOnFocus = { true }
94109 />
95110 </ View >
96111 < View style = { styles . changeButton } >
@@ -103,23 +118,29 @@ var MapRegionInput = React.createClass({
103118 } ,
104119
105120 _onChangeLatitude : function ( e ) {
106- this . setState ( { latitude : parseFloat ( e . nativeEvent . text ) } ) ;
121+ regionText . latitude = e . nativeEvent . text ;
107122 } ,
108123
109124 _onChangeLongitude : function ( e ) {
110- this . setState ( { longitude : parseFloat ( e . nativeEvent . text ) } ) ;
125+ regionText . longitude = e . nativeEvent . text ;
111126 } ,
112127
113128 _onChangeLatitudeDelta : function ( e ) {
114- this . setState ( { latitudeDelta : parseFloat ( e . nativeEvent . text ) } ) ;
129+ regionText . latitudeDelta = e . nativeEvent . text ;
115130 } ,
116131
117132 _onChangeLongitudeDelta : function ( e ) {
118- this . setState ( { longitudeDelta : parseFloat ( e . nativeEvent . text ) } ) ;
133+ regionText . longitudeDelta = e . nativeEvent . text ;
119134 } ,
120135
121136 _change : function ( ) {
122- this . props . onChange ( this . state ) ;
137+ this . setState ( {
138+ latitude : parseFloat ( regionText . latitude ) ,
139+ longitude : parseFloat ( regionText . longitude ) ,
140+ latitudeDelta : parseFloat ( regionText . latitudeDelta ) ,
141+ longitudeDelta : parseFloat ( regionText . longitudeDelta ) ,
142+ } ) ;
143+ this . props . onChange ( this . state . region ) ;
123144 } ,
124145
125146} ) ;
@@ -130,6 +151,8 @@ var MapViewExample = React.createClass({
130151 return {
131152 mapRegion : null ,
132153 mapRegionInput : null ,
154+ annotations : null ,
155+ isFirstLoad : true ,
133156 } ;
134157 } ,
135158
@@ -138,8 +161,10 @@ var MapViewExample = React.createClass({
138161 < View >
139162 < MapView
140163 style = { styles . map }
141- onRegionChange = { this . _onRegionChanged }
164+ onRegionChange = { this . _onRegionChange }
165+ onRegionChangeComplete = { this . _onRegionChangeComplete }
142166 region = { this . state . mapRegion }
167+ annotations = { this . state . annotations }
143168 />
144169 < MapRegionInput
145170 onChange = { this . _onRegionInputChanged }
@@ -149,14 +174,35 @@ var MapViewExample = React.createClass({
149174 ) ;
150175 } ,
151176
152- _onRegionChanged ( region ) {
153- this . setState ( { mapRegionInput : region } ) ;
177+ _getAnnotations ( region ) {
178+ return [ {
179+ longitude : region . longitude ,
180+ latitude : region . latitude ,
181+ title : 'You Are Here' ,
182+ } ] ;
183+ } ,
184+
185+ _onRegionChange ( region ) {
186+ this . setState ( {
187+ mapRegionInput : region ,
188+ } ) ;
189+ } ,
190+
191+ _onRegionChangeComplete ( region ) {
192+ if ( this . state . isFirstLoad ) {
193+ this . setState ( {
194+ mapRegionInput : region ,
195+ annotations : this . _getAnnotations ( region ) ,
196+ isFirstLoad : false ,
197+ } ) ;
198+ }
154199 } ,
155200
156201 _onRegionInputChanged ( region ) {
157202 this . setState ( {
158203 mapRegion : region ,
159204 mapRegionInput : region ,
205+ annotations : this . _getAnnotations ( region ) ,
160206 } ) ;
161207 } ,
162208
0 commit comments