import { useHistory, useLocation } from 'react-router-dom';
import _ from 'lodash';
const useHistoryPush = (): any => {
const history = useHistory();
const location = useLocation();
const locationPush = (pushConfigs: any, states: any, needTemp?: boolean) => {
if (states) {
const temp = Date.now();
sessionStorage.setItem(`pushSession_${temp}`, _.isObject(states) ? JSON.stringify(states) : states);
history.replace(`${location.pathname}${location.search}${location.search ? '&' : '?'}sesTemp=${temp}`);
history.push(needTemp
? _.merge(pushConfigs, { state: { sesTemp: temp } })
: pushConfigs);
return;
}
history.push(pushConfigs);
};
const locationInit = (): any => {
const temp = location.search?.match(/sesTemp=(\d*)?/)?.[1];
if (temp) {
history.replace(`${location.pathname}${location.search?.replace(/sesTemp=\d*(&)?/g, '')}`);
const res = sessionStorage.getItem(`pushSession_${temp}`);
sessionStorage.removeItem(`pushSession_${temp}`);
try {
return JSON.parse(res || '');
} catch (e) {
return res || null;
}
}
return null;
};
return {
locationPush,
locationInit
};
};
export default useHistoryPush;