UNPKG

@amaui/ui-react

Version:
53 lines (52 loc) 2.06 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = __importDefault(require("react")); const react_router_dom_1 = require("react-router-dom"); const utils_1 = require("@amaui/utils"); const useLocation = (props) => { const {} = props || {}; const locationReactRouterDOM = ((0, utils_1.isEnvironment)('browser') && !window.navigation) ? (0, react_router_dom_1.useLocation)() : undefined; const [response, setResponse] = react_1.default.useState((0, utils_1.isEnvironment)('browser') ? Object.assign({}, window.location) : {}); const onUpdate = react_1.default.useCallback((0, utils_1.debounce)((value = Object.assign({}, window.location)) => { setResponse(value); }, 40), []); // React router DOM react_1.default.useEffect(() => { if (locationReactRouterDOM) onUpdate(locationReactRouterDOM); }, [locationReactRouterDOM]); const method = react_1.default.useCallback(() => { onUpdate(); }, []); react_1.default.useEffect(() => { if (!(0, utils_1.isEnvironment)('browser')) return; // New API if (window.navigation) { window.navigation.addEventListener('navigate', method); } // Old method else { window.addEventListener('popstate', method); window.addEventListener('hashchange', method); } return () => { // Clean up // New API if (window.navigation) { window.navigation.removeEventListener('navigate', method); } // Old method else { window.removeEventListener('popstate', method); window.removeEventListener('hashchange', method); } }; }, []); return response; }; useLocation.displayName = 'amaui-UseLocation'; exports.default = useLocation;