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