UNPKG

react-use

Version:
60 lines (59 loc) 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var react_1 = require("react"); var util_1 = require("./util"); var patchHistoryMethod = function (method) { var original = history[method]; history[method] = function (state) { var result = original.apply(this, arguments); var event = new Event(method.toLowerCase()); event.state = state; window.dispatchEvent(event); return result; }; }; if (util_1.isClient) { patchHistoryMethod('pushState'); patchHistoryMethod('replaceState'); } var useLocationServer = function () { return ({ trigger: 'load', length: 1, }); }; var buildState = function (trigger) { var state = history.state, length = history.length; var hash = location.hash, host = location.host, hostname = location.hostname, href = location.href, origin = location.origin, pathname = location.pathname, port = location.port, protocol = location.protocol, search = location.search; return { trigger: trigger, state: state, length: length, hash: hash, host: host, hostname: hostname, href: href, origin: origin, pathname: pathname, port: port, protocol: protocol, search: search, }; }; var useLocationBrowser = function () { var _a = react_1.useState(buildState('load')), state = _a[0], setState = _a[1]; react_1.useEffect(function () { var onPopstate = function () { return setState(buildState('popstate')); }; var onPushstate = function () { return setState(buildState('pushstate')); }; var onReplacestate = function () { return setState(buildState('replacestate')); }; util_1.on(window, 'popstate', onPopstate); util_1.on(window, 'pushstate', onPushstate); util_1.on(window, 'replacestate', onReplacestate); return function () { util_1.off(window, 'popstate', onPopstate); util_1.off(window, 'pushstate', onPushstate); util_1.off(window, 'replacestate', onReplacestate); }; }, []); return state; }; var hasEventConstructor = typeof Event === 'function'; exports.default = util_1.isClient && hasEventConstructor ? useLocationBrowser : useLocationServer;