FitTrackee/fittrackee_client/src/components/Activity/ActivityForms/FormWithoutGpx.jsx

145 lines
3.8 KiB
React
Raw Normal View History

2018-05-08 18:20:41 +02:00
import React from 'react'
import { connect } from 'react-redux'
2018-05-10 16:56:45 +02:00
import {
addActivityWithoutGpx, editActivity
} from '../../../actions/activities'
2018-05-08 18:20:41 +02:00
import { history } from '../../../index'
2018-05-10 16:56:45 +02:00
import { formatActivityDate } from '../../../utils'
2018-05-08 18:20:41 +02:00
function FormWithoutGpx (props) {
2018-05-10 16:56:45 +02:00
const { activity, onAddOrEdit, sports } = props
let activityDate, activityTime, sportId = ''
if (activity) {
const activityDateTime = formatActivityDate(activity.activity_date)
activityDate = activityDateTime.activity_date
activityTime = activityDateTime.activity_time
sportId = activity.sport_id
}
2018-05-08 18:20:41 +02:00
return (
<form
onSubmit={event => event.preventDefault()}
>
2018-05-13 12:52:22 +02:00
<div className="form-group">
<label>
Title:
<input
name="title"
defaultValue={activity ? activity.title : ''}
className="form-control input-lg"
/>
</label>
</div>
2018-05-08 18:20:41 +02:00
<div className="form-group">
<label>
Sport:
<select
className="form-control input-lg"
2018-05-10 16:56:45 +02:00
defaultValue={sportId}
2018-05-08 18:20:41 +02:00
name="sport_id"
required
>
<option value="" />
{sports.map(sport => (
<option key={sport.id} value={sport.id}>
{sport.label}
</option>
))}
</select>
</label>
</div>
<div className="form-group">
<label>
Activity Date:
<div className="container">
<div className="row">
<input
name="activity_date"
2018-05-10 16:56:45 +02:00
defaultValue={activityDate}
className="form-control col-md"
required
type="date"
/>
<input
name="activity_time"
2018-05-10 16:56:45 +02:00
defaultValue={activityTime}
className="form-control col-md"
required
type="time"
/>
</div>
</div>
2018-05-08 18:20:41 +02:00
</label>
</div>
<div className="form-group">
<label>
Duration:
<input
name="duration"
2018-05-10 16:56:45 +02:00
defaultValue={activity ? activity.duration : ''}
className="form-control col-xs-4"
2018-05-10 16:56:45 +02:00
pattern="^([0-9]*[0-9]):([0-5][0-9]):([0-5][0-9])$"
placeholder="hh:mm:ss"
required
type="text"
/>
2018-05-08 18:20:41 +02:00
</label>
</div>
<div className="form-group">
<label>
Distance (km):
<input
name="distance"
2018-05-10 16:56:45 +02:00
defaultValue={activity ? activity.distance : ''}
2018-05-08 18:20:41 +02:00
className="form-control input-lg"
min={0}
required
2018-05-11 18:34:38 +02:00
step="0.001"
2018-05-08 18:20:41 +02:00
type="number"
/>
</label>
</div>
<input
type="submit"
className="btn btn-primary btn-lg btn-block"
2018-05-10 16:56:45 +02:00
onClick={event => onAddOrEdit(event, activity)}
2018-05-08 18:20:41 +02:00
value="Submit"
/>
<input
type="submit"
className="btn btn-secondary btn-lg btn-block"
onClick={() => history.go(-1)}
value="Cancel"
/>
</form>
)
}
export default connect(
() => ({ }),
dispatch => ({
2018-05-10 16:56:45 +02:00
onAddOrEdit: (e, activity) => {
const d = e.target.form.duration.value.split(':')
const duration = +d[0] * 60 * 60 + +d[1] * 60 + +d[2]
const activityDate = `${e.target.form.activity_date.value
} ${ e.target.form.activity_time.value}`
const data = {
activity_date: activityDate,
distance: +e.target.form.distance.value,
duration,
sport_id: +e.target.form.sport_id.value,
2018-05-13 12:52:22 +02:00
title: e.target.form.title.value,
}
2018-05-10 16:56:45 +02:00
if (activity) {
data.id = activity.id
dispatch(editActivity(data))
} else {
dispatch(addActivityWithoutGpx(data))
}
2018-05-08 18:20:41 +02:00
},
})
)(FormWithoutGpx)