@api-platform/client-generator
Version:
Generate apps built with Next, Nuxt, Quasar, React, React Native, Vue or Vuetify for any API documented using Hydra or OpenAPI
108 lines (92 loc) • 3.45 kB
JavaScript
import React, { Component } from 'react';
import { View, ScrollView, Text } from 'react-native';
import { connect } from 'react-redux';
import { Actions } from 'react-native-router-flux';
import PropTypes from 'prop-types';
import Form from './Form';
import Spinner from '../Spinner';
import { success } from '../../actions/{{{lc}}}/create';
import { retrieve, update, reset } from '../../actions/{{{lc}}}/update';
import { loading, error } from '../../actions/{{{lc}}}/delete';
import { delayRefresh } from '../../utils/helpers';
class Update extends Component {
componentDidMount() {
this.props.retrieve(this.props.id);
}
componentWillUnmount() {
this.props.reset();
}
onSubmit = (item, values) => {
this.props.update(item, values);
Actions.pop();
delayRefresh();
};
render() {
if (this.props.deleted) return Actions.pop();
const item = this.props.updated ? this.props.updated : this.props.retrieved;
const {viewStyle, textStyleAlert, textStyleSuccess} = styles;
return (
<View style={ {flex: 1} }>
<ScrollView keyboardShouldPersistTaps='always'>
{this.props.created && <View style={viewStyle}><Text style={textStyleAlert}>{this.props.created['@id']} created.</Text></View>}
{this.props.updated && <View style={viewStyle}><Text style={textStyleSuccess}>{this.props.updated['@id']} updated</Text></View>}
{(this.props.retrieveLoading || this.props.updateLoading) && <View style={viewStyle}><Spinner size='large'/></View>}
{this.props.retrieveError && <View style={viewStyle}><Text style={textStyleAlert}>{this.props.retrieveError}</Text></View>}
{this.props.updateError && <View style={viewStyle}><Text style={textStyleAlert}> {this.props.updateError}</Text></View>}
{item && <Form mySubmit={values => this.onSubmit(item, values)} initialValues={item}/>}
</ScrollView>
</View>
);
}
}
const mapStateToProps = state => ({
retrieveError: state.{{{lc}}}.update.retrieveError,
retrieveLoading: state.{{{lc}}}.update.retrieveLoading,
updateError: state.{{{lc}}}.update.updateError,
updateLoading: state.{{{lc}}}.update.updateLoading,
created: state.{{{lc}}}.create.created,
deleted: state.{{{lc}}}.del.deleted,
retrieved: state.{{{lc}}}.update.retrieved,
updated: state.{{{lc}}}.update.updated,
});
const mapDispatchToProps = dispatch => {
return {
retrieve: id => dispatch(retrieve(id)),
update: (item, values) => dispatch(update(item, values)),
reset: () => dispatch(reset()),
};
};
const styles = {
viewStyle: {
borderBottomWidth: 1,
padding: 5,
backgroundColor: '#fff',
justifyContent: 'flex-start',
flexDirection: 'row',
borderColor: '#ddd',
position: 'relative',
},
textStyleAlert: {
color: 'red',
textAlign: 'center',
},
textStyleSuccess: {
color: 'green',
textAlign: 'center',
},
};
Update.propTypes = {
retrieveError: PropTypes.string,
retrieveLoading: PropTypes.bool.isRequired,
updateError: PropTypes.string,
updateLoading: PropTypes.bool.isRequired,
retrieved: PropTypes.object,
updated: PropTypes.object,
deleted: PropTypes.object,
retrieve: PropTypes.func.isRequired,
update: PropTypes.func.isRequired,
reset: PropTypes.func.isRequired,
id: PropTypes.string,
created:PropTypes.func
};
export default connect(mapStateToProps, mapDispatchToProps)(Update);