diff --git a/fittrackee_client/src/actions/activities.js b/fittrackee_client/src/actions/activities.js index 80785f8e..8228c26f 100644 --- a/fittrackee_client/src/actions/activities.js +++ b/fittrackee_client/src/actions/activities.js @@ -29,155 +29,154 @@ export const setChartData = chartData => ({ chartData, }) -export const addActivity = form => dispatch => FitTrackeeGenericApi - .addDataWithFile('activities', form) - .then(ret => { - if (ret.status === 'created') { - if (ret.data.activities.length === 0) { +export const addActivity = form => dispatch => + FitTrackeeGenericApi.addDataWithFile('activities', form) + .then(ret => { + if (ret.status === 'created') { + if (ret.data.activities.length === 0) { dispatch(setError('activities: no correct file')) - } else if (ret.data.activities.length === 1) { + } else if (ret.data.activities.length === 1) { dispatch(loadProfile()) history.push(`/activities/${ret.data.activities[0].id}`) - } else { // ret.data.activities.length > 1 + } else { + // ret.data.activities.length > 1 dispatch(loadProfile()) history.push('/') + } + } else { + dispatch(setError(`activities: ${ret.message}`)) } - } else { - dispatch(setError(`activities: ${ret.message}`)) - } - dispatch(setLoading(false)) - }) - .catch(error => dispatch(setError(`activities: ${error}`))) + dispatch(setLoading(false)) + }) + .catch(error => dispatch(setError(`activities: ${error}`))) - -export const addActivityWithoutGpx = form => dispatch => FitTrackeeGenericApi - .addData('activities/no_gpx', form) - .then(ret => { - if (ret.status === 'created') { - dispatch(loadProfile()) - history.push(`/activities/${ret.data.activities[0].id}`) - } else { - dispatch(setError(`activities: ${ret.message}`)) - } - }) - .catch(error => dispatch(setError(`activities: ${error}`))) - - -export const getActivityGpx = activityId => dispatch => { - if (activityId) { - return FitTrackeeGenericApi - .getData(`activities/${activityId}/gpx`) +export const addActivityWithoutGpx = form => dispatch => + FitTrackeeGenericApi.addData('activities/no_gpx', form) .then(ret => { - if (ret.status === 'success') { - dispatch(setGpx(ret.data.gpx)) + if (ret.status === 'created') { + dispatch(loadProfile()) + history.push(`/activities/${ret.data.activities[0].id}`) } else { dispatch(setError(`activities: ${ret.message}`)) } }) .catch(error => dispatch(setError(`activities: ${error}`))) + +export const getActivityGpx = activityId => dispatch => { + if (activityId) { + return FitTrackeeGenericApi.getData(`activities/${activityId}/gpx`) + .then(ret => { + if (ret.status === 'success') { + dispatch(setGpx(ret.data.gpx)) + } else { + dispatch(setError(`activities: ${ret.message}`)) + } + }) + .catch(error => dispatch(setError(`activities: ${error}`))) } dispatch(setGpx(null)) } export const getSegmentGpx = (activityId, segmentId) => dispatch => { if (activityId) { - return FitTrackeeGenericApi - .getData(`activities/${activityId}/gpx/segment/${segmentId}`) - .then(ret => { - if (ret.status === 'success') { - dispatch(setGpx(ret.data.gpx)) - } else { - dispatch(setError(`activities: ${ret.message}`)) - } - }) - .catch(error => dispatch(setError(`activities: ${error}`))) + return FitTrackeeGenericApi.getData( + `activities/${activityId}/gpx/segment/${segmentId}` + ) + .then(ret => { + if (ret.status === 'success') { + dispatch(setGpx(ret.data.gpx)) + } else { + dispatch(setError(`activities: ${ret.message}`)) + } + }) + .catch(error => dispatch(setError(`activities: ${error}`))) } dispatch(setGpx(null)) } - export const getActivityChartData = activityId => dispatch => { if (activityId) { - return FitTrackeeGenericApi - .getData(`activities/${activityId}/chart_data`) - .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}`))) + return FitTrackeeGenericApi.getData(`activities/${activityId}/chart_data`) + .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)) } export const getSegmentChartData = (activityId, segmentId) => dispatch => { if (activityId) { - return FitTrackeeGenericApi - .getData(`activities/${activityId}/chart_data/segment/${segmentId}`) + return FitTrackeeGenericApi.getData( + `activities/${activityId}/chart_data/segment/${segmentId}` + ) + .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)) +} + +export const deleteActivity = id => dispatch => + FitTrackeeGenericApi.deleteData('activities', id) + .then(ret => { + if (ret.status === 204) { + Promise.resolve(dispatch(removeActivity(id))) + .then(() => dispatch(loadProfile())) + .then(() => history.push('/')) + } else { + dispatch(setError(`activities: ${ret.status}`)) + } + }) + .catch(error => dispatch(setError(`activities: ${error}`))) + +export const editActivity = form => dispatch => + FitTrackeeGenericApi.updateData('activities', form) .then(ret => { if (ret.status === 'success') { - dispatch(setChartData(formatChartData(ret.data.chart_data))) + dispatch(loadProfile()) + history.push(`/activities/${ret.data.activities[0].id}`) + } else { + dispatch(setError(`activities: ${ret.message}`)) + } + dispatch(setLoading(false)) + }) + .catch(error => dispatch(setError(`activities: ${error}`))) + +export const getMoreActivities = params => dispatch => + FitTrackeeGenericApi.getData('activities', params) + .then(ret => { + if (ret.status === 'success') { + if (ret.data.activities.length > 0) { + dispatch(pushActivities(ret.data.activities)) + } } else { dispatch(setError(`activities: ${ret.message}`)) } }) .catch(error => dispatch(setError(`activities: ${error}`))) - } - dispatch(setChartData(null)) -} - - -export const deleteActivity = id => dispatch => FitTrackeeGenericApi - .deleteData('activities', id) - .then(ret => { - if (ret.status === 204) { - Promise.resolve(dispatch(removeActivity(id))).then(() => - dispatch(loadProfile()) - ).then(() => history.push('/')) - } else { - dispatch(setError(`activities: ${ret.status}`)) - } - }) - .catch(error => dispatch(setError(`activities: ${error}`))) - - -export const editActivity = form => dispatch => FitTrackeeGenericApi - .updateData('activities', form) - .then(ret => { - if (ret.status === 'success') { - dispatch(loadProfile()) - history.push(`/activities/${ret.data.activities[0].id}`) - } else { - dispatch(setError(`activities: ${ret.message}`)) - } - dispatch(setLoading(false)) - }) - .catch(error => dispatch(setError(`activities: ${error}`))) - - -export const getMoreActivities = params => dispatch => FitTrackeeGenericApi - .getData('activities', params) - .then(ret => { - if (ret.status === 'success') { - if (ret.data.activities.length > 0) { - dispatch(pushActivities(ret.data.activities)) - } - } else { - dispatch(setError(`activities: ${ret.message}`)) - } - }) - .catch(error => dispatch(setError(`activities: ${error}`))) export const getMonthActivities = (from, to) => dispatch => - FitTrackeeGenericApi - .getData('activities', { from, to, order: 'asc', per_page: 100 }) - .then(ret => { - if (ret.status === 'success') { - dispatch(updateCalendar(ret.data.activities)) - } else { - dispatch(setError(`activities: ${ret.message}`)) - } + FitTrackeeGenericApi.getData('activities', { + from, + to, + order: 'asc', + per_page: 100, }) - .catch(error => dispatch(setError(`activities: ${error}`))) + .then(ret => { + if (ret.status === 'success') { + dispatch(updateCalendar(ret.data.activities)) + } else { + dispatch(setError(`activities: ${ret.message}`)) + } + }) + .catch(error => dispatch(setError(`activities: ${error}`))) diff --git a/fittrackee_client/src/actions/index.js b/fittrackee_client/src/actions/index.js index 132536ec..89473d32 100644 --- a/fittrackee_client/src/actions/index.js +++ b/fittrackee_client/src/actions/index.js @@ -1,7 +1,6 @@ import FitTrackeeApi from '../fitTrackeeApi/index' import { history } from '../index' - export const setData = (target, data) => ({ type: 'SET_DATA', data, @@ -15,7 +14,7 @@ export const setError = message => ({ export const setLoading = loading => ({ type: 'SET_LOADING', - loading + loading, }) export const getOrUpdateData = (action, target, data) => dispatch => { @@ -23,39 +22,38 @@ export const getOrUpdateData = (action, target, data) => dispatch => { return dispatch(setError(target, `${target}: Incorrect id`)) } return FitTrackeeApi[action](target, data) - .then(ret => { - if (ret.status === 'success') { - dispatch(setData(target, ret.data)) - } else { - dispatch(setError(`${target}: ${ret.message || ret.status}`)) - } - }) - .catch(error => dispatch(setError(`${target}: ${error}`))) + .then(ret => { + if (ret.status === 'success') { + dispatch(setData(target, ret.data)) + } else { + dispatch(setError(`${target}: ${ret.message || ret.status}`)) + } + }) + .catch(error => dispatch(setError(`${target}: ${error}`))) } -export const addData = (target, data) => dispatch => FitTrackeeApi - .addData(target, data) - .then(ret => { - if (ret.status === 'created') { - history.push(`/admin/${target}`) - } else { - dispatch(setError(`${target}: ${ret.status}`)) - } - }) - .catch(error => dispatch(setError(`${target}: ${error}`))) +export const addData = (target, data) => dispatch => + FitTrackeeApi.addData(target, data) + .then(ret => { + if (ret.status === 'created') { + history.push(`/admin/${target}`) + } else { + dispatch(setError(`${target}: ${ret.status}`)) + } + }) + .catch(error => dispatch(setError(`${target}: ${error}`))) export const deleteData = (target, id) => dispatch => { if (isNaN(id)) { return dispatch(setError(target, `${target}: Incorrect id`)) } - return FitTrackeeApi - .deleteData(target, id) - .then(ret => { - if (ret.status === 204) { - history.push(`/admin/${target}`) - } else { - dispatch(setError(`${target}: ${ret.message || ret.status}`)) - } - }) - .catch(error => dispatch(setError(`${target}: ${error}`))) + return FitTrackeeApi.deleteData(target, id) + .then(ret => { + if (ret.status === 204) { + history.push(`/admin/${target}`) + } else { + dispatch(setError(`${target}: ${ret.message || ret.status}`)) + } + }) + .catch(error => dispatch(setError(`${target}: ${error}`))) } diff --git a/fittrackee_client/src/actions/stats.js b/fittrackee_client/src/actions/stats.js index ef2c7c6b..de23f754 100644 --- a/fittrackee_client/src/actions/stats.js +++ b/fittrackee_client/src/actions/stats.js @@ -1,11 +1,11 @@ import FitTrackeeGenericApi from '../fitTrackeeApi' import { setData, setError } from './index' -export const getStats = (userId, type, data) => dispatch => FitTrackeeGenericApi - .getData(`stats/${userId}/${type}`, data) +export const getStats = (userId, type, data) => dispatch => + FitTrackeeGenericApi.getData(`stats/${userId}/${type}`, data) .then(ret => { if (ret.status === 'success') { - dispatch(setData('statistics', ret.data)) + dispatch(setData('statistics', ret.data)) } else { dispatch(setError(`statistics: ${ret.message}`)) } diff --git a/fittrackee_client/src/actions/user.js b/fittrackee_client/src/actions/user.js index d6170aeb..87f3026f 100644 --- a/fittrackee_client/src/actions/user.js +++ b/fittrackee_client/src/actions/user.js @@ -4,7 +4,6 @@ import { history } from '../index' import { generateIds } from '../utils' import { getOrUpdateData } from './index' - const AuthError = message => ({ type: 'AUTH_ERROR', message }) const AuthErrors = messages => ({ type: 'AUTH_ERRORS', messages }) @@ -16,7 +15,8 @@ const ProfileSuccess = profil => ({ type: 'PROFILE_SUCCESS', profil }) const ProfileError = message => ({ type: 'PROFILE_ERROR', message }) const ProfileUpdateError = message => ({ - type: 'PROFILE_UPDATE_ERROR', message + type: 'PROFILE_UPDATE_ERROR', + message, }) export const logout = () => ({ type: 'LOGOUT' }) @@ -28,32 +28,32 @@ export const loadProfile = () => dispatch => { return { type: 'LOGOUT' } } -export const getProfile = () => dispatch => FitTrackeeGenericApi - .getData('auth/profile') - .then(ret => { - if (ret.status === 'success') { - dispatch(getOrUpdateData('getData', 'sports')) - ret.data.isAuthenticated = true - return dispatch(ProfileSuccess(ret.data)) - } - return dispatch(ProfileError(ret.message)) - }) - .catch(error => { - throw error - }) +export const getProfile = () => dispatch => + FitTrackeeGenericApi.getData('auth/profile') + .then(ret => { + if (ret.status === 'success') { + dispatch(getOrUpdateData('getData', 'sports')) + ret.data.isAuthenticated = true + return dispatch(ProfileSuccess(ret.data)) + } + return dispatch(ProfileError(ret.message)) + }) + .catch(error => { + throw error + }) -export const loginOrRegister = (target, formData) => dispatch => FitTrackeeApi - .loginOrRegister(target, formData) - .then(ret => { - if (ret.status === 'success') { - window.localStorage.setItem('authToken', ret.auth_token) - return dispatch(getProfile()) - } - return dispatch(AuthError(ret.message)) - }) - .catch(error => { - throw error - }) +export const loginOrRegister = (target, formData) => dispatch => + FitTrackeeApi.loginOrRegister(target, formData) + .then(ret => { + if (ret.status === 'success') { + window.localStorage.setItem('authToken', ret.auth_token) + return dispatch(getProfile()) + } + return dispatch(AuthError(ret.message)) + }) + .catch(error => { + throw error + }) const RegisterFormControl = formData => { const errMsg = [] @@ -61,7 +61,7 @@ const RegisterFormControl = formData => { errMsg.push('Username: 3 to 12 characters required.') } if (formData.password !== formData.password_conf) { - errMsg.push('Password and password confirmation don\'t match.') + errMsg.push("Password and password confirmation don't match.") } if (formData.password.length < 8) { errMsg.push('Password: 8 characters required.') @@ -81,13 +81,12 @@ export const handleUserFormSubmit = (formData, formType) => dispatch => { export const handleProfileFormSubmit = formData => dispatch => { if (!formData.password === formData.password_conf) { - return dispatch(ProfileUpdateError( - 'Password and password confirmation don\'t match.' - )) + return dispatch( + ProfileUpdateError("Password and password confirmation don't match.") + ) } delete formData.id - return FitTrackeeGenericApi - .postData('auth/profile/edit', formData) + return FitTrackeeGenericApi.postData('auth/profile/edit', formData) .then(ret => { if (ret.status === 'success') { dispatch(getProfile()) @@ -105,8 +104,7 @@ export const uploadPicture = event => dispatch => { const form = new FormData() form.append('file', event.target.picture.files[0]) event.target.reset() - return FitTrackeeGenericApi - .addDataWithFile('auth/picture', form) + return FitTrackeeGenericApi.addDataWithFile('auth/picture', form) .then(ret => { if (ret.status === 'success') { return dispatch(getProfile()) @@ -118,14 +116,14 @@ export const uploadPicture = event => dispatch => { }) } -export const deletePicture = () => dispatch => FitTrackeeApi - .deletePicture() - .then(ret => { - if (ret.status === 204) { - return dispatch(getProfile()) - } - return dispatch(PictureError(ret.message)) - }) - .catch(error => { - throw error - }) +export const deletePicture = () => dispatch => + FitTrackeeApi.deletePicture() + .then(ret => { + if (ret.status === 204) { + return dispatch(getProfile()) + } + return dispatch(PictureError(ret.message)) + }) + .catch(error => { + throw error + }) diff --git a/fittrackee_client/src/components/Activities/ActivitiesList.jsx b/fittrackee_client/src/components/Activities/ActivitiesList.jsx index 69e9e8c4..7cb607c8 100644 --- a/fittrackee_client/src/components/Activities/ActivitiesList.jsx +++ b/fittrackee_client/src/components/Activities/ActivitiesList.jsx @@ -12,48 +12,49 @@ export default class ActivitiesList extends React.PureComponent {
- | Workout | -Date | -Distance | -Duration | -Ave. speed | -Max. speed | -
---|---|---|---|---|---|---|
+ | Workout | +Date | +Distance | +Duration | +Ave. speed | +Max. speed | +
- |
- - - {activity.title} - - | -- {format( - getDateWithTZ(activity.activity_date, user.timezone), - 'dd/MM/yyyy HH:mm' - )} - | -- {Number(activity.distance).toFixed(2)} km - | -{activity.moving} | -{activity.ave_speed} km/h | -{activity.max_speed} km/h | -
+ |
+ + + {activity.title} + + | ++ {format( + getDateWithTZ(activity.activity_date, user.timezone), + 'dd/MM/yyyy HH:mm' + )} + | ++ {Number(activity.distance).toFixed(2)} km + | +{activity.moving} | +{activity.ave_speed} km/h | +{activity.max_speed} km/h | +
{message}
- )}
+ {message}
}
-
+
Duration: {activity.moving}
- {activity.records && activity.records.find(r => r.record_type === 'LD'
- ) && (
-
-
-
- )}
+ {activity.records &&
+ activity.records.find(r => r.record_type === 'LD') && (
+
+
+
+ )}
{withPauses && (
@@ -30,47 +24,32 @@ export default function ActivityDetails(props) {
)}
- + Distance: {activity.distance} km - {activity.records && activity.records.find(r => r.record_type === 'FD' - ) && ( - - - - )} + {activity.records && + activity.records.find(r => r.record_type === 'FD') && ( + + + + )}
-
+
Average speed: {activity.ave_speed} km/h
- {activity.records && activity.records.find(r => r.record_type === 'AS'
- ) && (
-
-
-
- )}
+ {activity.records &&
+ activity.records.find(r => r.record_type === 'AS') && (
+
+
+
+ )}
Max speed : {activity.max_speed} km/h
- {activity.records && activity.records.find(r => r.record_type === 'MS'
- ) && (
-
-
-
- )}
+ {activity.records &&
+ activity.records.find(r => r.record_type === 'MS') && (
+
+
+
+ )}
diff --git a/fittrackee_client/src/components/Activity/ActivityDisplay/ActivityMap.jsx b/fittrackee_client/src/components/Activity/ActivityDisplay/ActivityMap.jsx index 0edc206f..7d38aa8d 100644 --- a/fittrackee_client/src/components/Activity/ActivityDisplay/ActivityMap.jsx +++ b/fittrackee_client/src/components/Activity/ActivityDisplay/ActivityMap.jsx @@ -8,7 +8,6 @@ import { thunderforestApiKey } from '../../../utils' import { getGeoJson } from '../../../utils/activities' class ActivityMap extends React.Component { - constructor(props, context) { super(props, context) this.state = { @@ -25,13 +24,15 @@ class ActivityMap extends React.Component { } componentDidUpdate(prevProps) { - if (this.props.dataType === 'activity' && ( - prevProps.activity.id !== this.props.activity.id) + if ( + this.props.dataType === 'activity' && + prevProps.activity.id !== this.props.activity.id ) { - this.props.loadActivityGpx(this.props.activity.id) + this.props.loadActivityGpx(this.props.activity.id) } - if (this.props.dataType === 'segment' && ( - prevProps.segmentId !== this.props.segmentId) + if ( + this.props.dataType === 'segment' && + prevProps.segmentId !== this.props.segmentId ) { this.props.loadSegmentGpx(this.props.activity.id, this.props.segmentId) } @@ -42,13 +43,11 @@ class ActivityMap extends React.Component { } render() { - const { - activity, coordinates, gpxContent - } = this.props + const { activity, coordinates, gpxContent } = this.props const { jsonData } = getGeoJson(gpxContent) const bounds = [ [activity.bounds[0], activity.bounds[1]], - [activity.bounds[2], activity.bounds[3]] + [activity.bounds[2], activity.bounds[3]], ] return ( @@ -78,14 +77,13 @@ class ActivityMap extends React.Component { )}
@@ -42,12 +40,8 @@ export default function ActivityWeather(props) { alt="Temperatures" /> - | - {Number(activity.weather_start.temperature).toFixed(1)}°C - | -- {Number(activity.weather_end.temperature).toFixed(1)}°C - | +{Number(activity.weather_start.temperature).toFixed(1)}°C | +{Number(activity.weather_end.temperature).toFixed(1)}°C |
---|---|---|---|---|
@@ -60,9 +54,7 @@ export default function ActivityWeather(props) { | {Number(activity.weather_start.humidity * 100).toFixed(1)}% | -- {Number(activity.weather_end.humidity * 100).toFixed(1)}% - | +{Number(activity.weather_end.humidity * 100).toFixed(1)}% | |
@@ -72,12 +64,8 @@ export default function ActivityWeather(props) { alt="Temperatures" /> | -- {Number(activity.weather_start.wind).toFixed(1)}m/s - | -- {Number(activity.weather_end.wind).toFixed(1)}m/s - | +{Number(activity.weather_start.wind).toFixed(1)}m/s | +{Number(activity.weather_end.wind).toFixed(1)}m/s |
{message}
) : (