Authored by 叶弯弯

Merge branch 'develop' of git.yoho.cn:mobile/yh_vendor into develop

@@ -17,6 +17,8 @@ @@ -17,6 +17,8 @@
17 5AC1B39F4940B0FAC56474FA /* libPods-YH_Vendor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B562CE3CB8E496AF9768090D /* libPods-YH_Vendor.a */; }; 17 5AC1B39F4940B0FAC56474FA /* libPods-YH_Vendor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B562CE3CB8E496AF9768090D /* libPods-YH_Vendor.a */; };
18 87AF818B1CFD959D00ACE834 /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 87AF818A1CFD959D00ACE834 /* libRNDeviceInfo.a */; }; 18 87AF818B1CFD959D00ACE834 /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 87AF818A1CFD959D00ACE834 /* libRNDeviceInfo.a */; };
19 87AF81AF1D00324300ACE834 /* echarts.min.js in Resources */ = {isa = PBXBuildFile; fileRef = 87AF81AE1D00324300ACE834 /* echarts.min.js */; }; 19 87AF81AF1D00324300ACE834 /* echarts.min.js in Resources */ = {isa = PBXBuildFile; fileRef = 87AF81AE1D00324300ACE834 /* echarts.min.js */; };
  20 + 87AF81B21D01168400ACE834 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 87AF81B01D01168400ACE834 /* libReact.a */; };
  21 + 87AF81B31D01168400ACE834 /* libSSZipArchive.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 87AF81B11D01168400ACE834 /* libSSZipArchive.a */; };
