Admin: get sports list
This commit is contained in:
		
							
								
								
									
										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,
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user