mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
bb7aef2dd7
Summary: Fixes https://github.com/MLH-Fellowship/react-native/issues/34 The PR is part of an effort to update the code comments to match the current documentation on the React Native website. The project is a part of the MLH Fellowship program and involves the automatic generation of the website docs from code comments and flow types as the end result. To learn more about the project you can visit the project wiki: - [Project Details](https://github.com/MLH-Fellowship/0.4.x-projects/wiki/React-Native-Flowtype-API-Docs-Generator) - [RN Docs Standards](https://github.com/MLH-Fellowship/react-native/wiki/RN-Docs-standards) Link to the documentation(the source of truth): - [activityindicator.md](https://github.com/MLH-Fellowship/react-native-website/blob/master/docs/activityindicator.md) ## Changes * Update the title and prop description from docs. * Remove unnecessary `*` from the code comments. * Add Snack player example specified in the docs to the code comments as JSDoc. * Add `type` annotation to parse supported datatype by the prop. * Add `platform` annotation to specify platforms supported by a prop. * Add `default` annotation to parse default value of prop. ## Changelog [Internal] Pull Request resolved: https://github.com/facebook/react-native/pull/29523 Test Plan: All changes are made to the code comments and thus there is no need for testing. Reviewed by jevakallio Reviewed By: cpojer Differential Revision: D22921419 Pulled By: motiz88 fbshipit-source-id: 3701bf3e3f4e0762529c8a5597263354d5243f07
207 lines
5.0 KiB
JavaScript
207 lines
5.0 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.
|
|
*
|
|
* @format
|
|
* @flow
|
|
* @generate-docs
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const Platform = require('../../Utilities/Platform');
|
|
const React = require('react');
|
|
const StyleSheet = require('../../StyleSheet/StyleSheet');
|
|
const View = require('../View/View');
|
|
import type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';
|
|
import type {ViewProps} from '../View/ViewPropTypes';
|
|
import type {ColorValue} from '../../StyleSheet/StyleSheet';
|
|
|
|
const PlatformActivityIndicator =
|
|
Platform.OS === 'android'
|
|
? require('../ProgressBarAndroid/ProgressBarAndroid')
|
|
: require('./ActivityIndicatorViewNativeComponent').default;
|
|
|
|
const GRAY = '#999999';
|
|
|
|
type IndicatorSize = number | 'small' | 'large';
|
|
|
|
type IOSProps = $ReadOnly<{|
|
|
/**
|
|
Whether the indicator should hide when not animating.
|
|
|
|
@platform ios
|
|
*/
|
|
hidesWhenStopped?: ?boolean,
|
|
|}>;
|
|
type Props = $ReadOnly<{|
|
|
...ViewProps,
|
|
...IOSProps,
|
|
|
|
/**
|
|
Whether to show the indicator (`true`) or hide it (`false`).
|
|
*/
|
|
animating?: ?boolean,
|
|
|
|
/**
|
|
The foreground color of the spinner.
|
|
|
|
@default {@platform android} `null` (system accent default color)
|
|
@default {@platform ios} '#999999'
|
|
*/
|
|
color?: ?ColorValue,
|
|
|
|
/**
|
|
Size of the indicator.
|
|
|
|
@type enum(`'small'`, `'large'`)
|
|
@type {@platform android} number
|
|
*/
|
|
size?: ?IndicatorSize,
|
|
|}>;
|
|
|
|
const ActivityIndicator = (props: Props, forwardedRef?: any) => {
|
|
const {onLayout, style, size, ...restProps} = props;
|
|
let sizeStyle;
|
|
let sizeProp;
|
|
|
|
switch (size) {
|
|
case 'small':
|
|
sizeStyle = styles.sizeSmall;
|
|
sizeProp = 'small';
|
|
break;
|
|
case 'large':
|
|
sizeStyle = styles.sizeLarge;
|
|
sizeProp = 'large';
|
|
break;
|
|
default:
|
|
sizeStyle = {height: props.size, width: props.size};
|
|
break;
|
|
}
|
|
|
|
const nativeProps = {
|
|
...restProps,
|
|
ref: forwardedRef,
|
|
style: sizeStyle,
|
|
size: sizeProp,
|
|
};
|
|
|
|
const androidProps = {
|
|
styleAttr: 'Normal',
|
|
indeterminate: true,
|
|
};
|
|
|
|
return (
|
|
<View
|
|
onLayout={onLayout}
|
|
style={StyleSheet.compose(styles.container, style)}>
|
|
{Platform.OS === 'android' ? (
|
|
// $FlowFixMe Flow doesn't know when this is the android component
|
|
<PlatformActivityIndicator {...nativeProps} {...androidProps} />
|
|
) : (
|
|
/* $FlowFixMe(>=0.106.0 site=react_native_android_fb) This comment
|
|
* suppresses an error found when Flow v0.106 was deployed. To see the
|
|
* error, delete this comment and run Flow. */
|
|
<PlatformActivityIndicator {...nativeProps} />
|
|
)}
|
|
</View>
|
|
);
|
|
};
|
|
|
|
/**
|
|
Displays a circular loading indicator.
|
|
|
|
```SnackPlayer name=ActivityIndicator%20Function%20Component%20Example
|
|
import React from "react";
|
|
import { ActivityIndicator, StyleSheet, Text, View } from "react-native";
|
|
|
|
const App = () => (
|
|
<View style={[styles.container, styles.horizontal]}>
|
|
<ActivityIndicator />
|
|
<ActivityIndicator size="large" />
|
|
<ActivityIndicator size="small" color="#0000ff" />
|
|
<ActivityIndicator size="large" color="#00ff00" />
|
|
</View>
|
|
);
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
flex: 1,
|
|
justifyContent: "center"
|
|
},
|
|
horizontal: {
|
|
flexDirection: "row",
|
|
justifyContent: "space-around",
|
|
padding: 10
|
|
}
|
|
});
|
|
export default App;
|
|
```
|
|
|
|
```SnackPlayer name=ActivityIndicator%20Class%20Component%20Example
|
|
import React, { Component } from "react";
|
|
import { ActivityIndicator, StyleSheet, Text, View } from "react-native";
|
|
|
|
class App extends Component {
|
|
render() {
|
|
return (
|
|
<View style={[styles.container, styles.horizontal]}>
|
|
<ActivityIndicator />
|
|
<ActivityIndicator size="large" />
|
|
<ActivityIndicator size="small" color="#0000ff" />
|
|
<ActivityIndicator size="large" color="#00ff00" />
|
|
</View>
|
|
);
|
|
}
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
flex: 1,
|
|
justifyContent: "center"
|
|
},
|
|
horizontal: {
|
|
flexDirection: "row",
|
|
justifyContent: "space-around",
|
|
padding: 10
|
|
}
|
|
});
|
|
export default App;
|
|
```
|
|
*/
|
|
|
|
const ActivityIndicatorWithRef: React.AbstractComponent<
|
|
Props,
|
|
HostComponent<mixed>,
|
|
> = React.forwardRef(ActivityIndicator);
|
|
ActivityIndicatorWithRef.displayName = 'ActivityIndicator';
|
|
|
|
/* $FlowFixMe(>=0.89.0 site=react_native_fb) This comment suppresses an error
|
|
* found when Flow v0.89 was deployed. To see the error, delete this comment
|
|
* and run Flow. */
|
|
ActivityIndicatorWithRef.defaultProps = {
|
|
animating: true,
|
|
color: Platform.OS === 'ios' ? GRAY : null,
|
|
hidesWhenStopped: true,
|
|
size: 'small',
|
|
};
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
},
|
|
sizeSmall: {
|
|
width: 20,
|
|
height: 20,
|
|
},
|
|
sizeLarge: {
|
|
width: 36,
|
|
height: 36,
|
|
},
|
|
});
|
|
|
|
module.exports = ActivityIndicatorWithRef;
|