"use strict";
'use client';
Object.defineProperty(exports, "__esModule", { value: true });
exports.Screen = Screen;
exports.isScreen = isScreen;
const native_1 = require("@react-navigation/native");
const react_1 = require("react");
const useNavigation_1 = require("../useNavigation");
const useSafeLayoutEffect_1 = require("./useSafeLayoutEffect");
const stack_1 = require("../utils/stack");
/** Component for setting the current screen's options dynamically. */
function Screen({ name, options }) {
if (name) {
throw new Error(`The name prop on the Screen component may only be used when it is inside a Layout route`);
}
const route = (0, native_1.useRoute)();
const navigation = (0, useNavigation_1.useNavigation)();
const isFocused = navigation.isFocused();
const isPreloaded = (0, stack_1.isRoutePreloadedInStack)(navigation.getState(), route);
(0, useSafeLayoutEffect_1.useSafeLayoutEffect)(() => {
if (options && Object.keys(options).length) {
// React Navigation will infinitely loop in some cases if an empty object is passed to setOptions.
// https://github.com/expo/router/issues/452
if (!isPreloaded || (isPreloaded && isFocused)) {
navigation.setOptions(options);
}
}
}, [isFocused, isPreloaded, navigation, options]);
return null;
}
function isScreen(child, contextKey) {
if ((0, react_1.isValidElement)(child) && child && child.type === Screen) {
if (typeof child.props === 'object' &&
child.props &&
'name' in child.props &&
!child.props.name) {
throw new Error(` component in \`default export\` at \`app${contextKey}/_layout\` must have a \`name\` prop when used as a child of a Layout Route.`);
}
if (process.env.NODE_ENV !== 'production') {
if (['children', 'component', 'getComponent'].some((key) => child.props && typeof child.props === 'object' && key in child.props)) {
throw new Error(` component in \`default export\` at \`app${contextKey}/_layout\` must not have a \`children\`, \`component\`, or \`getComponent\` prop when used as a child of a Layout Route`);
}
}
return true;
}
return false;
}
//# sourceMappingURL=Screen.js.map