20 /* End PBXBuildFile section */ 22 /* End PBXBuildFile section */
21 23
22 /* Begin PBXContainerItemProxy section */ 24 /* Begin PBXContainerItemProxy section */
@@ -49,6 +51,8 @@ @@ -49,6 +51,8 @@
49 5B51D3B6F0CB3E5047D881CA /* Pods-YH_Vendor.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YH_Vendor.debug.xcconfig"; path = "Pods/Target Support Files/Pods-YH_Vendor/Pods-YH_Vendor.debug.xcconfig"; sourceTree = "<group>"; }; 51 5B51D3B6F0CB3E5047D881CA /* Pods-YH_Vendor.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YH_Vendor.debug.xcconfig"; path = "Pods/Target Support Files/Pods-YH_Vendor/Pods-YH_Vendor.debug.xcconfig"; sourceTree = "<group>"; };
50 87AF818A1CFD959D00ACE834 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libRNDeviceInfo.a; path = "../../../../Library/Developer/Xcode/DerivedData/YH_Vendor-hikjhmoukakxyvegrfxjqofhevhj/Build/Products/Release-iphonesimulator/libRNDeviceInfo.a"; sourceTree = "<group>"; }; 52 87AF818A1CFD959D00ACE834 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libRNDeviceInfo.a; path = "../../../../Library/Developer/Xcode/DerivedData/YH_Vendor-hikjhmoukakxyvegrfxjqofhevhj/Build/Products/Release-iphonesimulator/libRNDeviceInfo.a"; sourceTree = "<group>"; };
51 87AF81AE1D00324300ACE834 /* echarts.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = echarts.min.js; sourceTree = "<group>"; }; 53 87AF81AE1D00324300ACE834 /* echarts.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = echarts.min.js; sourceTree = "<group>"; };
  54 + 87AF81B01D01168400ACE834 /* libReact.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libReact.a; path = "Pods/../build/Debug-iphoneos/libReact.a"; sourceTree = "<group>"; };
  55 + 87AF81B11D01168400ACE834 /* libSSZipArchive.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libSSZipArchive.a; path = "Pods/../build/Debug-iphoneos/libSSZipArchive.a"; sourceTree = "<group>"; };
52 B562CE3CB8E496AF9768090D /* libPods-YH_Vendor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-YH_Vendor.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 56 B562CE3CB8E496AF9768090D /* libPods-YH_Vendor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-YH_Vendor.a"; sourceTree = BUILT_PRODUCTS_DIR; };
53 /* End PBXFileReference section */ 57 /* End PBXFileReference section */
54 58
@@ -64,6 +68,8 @@ @@ -64,6 +68,8 @@
64 isa = PBXFrameworksBuildPhase; 68 isa = PBXFrameworksBuildPhase;
65 buildActionMask = 2147483647; 69 buildActionMask = 2147483647;
66 files = ( 70 files = (
  71 + 87AF81B21D01168400ACE834 /* libReact.a in Frameworks */,
  72 + 87AF81B31D01168400ACE834 /* libSSZipArchive.a in Frameworks */,
67 87AF818B1CFD959D00ACE834 /* libRNDeviceInfo.a in Frameworks */, 73 87AF818B1CFD959D00ACE834 /* libRNDeviceInfo.a in Frameworks */,
68 5AC1B39F4940B0FAC56474FA /* libPods-YH_Vendor.a in Frameworks */, 74 5AC1B39F4940B0FAC56474FA /* libPods-YH_Vendor.a in Frameworks */,
69 ); 75 );
@@ -168,6 +174,8 @@ @@ -168,6 +174,8 @@
168 D5ECECDEB080EA5509812B91 /* Frameworks */ = { 174 D5ECECDEB080EA5509812B91 /* Frameworks */ = {
169 isa = PBXGroup; 175 isa = PBXGroup;
170 children = ( 176 children = (
  177 + 87AF81B01D01168400ACE834 /* libReact.a */,
  178 + 87AF81B11D01168400ACE834 /* libSSZipArchive.a */,
171 87AF818A1CFD959D00ACE834 /* libRNDeviceInfo.a */, 179 87AF818A1CFD959D00ACE834 /* libRNDeviceInfo.a */,
172 B562CE3CB8E496AF9768090D /* libPods-YH_Vendor.a */, 180 B562CE3CB8E496AF9768090D /* libPods-YH_Vendor.a */,
173 ); 181 );
@@ -426,6 +434,10 @@ @@ -426,6 +434,10 @@
426 ); 434 );
427 INFOPLIST_FILE = YH_Vendor/Info.plist; 435 INFOPLIST_FILE = YH_Vendor/Info.plist;
428 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 436 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  437 + LIBRARY_SEARCH_PATHS = (
  438 + "$(inherited)",
  439 + "$(PROJECT_DIR)/build/Debug-iphoneos",
  440 + );
429 OTHER_LDFLAGS = ( 441 OTHER_LDFLAGS = (
430 "$(inherited)", 442 "$(inherited)",
431 "-ObjC", 443 "-ObjC",
@@ -450,6 +462,10 @@ @@ -450,6 +462,10 @@
450 ); 462 );
451 INFOPLIST_FILE = YH_Vendor/Info.plist; 463 INFOPLIST_FILE = YH_Vendor/Info.plist;
452 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 464 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  465 + LIBRARY_SEARCH_PATHS = (
  466 + "$(inherited)",
  467 + "$(PROJECT_DIR)/build/Debug-iphoneos",
  468 + );
