Admin: get sports list
This commit is contained in:
parent
c8f1b4aebe
commit
cb8c24a932
31
mpwo_client/src/actions/index.js
Normal file
31
mpwo_client/src/actions/index.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import mpwoApi from '../mwpoApi/index'
|
||||||
|
|
||||||
|
|
||||||
|
export const setData = (target, data) => ({
|
||||||
|
type: 'SET_DATA',
|
||||||
|
data,
|
||||||
|
target,
|
||||||
|
})
|
||||||
|
|
||||||
|
export const setError = (target, error) => ({
|
||||||
|
type: 'SET_ERROR',
|
||||||
|
error,
|
||||||
|
target,
|
||||||
|
})
|
||||||
|
|
||||||
|
export function getData(target) {
|
||||||
|
return function(dispatch) {
|
||||||
|
return mpwoApi
|
||||||
|
.getData(target)
|
||||||
|
.then(ret => {
|
||||||
|
if (ret.status === 'success') {
|
||||||
|
dispatch(setData(target, ret.data))
|
||||||
|
} else {
|
||||||
|
dispatch(setError(target, ret.message))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
throw error
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -2,15 +2,36 @@ import React from 'react'
|
|||||||
import { Helmet } from 'react-helmet'
|
import { Helmet } from 'react-helmet'
|
||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
|
|
||||||
|
import { getData } from '../../actions/index'
|
||||||
|
|
||||||
class AdminSports extends React.Component {
|
class AdminSports extends React.Component {
|
||||||
componentDidMount() {}
|
componentDidMount() {
|
||||||
|
this.props.loadSport()
|
||||||
|
}
|
||||||
render() {
|
render() {
|
||||||
|
const { sports } = this.props
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Helmet>
|
<Helmet>
|
||||||
<title>mpwo - Admin</title>
|
<title>mpwo - Admin</title>
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<h1 className="page-title">Administration - Sports</h1>
|
<h1 className="page-title">Administration - Sports</h1>
|
||||||
|
<div className="container">
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-md-2" />
|
||||||
|
<div className="col-md-8 card">
|
||||||
|
<ul>
|
||||||
|
{sports.map(sport => (
|
||||||
|
<li key={sport.id}>
|
||||||
|
{sport.label}
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div className="col-md-2" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -18,6 +39,12 @@ class AdminSports extends React.Component {
|
|||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
state => ({
|
state => ({
|
||||||
|
sports: state.sports.data,
|
||||||
user: state.user,
|
user: state.user,
|
||||||
|
}),
|
||||||
|
dispatch => ({
|
||||||
|
loadSport: () => {
|
||||||
|
dispatch(getData('sports'))
|
||||||
|
},
|
||||||
})
|
})
|
||||||
)(AdminSports)
|
)(AdminSports)
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.card {
|
.card {
|
||||||
|
padding-top: 15px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
mpwo_client/src/mwpoApi/index.js
Normal file
17
mpwo_client/src/mwpoApi/index.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { apiUrl } from '../utils'
|
||||||
|
|
||||||
|
export default class MpwoApi {
|
||||||
|
|
||||||
|
static getData(target) {
|
||||||
|
const request = new Request(`${apiUrl}${target}`, {
|
||||||
|
method: 'GET',
|
||||||
|
headers: new Headers({
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `Bearer ${window.localStorage.getItem('authToken')}`,
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
return fetch(request)
|
||||||
|
.then(response => response.json())
|
||||||
|
.catch(error => error)
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,28 @@ import { combineReducers } from 'redux'
|
|||||||
|
|
||||||
import initial from './initial'
|
import initial from './initial'
|
||||||
|
|
||||||
|
const handleDataAndError = (state, type, action) => {
|
||||||
|
if (action.target !== type) {
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
switch (action.type) {
|
||||||
|
case 'SET_DATA':
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
data: action.data[action.target],
|
||||||
|
error: null,
|
||||||
|
}
|
||||||
|
case 'SET_ERROR':
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
data: { ...initial[type].data },
|
||||||
|
error: action.error,
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const formData = (state = initial.formData, action) => {
|
const formData = (state = initial.formData, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case 'UPDATE_USER_FORMDATA':
|
case 'UPDATE_USER_FORMDATA':
|
||||||
@ -77,6 +99,9 @@ const messages = (state = initial.messages, action) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const sports = (state = initial.sports, action) =>
|
||||||
|
handleDataAndError(state, 'sports', action)
|
||||||
|
|
||||||
const user = (state = initial.user, action) => {
|
const user = (state = initial.user, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case 'AUTH_ERROR':
|
case 'AUTH_ERROR':
|
||||||
@ -123,6 +148,7 @@ const reducers = combineReducers({
|
|||||||
message,
|
message,
|
||||||
messages,
|
messages,
|
||||||
router: routerReducer,
|
router: routerReducer,
|
||||||
|
sports,
|
||||||
user,
|
user,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
const emptyData = {
|
||||||
|
data: [],
|
||||||
|
error: null,
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
message: '',
|
message: '',
|
||||||
messages: [],
|
messages: [],
|
||||||
@ -34,4 +39,7 @@ export default {
|
|||||||
passwordConf: '',
|
passwordConf: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
sports: {
|
||||||
|
...emptyData,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user