PHP 7.4.33
Preview: getInspectorDataForViewAtPoint.js Size: 2.08 KB
/var/www/uibuilder.cmshelp.dk/httpdocs/node_modules/react-native/Libraries/Inspector/getInspectorDataForViewAtPoint.js
/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @format
 * @flow
 */

import type {
  HostInstance,
  TouchedViewDataAtPoint,
} from '../Renderer/shims/ReactNativeTypes';

const invariant = require('invariant');

export type ReactRenderer = {
  rendererConfig: {
    getInspectorDataForViewAtPoint: (
      inspectedView: ?HostInstance,
      locationX: number,
      locationY: number,
      callback: Function,
    ) => void,
    ...
  },
};
type AttachedRendererEventPayload = {id: number, renderer: ReactRenderer};

const reactDevToolsHook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;
invariant(
  Boolean(reactDevToolsHook),
  'getInspectorDataForViewAtPoint should not be used if React DevTools hook is not injected',
);

const renderers: Array<ReactRenderer> = Array.from(
  window.__REACT_DEVTOOLS_GLOBAL_HOOK__.renderers.values(),
);

const appendRenderer = ({renderer}: AttachedRendererEventPayload) =>
  renderers.push(renderer);
reactDevToolsHook.on('renderer', appendRenderer);

function validateRenderers(): void {
  invariant(
    renderers.length > 0,
    'Expected to find at least one React Native renderer on DevTools hook.',
  );
}

module.exports = function getInspectorDataForViewAtPoint(
  inspectedView: ?HostInstance,
  locationX: number,
  locationY: number,
  callback: (viewData: TouchedViewDataAtPoint) => boolean,
) {
  validateRenderers();

  let shouldBreak = false;
  // Check all renderers for inspector data.
  for (const renderer of renderers) {
    if (shouldBreak) {
      break;
    }

    if (renderer?.rendererConfig?.getInspectorDataForViewAtPoint != null) {
      renderer.rendererConfig.getInspectorDataForViewAtPoint(
        inspectedView,
        locationX,
        locationY,
        viewData => {
          // Only return with non-empty view data since only one renderer will have this view.
          if (viewData && viewData.hierarchy.length > 0) {
            shouldBreak = callback(viewData);
          }
        },
      );
    }
  }
};

Directory Contents

Dirs: 0 × Files: 13
Name Size Perms Modified Actions
925 B lrw-r--r-- 2025-03-28 11:04:42
Edit Download
2.85 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
4.07 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
3.41 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
2.08 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
6.07 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
1.56 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
4.57 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
16.10 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
1.43 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
4.13 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
2.68 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
1.64 KB lrw-r--r-- 2025-03-28 11:04:42
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).