Files
react-native/Libraries/NativeComponent/ViewConfig.js
T
Tim Yung de92e7405d RN: Refactor ViewConfig Inflation
Summary:
Refactors the conversion of a `PartialViewConfig` into a `ViewConfig` to a separate function so that it can be reused.

Changelog:
[Internal]

Reviewed By: JoshuaGross

Differential Revision: D25084469

fbshipit-source-id: 8a7f53ff2c68860697c791c37a6abbfd3213a0f9
2020-11-19 02:52:00 -08:00

51 lines
1.4 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.
*
* @flow strict-local
* @format
*/
import ReactNativeViewViewConfig from '../Components/View/ReactNativeViewViewConfig';
import type {
PartialViewConfig,
ViewConfig,
} from '../Renderer/shims/ReactNativeTypes';
/**
* Creates a complete `ViewConfig` from a `PartialViewConfig`.
*/
export function createViewConfig(
partialViewConfig: PartialViewConfig,
): ViewConfig {
return {
uiViewClassName: partialViewConfig.uiViewClassName,
Commands: {},
bubblingEventTypes: composeIndexers(
ReactNativeViewViewConfig.bubblingEventTypes,
partialViewConfig.bubblingEventTypes,
),
directEventTypes: composeIndexers(
ReactNativeViewViewConfig.directEventTypes,
partialViewConfig.directEventTypes,
),
validAttributes: composeIndexers(
// $FlowFixMe[incompatible-call] `style` property confuses Flow.
ReactNativeViewViewConfig.validAttributes,
// $FlowFixMe[incompatible-call] `style` property confuses Flow.
partialViewConfig.validAttributes,
),
};
}
function composeIndexers<T>(
maybeA: ?{+[string]: T},
maybeB: ?{+[string]: T},
): {+[string]: T} {
return maybeA == null || maybeB == null
? maybeA ?? maybeB ?? {}
: {...maybeA, ...maybeB};
}