2018-06-04 14:38:48 +02:00
|
|
|
import { parse } from 'date-fns'
|
|
|
|
|
2018-06-07 14:45:43 +02:00
|
|
|
import FitTrackeeGenericApi from '../fitTrackeeApi'
|
2018-05-01 19:29:21 +02:00
|
|
|
import { history } from '../index'
|
2019-01-05 12:57:19 +01:00
|
|
|
import { formatChartData } from '../utils/activities'
|
2018-05-29 20:08:34 +02:00
|
|
|
import { setError, setLoading } from './index'
|
2018-06-05 19:37:10 +02:00
|
|
|
import { loadProfile } from './user'
|
2018-05-01 19:29:21 +02:00
|
|
|
|
2018-05-10 23:39:59 +02:00
|
|
|
export const pushActivities = activities => ({
|
|
|
|
type: 'PUSH_ACTIVITIES',
|
|
|
|
activities,
|
|
|
|
})
|
|
|
|
|
2019-01-04 18:31:34 +01:00
|
|
|
export const removeActivity = activityId => ({
|
|
|
|
type: 'REMOVE_ACTIVITY',
|
|
|
|
activityId,
|
|
|
|
})
|
|
|
|
|
2018-06-04 14:38:48 +02:00
|
|
|
export const updateCalendar = activities => ({
|
|
|
|
type: 'UPDATE_CALENDAR',
|
|
|
|
activities,
|
|
|
|
})
|
|
|
|
|
2018-05-03 21:42:54 +02:00
|
|
|
export const setGpx = gpxContent => ({
|
|
|
|
type: 'SET_GPX',
|
|
|
|
gpxContent,
|
|
|
|
})
|
2018-05-01 19:29:21 +02:00
|
|
|
|
2018-05-28 15:33:56 +02:00
|
|
|
export const setChartData = chartData => ({
|
|
|
|
type: 'SET_CHART_DATA',
|
|
|
|
chartData,
|
|
|
|
})
|
|
|
|
|
2018-06-12 12:51:23 +02:00
|
|
|
export const addActivity = form => dispatch => FitTrackeeGenericApi
|
|
|
|
.addDataWithFile('activities', form)
|
2018-05-04 23:04:44 +02:00
|
|
|
.then(ret => {
|
|
|
|
if (ret.status === 'created') {
|
2018-05-29 20:08:34 +02:00
|
|
|
if (ret.data.activities.length === 0) {
|
|
|
|
dispatch(setError('activities: no correct file'))
|
|
|
|
} else if (ret.data.activities.length === 1) {
|
2018-06-05 19:37:10 +02:00
|
|
|
dispatch(loadProfile())
|
2018-05-29 20:08:34 +02:00
|
|
|
history.push(`/activities/${ret.data.activities[0].id}`)
|
|
|
|
} else { // ret.data.activities.length > 1
|
2018-06-05 19:37:10 +02:00
|
|
|
dispatch(loadProfile())
|
2018-05-29 20:08:34 +02:00
|
|
|
history.push('/')
|
|
|
|
}
|
2018-05-04 23:04:44 +02:00
|
|
|
} else {
|
|
|
|
dispatch(setError(`activities: ${ret.message}`))
|
|
|
|
}
|
2018-06-11 19:15:38 +02:00
|
|
|
dispatch(setLoading(false))
|
2018-05-04 23:04:44 +02:00
|
|
|
})
|
|
|
|
.catch(error => dispatch(setError(`activities: ${error}`)))
|
2018-05-03 21:42:54 +02:00
|
|
|
|
2018-05-04 23:04:44 +02:00
|
|
|
|
2018-06-12 12:51:23 +02:00
|
|
|
export const addActivityWithoutGpx = form => dispatch => FitTrackeeGenericApi
|
|
|
|
.addData('activities/no_gpx', form)
|
2018-05-08 18:20:41 +02:00
|
|
|
.then(ret => {
|
|
|
|
if (ret.status === 'created') {
|
2018-06-05 19:37:10 +02:00
|
|
|
dispatch(loadProfile())
|
2018-05-08 21:35:37 +02:00
|
|
|
history.push(`/activities/${ret.data.activities[0].id}`)
|
2018-05-08 18:20:41 +02:00
|
|
|
} else {
|
|
|
|
dispatch(setError(`activities: ${ret.message}`))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(error => dispatch(setError(`activities: ${error}`)))
|
|
|
|
|
|
|
|
|
2018-05-04 23:04:44 +02:00
|
|
|
export const getActivityGpx = activityId => dispatch => {
|
2018-05-04 22:30:11 +02:00
|
|
|
if (activityId) {
|
2018-06-12 12:51:23 +02:00
|
|
|
return FitTrackeeGenericApi
|
|
|
|
.getData(`activities/${activityId}/gpx`)
|
2018-05-03 21:42:54 +02:00
|
|
|
.then(ret => {
|
|
|
|
if (ret.status === 'success') {
|
|
|
|
dispatch(setGpx(ret.data.gpx))
|
|
|
|
} else {
|
|
|
|
dispatch(setError(`activities: ${ret.message}`))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(error => dispatch(setError(`activities: ${error}`)))
|
|
|
|
}
|
2018-05-04 23:04:44 +02:00
|
|
|
dispatch(setGpx(null))
|
2018-05-03 21:42:54 +02:00
|
|
|
}
|
2018-05-10 13:11:44 +02:00
|
|
|
|
2018-05-10 16:56:45 +02:00
|
|
|
|
2018-05-28 15:33:56 +02:00
|
|
|
export const getActivityChartData = activityId => dispatch => {
|
|
|
|
if (activityId) {
|
2018-06-12 12:51:23 +02:00
|
|
|
return FitTrackeeGenericApi
|
|
|
|
.getData(`activities/${activityId}/chart_data`)
|
2018-05-28 15:33:56 +02:00
|
|
|
.then(ret => {
|
|
|
|
if (ret.status === 'success') {
|
|
|
|
dispatch(setChartData(formatChartData(ret.data.chart_data)))
|
|
|
|
} else {
|
|
|
|
dispatch(setError(`activities: ${ret.message}`))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(error => dispatch(setError(`activities: ${error}`)))
|
|
|
|
}
|
|
|
|
dispatch(setChartData(null))
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-06-07 14:45:43 +02:00
|
|
|
export const deleteActivity = id => dispatch => FitTrackeeGenericApi
|
2018-05-10 13:11:44 +02:00
|
|
|
.deleteData('activities', id)
|
|
|
|
.then(ret => {
|
|
|
|
if (ret.status === 204) {
|
2019-01-04 18:31:34 +01:00
|
|
|
Promise.resolve(dispatch(removeActivity(id))).then(() =>
|
|
|
|
dispatch(loadProfile())
|
|
|
|
).then(() => history.push('/'))
|
2018-05-11 13:45:54 +02:00
|
|
|
} else {
|
2018-05-10 13:11:44 +02:00
|
|
|
dispatch(setError(`activities: ${ret.status}`))
|
2018-05-11 13:45:54 +02:00
|
|
|
}
|
2018-05-10 13:11:44 +02:00
|
|
|
})
|
|
|
|
.catch(error => dispatch(setError(`activities: ${error}`)))
|
2018-05-10 16:56:45 +02:00
|
|
|
|
|
|
|
|
2018-06-07 14:45:43 +02:00
|
|
|
export const editActivity = form => dispatch => FitTrackeeGenericApi
|
2018-05-10 16:56:45 +02:00
|
|
|
.updateData('activities', form)
|
|
|
|
.then(ret => {
|
|
|
|
if (ret.status === 'success') {
|
2018-06-05 19:37:10 +02:00
|
|
|
dispatch(loadProfile())
|
2018-05-10 16:56:45 +02:00
|
|
|
history.push(`/activities/${ret.data.activities[0].id}`)
|
|
|
|
} else {
|
|
|
|
dispatch(setError(`activities: ${ret.message}`))
|
|
|
|
}
|
2018-06-11 19:15:38 +02:00
|
|
|
dispatch(setLoading(false))
|
2018-05-10 16:56:45 +02:00
|
|
|
})
|
|
|
|
.catch(error => dispatch(setError(`activities: ${error}`)))
|
2018-05-10 23:39:59 +02:00
|
|
|
|
|
|
|
|
2018-06-07 17:06:41 +02:00
|
|
|
export const getMoreActivities = params => dispatch => FitTrackeeGenericApi
|
|
|
|
.getData('activities', params)
|
2018-05-10 23:39:59 +02:00
|
|
|
.then(ret => {
|
|
|
|
if (ret.status === 'success') {
|
|
|
|
if (ret.data.activities.length > 0) {
|
|
|
|
dispatch(pushActivities(ret.data.activities))
|
2018-05-11 13:45:54 +02:00
|
|
|
}
|
2018-05-10 23:39:59 +02:00
|
|
|
} else {
|
|
|
|
dispatch(setError(`activities: ${ret.message}`))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(error => dispatch(setError(`activities: ${error}`)))
|
2018-06-04 14:38:48 +02:00
|
|
|
|
2018-06-07 22:44:52 +02:00
|
|
|
export const getMonthActivities = (from, to) => dispatch =>
|
2018-06-07 14:45:43 +02:00
|
|
|
FitTrackeeGenericApi
|
2018-06-07 22:44:52 +02:00
|
|
|
.getData('activities', { from, to, order: 'asc', per_page: 100 })
|
2018-06-04 14:38:48 +02:00
|
|
|
.then(ret => {
|
|
|
|
if (ret.status === 'success') {
|
|
|
|
if (ret.data.activities.length > 0) {
|
|
|
|
for (let i = 0; i < ret.data.activities.length; i++) {
|
|
|
|
ret.data.activities[i].activity_date = parse(
|
|
|
|
ret.data.activities[i].activity_date
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
2018-06-07 22:44:52 +02:00
|
|
|
dispatch(updateCalendar(ret.data.activities))
|
2018-06-04 14:38:48 +02:00
|
|
|
} else {
|
|
|
|
dispatch(setError(`activities: ${ret.message}`))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(error => dispatch(setError(`activities: ${error}`)))
|