Files
react-native/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js
T
Samuel Susla 59f25da5a4 React Native sync for revisions c28f313...0cac4d5
Summary:
This sync includes the following changes:
- **[0cac4d54c](https://github.com/facebook/react/commit/0cac4d54c )**: Double invoked effects on suspended children ([#25307](https://github.com/facebook/react/pull/25307)) //<Samuel Susla>//
- **[3d615fc14](https://github.com/facebook/react/commit/3d615fc14 )**: Grammar. Removed doubles of the word "the". ([#25295](https://github.com/facebook/react/pull/25295)) //<Victoria Graf>//
- **[6e3bc8a2e](https://github.com/facebook/react/commit/6e3bc8a2e )**: [DevTools] Check if Proxy exists before creating DispatcherProxy ([#25278](https://github.com/facebook/react/pull/25278)) //<Tianyu Yao>//
- **[e7fc04b29](https://github.com/facebook/react/commit/e7fc04b29 )**: [react-dom] Reorganize react-dom internals to match react ([#25277](https://github.com/facebook/react/pull/25277)) //<Josh Story>//
- **[0b54e0047](https://github.com/facebook/react/commit/0b54e0047 )**: Handle rejections to avoid uncaught rejections ([#25272](https://github.com/facebook/react/pull/25272)) //<Sebastian Markbåge>//
- **[c5d06fdc5](https://github.com/facebook/react/commit/c5d06fdc5 )**: [Flight] Fix Webpack Chunk Loading ([#25271](https://github.com/facebook/react/pull/25271)) //<Sebastian Markbåge>//
- **[975b64464](https://github.com/facebook/react/commit/975b64464 )**: [Flight] response.readRoot() -> use(response) ([#25267](https://github.com/facebook/react/pull/25267)) //<Sebastian Markbåge>//
- **[60fbb7b14](https://github.com/facebook/react/commit/60fbb7b14 )**: [Flight] Implement FlightClient in terms of Thenable/Promises instead of throwing Promises ([#25260](https://github.com/facebook/react/pull/25260)) //<Sebastian Markbåge>//
- **[c91a1e03b](https://github.com/facebook/react/commit/c91a1e03b )**: experimental_useEvent ([#25229](https://github.com/facebook/react/pull/25229)) //<Lauren Tan>//
- **[346c7d4c4](https://github.com/facebook/react/commit/346c7d4c4 )**: straightford explicit types ([#25253](https://github.com/facebook/react/pull/25253)) //<Jan Kassens>//
- **[3401e9200](https://github.com/facebook/react/commit/3401e9200 )**: useMemoCache implementation ([#25143](https://github.com/facebook/react/pull/25143)) //<Joseph Savona>//
- **[0556bab32](https://github.com/facebook/react/commit/0556bab32 )**: [Transition Tracing] More Accurate End Time ([#25105](https://github.com/facebook/react/pull/25105)) //<Luna Ruan>//
- **[5fdcd23aa](https://github.com/facebook/react/commit/5fdcd23aa )**: Flow: upgrade to 0.140 ([#25252](https://github.com/facebook/react/pull/25252)) //<Jan Kassens>//
- **[5c43c6f02](https://github.com/facebook/react/commit/5c43c6f02 )**: Unwind the current workInProgress if it's suspended ([#25247](https://github.com/facebook/react/pull/25247)) //<Sebastian Markbåge>//
- **[e52fa4c57](https://github.com/facebook/react/commit/e52fa4c57 )**: Add early exit to strict mode ([#25235](https://github.com/facebook/react/pull/25235)) //<Samuel Susla>//
- **[6aa38e74c](https://github.com/facebook/react/commit/6aa38e74c )**: Flow: enable unsafe-addition error ([#25242](https://github.com/facebook/react/pull/25242)) //<Jan Kassens>//
- **[ba7b6f418](https://github.com/facebook/react/commit/ba7b6f418 )**: Flow: upgrade to 0.132 ([#25244](https://github.com/facebook/react/pull/25244)) //<Jan Kassens>//
- **[9328988c0](https://github.com/facebook/react/commit/9328988c0 )**: Flow: fix Fiber typed as any ([#25241](https://github.com/facebook/react/pull/25241)) //<Jan Kassens>//
- **[c739cef2f](https://github.com/facebook/react/commit/c739cef2f )**: Flow: ReactFiberHotReloading recursive type ([#25225](https://github.com/facebook/react/pull/25225)) //<Jan Kassens>//
- **[c156ecd48](https://github.com/facebook/react/commit/c156ecd48 )**: Add some test coverage for some error cases ([#25240](https://github.com/facebook/react/pull/25240)) //<Sebastian Markbåge>//
- **[3613284dc](https://github.com/facebook/react/commit/3613284dc )**: experimental_use(context) for server components and ssr ([#25226](https://github.com/facebook/react/pull/25226)) //<mofeiZ>//
- **[269c4e975](https://github.com/facebook/react/commit/269c4e975 )**: Prevent infinite re-renders in StrictMode + Offscreen ([#25203](https://github.com/facebook/react/pull/25203)) //<Samuel Susla>//
- **[8003ab9cf](https://github.com/facebook/react/commit/8003ab9cf )**: Flow: remove explicit object syntax ([#25223](https://github.com/facebook/react/pull/25223)) //<Jan Kassens>//
- **[492c6e29e](https://github.com/facebook/react/commit/492c6e29e )**: Flow: upgrade to 0.127 ([#25221](https://github.com/facebook/react/pull/25221)) //<Jan Kassens>//
- **[8a9e7b6ce](https://github.com/facebook/react/commit/8a9e7b6ce )**: Flow: implicit-inexact-object=error ([#25210](https://github.com/facebook/react/pull/25210)) //<Jan Kassens>//
- **[37cc6bf12](https://github.com/facebook/react/commit/37cc6bf12 )**: Remove useDeferredValue and useTransition from Flight subset ([#25215](https://github.com/facebook/react/pull/25215)) //<Sebastian Markbåge>//

Changelog:
[General][Changed] - React Native sync for revisions c28f313...0cac4d5

jest_e2e[run_all_tests]

Reviewed By: rickhanlonii

Differential Revision: D39696377

fbshipit-source-id: 113878d22d6244b8555b5fb86db1da5d43f7cfd9
2022-09-21 17:41:50 -07:00

130 lines
3.6 KiB
JavaScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @noformat
* @flow strict-local
* @generated SignedSource<<825c6cbf78ba133c9a0ffdeace7f6fc0>>
*
* This file was sync'd from the facebook/react repository.
*/
'use strict';
import {type ViewConfig} from './ReactNativeTypes';
import invariant from 'invariant';
// Event configs
const customBubblingEventTypes: {
[eventName: string]: $ReadOnly<{
phasedRegistrationNames: $ReadOnly<{
captured: string,
bubbled: string,
skipBubbling?: ?boolean,
}>,
}>,
...,
} = {};
const customDirectEventTypes: {
[eventName: string]: $ReadOnly<{
registrationName: string,
}>,
...,
} = {};
exports.customBubblingEventTypes = customBubblingEventTypes;
exports.customDirectEventTypes = customDirectEventTypes;
const viewConfigCallbacks = new Map();
const viewConfigs = new Map();
function processEventTypes(viewConfig: ViewConfig): void {
const {bubblingEventTypes, directEventTypes} = viewConfig;
if (__DEV__) {
if (bubblingEventTypes != null && directEventTypes != null) {
for (const topLevelType in directEventTypes) {
invariant(
bubblingEventTypes[topLevelType] == null,
'Event cannot be both direct and bubbling: %s',
topLevelType,
);
}
}
}
if (bubblingEventTypes != null) {
for (const topLevelType in bubblingEventTypes) {
if (customBubblingEventTypes[topLevelType] == null) {
customBubblingEventTypes[topLevelType] =
bubblingEventTypes[topLevelType];
}
}
}
if (directEventTypes != null) {
for (const topLevelType in directEventTypes) {
if (customDirectEventTypes[topLevelType] == null) {
customDirectEventTypes[topLevelType] = directEventTypes[topLevelType];
}
}
}
}
/**
* Registers a native view/component by name.
* A callback is provided to load the view config from UIManager.
* The callback is deferred until the view is actually rendered.
*/
exports.register = function(name: string, callback: () => ViewConfig): string {
invariant(
!viewConfigCallbacks.has(name),
'Tried to register two views with the same name %s',
name,
);
invariant(
typeof callback === 'function',
'View config getter callback for component `%s` must be a function (received `%s`)',
name,
callback === null ? 'null' : typeof callback,
);
viewConfigCallbacks.set(name, callback);
return name;
};
/**
* Retrieves a config for the specified view.
* If this is the first time the view has been used,
* This configuration will be lazy-loaded from UIManager.
*/
exports.get = function(name: string): ViewConfig {
let viewConfig;
if (!viewConfigs.has(name)) {
const callback = viewConfigCallbacks.get(name);
if (typeof callback !== 'function') {
invariant(
false,
'View config getter callback for component `%s` must be a function (received `%s`).%s',
name,
callback === null ? 'null' : typeof callback,
typeof name[0] === 'string' && /[a-z]/.test(name[0])
? ' Make sure to start component names with a capital letter.'
: '',
);
}
viewConfig = callback();
processEventTypes(viewConfig);
viewConfigs.set(name, viewConfig);
// Clear the callback after the config is set so that
// we don't mask any errors during registration.
viewConfigCallbacks.set(name, null);
} else {
viewConfig = viewConfigs.get(name);
}
invariant(viewConfig, 'View config not found for name %s', name);
return viewConfig;
};