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
9.2 KiB

{"ast":null,"code":"import * as React from 'react';\nimport NavigationBuilderContext from \"./NavigationBuilderContext\";\nimport NavigationStateContext from \"./NavigationStateContext\";\nexport default function useOptionsGetters(_ref) {\n var key = _ref.key,\n options = _ref.options,\n navigation = _ref.navigation;\n var optionsRef = React.useRef(options);\n var optionsGettersFromChildRef = React.useRef({});\n var _React$useContext = React.useContext(NavigationBuilderContext),\n onOptionsChange = _React$useContext.onOptionsChange;\n var _React$useContext2 = React.useContext(NavigationStateContext),\n parentAddOptionsGetter = _React$useContext2.addOptionsGetter;\n var optionsChangeListener = React.useCallback(function () {\n var _ref2;\n var isFocused = (_ref2 = navigation === null || navigation === void 0 ? void 0 : navigation.isFocused()) != null ? _ref2 : true;\n var hasChildren = Object.keys(optionsGettersFromChildRef.current).length;\n if (isFocused && !hasChildren) {\n var _optionsRef$current;\n onOptionsChange((_optionsRef$current = optionsRef.current) != null ? _optionsRef$current : {});\n }\n }, [navigation, onOptionsChange]);\n React.useEffect(function () {\n optionsRef.current = options;\n optionsChangeListener();\n return navigation === null || navigation === void 0 ? void 0 : navigation.addListener('focus', optionsChangeListener);\n }, [navigation, options, optionsChangeListener]);\n var getOptionsFromListener = React.useCallback(function () {\n for (var _key in optionsGettersFromChildRef.current) {\n if (optionsGettersFromChildRef.current.hasOwnProperty(_key)) {\n var _optionsGettersFromCh, _optionsGettersFromCh2;\n var result = (_optionsGettersFromCh = (_optionsGettersFromCh2 = optionsGettersFromChildRef.current)[_key]) === null || _optionsGettersFromCh === void 0 ? void 0 : _optionsGettersFromCh.call(_optionsGettersFromCh2);\n if (result !== null) {\n return result;\n }\n }\n }\n return null;\n }, []);\n var getCurrentOptions = React.useCallback(function () {\n var _ref3;\n var isFocused = (_ref3 = navigation === null || navigation === void 0 ? void 0 : navigation.isFocused()) != null ? _ref3 : true;\n if (!isFocused) {\n return null;\n }\n var optionsFromListener = getOptionsFromListener();\n if (optionsFromListener !== null) {\n return optionsFromListener;\n }\n return optionsRef.current;\n }, [navigation, getOptionsFromListener]);\n React.useEffect(function () {\n return parentAddOptionsGetter === null || parentAddOptionsGetter === void 0 ? void 0 : parentAddOptionsGetter(key, getCurrentOptions);\n }, [getCurrentOptions, parentAddOptionsGetter, key]);\n var addOptionsGetter = React.useCallback(function (key, getter) {\n optionsGettersFromChildRef.current[key] = getter;\n optionsChangeListener();\n return function () {\n delete optionsGettersFromChildRef.current[key];\n optionsChangeListener();\n };\n }, [optionsChangeListener]);\n return {\n addOptionsGetter: addOptionsGetter,\n getCurrentOptions: getCurrentOptions\n };\n}","map":{"version":3,"sources":["useOptionsGetters.tsx"],"names":["React","NavigationBuilderContext","NavigationStateContext","useOptionsGetters","key","options","navigation","optionsRef","useRef","optionsGettersFromChildRef","onOptionsChange","useContext","addOptionsGetter","parentAddOptionsGetter","optionsChangeListener","useCallback","isFocused","hasChildren","Object","keys","current","length","useEffect","addListener","getOptionsFromListener","hasOwnProperty","result","getCurrentOptions","optionsFromListener","getter"],"mappings":"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","sourceRoot":"../../src","sourcesContent":["import * as React from 'react';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationStateContext from './NavigationStateContext';\nexport default function useOptionsGetters(_ref) {\n let {\n key,\n options,\n navigation\n } = _ref;\n const optionsRef = React.useRef(options);\n const optionsGettersFromChildRef = React.useRef({});\n const {\n onOptionsChange\n } = React.useContext(NavigationBuilderContext);\n const {\n addOptionsGetter: parentAddOptionsGetter\n } = React.useContext(NavigationStateContext);\n const optionsChangeListener = React.useCallback(() => {\n const isFocused = (navigation === null || navigation === void 0 ? void 0 : navigation.isFocused()) ?? true;\n const hasChildren = Object.keys(optionsGettersFromChildRef.current).length;\n if (isFocused && !hasChildren) {\n onOptionsChange(optionsRef.current ?? {});\n }\n }, [navigation, onOptionsChange]);\n React.useEffect(() => {\n optionsRef.current = options;\n optionsChangeListener();\n return navigation === null || navigation === void 0 ? void 0 : navigation.addListener('focus', optionsChangeListener);\n }, [navigation, options, optionsChangeListener]);\n const getOptionsFromListener = React.useCallback(() => {\n for (let key in optionsGettersFromChildRef.current) {\n if (optionsGettersFromChildRef.current.hasOwnProperty(key)) {\n var _optionsGettersFromCh, _optionsGettersFromCh2;\n const result = (_optionsGettersFromCh = (_optionsGettersFromCh2 = optionsGettersFromChildRef.current)[key]) === null || _optionsGettersFromCh === void 0 ? void 0 : _optionsGettersFromCh.call(_optionsGettersFromCh2);\n\n // null means unfocused route\n if (result !== null) {\n return result;\n }\n }\n }\n return null;\n }, []);\n const getCurrentOptions = React.useCallback(() => {\n const isFocused = (navigation === null || navigation === void 0 ? void 0 : navigation.isFocused()) ?? true;\n if (!isFocused) {\n return null;\n }\n const optionsFromListener = getOptionsFromListener();\n if (optionsFromListener !== null) {\n return optionsFromListener;\n }\n return optionsRef.current;\n }, [navigation, getOptionsFromListener]);\n React.useEffect(() => {\n return parentAddOptionsGetter === null || parentAddOptionsGetter === void 0 ? void 0 : parentAddOptionsGetter(key, getCurrentOptions);\n }, [getCurrentOptions, parentAddOptionsGetter, key]);\n const addOptionsGetter = React.useCallback((key, getter) => {\n optionsGettersFromChildRef.current[key] = getter;\n optionsChangeListener();\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete optionsGettersFromChildRef.current[key];\n optionsChangeListener();\n };\n }, [optionsChangeListener]);\n return {\n addOptionsGetter,\n getCurrentOptions\n };\n}\n//# sourceMappingURL=useOptionsGetters.js.map"]},"metadata":{},"sourceType":"module"}