UNPKG

react-concurrent-router

Version:

Performant routing embracing React concurrent UI patterns

44 lines (40 loc) 1.52 kB
'use strict'; var _extends = require('@babel/runtime/helpers/extends'); var React = require('react'); var utils = require('./utils-BDbVHWV6.js'); var RouterContext = require('./RouterContext-BCgWDPs4.js'); require('@babel/runtime/helpers/objectWithoutPropertiesLoose'); require('history'); require('./SuspendableResource.js'); const useSearchParams = () => { const { get, history, subscribe } = React.useContext(RouterContext.RouterContext); const [searchParams, setSearchParams] = React.useState(utils.paramsStringToObject(get().location.search)); const handleSetSearchParams = React.useCallback((newParams, { replace = false } = {}) => { const { location } = get(); const currentSearchParams = typeof newParams === 'function' && utils.paramsStringToObject(location.search); const newSearchParams = typeof newParams === 'function' ? newParams(currentSearchParams) : newParams; history[replace ? 'replace' : 'push']({ pathname: location.pathname, search: utils.sortAndStringifyRequestParams(newSearchParams) }, _extends({}, location.state, replace && { skipRender: true })); }, []); React.useEffect(() => { const dispose = subscribe(async nextEntry => { const newSearchParams = utils.paramsStringToObject(nextEntry.location.search); setTimeout(() => setSearchParams(newSearchParams), 1); }); return () => dispose(); }, []); return [searchParams, handleSetSearchParams]; }; module.exports = useSearchParams;