You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
15 KiB
1 line
15 KiB
{"ast":null,"code":"import { getHeaderTitle, HeaderBackContext } from '@react-navigation/elements';\nimport { NavigationContext, NavigationRouteContext } from '@react-navigation/native';\nimport * as React from 'react';\nimport Animated from \"react-native-web/dist/exports/Animated\";\nimport StyleSheet from \"react-native-web/dist/exports/StyleSheet\";\nimport View from \"react-native-web/dist/exports/View\";\nimport { forNoAnimation, forSlideLeft, forSlideRight, forSlideUp } from \"../../TransitionConfigs/HeaderStyleInterpolators\";\nimport Header from \"./Header\";\nexport default function HeaderContainer(_ref) {\n var mode = _ref.mode,\n scenes = _ref.scenes,\n layout = _ref.layout,\n getPreviousScene = _ref.getPreviousScene,\n getFocusedRoute = _ref.getFocusedRoute,\n onContentHeightChange = _ref.onContentHeightChange,\n style = _ref.style;\n var focusedRoute = getFocusedRoute();\n var parentHeaderBack = React.useContext(HeaderBackContext);\n return React.createElement(Animated.View, {\n pointerEvents: \"box-none\",\n style: style\n }, scenes.slice(-3).map(function (scene, i, self) {\n var _self, _self2;\n if (mode === 'screen' && i !== self.length - 1 || !scene) {\n return null;\n }\n var _scene$descriptor$opt = scene.descriptor.options,\n header = _scene$descriptor$opt.header,\n headerMode = _scene$descriptor$opt.headerMode,\n _scene$descriptor$opt2 = _scene$descriptor$opt.headerShown,\n headerShown = _scene$descriptor$opt2 === void 0 ? true : _scene$descriptor$opt2,\n headerTransparent = _scene$descriptor$opt.headerTransparent,\n headerStyleInterpolator = _scene$descriptor$opt.headerStyleInterpolator;\n if (headerMode !== mode || !headerShown) {\n return null;\n }\n var isFocused = focusedRoute.key === scene.descriptor.route.key;\n var previousScene = getPreviousScene({\n route: scene.descriptor.route\n });\n var headerBack = parentHeaderBack;\n if (previousScene) {\n var _previousScene$descri = previousScene.descriptor,\n options = _previousScene$descri.options,\n route = _previousScene$descri.route;\n headerBack = previousScene ? {\n title: getHeaderTitle(options, route.name)\n } : parentHeaderBack;\n }\n var previousDescriptor = (_self = self[i - 1]) === null || _self === void 0 ? void 0 : _self.descriptor;\n var nextDescriptor = (_self2 = self[i + 1]) === null || _self2 === void 0 ? void 0 : _self2.descriptor;\n var _ref2 = (previousDescriptor === null || previousDescriptor === void 0 ? void 0 : previousDescriptor.options) || {},\n _ref2$headerShown = _ref2.headerShown,\n previousHeaderShown = _ref2$headerShown === void 0 ? true : _ref2$headerShown,\n previousHeaderMode = _ref2.headerMode;\n var nextHeaderlessScene = self.slice(i + 1).find(function (scene) {\n var _ref3 = (scene === null || scene === void 0 ? void 0 : scene.descriptor.options) || {},\n _ref3$headerShown = _ref3.headerShown,\n currentHeaderShown = _ref3$headerShown === void 0 ? true : _ref3$headerShown,\n currentHeaderMode = _ref3.headerMode;\n return currentHeaderShown === false || currentHeaderMode === 'screen';\n });\n var _ref4 = (nextHeaderlessScene === null || nextHeaderlessScene === void 0 ? void 0 : nextHeaderlessScene.descriptor.options) || {},\n nextHeaderlessGestureDirection = _ref4.gestureDirection;\n var isHeaderStatic = (previousHeaderShown === false || previousHeaderMode === 'screen') && !nextDescriptor || nextHeaderlessScene;\n var props = {\n layout: layout,\n back: headerBack,\n progress: scene.progress,\n options: scene.descriptor.options,\n route: scene.descriptor.route,\n navigation: scene.descriptor.navigation,\n styleInterpolator: mode === 'float' ? isHeaderStatic ? nextHeaderlessGestureDirection === 'vertical' || nextHeaderlessGestureDirection === 'vertical-inverted' ? forSlideUp : nextHeaderlessGestureDirection === 'horizontal-inverted' ? forSlideRight : forSlideLeft : headerStyleInterpolator : forNoAnimation\n };\n return React.createElement(NavigationContext.Provider, {\n key: scene.descriptor.route.key,\n value: scene.descriptor.navigation\n }, React.createElement(NavigationRouteContext.Provider, {\n value: scene.descriptor.route\n }, React.createElement(View, {\n onLayout: onContentHeightChange ? function (e) {\n var height = e.nativeEvent.layout.height;\n onContentHeightChange({\n route: scene.descriptor.route,\n height: height\n });\n } : undefined,\n pointerEvents: isFocused ? 'box-none' : 'none',\n accessibilityElementsHidden: !isFocused,\n importantForAccessibility: isFocused ? 'auto' : 'no-hide-descendants',\n style: mode === 'float' && !isFocused || headerTransparent ? styles.header : null\n }, header !== undefined ? header(props) : React.createElement(Header, props))));\n }));\n}\nvar styles = StyleSheet.create({\n header: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0\n }\n});","map":{"version":3,"sources":["HeaderContainer.tsx"],"names":["getHeaderTitle","HeaderBackContext","NavigationContext","NavigationRouteContext","React","forNoAnimation","forSlideLeft","forSlideRight","forSlideUp","Header","HeaderContainer","mode","scenes","layout","getPreviousScene","getFocusedRoute","onContentHeightChange","style","focusedRoute","parentHeaderBack","useContext","slice","map","scene","i","self","length","header","headerMode","headerShown","headerTransparent","headerStyleInterpolator","descriptor","options","isFocused","key","route","previousScene","headerBack","title","name","previousDescriptor","nextDescriptor","previousHeaderShown","previousHeaderMode","nextHeaderlessScene","find","currentHeaderShown","currentHeaderMode","gestureDirection","nextHeaderlessGestureDirection","isHeaderStatic","props","back","progress","navigation","styleInterpolator","e","height","nativeEvent","undefined","styles","StyleSheet","create","position","top","left","right"],"mappings":"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","sourceRoot":"../../src","sourcesContent":["import { getHeaderTitle, HeaderBackContext } from '@react-navigation/elements';\nimport { NavigationContext, NavigationRouteContext } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\nimport { forNoAnimation, forSlideLeft, forSlideRight, forSlideUp } from '../../TransitionConfigs/HeaderStyleInterpolators';\nimport Header from './Header';\nexport default function HeaderContainer(_ref) {\n let {\n mode,\n scenes,\n layout,\n getPreviousScene,\n getFocusedRoute,\n onContentHeightChange,\n style\n } = _ref;\n const focusedRoute = getFocusedRoute();\n const parentHeaderBack = React.useContext(HeaderBackContext);\n return /*#__PURE__*/React.createElement(Animated.View, {\n pointerEvents: \"box-none\",\n style: style\n }, scenes.slice(-3).map((scene, i, self) => {\n var _self, _self2;\n if (mode === 'screen' && i !== self.length - 1 || !scene) {\n return null;\n }\n const {\n header,\n headerMode,\n headerShown = true,\n headerTransparent,\n headerStyleInterpolator\n } = scene.descriptor.options;\n if (headerMode !== mode || !headerShown) {\n return null;\n }\n const isFocused = focusedRoute.key === scene.descriptor.route.key;\n const previousScene = getPreviousScene({\n route: scene.descriptor.route\n });\n let headerBack = parentHeaderBack;\n if (previousScene) {\n const {\n options,\n route\n } = previousScene.descriptor;\n headerBack = previousScene ? {\n title: getHeaderTitle(options, route.name)\n } : parentHeaderBack;\n }\n\n // If the screen is next to a headerless screen, we need to make the header appear static\n // This makes the header look like it's moving with the screen\n const previousDescriptor = (_self = self[i - 1]) === null || _self === void 0 ? void 0 : _self.descriptor;\n const nextDescriptor = (_self2 = self[i + 1]) === null || _self2 === void 0 ? void 0 : _self2.descriptor;\n const {\n headerShown: previousHeaderShown = true,\n headerMode: previousHeaderMode\n } = (previousDescriptor === null || previousDescriptor === void 0 ? void 0 : previousDescriptor.options) || {};\n\n // If any of the next screens don't have a header or header is part of the screen\n // Then we need to move this header offscreen so that it doesn't cover it\n const nextHeaderlessScene = self.slice(i + 1).find(scene => {\n const {\n headerShown: currentHeaderShown = true,\n headerMode: currentHeaderMode\n } = (scene === null || scene === void 0 ? void 0 : scene.descriptor.options) || {};\n return currentHeaderShown === false || currentHeaderMode === 'screen';\n });\n const {\n gestureDirection: nextHeaderlessGestureDirection\n } = (nextHeaderlessScene === null || nextHeaderlessScene === void 0 ? void 0 : nextHeaderlessScene.descriptor.options) || {};\n const isHeaderStatic = (previousHeaderShown === false || previousHeaderMode === 'screen') &&\n // We still need to animate when coming back from next scene\n // A hacky way to check this is if the next scene exists\n !nextDescriptor || nextHeaderlessScene;\n const props = {\n layout,\n back: headerBack,\n progress: scene.progress,\n options: scene.descriptor.options,\n route: scene.descriptor.route,\n navigation: scene.descriptor.navigation,\n styleInterpolator: mode === 'float' ? isHeaderStatic ? nextHeaderlessGestureDirection === 'vertical' || nextHeaderlessGestureDirection === 'vertical-inverted' ? forSlideUp : nextHeaderlessGestureDirection === 'horizontal-inverted' ? forSlideRight : forSlideLeft : headerStyleInterpolator : forNoAnimation\n };\n return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n key: scene.descriptor.route.key,\n value: scene.descriptor.navigation\n }, /*#__PURE__*/React.createElement(NavigationRouteContext.Provider, {\n value: scene.descriptor.route\n }, /*#__PURE__*/React.createElement(View, {\n onLayout: onContentHeightChange ? e => {\n const {\n height\n } = e.nativeEvent.layout;\n onContentHeightChange({\n route: scene.descriptor.route,\n height\n });\n } : undefined,\n pointerEvents: isFocused ? 'box-none' : 'none',\n accessibilityElementsHidden: !isFocused,\n importantForAccessibility: isFocused ? 'auto' : 'no-hide-descendants',\n style:\n // Avoid positioning the focused header absolutely\n // Otherwise accessibility tools don't seem to be able to find it\n mode === 'float' && !isFocused || headerTransparent ? styles.header : null\n }, header !== undefined ? header(props) : /*#__PURE__*/React.createElement(Header, props))));\n }));\n}\nconst styles = StyleSheet.create({\n header: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0\n }\n});\n//# sourceMappingURL=HeaderContainer.js.map"]},"metadata":{},"sourceType":"module"} |