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

132 lines
3.5 KiB
React
Raw Normal View History

2018-05-08 16:42:10 +02:00
import React from 'react'
import { connect } from 'react-redux'
import { setLoading } from '../../../actions/index'
import { addActivity, editActivity } from '../../../actions/activities'
2018-05-08 16:42:10 +02:00
import { history } from '../../../index'
import { gpxLimit } from '../../../utils'
2018-05-08 16:42:10 +02:00
2019-08-28 15:35:22 +02:00
function FormWithGpx(props) {
const { activity, loading, onAddActivity, onEditActivity, sports } = props
const sportId = activity ? activity.sport_id : ''
2018-05-08 16:42:10 +02:00
return (
<form
encType="multipart/form-data"
method="post"
onSubmit={event => event.preventDefault()}
>
<div className="form-group">
<label>
Sport:
<select
className="form-control input-lg"
defaultValue={sportId}
disabled={loading}
2018-05-08 16:42:10 +02:00
name="sport"
required
>
<option value="" />
{sports.map(sport => (
<option key={sport.id} value={sport.id}>
{sport.label}
</option>
))}
</select>
</label>
</div>
2018-05-13 12:52:22 +02:00
{activity ? (
<div className="form-group">
<label>
Title:
<input
name="title"
defaultValue={activity ? activity.title : ''}
disabled={loading}
2018-05-13 12:52:22 +02:00
className="form-control input-lg"
/>
</label>
</div>
) : (
<div className="form-group">
<label>
2019-08-28 15:35:22 +02:00
{/* prettier-ignore */}
<strong>gpx</strong> file or <strong>zip</strong> file containing
{/* prettier-ignore */}
<strong> gpx</strong> (no folder inside, {gpxLimit} files max):
<input
accept=".gpx, .zip"
2019-01-07 11:47:51 +01:00
className="form-control form-control-file gpx-file"
disabled={loading}
name="gpxFile"
required
type="file"
/>
</label>
</div>
)}
<div className="form-group">
<label>
Notes:
<textarea
name="notes"
defaultValue={activity ? activity.notes : ''}
disabled={loading}
className="form-control input-lg"
maxLength="500"
/>
</label>
</div>
{loading ? (
<div className="loader" />
) : (
<div>
<input
type="submit"
className="btn btn-primary btn-lg btn-block"
2019-08-28 15:35:22 +02:00
onClick={event =>
activity ? onEditActivity(event, activity) : onAddActivity(event)
}
value="Submit"
/>
<input
type="submit"
className="btn btn-secondary btn-lg btn-block"
2019-01-07 11:47:51 +01:00
onClick={() => history.push('/')}
value="Cancel"
/>
</div>
)}
2018-05-08 16:42:10 +02:00
</form>
)
}
export default connect(
state => ({
2019-08-28 15:35:22 +02:00
loading: state.loading,
}),
2018-05-08 16:42:10 +02:00
dispatch => ({
onAddActivity: e => {
2018-06-11 19:15:38 +02:00
dispatch(setLoading(true))
2018-05-08 16:42:10 +02:00
const form = new FormData()
form.append('file', e.target.form.gpxFile.files[0])
2019-08-28 15:35:22 +02:00
/* prettier-ignore */
2018-05-08 16:42:10 +02:00
form.append(
'data',
`{"sport_id": ${e.target.form.sport.value
}, "notes": "${e.target.form.notes.value}"}`
2018-05-08 16:42:10 +02:00
)
dispatch(addActivity(form))
},
onEditActivity: (e, activity) => {
2019-08-28 15:35:22 +02:00
dispatch(
editActivity({
id: activity.id,
notes: e.target.form.notes.value,
sport_id: +e.target.form.sport.value,
title: e.target.form.title.value,
})
)
},
2018-05-08 16:42:10 +02:00
})
)(FormWithGpx)