| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import {useEffect, useState} from 'react';
- import {getQueryString} from './utils';
- const domain = '';
- export function storeToken(token) {
- localStorage.setItem('token', token);
- }
- export function loadToken() {
- return localStorage.getItem('token');
- }
- export function login(info) {
- if (!info) return null;
- return {url: '/api/login',
- options: {
- method: 'POST',
- body: JSON.stringify(info),
- }};
- }
- export function logout() {
- localStorage.removeItem('token');
- }
- export function getUser() { return {url: '/api/user'} };
- export function getCategories() { return {url: '/api/cat'} };
- export function getCategory(cat, params) {
- return {url: `/api/cat/${cat}?${getQueryString(params)}`};
- }
- export function getAlbums(params) {
- return {url: `/api/cat/album?${getQueryString(params)}`};
- }
- export function getTracks(album_id) {
- return {url: `/api/album/${album_id}/tracks`};
- }
- 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, dispatch, typePrefix) => {
- const [url, setUrl] = useState(initialUrl);
- const prefix = typePrefix || 'FETCH';
- useEffect(() => {
- if (!url) return;
- let mounted = true;
- const fetchData = async () => {
- dispatch({type:`${prefix}_INIT`});
- try {
- const data = await request(url.url, url.options);
- mounted && dispatch({type:`${prefix}_SUCCESS`, payload: data});
- } catch (err) {
- mounted && dispatch({type:`${prefix}_FAIL`, payload: err});
- }
- };
- fetchData();
- return () => { mounted = false; };
- }, [url,prefix,dispatch]);
- return setUrl;
- };
- export function request(url, options) {
- // performs api calls sending the required authentication headers
- const headers = {
- Accept: 'application/json',
- 'Content-Type': 'application/json',
- };
- // Setting Authorization header
- // Authorization: Bearer xxxxxxx.xxxxxxxx.xxxxxx
- if (loadToken()) {
- headers['Authorization'] = 'Bearer ' + loadToken();
- }
- return fetch(`${domain}${url}`, {
- headers,
- ...options,
- })
- .then(_checkStatus)
- .then(response => response.json());
- }
- function _checkStatus(response) {
- // raises an error in case response status is not a success
- if (response.status >= 200 && response.status < 300) {
- // Success status lies between 200 to 300
- return response;
- } else {
- var error = new Error(response.statusText);
- error.response = response;
- throw error;
- }
- }
|