UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

221 lines 7.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSearch = exports.getProtocol = exports.getPort = exports.getHostname = exports.getHost = exports.getHref = exports.getOrigin = exports.getPathname = exports.getHash = exports.assign = exports.reload = exports.goTo = exports.goForward = exports.goBack = exports.getState = exports.replaceState = exports.navigateTo = exports.pushState = exports.useHistory = exports.useLocation = exports.useWhenUrlChanges = exports.useHashChange = exports.usePopstate = exports.useEventListener = exports.patch = exports.queryRootElement = exports.QueryRootElementFailure = exports.querySelectorAll = exports.querySelector = exports.getRootElement = exports.getDocument = exports.getWindow = exports.whenIdle = exports.raf = exports.getLocation = exports.getHistory = void 0; const tslib_1 = require("tslib"); const E = (0, tslib_1.__importStar)(require("./Env")); const EO = (0, tslib_1.__importStar)(require("./EnvOption")); const Fail = (0, tslib_1.__importStar)(require("./Fail")); const function_1 = require("./function"); const O = (0, tslib_1.__importStar)(require("./Option")); const RS = (0, tslib_1.__importStar)(require("./ReaderStream")); const S = (0, tslib_1.__importStar)(require("./Stream")); const Use_1 = require("./Use"); /** * @category DOM * @since 0.13.2 */ exports.getHistory = E.asks((e) => e.history); /** * @category DOM * @since 0.13.2 */ exports.getLocation = E.asks((e) => e.location); /** * @category Effect * @since 0.13.2 */ const raf = (e) => e.raf; exports.raf = raf; /** * @category Effect * @since 0.13.2 */ const whenIdle = (e) => e.whenIdle; exports.whenIdle = whenIdle; /** * @category DOM * @since 0.13.2 */ exports.getWindow = E.asks((e) => e.window); /** * @category DOM * @since 0.13.2 */ exports.getDocument = E.asks((e) => e.document); /** * @category DOM * @since 0.13.2 */ exports.getRootElement = E.asks((e) => e.rootElement); /** * @category DOM * @since 0.13.2 */ const querySelector = (selector) => (el) => O.fromNullable(el.querySelector(selector)); exports.querySelector = querySelector; /** * @category DOM * @since 0.13.2 */ const querySelectorAll = (selector) => (el) => Array.from(el.querySelectorAll(selector)); exports.querySelectorAll = querySelectorAll; /** * A Failure used to represent being unable to query for our RootElement * @category Failure * @since 0.13.4 */ exports.QueryRootElementFailure = Fail.named()('@typed/fp/dom/QueryRootElementError'); /** * Provide the root element to your application by querying for an element in the document * @category DOM * @since 0.13.2 */ const queryRootElement = (selector) => (0, function_1.pipe)(exports.getDocument, E.map((0, exports.querySelector)(selector)), EO.map((rootElement) => ({ rootElement })), EO.getOrElseEW(() => exports.QueryRootElementFailure.throw({ selector, message: `Unable to find root element by selector ${selector}!`, }))); exports.queryRootElement = queryRootElement; /** * Common setup for rendering an application into an element * @category DOM * @since 0.13.4 */ const patch = (patch) => (stream) => (0, function_1.pipe)(exports.getRootElement, RS.fromEnv, RS.switchMapW((rootElement) => (0, function_1.pipe)(stream, RS.scan(patch, rootElement)))); exports.patch = patch; /** * @category Use * @since 0.13.4 */ const useEventListener = (getEventListener, eventName, onEvent) => { const use = (0, Use_1.useReaderStream)(); return (0, function_1.pipe)(getEventListener, EO.chainEnvK((target) => use((0, function_1.pipe)(S.newStream((sink, scheduler) => { const listener = (ev) => sink.event(scheduler.currentTime(), ev); target.addEventListener(eventName, listener); return { dispose: () => target.removeEventListener(eventName, listener) }; }), RS.fromStream, RS.chainEnvK(onEvent)), target)), E.map(O.flatten)); }; exports.useEventListener = useEventListener; /** * @category Use * @since 0.13.2 */ const usePopstate = () => (0, function_1.pipe)((0, exports.useEventListener)((0, function_1.pipe)(exports.getWindow, EO.fromEnv), 'popstate', () => exports.getState), EO.getOrElseEW(() => exports.getState)); exports.usePopstate = usePopstate; /** * @category Use * @since 0.13.2 */ const useHashChange = () => (0, function_1.pipe)((0, exports.useEventListener)((0, function_1.pipe)(exports.getWindow, EO.fromEnv), 'hashchange', () => exports.getHash), EO.getOrElseEW(() => exports.getHash)); exports.useHashChange = useHashChange; /** * @category Use * @since 0.13.2 */ const useWhenUrlChanges = (env) => (0, function_1.pipe)(env, E.apFirstW((0, exports.usePopstate)()), E.apFirstW((0, exports.useHashChange)())); exports.useWhenUrlChanges = useWhenUrlChanges; /** * @category Use * @since 0.13.2 */ exports.useLocation = (0, exports.useWhenUrlChanges)(exports.getLocation); /** * @category Use * @since 0.13.2 */ exports.useHistory = (0, exports.useWhenUrlChanges)(exports.getHistory); /** * @category History * @since 0.13.2 */ const pushState = (state, path) => (0, function_1.pipe)(exports.getHistory, E.chainW((history) => E.fromIO(() => history.pushState(state, '', path)))); exports.pushState = pushState; /** * @category History * @since 0.13.2 */ const navigateTo = (path) => (0, exports.pushState)(null, path); exports.navigateTo = navigateTo; /** * @category History * @since 0.13.2 */ const replaceState = (state, path) => (0, function_1.pipe)(exports.getHistory, E.chainW((history) => E.fromIO(() => history.replaceState(state, '', path)))); exports.replaceState = replaceState; /** * @category History * @since 0.13.2 */ exports.getState = (0, function_1.pipe)(exports.getHistory, E.map(({ state }) => state)); /** * @category History * @since 0.13.3 */ exports.goBack = (0, function_1.pipe)(exports.getHistory, E.chainW((history) => E.fromIO(() => history.back()))); /** * @category History * @since 0.13.3 */ exports.goForward = (0, function_1.pipe)(exports.getHistory, E.chainW((history) => E.fromIO(() => history.forward()))); /** * @category History * @since 0.13.3 */ const goTo = (n) => (0, function_1.pipe)(exports.getHistory, E.chainW((history) => E.fromIO(() => history.go(n)))); exports.goTo = goTo; /** * @category Location * @since 0.13.2 */ exports.reload = (0, function_1.pipe)(exports.getLocation, E.chainW((l) => E.fromIO(() => l.reload()))); /** * @category Location * @since 0.13.2 */ const assign = (url) => (0, function_1.pipe)(exports.getLocation, E.chainW((l) => E.fromIO(() => l.assign(url)))); exports.assign = assign; /** * @category Location * @since 0.13.3 */ exports.getHash = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.hash)); /** * @category Location * @since 0.13.3 */ exports.getPathname = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.pathname)); /** * @category Location * @since 0.13.3 */ exports.getOrigin = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.origin)); /** * @category Location * @since 0.13.3 */ exports.getHref = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.href)); /** * @category Location * @since 0.13.3 */ exports.getHost = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.host)); /** * @category Location * @since 0.13.3 */ exports.getHostname = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.hostname)); /** * @category Location * @since 0.13.3 */ exports.getPort = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.port)); /** * @category Location * @since 0.13.3 */ exports.getProtocol = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.protocol)); /** * @category Location * @since 0.13.3 */ exports.getSearch = (0, function_1.pipe)(exports.getLocation, E.map((l) => l.search)); //# sourceMappingURL=dom.js.map