453 OTHER_LDFLAGS = ( 469 OTHER_LDFLAGS = (
454 "$(inherited)", 470 "$(inherited)",
455 "-ObjC", 471 "-ObjC",
@@ -27,7 +27,7 @@ export default class AboutUs extends Component { @@ -27,7 +27,7 @@ export default class AboutUs extends Component {
27 <Text style={styles.name}>Yoho!Buy有货</Text> 27 <Text style={styles.name}>Yoho!Buy有货</Text>
28 <View style={styles.version}> 28 <View style={styles.version}>
29 <Text style={styles.versionText}>当前版本:</Text> 29 <Text style={styles.versionText}>当前版本:</Text>
30 - <Text style={styles.versionText}>{'v' + DeviceInfo.getBuildNumber()}</Text> 30 + <Text style={styles.versionText}>{'v' + DeviceInfo.getVersion()}</Text>
31 </View> 31 </View>
32 <TouchableHighlight underlayColor={'white'} style={[styles.update, {opacity: this.props.showUpdate ? 1 : 0}]} 32 <TouchableHighlight underlayColor={'white'} style={[styles.update, {opacity: this.props.showUpdate ? 1 : 0}]}
33 onPress={this.props.showUpdate ? () => {this.props.updateVersion()} : () => {}}> 33 onPress={this.props.showUpdate ? () => {this.props.updateVersion()} : () => {}}>
@@ -6,6 +6,7 @@ import ReactNative from 'react-native'; @@ -6,6 +6,7 @@ import ReactNative from 'react-native';
6 import Immutable, {List} from 'immutable'; 6 import Immutable, {List} from 'immutable';
7 import moment from 'moment'; 7 import moment from 'moment';
8 import ImmutablePropTypes from 'react-immutable-proptypes'; 8 import ImmutablePropTypes from 'react-immutable-proptypes';
  9 +import LoadingIndicator from './indicator/LoadingIndicator';
9 10
10 const { 11 const {
11 Component, 12 Component,
@@ -78,8 +79,12 @@ export default class Meassage extends Component { @@ -78,8 +79,12 @@ export default class Meassage extends Component {
78 <ListView style={styles.list} 79 <ListView style={styles.list}
79 dataSource={this.ds.cloneWithRows(this.props.items.toArray())} 80 dataSource={this.ds.cloneWithRows(this.props.items.toArray())}
80 renderRow={this.renderItem} 81 renderRow={this.renderItem}
  82 + enableEmptySections={true}
81 renderSeparator={(sectionID, rowID) => <View key={`${sectionID}-${rowID}`} style={styles.separator}/>} 83 renderSeparator={(sectionID, rowID) => <View key={`${sectionID}-${rowID}`} style={styles.separator}/>}
82 /> 84 />
  85 + <LoadingIndicator
  86 + isVisible={this.props.isFetching}
  87 + />
83 </View> 88 </View>
84 ); 89 );
85 90
@@ -140,6 +140,8 @@ const styles = StyleSheet.create({ @@ -140,6 +140,8 @@ const styles = StyleSheet.create({
140 position: 'absolute', 140 position: 'absolute',
141 right: 15, 141 right: 15,
142 bottom: 33, 142 bottom: 33,
  143 + width: 60,
  144 + paddingLeft: 30,
143 }, 145 },
144 }); 146 });
145 147
@@ -176,7 +178,7 @@ class NavBar extends React.Component { @@ -176,7 +178,7 @@ class NavBar extends React.Component {
176 this.renderTitle = this.renderTitle.bind(this); 178 this.renderTitle = this.renderTitle.bind(this);
177 } 179 }
178 180
179 - componentWillMount() { 181 + componentDidMount() {
180 if (Platform.OS === 'android') { 182 if (Platform.OS === 'android') {
181 BackAndroid.addEventListener('hardwareBackPress', this.onBackAndroid); 183 BackAndroid.addEventListener('hardwareBackPress', this.onBackAndroid);
182 } 184 }
@@ -413,8 +415,13 @@ class NavBar extends React.Component { @@ -413,8 +415,13 @@ class NavBar extends React.Component {
413 const brandName = this.props.getBrandName ? this.props.getBrandName(childState) : ''; 415 const brandName = this.props.getBrandName ? this.props.getBrandName(childState) : '';
414 return ( 416 return (
415 <View style={styles.userInfoContainer} > 417 <View style={styles.userInfoContainer} >
416 - <Text style={styles.userInfoTitle} onPress={() => {Actions.Logout();}}>{brandName}</Text>  
417 - <Image source={require('../images/white.png')} style={styles.whiteArrow}/> 418 + <Text style={styles.userInfoTitle}>{brandName}</Text>
  419 + <TouchableOpacity
  420 + onPress={() => {Actions.Logout();}}
  421 + style={styles.whiteArrow}
  422 + >
  423 + <Image source={require('../images/white.png')} />
  424 + </TouchableOpacity>
418 </View> 425 </View>
419 426
420 ); 427 );
@@ -39,7 +39,7 @@ export default class User extends Component { @@ -39,7 +39,7 @@ export default class User extends Component {
39 ); 39 );
40 } 40 }
41 41
42 - _renderRow(item) { 42 + _renderRow(item, sectionID, rowID) {
43 let icon = item.icon; 43 let icon = item.icon;
44 return ( 44 return (
45 <TouchableHighlight underlayColor={'white'} onPress={() => this.props.onItemPressed(item)}> 45 <TouchableHighlight underlayColor={'white'} onPress={() => this.props.onItemPressed(item)}>
@@ -47,7 +47,8 @@ export default class User extends Component { @@ -47,7 +47,8 @@ export default class User extends Component {
47 <Image source={item.icon}/> 47 <Image source={item.icon}/>
48 <Text style={styles.title}>{item.title}</Text> 48 <Text style={styles.title}>{item.title}</Text>
49 <Text>{item.subtitle}</Text> 49 <Text>{item.subtitle}</Text>
50 - <Image source={item.arrow} /> 50 + {rowID === 1 ? <Image source={item.arrow} /> : null}
  51 +
51 </View> 52 </View>
52 </TouchableHighlight> 53 </TouchableHighlight>
53 ); 54 );
@@ -8,6 +8,7 @@ import { @@ -8,6 +8,7 @@ import {
8 Text, 8 Text,
9 Platform, 9 Platform,
10 NativeModules, 10 NativeModules,
  11 + Dimensions,
11 } from 'react-native'; 12 } from 'react-native';
12 13
13 export default class ChartView extends Component { 14 export default class ChartView extends Component {
@@ -50,7 +51,7 @@ export default class ChartView extends Component { @@ -50,7 +51,7 @@ export default class ChartView extends Component {
50 } 51 }
51 } 52 }
52 53
53 -const chartHeight = (Platform.OS === 'android') ? 250 : 175; 54 +const chartHeight = (Platform.OS === 'android') ? 250 : 250;
54 55
55 const styles = StyleSheet.create({ 56 const styles = StyleSheet.create({
56 container: { 57 container: {
@@ -59,7 +60,7 @@ const styles = StyleSheet.create({ @@ -59,7 +60,7 @@ const styles = StyleSheet.create({
59 titleStyle: { 60 titleStyle: {
60 fontSize: 14, 61 fontSize: 14,
61 color: '#b1b1b1', 62 color: '#b1b1b1',
62 - marginTop: 20, 63 + marginTop: 15,
63 marginLeft: 15, 64 marginLeft: 15,
64 }, 65 },
65 chartStyle: { 66 chartStyle: {
@@ -70,17 +71,19 @@ const styles = StyleSheet.create({ @@ -70,17 +71,19 @@ const styles = StyleSheet.create({
70 }, 71 },
71 }); 72 });
72 73
73 -const fontSize = (Platform.OS === 'android') ? 14 : 24; 74 +const fontSize = (Platform.OS === 'android') ? 14 : 14;
  75 +const width = Dimensions.get('window').width;
74 76
75 function getHTMLString(xData, yData, jsPath) { 77 function getHTMLString(xData, yData, jsPath) {
76 const HTML = ` 78 const HTML = `
77 <!DOCTYPE html> 79 <!DOCTYPE html>
78 - <html style="height: 100%; margin: 0px;"> 80 + <html style="width: ` + width + `; height: 100%; margin: 0px;">
79 <head> 81 <head>
80 <meta charset="utf-8"> 82 <meta charset="utf-8">
  83 + <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"/>
81 </head> 84 </head>
82 - <body style="height: 100%; margin: 0px;">  
83 - <div id="container" style="height: 100%; margin: 0px; min-height: 250px;"></div> 85 + <body style="width: ` + width + `; height: 100%; margin: 0px;">
  86 + <div id="container" style="width: ` + width + `; height: 100%; margin: 0px; min-height: 250px;"></div>
84 <script type="text/javascript" src="`+ jsPath +`"></script> 87 <script type="text/javascript" src="`+ jsPath +`"></script>
85 <script type="text/javascript"> 88 <script type="text/javascript">
86 var dom = document.getElementById("container"); 89 var dom = document.getElementById("container");
@@ -91,6 +94,13 @@ function getHTMLString(xData, yData, jsPath) { @@ -91,6 +94,13 @@ function getHTMLString(xData, yData, jsPath) {
91 title: { 94 title: {
92 show: false, 95 show: false,
93 }, 96 },
  97 + grid: {
  98 + left: '5%',
  99 + top: 60,
  100 + right: '8%',
  101 + width: '90%',
  102 + height: '65%',
  103 + },
94 xAxis: { 104 xAxis: {
95 type: 'category', 105 type: 'category',
96 boundaryGap: true, 106 boundaryGap: true,
@@ -114,7 +124,7 @@ function getHTMLString(xData, yData, jsPath) { @@ -114,7 +124,7 @@ function getHTMLString(xData, yData, jsPath) {
114 splitLine: { 124 splitLine: {
115 show: false, 125 show: false,
116 }, 126 },
117 - data:[`+xData+`] 127 + data:[` + xData + `]
118 }, 128 },
119 yAxis: { 129 yAxis: {
120 type: 'value', 130 type: 'value',
@@ -135,7 +145,7 @@ function getHTMLString(xData, yData, jsPath) { @@ -135,7 +145,7 @@ function getHTMLString(xData, yData, jsPath) {
135 trigger: 'axis', 145 trigger: 'axis',
136 alwaysShowContent: 'true', 146 alwaysShowContent: 'true',
137 position: function (point,params,dom) { 147 position: function (point,params,dom) {
138 - return [point[0]/7*7-40,0]; 148 + return [point[0] / 7 * 7 - 20, 20];
139 }, 149 },
140 backgroundColor: 'orange', 150 backgroundColor: 'orange',
141 formatter: '{c}', 151 formatter: '{c}',
@@ -148,8 +158,7 @@ function getHTMLString(xData, yData, jsPath) { @@ -148,8 +158,7 @@ function getHTMLString(xData, yData, jsPath) {
148 opacity: 1, 158 opacity: 1,
149 }, 159 },
150 }, 160 },
151 - extraCssText: 'box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);',  
152 - padding:[10,20], 161 + padding:[5, 10],
153 }, 162 },
154 series: [ 163 series: [
155 { 164 {
@@ -31,7 +31,7 @@ export default class LoadingIndicator extends Component { @@ -31,7 +31,7 @@ export default class LoadingIndicator extends Component {
31 overlayHeight: 100, 31 overlayHeight: 100,
32 overlayColor: 'rgba(0,0,0,0.6)', 32 overlayColor: 'rgba(0,0,0,0.6)',
33 size: (Platform.OS === 'ios') ? 'large' : 'Normal', 33 size: (Platform.OS === 'ios') ? 'large' : 'Normal',
34 - color: (Platform.OS === 'ios') ? 'gray' : 'gray', 34 + color: (Platform.OS === 'ios') ? 'white' : 'gray',
35 text: '加载中...', 35 text: '加载中...',
36 textColor: '#eeeeee', 36 textColor: '#eeeeee',
37 textFontSize: 14, 37 textFontSize: 14,
@@ -74,6 +74,7 @@ class MessageContainer extends Component { @@ -74,6 +74,7 @@ class MessageContainer extends Component {
74 <Message 74 <Message
75 items={this.props.message.messageList} 75 items={this.props.message.messageList}
76 onPressItem={this.pressRow} 76 onPressItem={this.pressRow}
  77 + isFetching={this.props.message.isFetching}
77 /> 78 />
78 </View> 79 </View>
79 ); 80 );
@@ -37,47 +37,47 @@ export default function messageReducer(state = initialState, action) { @@ -37,47 +37,47 @@ export default function messageReducer(state = initialState, action) {
37 if (!(state instanceof InitialState)) return initialState.merge(state); 37 if (!(state instanceof InitialState)) return initialState.merge(state);
38 38
39 switch (action.type) { 39 switch (action.type) {
40 - case MESSAGE_DETAIL:{  
41 - // let nextState = state.setIn(['messageDetail', 'title'], action.payload.title)  
42 - // .setIn(['messageDetail', 'content'], action.payload.content)  
43 - // .setIn(['messageDetail', 'time'], action.payload.createTime)  
44 - // .setIn(['messageDetail', 'id'], action.payload.id)  
45 - // .setIn(['messageDetail', 'isRead'], action.payload.isRead)  
46 - // .setIn(); 40 + case MESSAGE_DETAIL: {
47 let nextState = state.set('messageDetail', action.payload); 41 let nextState = state.set('messageDetail', action.payload);
48 return nextState; 42 return nextState;
49 } 43 }
50 - case REQUEST_MSG_NUM:  
51 - case BATCH_SET_MSG_IS_READ:  
52 - case REQUEST_MSG_LIST:  
53 - { 44 +
  45 + case REQUEST_MSG_LIST: {
54 let nextState = state.set('isFetching', true) 46 let nextState = state.set('isFetching', true)
55 .set('error', null); 47 .set('error', null);
56 return nextState; 48 return nextState;
57 } 49 }
58 - case REQUEST_MSG_NUM_SUCCESS: {  
59 - let nextState = state.set('isFetching', false)  
60 - .set('error', null)  
61 - .set('unreadNum', action.payload);  
62 - return nextState;  
63 - } 50 +
64 case REQUEST_MSG_LIST_SUCCESS: { 51 case REQUEST_MSG_LIST_SUCCESS: {
65 let nextState = state.set('isFetching', false) 52 let nextState = state.set('isFetching', false)
66 .set('error', null) 53 .set('error', null)
67 .set('messageList', Immutable.fromJS(action.payload.list)); 54 .set('messageList', Immutable.fromJS(action.payload.list));
68 return nextState; 55 return nextState;
69 } 56 }
70 - case BATCH_SET_MSG_IS_READ_SUCCESS: { 57 +
  58 + case REQUEST_MSG_LIST_FAILURE: {
71 return state.set('isFetching', false) 59 return state.set('isFetching', false)
72 - .set('error', null); 60 + .set('error', action.payload);
73 } 61 }
  62 +
  63 + case REQUEST_MSG_NUM_SUCCESS: {
  64 + let nextState = state.set('unreadNum', action.payload);
  65 + return nextState;
  66 + }
  67 +
  68 + case BATCH_SET_MSG_IS_READ_SUCCESS: {
  69 + // console.log(state);
  70 + let nextState = state.setIn(['messageList', state.messageDetail, 'isRead'], true);
  71 + // console.log(nextState);
  72 + return nextState;
  73 + }
  74 +
  75 + case REQUEST_MSG_NUM:
74 case REQUEST_MSG_NUM_FAILURE: 76 case REQUEST_MSG_NUM_FAILURE:
  77 + case BATCH_SET_MSG_IS_READ:
75 case BATCH_SET_MSG_IS_READ_FAILURE: 78 case BATCH_SET_MSG_IS_READ_FAILURE:
76 - case REQUEST_MSG_LIST_FAILURE:  
77 - {  
78 - return state.set('isFetching', false)  
79 - .set('error', action.payload);  
80 - } 79 + return state;
  80 +
81 case SWITCH_BRAND: 81 case SWITCH_BRAND:
82 case LOGOUT: 82 case LOGOUT:
83 return initialState; 83 return initialState;