This repository has been archived on 2025-06-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
dusken-client/src/actions.js
T

134 lines
3.3 KiB
JavaScript

import Config from 'react-native-config';
const LOGIN_REQUEST = 'LOGIN_REQUEST';
const LOGIN_SUCCESS = 'LOGIN_SUCCESS';
const LOGIN_FAILURE = 'LOGIN_FAILURE';
const LOGOUT = 'LOGOUT';
const USER_DATA_REQUEST = 'USER_DATA_REQUEST';
const USER_DATA_SUCCESS = 'USER_DATA_SUCCESS';
const USER_DATA_FAILURE = 'USER_DATA_FAILURE';
function loginRequest() {
return {
type: LOGIN_REQUEST
}
}
function loginSuccess(username, token) {
return {
type: LOGIN_SUCCESS,
username,
token
}
}
function loginFailure(loginError) {
return {
type: LOGIN_FAILURE,
loginError
}
}
function logout() {
return {
type: LOGOUT
}
}
function userDataRequest() {
return {
type: USER_DATA_REQUEST
}
}
function userDataSuccess(data) {
return {
type: USER_DATA_SUCCESS,
data
}
}
function userDataFailure(userError) {
return {
type: USER_DATA_FAILURE,
userError
}
}
export {
LOGIN_REQUEST, loginRequest,
LOGIN_SUCCESS, loginSuccess,
LOGIN_FAILURE, loginFailure,
LOGOUT, logout,
USER_DATA_REQUEST, userDataRequest,
USER_DATA_SUCCESS, userDataSuccess,
USER_DATA_FAILURE, userDataFailure,
};
export function requestLogin(username, password) {
return (dispatch) => {
// We are now logging in
dispatch(loginRequest());
const apiURL = Config.DUSKEN_API_URL;
return fetch(`${apiURL}/auth/obtain-token/`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
'username': username,
'password': password
})
})
.then(response => response.json().then(json => ({ json, response })))
.then(({json, response}) => {
if (response.ok === false) {
return Promise.reject(json)
}
return json
})
.then(
data => {
dispatch(loginSuccess(username, data.token))
},
data => {
console.log(data);
dispatch(loginFailure(data || {'non_field_errors': ['Kunne ikke logge inn, prøv igjen']}))
}
)
}
}
export function requestUserData(token) {
return (dispatch) => {
// We are now fetching user data
dispatch(userDataRequest());
const apiURL = Config.DUSKEN_API_URL;
return fetch(`${apiURL}/api/me/`, {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Token ' + token
}
})
.then(response => response.json().then(json => ({ json, response })))
.then(({json, response}) => {
if (response.ok === false) {
return Promise.reject(json)
}
return json
})
.then(
data => {
dispatch(userDataSuccess(data))
},
data => {
dispatch(userDataFailure('Det funka ikke :-('))
}
)
}
}