88 lines
2.4 KiB
JavaScript
88 lines
2.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.unstable_navigationEvents = void 0;
|
|
exports.emit = emit;
|
|
const availableEvents = [
|
|
'pageWillRender',
|
|
'pageFocused',
|
|
'pageBlurred',
|
|
'pageRemoved',
|
|
];
|
|
const subscribers = {};
|
|
function addListener(eventType, callback) {
|
|
if (!availableEvents.includes(eventType)) {
|
|
throw new Error(`Unsupported event type: ${eventType}`);
|
|
}
|
|
if (!subscribers[eventType]) {
|
|
subscribers[eventType] = new Set();
|
|
}
|
|
subscribers[eventType].add(callback);
|
|
return () => {
|
|
subscribers[eventType].delete(callback);
|
|
if (subscribers[eventType].size === 0) {
|
|
delete subscribers[eventType];
|
|
}
|
|
};
|
|
}
|
|
function emit(type, event) {
|
|
const subscribersForEvent = subscribers[type];
|
|
if (subscribersForEvent) {
|
|
for (const callback of subscribersForEvent) {
|
|
callback(event);
|
|
}
|
|
}
|
|
}
|
|
let enabled = false;
|
|
let currentPathname = undefined;
|
|
let currentParams = undefined;
|
|
let currentPathnameListener = undefined;
|
|
exports.unstable_navigationEvents = {
|
|
addListener,
|
|
emit,
|
|
enable: () => {
|
|
enabled = true;
|
|
},
|
|
isEnabled: () => {
|
|
return enabled;
|
|
},
|
|
saveCurrentPathname: () => {
|
|
if (!enabled || currentPathnameListener)
|
|
return;
|
|
currentPathnameListener = addListener('pageFocused', (event) => {
|
|
currentPathname = event.pathname;
|
|
currentParams = event.params;
|
|
});
|
|
},
|
|
get currentPathname() {
|
|
return currentPathname;
|
|
},
|
|
get currentParams() {
|
|
return currentParams;
|
|
},
|
|
};
|
|
if (globalThis.expo) {
|
|
globalThis.expo.router = globalThis.expo.router || {};
|
|
if (!('navigationEvents' in globalThis.expo.router)) {
|
|
Object.defineProperties(globalThis.expo.router, {
|
|
navigationEvents: {
|
|
get() {
|
|
return exports.unstable_navigationEvents;
|
|
},
|
|
enumerable: true,
|
|
},
|
|
currentPathname: {
|
|
get() {
|
|
return currentPathname;
|
|
},
|
|
enumerable: true,
|
|
},
|
|
currentParams: {
|
|
get() {
|
|
return currentParams;
|
|
},
|
|
enumerable: true,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
//# sourceMappingURL=index.js.map
|