react-view-router
Version:
react-view-router
65 lines (62 loc) • 2.39 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import { useState, useEffect, useCallback } from 'react';
import { HistoryType } from '../history';
import { isHistory4 } from '../history-fix';
// import { RouterContext } from '../context';
function getModeFromOptions(options) {
return options.routerMode || options.mode;
}
function useManualRouter(router, options = {}) {
var _useState = useState({
isRunning: false,
router,
options,
seed: 0
}),
_useState2 = _slicedToArray(_useState, 1),
$refs = _useState2[0];
var _useState3 = useState(0),
_useState4 = _slicedToArray(_useState3, 2),
setSeed = _useState4[1];
$refs.router = router;
$refs.options = options;
// eslint-disable-next-line react-hooks/rules-of-hooks
// const parentRouter = getModeFromOptions(options) === HistoryType.memory ? useContext<ReactViewRouter>(RouterContext) : null;
var start = useCallback((overrideOptions = {}) => {
var router = $refs.router,
options = $refs.options;
if (!$refs.isRunning || !router.isRunning) {
$refs.isRunning = true;
var routes = overrideOptions.routes || options.routes;
if (routes) router.use({
routes
});
var mode = getModeFromOptions(overrideOptions) || getModeFromOptions(options) || HistoryType.hash;
var hashType = overrideOptions.hashType || options.hashType;
var history = overrideOptions.history || options.history;
if (isHistory4(history)) history = history.owner;
// || (mode === HistoryType.memory && parentRouter && parentRouter.mode === HistoryType.memory ? parentRouter.history : undefined);
router.start({
basename: overrideOptions.basename || options.basename || '',
pathname: overrideOptions.pathname || options.pathname || '',
mode,
hashType,
history
});
var resolveRouteName = overrideOptions.resolveRouteName || options.resolveRouteName;
resolveRouteName && router.resolveRouteName(resolveRouteName);
if (options.manual) setSeed(seed => seed + 1);
}
}, [$refs]);
if (!options.manual) start();
useEffect(() => () => {
if (router.isRunning) router.stop();
$refs.isRunning = false;
}, [$refs, router]);
return {
router,
start
};
}
export default useManualRouter;
//# sourceMappingURL=use-manual-router.js.map