feat: 심의결과 반영
parent
7778e48c5c
commit
e625f9ed96
@ -0,0 +1,72 @@
|
|||||||
|
import { useReducer, useEffect, useCallback } from 'react';
|
||||||
|
|
||||||
|
const initialState = {
|
||||||
|
loading: false,
|
||||||
|
data: null,
|
||||||
|
error: false
|
||||||
|
};
|
||||||
|
|
||||||
|
function reducer(state, action) {
|
||||||
|
switch (action.type) {
|
||||||
|
case 'LOADING':
|
||||||
|
return {
|
||||||
|
loading: true,
|
||||||
|
data: null,
|
||||||
|
error: null
|
||||||
|
};
|
||||||
|
|
||||||
|
case 'SUCCESS':
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
data: action.data,
|
||||||
|
error: null
|
||||||
|
};
|
||||||
|
|
||||||
|
case 'ERROR':
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
data: null,
|
||||||
|
error: action.error
|
||||||
|
};
|
||||||
|
|
||||||
|
case 'CLEAR':
|
||||||
|
return initialState;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error(`Unhandled action type: ${action.type}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function useAsync(callback, deps = [], skip = false) {
|
||||||
|
const [state, dispatch] = useReducer(reducer, initialState);
|
||||||
|
|
||||||
|
// const fetchData = async () => {
|
||||||
|
// dispatch({ type: 'LOADING' });
|
||||||
|
// try {
|
||||||
|
// const data = await callback();
|
||||||
|
// dispatch({ type: 'SUCCESS', data });
|
||||||
|
// } catch (e) {
|
||||||
|
// dispatch({ type: 'ERROR', error: e });
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
|
||||||
|
const fetchData = useCallback(async () => {
|
||||||
|
dispatch({ type: 'LOADING' });
|
||||||
|
try {
|
||||||
|
const data = await callback();
|
||||||
|
dispatch({ type: 'SUCCESS', data });
|
||||||
|
} catch (e) {
|
||||||
|
dispatch({ type: 'ERROR', error: e });
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, deps);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (skip) return;
|
||||||
|
fetchData();
|
||||||
|
}, [fetchData, skip]);
|
||||||
|
|
||||||
|
return [state, fetchData];
|
||||||
|
}
|
||||||
|
|
||||||
|
export default useAsync;
|
@ -0,0 +1,23 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
const Filedownload = () => {
|
||||||
|
useEffect(() => {
|
||||||
|
if (fileData) {
|
||||||
|
const url = window.URL.createObjectURL(new Blob([fileData.data]));
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.setAttribute('download', 'test.xlsx');
|
||||||
|
link.setAttribute('id', 'tempLink');
|
||||||
|
document.body.appendChild(link);
|
||||||
|
link.click();
|
||||||
|
}
|
||||||
|
return () => {
|
||||||
|
const link = document.querySelector('#tempLink');
|
||||||
|
link && link.remove();
|
||||||
|
};
|
||||||
|
}, [fileData]);
|
||||||
|
|
||||||
|
return <div />;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Filedownload;
|
Loading…
Reference in New Issue