Client - rename existing front
This commit is contained in:
47
fittrackee_client_old/src/actions/application.js
Normal file
47
fittrackee_client_old/src/actions/application.js
Normal file
@ -0,0 +1,47 @@
|
||||
import FitTrackeeGenericApi from '../fitTrackeeApi'
|
||||
import { history } from '../index'
|
||||
import { generateIds } from '../utils'
|
||||
import { emptyMessages, setError } from './index'
|
||||
|
||||
export const setAppConfig = data => ({
|
||||
type: 'SET_APP_CONFIG',
|
||||
data,
|
||||
})
|
||||
|
||||
export const setAppStats = data => ({
|
||||
type: 'SET_APP_STATS',
|
||||
data,
|
||||
})
|
||||
|
||||
const SetAppErrors = messages => ({ type: 'APP_ERRORS', messages })
|
||||
|
||||
export const getAppData = target => dispatch =>
|
||||
FitTrackeeGenericApi.getData(target)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
if (target === 'config') {
|
||||
dispatch(setAppConfig(ret.data))
|
||||
} else if (target === 'stats/all') {
|
||||
dispatch(setAppStats(ret.data))
|
||||
}
|
||||
} else {
|
||||
dispatch(setError(`application|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`application|${error}`)))
|
||||
|
||||
export const updateAppConfig = formData => dispatch => {
|
||||
dispatch(emptyMessages())
|
||||
FitTrackeeGenericApi.updateData('config', formData)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(setAppConfig(ret.data))
|
||||
history.push('/admin/application')
|
||||
} else if (Array.isArray(ret.message)) {
|
||||
dispatch(SetAppErrors(generateIds(ret.message)))
|
||||
} else {
|
||||
dispatch(setError(ret.message))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`application|${error}`)))
|
||||
}
|
111
fittrackee_client_old/src/actions/index.js
Normal file
111
fittrackee_client_old/src/actions/index.js
Normal file
@ -0,0 +1,111 @@
|
||||
import i18next from 'i18next'
|
||||
|
||||
import FitTrackeeApi from '../fitTrackeeApi/index'
|
||||
import { history } from '../index'
|
||||
|
||||
export const emptyMessages = () => ({
|
||||
type: 'CLEAN_ALL_MESSAGES',
|
||||
})
|
||||
|
||||
export const setData = (target, data) => ({
|
||||
type: 'SET_DATA',
|
||||
data,
|
||||
target,
|
||||
})
|
||||
|
||||
export const setPaginatedData = (target, data, pagination) => ({
|
||||
type: 'SET_PAGINATED_DATA',
|
||||
data,
|
||||
pagination,
|
||||
target,
|
||||
})
|
||||
|
||||
export const setError = message => ({
|
||||
type: 'SET_ERROR',
|
||||
message,
|
||||
})
|
||||
|
||||
export const setLanguage = language => ({
|
||||
type: 'SET_LANGUAGE',
|
||||
language,
|
||||
})
|
||||
|
||||
export const setLoading = loading => ({
|
||||
type: 'SET_LOADING',
|
||||
loading,
|
||||
})
|
||||
|
||||
export const updateSportsData = data => ({
|
||||
type: 'UPDATE_SPORT_DATA',
|
||||
data,
|
||||
})
|
||||
|
||||
export const updateUsersData = data => ({
|
||||
type: 'UPDATE_USER_DATA',
|
||||
data,
|
||||
})
|
||||
|
||||
export const getOrUpdateData =
|
||||
(action, target, data, canDispatch = true) =>
|
||||
dispatch => {
|
||||
dispatch(setLoading(true))
|
||||
if (data && data.id && target !== 'workouts' && isNaN(data.id)) {
|
||||
dispatch(setLoading(false))
|
||||
return dispatch(setError(`${target}|Incorrect id`))
|
||||
}
|
||||
dispatch(emptyMessages())
|
||||
return FitTrackeeApi[action](target, data)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
if (canDispatch) {
|
||||
if (target === 'users' && action === 'getData') {
|
||||
return dispatch(
|
||||
setPaginatedData(target, ret.data, ret.pagination)
|
||||
)
|
||||
}
|
||||
dispatch(setData(target, ret.data))
|
||||
} else if (action === 'updateData' && target === 'sports') {
|
||||
dispatch(updateSportsData(ret.data.sports[0]))
|
||||
} else if (action === 'updateData' && target === 'users') {
|
||||
dispatch(updateUsersData(ret.data.users[0]))
|
||||
}
|
||||
} else {
|
||||
dispatch(setError(`${target}|${ret.message || ret.status}`))
|
||||
}
|
||||
dispatch(setLoading(false))
|
||||
})
|
||||
.catch(error => {
|
||||
dispatch(setLoading(false))
|
||||
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}`)))
|
||||
}
|
||||
|
||||
export const updateLanguage = language => dispatch => {
|
||||
i18next.changeLanguage(language).then(dispatch(setLanguage(language)))
|
||||
}
|
13
fittrackee_client_old/src/actions/stats.js
Normal file
13
fittrackee_client_old/src/actions/stats.js
Normal file
@ -0,0 +1,13 @@
|
||||
import FitTrackeeGenericApi from '../fitTrackeeApi'
|
||||
import { setData, setError } from './index'
|
||||
|
||||
export const getStats = (userName, type, data) => dispatch =>
|
||||
FitTrackeeGenericApi.getData(`stats/${userName}/${type}`, data)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(setData('statistics', ret.data))
|
||||
} else {
|
||||
dispatch(setError(`statistics|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`statistics|${error}`)))
|
174
fittrackee_client_old/src/actions/user.js
Normal file
174
fittrackee_client_old/src/actions/user.js
Normal file
@ -0,0 +1,174 @@
|
||||
import FitTrackeeGenericApi from '../fitTrackeeApi'
|
||||
import FitTrackeeApi from '../fitTrackeeApi/auth'
|
||||
import { history } from '../index'
|
||||
import { generateIds } from '../utils'
|
||||
import { getOrUpdateData, setError, updateLanguage } from './index'
|
||||
import { getAppData } from './application'
|
||||
|
||||
const AuthError = message => ({ type: 'AUTH_ERROR', message })
|
||||
|
||||
const AuthErrors = messages => ({ type: 'AUTH_ERRORS', messages })
|
||||
|
||||
const PictureError = message => ({ type: 'PICTURE_ERROR', message })
|
||||
|
||||
const ProfileSuccess = profil => ({ type: 'PROFILE_SUCCESS', profil })
|
||||
|
||||
const ProfileError = message => ({ type: 'PROFILE_ERROR', message })
|
||||
|
||||
const ProfileUpdateError = message => ({
|
||||
type: 'PROFILE_UPDATE_ERROR',
|
||||
message,
|
||||
})
|
||||
|
||||
export const logout = () => ({ type: 'LOGOUT' })
|
||||
|
||||
export const loadProfile = () => dispatch => {
|
||||
if (window.localStorage.getItem('authToken')) {
|
||||
return dispatch(getProfile())
|
||||
}
|
||||
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
|
||||
if (ret.data.language) {
|
||||
dispatch(updateLanguage(ret.data.language))
|
||||
}
|
||||
return dispatch(ProfileSuccess(ret.data))
|
||||
}
|
||||
return dispatch(ProfileError(ret.message))
|
||||
})
|
||||
.catch(error => {
|
||||
throw error
|
||||
})
|
||||
|
||||
export const loginOrRegisterOrPasswordReset = (target, formData) => dispatch =>
|
||||
FitTrackeeApi.loginOrRegisterOrPasswordReset(target, formData)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
if (target === 'password/reset-request') {
|
||||
return history.push({
|
||||
pathname: '/password-reset/sent',
|
||||
})
|
||||
}
|
||||
if (target === 'password/update') {
|
||||
return history.push({
|
||||
pathname: '/updated-password',
|
||||
})
|
||||
}
|
||||
if (target === 'login' || target === 'register') {
|
||||
window.localStorage.setItem('authToken', ret.auth_token)
|
||||
if (target === 'register') {
|
||||
dispatch(getAppData('config'))
|
||||
}
|
||||
return dispatch(getProfile())
|
||||
}
|
||||
}
|
||||
return dispatch(AuthError(ret.message))
|
||||
})
|
||||
.catch(error => {
|
||||
throw error
|
||||
})
|
||||
|
||||
const RegisterFormControl = (formData, onlyPasswords = false) => {
|
||||
const errMsg = []
|
||||
if (
|
||||
!onlyPasswords &&
|
||||
(formData.username.length < 3 || formData.username.length > 12)
|
||||
) {
|
||||
errMsg.push('3 to 12 characters required for username.')
|
||||
}
|
||||
if (formData.password !== formData.password_conf) {
|
||||
errMsg.push("Password and password confirmation don't match.")
|
||||
}
|
||||
if (formData.password.length < 8) {
|
||||
errMsg.push('8 characters required for password.')
|
||||
}
|
||||
return errMsg
|
||||
}
|
||||
|
||||
export const handleUserFormSubmit = (formData, formType) => dispatch => {
|
||||
if (formType === 'register' || formType === 'password/update') {
|
||||
const ret = RegisterFormControl(formData, formType === 'password/update')
|
||||
if (ret.length > 0) {
|
||||
return dispatch(AuthErrors(generateIds(ret)))
|
||||
}
|
||||
}
|
||||
return dispatch(loginOrRegisterOrPasswordReset(formType, formData))
|
||||
}
|
||||
|
||||
export const handleProfileFormSubmit = formData => dispatch => {
|
||||
if (!formData.password === formData.password_conf) {
|
||||
return dispatch(
|
||||
ProfileUpdateError("Password and password confirmation don't match.")
|
||||
)
|
||||
}
|
||||
delete formData.id
|
||||
return FitTrackeeGenericApi.postData('auth/profile/edit', formData)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(getProfile())
|
||||
return history.push('/profile')
|
||||
}
|
||||
dispatch(ProfileUpdateError(ret.message))
|
||||
})
|
||||
.catch(error => {
|
||||
throw error
|
||||
})
|
||||
}
|
||||
|
||||
export const uploadPicture = event => dispatch => {
|
||||
event.preventDefault()
|
||||
const form = new FormData()
|
||||
form.append('file', event.target.picture.files[0])
|
||||
event.target.reset()
|
||||
return FitTrackeeGenericApi.addDataWithFile('auth/picture', form)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
return dispatch(getProfile())
|
||||
}
|
||||
const msg =
|
||||
ret.status === 413
|
||||
? 'Error during picture update, file size exceeds max size.'
|
||||
: ret.message
|
||||
return dispatch(PictureError(msg))
|
||||
})
|
||||
.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
|
||||
})
|
||||
|
||||
export const deleteUser =
|
||||
(username, isAdmin = false) =>
|
||||
dispatch =>
|
||||
FitTrackeeGenericApi.deleteData('users', username)
|
||||
.then(ret => {
|
||||
if (ret.status === 204) {
|
||||
dispatch(getAppData('config'))
|
||||
if (isAdmin) {
|
||||
history.push('/admin/users')
|
||||
} else {
|
||||
dispatch(logout())
|
||||
history.push('/')
|
||||
}
|
||||
} else {
|
||||
ret.json().then(r => dispatch(setError(`${r.message}`)))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`user|${error}`)))
|
192
fittrackee_client_old/src/actions/workouts.js
Normal file
192
fittrackee_client_old/src/actions/workouts.js
Normal file
@ -0,0 +1,192 @@
|
||||
import FitTrackeeGenericApi from '../fitTrackeeApi'
|
||||
import { history } from '../index'
|
||||
import { formatChartData } from '../utils/workouts'
|
||||
import { setError, setLoading } from './index'
|
||||
import { loadProfile } from './user'
|
||||
|
||||
export const pushWorkouts = workouts => ({
|
||||
type: 'PUSH_WORKOUTS',
|
||||
workouts,
|
||||
})
|
||||
|
||||
export const removeWorkout = workoutId => ({
|
||||
type: 'REMOVE_WORKOUT',
|
||||
workoutId,
|
||||
})
|
||||
|
||||
export const updateCalendar = workouts => ({
|
||||
type: 'UPDATE_CALENDAR',
|
||||
workouts,
|
||||
})
|
||||
|
||||
export const setGpx = gpxContent => ({
|
||||
type: 'SET_GPX',
|
||||
gpxContent,
|
||||
})
|
||||
|
||||
export const setChartData = chartData => ({
|
||||
type: 'SET_CHART_DATA',
|
||||
chartData,
|
||||
})
|
||||
|
||||
export const addWorkout = form => dispatch =>
|
||||
FitTrackeeGenericApi.addDataWithFile('workouts', form)
|
||||
.then(ret => {
|
||||
if (ret.status === 'created') {
|
||||
if (ret.data.workouts.length === 0) {
|
||||
dispatch(setError('workouts|no correct file.'))
|
||||
} else if (ret.data.workouts.length === 1) {
|
||||
dispatch(loadProfile())
|
||||
history.push(`/workouts/${ret.data.workouts[0].id}`)
|
||||
} else {
|
||||
// ret.data.workouts.length > 1
|
||||
dispatch(loadProfile())
|
||||
history.push('/')
|
||||
}
|
||||
} else if (ret.status === 413) {
|
||||
dispatch(
|
||||
setError('workouts|File size is greater than the allowed size')
|
||||
)
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
dispatch(setLoading(false))
|
||||
})
|
||||
.catch(error => {
|
||||
dispatch(setLoading(false))
|
||||
dispatch(setError(`workouts|${error}`))
|
||||
})
|
||||
|
||||
export const addWorkoutWithoutGpx = form => dispatch =>
|
||||
FitTrackeeGenericApi.addData('workouts/no_gpx', form)
|
||||
.then(ret => {
|
||||
if (ret.status === 'created') {
|
||||
dispatch(loadProfile())
|
||||
history.push(`/workouts/${ret.data.workouts[0].id}`)
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`workouts|${error}`)))
|
||||
|
||||
export const getWorkoutGpx = workoutId => dispatch => {
|
||||
if (workoutId) {
|
||||
return FitTrackeeGenericApi.getData(`workouts/${workoutId}/gpx`)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(setGpx(ret.data.gpx))
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`workouts|${error}`)))
|
||||
}
|
||||
dispatch(setGpx(null))
|
||||
}
|
||||
|
||||
export const getSegmentGpx = (workoutId, segmentId) => dispatch => {
|
||||
if (workoutId) {
|
||||
return FitTrackeeGenericApi.getData(
|
||||
`workouts/${workoutId}/gpx/segment/${segmentId}`
|
||||
)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(setGpx(ret.data.gpx))
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`workouts|${error}`)))
|
||||
}
|
||||
dispatch(setGpx(null))
|
||||
}
|
||||
|
||||
export const getWorkoutChartData = workoutId => dispatch => {
|
||||
if (workoutId) {
|
||||
return FitTrackeeGenericApi.getData(`workouts/${workoutId}/chart_data`)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(setChartData(formatChartData(ret.data.chart_data)))
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`workouts|${error}`)))
|
||||
}
|
||||
dispatch(setChartData(null))
|
||||
}
|
||||
|
||||
export const getSegmentChartData = (workoutId, segmentId) => dispatch => {
|
||||
if (workoutId) {
|
||||
return FitTrackeeGenericApi.getData(
|
||||
`workouts/${workoutId}/chart_data/segment/${segmentId}`
|
||||
)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(setChartData(formatChartData(ret.data.chart_data)))
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`workouts|${error}`)))
|
||||
}
|
||||
dispatch(setChartData(null))
|
||||
}
|
||||
|
||||
export const deleteWorkout = id => dispatch =>
|
||||
FitTrackeeGenericApi.deleteData('workouts', id)
|
||||
.then(ret => {
|
||||
if (ret.status === 204) {
|
||||
Promise.resolve(dispatch(removeWorkout(id)))
|
||||
.then(() => dispatch(loadProfile()))
|
||||
.then(() => history.push('/'))
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.status}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`workouts|${error}`)))
|
||||
|
||||
export const editWorkout = form => dispatch =>
|
||||
FitTrackeeGenericApi.updateData('workouts', form)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(loadProfile())
|
||||
history.push(`/workouts/${ret.data.workouts[0].id}`)
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
dispatch(setLoading(false))
|
||||
})
|
||||
.catch(error => {
|
||||
dispatch(setLoading(false))
|
||||
dispatch(setError(`workouts|${error}`))
|
||||
})
|
||||
|
||||
export const getMoreWorkouts = params => dispatch =>
|
||||
FitTrackeeGenericApi.getData('workouts', params)
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
if (ret.data.workouts.length > 0) {
|
||||
dispatch(pushWorkouts(ret.data.workouts))
|
||||
}
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`workouts|${error}`)))
|
||||
|
||||
export const getMonthWorkouts = (from, to) => dispatch =>
|
||||
FitTrackeeGenericApi.getData('workouts', {
|
||||
from,
|
||||
to,
|
||||
order: 'desc',
|
||||
per_page: 100,
|
||||
})
|
||||
.then(ret => {
|
||||
if (ret.status === 'success') {
|
||||
dispatch(updateCalendar(ret.data.workouts))
|
||||
} else {
|
||||
dispatch(setError(`workouts|${ret.message}`))
|
||||
}
|
||||
})
|
||||
.catch(error => dispatch(setError(`workouts|${error}`)))
|
Reference in New Issue
Block a user