This commit is contained in:
Ahmed Bouhuolia
2020-03-16 00:06:15 +02:00
parent 56701951b7
commit 73711384f6
7925 changed files with 18478 additions and 959 deletions

35
client/src/hooks/async.js Normal file
View File

@@ -0,0 +1,35 @@
import {useState, useCallback, useEffect} from 'react';
const useAsync = (asyncFunction, immediate = true) => {
const [pending, setPending] = useState(false);
const [value, setValue] = useState(null);
const [error, setError] = useState(null);
// The execute function wraps asyncFunction and
// handles setting state for pending, value, and error.
// useCallback ensures the below useEffect is not called
// on every render, but only if asyncFunction changes.
const execute = useCallback(() => {
setPending(true);
setValue(null);
setError(null);
return asyncFunction()
.then(response => setValue(response))
.catch(error => setError(error))
.finally(() => setPending(false));
}, [asyncFunction]);
// Call execute if we want to fire it right away.
// Otherwise execute can be called later, such as
// in an onClick handler.
useEffect(() => {
if (immediate) {
execute();
}
}, []);
return { execute, pending, value, error };
};
export default useAsync;

View File

@@ -0,0 +1,6 @@
import useAsync from './async';
// import use from 'async';
export default {
useAsync,
}

View File

@@ -0,0 +1,36 @@
import {useState} from 'react';
const useStackableState = (initialState = []) => {
const [stackableState, setStackableState] = useState(initialState);
const indexState = (state) => stackableState.indexOf(state);
const hasState = (state) => indexState(state) !== -1;
const removeState = (state) => {
if (this.hasState(state)) {
const index = indexState(state);
const mutableState = [...stackableState];
mutableState.splice(index, 1);
setStackableState(mutableState);
}
};
const setState = (state) => {
if (!hasState(state)) {
setStackableState([
...stackableState,
state,
]);
}
};
return {
state: stackableState,
removeState,
indexState,
hasState,
setState,
};
};
export default useStackableState;

View File

@@ -0,0 +1,5 @@
export default function useAppRoutes() {
}