import * as React from 'react';
import { getStateFromPath, getActionFromState, NavigationContext } from '@react-navigation/core';
import LinkingContext from './LinkingContext';
export default function useLinkTo() {
  const navigation = React.useContext(NavigationContext);
  const linking = React.useContext(LinkingContext);
  const linkTo = React.useCallback(path => {
    if (!path.startsWith('/')) {
      throw new Error("The path must start with '/' (".concat(path, ")."));
    }

    if (navigation === undefined) {
      throw new Error("Couldn't find a navigation object. Is your component inside a screen in a navigator?");
    }

    const {
      options
    } = linking;
    const state = (options === null || options === void 0 ? void 0 : options.getStateFromPath) ? options.getStateFromPath(path, options.config) : getStateFromPath(path, options === null || options === void 0 ? void 0 : options.config);

    if (state) {
      let root = navigation;
      let current; // Traverse up to get the root navigation

      while (current = root.dangerouslyGetParent()) {
        root = current;
      }

      const action = getActionFromState(state, options === null || options === void 0 ? void 0 : options.config);

      if (action !== undefined) {
        root.dispatch(action);
      } else {
        root.reset(state);
      }
    } else {
      throw new Error('Failed to parse the path to a navigation state.');
    }
  }, [linking, navigation]);
  return linkTo;
}
//# sourceMappingURL=useLinkTo.js.map