UNPKG

expo-router

Version:

Expo Router is a file-based router for React Native and web applications.

84 lines (82 loc) • 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 0 && (module.exports = { default: null, shouldHandleMouseEvent: null }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: Object.getOwnPropertyDescriptor(all, name).get }); } _export(exports, { get default () { return useLinkToPathProps; }, get shouldHandleMouseEvent () { return shouldHandleMouseEvent; } }); function _reactnative() { const data = require("react-native"); _reactnative = function() { return data; }; return data; } const _emitDomEvent = require("../domComponents/emitDomEvent"); const _getPathFromStateforks = require("../fork/getPathFromState-forks"); const _useRouterActions = require("../global-state/useRouterActions"); const _matchers = require("../matchers"); const _url = require("../utils/url"); function eventShouldPreventDefault(e) { if (e?.defaultPrevented) { return false; } if (// Only check MouseEvents 'button' in e && // ignore clicks with modifier keys !e.metaKey && !e.altKey && !e.ctrlKey && !e.shiftKey && (e.button == null || e.button === 0) && // Only accept left clicks [ undefined, null, '', 'self' ].includes(e.currentTarget.target) // let browser handle "target=_blank" etc. ) { return true; } return false; } function useLinkToPathProps({ href, ...options }) { const router = (0, _useRouterActions.useRouterActions)(); const onPress = (event)=>{ // TODO: Align external links: anchors stay in the same tab, while a non-anchor `asChild` // falls back to `linkTo` and `Linking.openURL`, which opens a new tab. if (shouldHandleMouseEvent(event)) { if ((0, _emitDomEvent.emitDomLinkEvent)(href, options)) { return; } router.linkTo(href, options); } }; const resolvedHref = (0, _url.shouldLinkExternally)(href) ? href : (0, _getPathFromStateforks.appendBaseUrl)((0, _matchers.stripGroupSegmentsFromPath)(href) || '/'); return { href: resolvedHref, role: 'link', onPress }; } function shouldHandleMouseEvent(event) { if (_reactnative().Platform.OS !== 'web') { return !event?.defaultPrevented; } if (event && eventShouldPreventDefault(event)) { event.preventDefault(); return true; } return false; } //# sourceMappingURL=useLinkToPathProps.js.map