import React, { Component } from 'react' import styled from 'styled-components' import { connect } from 'react-redux' import { Redirect, Link } from 'react-router-dom' import HorizontalInput from './parts/HorizontalInput' import { updateRoute, createRoute, deleteRoute } from '../actions/route'; import store from '../store' const StyledRouteForm = styled.div` padding: 1rem; background: #fafafa; ` // TODO: need to deal with shapes class RouteForm extends Component { state = { id: null, agency: null, route_id: "", short_name: "", long_name: "", desc: "", route_type: "2", route_url: "", route_color: "", route_text_color: "", route_sort_order: "0", } constructor() { super() this.handleChange = this.handleChange.bind(this) this.handleSubmit = this.handleSubmit.bind(this) this.handleDelete = this.handleDelete.bind(this) this.renderForm = this.renderForm.bind(this) } handleChange(evt) { let updated = {} updated[evt.target.name] = evt.target.value this.setState(updated) } handleSubmit() { const { id } = this.state let body = { ...this.state } delete body.id delete body.farerule_set delete body.trip_set delete body.geojson if (id !== null) { store.dispatch(updateRoute(id, body)) } else { store.dispatch(createRoute(body)) } this.setState({justSubmit: true}) } handleDelete() { const { id } = this.state store.dispatch(deleteRoute(id)) this.setState({justSubmit: true}) } componentWillMount() { const { props } = this const { agencyId, routeId } = props.match.params const { results } = props.route const ones = results.filter(ele => ele.route_id === routeId) if (ones.length > 0) { this.setState(ones[0]) props.updateBreadcrumb({ agencyId, routeId }) } else { const agencies = props.agency.results.filter(ele => ele.agency_id === agencyId) if (agencies.length > 0) { let d = {} d["agency_id"] = agencies[0].id this.setState(d) props.updateBreadcrumb({ agencyId, routeId: 'new' }) } } } renderForm() { const one = this.state const { agencyId, routeId } = this.props.match.params const { agency } = this.props const agencies = agency.results.filter(ele => ele.agency_id === agencyId) const { fetching } = this.props.route return (

{one.route_id || 'New Route'}  

{one.id !== null &&
}
{agencies[0] && Cancel}
) } render () { const one = this.state const { fetching } = this.props.agency // redirect to view page if no data const { agencyId } = this.props.match.params // redirect to agency list if submitted if (one.justSubmit === true && !fetching) { return } return this.renderForm() } } const mapStateToProps = state => ({ agency: state.agency, route: state.route, }) const connectRouteForm = connect( mapStateToProps, )(RouteForm) export default connectRouteForm