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