@typed/fp
Version:
Data Structures and Resources for fp-ts
221 lines • 7.83 kB
JavaScript
;
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