|
|
@@ -1,13 +1,13 @@
|
|
|
-import {useEffect, useState, useReducer} from 'react';
|
|
|
+import {useEffect, useState} from 'react';
|
|
|
import {getQueryString} from './utils';
|
|
|
|
|
|
const domain = '';
|
|
|
|
|
|
-export function saveToken(token) {
|
|
|
+export function storeToken(token) {
|
|
|
localStorage.setItem('token', token);
|
|
|
}
|
|
|
|
|
|
-export function getToken() {
|
|
|
+export function loadToken() {
|
|
|
return localStorage.getItem('token');
|
|
|
}
|
|
|
|
|
|
@@ -37,40 +37,39 @@ export function getTracks(album_id) {
|
|
|
return {url: `/api/album/${album_id}/tracks`};
|
|
|
}
|
|
|
|
|
|
-const fetchReducer = (s, a) => {
|
|
|
- switch (a.t) {
|
|
|
- case 'init': return {...s, loading: true, error: null};
|
|
|
- case 'success': return {...s, loading: false, error: null, data: a.p};
|
|
|
- case 'fail': return {...s, loading: false, error: a.p};
|
|
|
+export const initialState = (initialData) => {return {loading: false, error: null, data: initialData}}
|
|
|
+export function fetchReducer(s, a) {
|
|
|
+ switch (a.type) {
|
|
|
+ case 'FETCH_INIT': return {...s, loading: true, error: null};
|
|
|
+ case 'FETCH_SUCCESS': return {...s, loading: false, error: null, data: a.payload};
|
|
|
+ case 'FETCH_FAIL': return {...s, loading: false, error: a.payload};
|
|
|
default: throw new Error();
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
-export const useFetch = (initialUrl, initialData) => {
|
|
|
- const INIT = {loading: false, error: null, data: initialData};
|
|
|
+export const useFetch = (initialUrl, dispatch, typePrefix) => {
|
|
|
const [url, setUrl] = useState(initialUrl);
|
|
|
- const [state, dispatch] = useReducer(fetchReducer, INIT);
|
|
|
+ const prefix = typePrefix || 'FETCH';
|
|
|
|
|
|
useEffect(() => {
|
|
|
if (!url) return;
|
|
|
let mounted = true;
|
|
|
const fetchData = async () => {
|
|
|
- dispatch({t:'init'});
|
|
|
+ dispatch({type:`${prefix}_INIT`});
|
|
|
try {
|
|
|
const data = await request(url.url, url.options);
|
|
|
- mounted && dispatch({t:'success', p: data});
|
|
|
+ mounted && dispatch({type:`${prefix}_SUCCESS`, payload: data});
|
|
|
} catch (err) {
|
|
|
- mounted && dispatch({t:'fail', p: err});
|
|
|
+ mounted && dispatch({type:`${prefix}_FAIL`, payload: err});
|
|
|
}
|
|
|
};
|
|
|
fetchData();
|
|
|
return () => { mounted = false; };
|
|
|
- }, [url]);
|
|
|
+ }, [url,prefix,dispatch]);
|
|
|
|
|
|
- return [state, setUrl];
|
|
|
+ return setUrl;
|
|
|
};
|
|
|
|
|
|
-
|
|
|
export function request(url, options) {
|
|
|
// performs api calls sending the required authentication headers
|
|
|
const headers = {
|
|
|
@@ -80,8 +79,8 @@ export function request(url, options) {
|
|
|
|
|
|
// Setting Authorization header
|
|
|
// Authorization: Bearer xxxxxxx.xxxxxxxx.xxxxxx
|
|
|
- if (getToken()) {
|
|
|
- headers['Authorization'] = 'Bearer ' + getToken();
|
|
|
+ if (loadToken()) {
|
|
|
+ headers['Authorization'] = 'Bearer ' + loadToken();
|
|
|
}
|
|
|
|
|
|
return fetch(`${domain}${url}`, {
|