mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
23c8787fe2
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52691 Unannotated array literals are unsound in Flow right now. This diff adds in annotations and makes a few things readonly, to reduce future errors. Changelog: [Internal] Reviewed By: marcoww6 Differential Revision: D78519638 fbshipit-source-id: d98a7668ecf97bcc87dcb3fad25ade736d885d9a
162 lines
4.0 KiB
JavaScript
162 lines
4.0 KiB
JavaScript
/**
|
||
* 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.
|
||
*
|
||
* @flow strict-local
|
||
* @format
|
||
*/
|
||
|
||
'use strict';
|
||
|
||
import type {RNTesterModuleExample} from '../../types/RNTesterTypes';
|
||
|
||
import RNTesterText from '../../components/RNTesterText';
|
||
import * as React from 'react';
|
||
import {View} from 'react-native';
|
||
|
||
export const title = 'Invalid Props';
|
||
export const category = 'Other';
|
||
export const description =
|
||
'Examples of passing invalid prop values and how they fall back to expected defaults.';
|
||
|
||
export const examples: Array<RNTesterModuleExample> = [
|
||
{
|
||
title: 'View flex',
|
||
render(): React.Node {
|
||
return (
|
||
<Comparison actual={[1]} expected={undefined}>
|
||
{flex => (
|
||
<View style={{height: 50}}>
|
||
<View
|
||
style={
|
||
// $FlowFixMe[incompatible-type]
|
||
{
|
||
flex,
|
||
backgroundColor: 'red',
|
||
}
|
||
}
|
||
/>
|
||
<View style={{flex: 1, backgroundColor: 'lightgreen'}} />
|
||
</View>
|
||
)}
|
||
</Comparison>
|
||
);
|
||
},
|
||
},
|
||
{
|
||
title: 'View flexDirection',
|
||
render(): React.Node {
|
||
return (
|
||
<Comparison actual={'row.'} expected={undefined}>
|
||
{flexDirection => (
|
||
<View
|
||
// $FlowFixMe[incompatible-type]
|
||
style={{flexDirection}}>
|
||
<RNTesterText>⬇️</RNTesterText>
|
||
<RNTesterText>⬇️</RNTesterText>
|
||
</View>
|
||
)}
|
||
</Comparison>
|
||
);
|
||
},
|
||
},
|
||
{
|
||
title: 'Text fontVariant',
|
||
render(): React.Node {
|
||
return (
|
||
<Comparison
|
||
actual={['no-such-variant', 'small-caps-12345']}
|
||
expected={undefined}>
|
||
{fontVariant => (
|
||
<RNTesterText
|
||
// $FlowFixMe[incompatible-type]
|
||
style={{fontVariant}}>
|
||
The quick brown fox jumps over the lazy dog.
|
||
</RNTesterText>
|
||
)}
|
||
</Comparison>
|
||
);
|
||
},
|
||
},
|
||
{
|
||
title: 'View width',
|
||
render(): React.Node {
|
||
return (
|
||
<Comparison actual={['invalid']} expected={undefined}>
|
||
{width => (
|
||
<View style={{backgroundColor: 'red'}}>
|
||
<View
|
||
style={
|
||
// $FlowFixMe[incompatible-type]
|
||
{width, height: 50, backgroundColor: 'lightgreen'}
|
||
}
|
||
/>
|
||
</View>
|
||
)}
|
||
</Comparison>
|
||
);
|
||
},
|
||
},
|
||
{
|
||
title: 'View background color',
|
||
render(): React.Node {
|
||
return (
|
||
<Comparison actual={['invalid']} expected={undefined}>
|
||
{backgroundColor => (
|
||
<View style={{backgroundColor: 'lightgreen'}}>
|
||
<View
|
||
style={
|
||
// $FlowFixMe[incompatible-type]
|
||
{backgroundColor, height: 50}
|
||
}
|
||
/>
|
||
</View>
|
||
)}
|
||
</Comparison>
|
||
);
|
||
},
|
||
},
|
||
{
|
||
title: 'Malformed platform color',
|
||
render(): React.Node {
|
||
return (
|
||
<Comparison
|
||
actual={{resource_paths: ([]: Array<string>)}}
|
||
expected={undefined}>
|
||
{backgroundColor => (
|
||
<View style={{backgroundColor: 'lightgreen'}}>
|
||
<View
|
||
style={
|
||
// $FlowFixMe[incompatible-type]
|
||
{backgroundColor, height: 50}
|
||
}
|
||
/>
|
||
</View>
|
||
)}
|
||
</Comparison>
|
||
);
|
||
},
|
||
},
|
||
];
|
||
|
||
function Comparison<ExpectedT, ActualT>({
|
||
children,
|
||
actual,
|
||
expected,
|
||
}: {
|
||
children: (value: ExpectedT | ActualT) => React.Node,
|
||
actual: ActualT,
|
||
expected: ExpectedT,
|
||
}): React.Node {
|
||
return (
|
||
<>
|
||
<RNTesterText style={{fontWeight: 'bold'}}>Actual</RNTesterText>
|
||
{children(actual)}
|
||
<RNTesterText style={{fontWeight: 'bold'}}>Expected</RNTesterText>
|
||
{children(expected)}
|
||
</>
|
||
);
|
||
}
|