expo-router
Version:
Expo Router is a file-based router for React Native and web applications.
84 lines (82 loc) • 2.58 kB
JavaScript
;
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