191 lines
4.2 KiB
JavaScript
191 lines
4.2 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
* @flow
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var React = require('react');
|
|
var ReactNative = require('react-native');
|
|
var {PickerIOS, Text, View} = ReactNative;
|
|
|
|
var PickerItemIOS = PickerIOS.Item;
|
|
|
|
var CAR_MAKES_AND_MODELS = {
|
|
amc: {
|
|
name: 'AMC',
|
|
models: ['AMX', 'Concord', 'Eagle', 'Gremlin', 'Matador', 'Pacer'],
|
|
},
|
|
alfa: {
|
|
name: 'Alfa-Romeo',
|
|
models: [
|
|
'159',
|
|
'4C',
|
|
'Alfasud',
|
|
'Brera',
|
|
'GTV6',
|
|
'Giulia',
|
|
'MiTo',
|
|
'Spider',
|
|
],
|
|
},
|
|
aston: {
|
|
name: 'Aston Martin',
|
|
models: ['DB5', 'DB9', 'DBS', 'Rapide', 'Vanquish', 'Vantage'],
|
|
},
|
|
audi: {
|
|
name: 'Audi',
|
|
models: [
|
|
'90',
|
|
'4000',
|
|
'5000',
|
|
'A3',
|
|
'A4',
|
|
'A5',
|
|
'A6',
|
|
'A7',
|
|
'A8',
|
|
'Q5',
|
|
'Q7',
|
|
],
|
|
},
|
|
austin: {
|
|
name: 'Austin',
|
|
models: ['America', 'Maestro', 'Maxi', 'Mini', 'Montego', 'Princess'],
|
|
},
|
|
borgward: {
|
|
name: 'Borgward',
|
|
models: ['Hansa', 'Isabella', 'P100'],
|
|
},
|
|
buick: {
|
|
name: 'Buick',
|
|
models: [
|
|
'Electra',
|
|
'LaCrosse',
|
|
'LeSabre',
|
|
'Park Avenue',
|
|
'Regal',
|
|
'Roadmaster',
|
|
'Skylark',
|
|
],
|
|
},
|
|
cadillac: {
|
|
name: 'Cadillac',
|
|
models: ['Catera', 'Cimarron', 'Eldorado', 'Fleetwood', 'Sedan de Ville'],
|
|
},
|
|
chevrolet: {
|
|
name: 'Chevrolet',
|
|
models: [
|
|
'Astro',
|
|
'Aveo',
|
|
'Bel Air',
|
|
'Captiva',
|
|
'Cavalier',
|
|
'Chevelle',
|
|
'Corvair',
|
|
'Corvette',
|
|
'Cruze',
|
|
'Nova',
|
|
'SS',
|
|
'Vega',
|
|
'Volt',
|
|
],
|
|
},
|
|
};
|
|
|
|
class PickerExample extends React.Component<{}, $FlowFixMeState> {
|
|
state = {
|
|
carMake: 'cadillac',
|
|
modelIndex: 3,
|
|
};
|
|
|
|
render() {
|
|
var make = CAR_MAKES_AND_MODELS[this.state.carMake];
|
|
var selectionString = make.name + ' ' + make.models[this.state.modelIndex];
|
|
return (
|
|
<View>
|
|
<Text>Please choose a make for your car:</Text>
|
|
<PickerIOS
|
|
selectedValue={this.state.carMake}
|
|
onValueChange={carMake => this.setState({carMake, modelIndex: 0})}>
|
|
{Object.keys(CAR_MAKES_AND_MODELS).map(carMake => (
|
|
<PickerItemIOS
|
|
key={carMake}
|
|
value={carMake}
|
|
label={CAR_MAKES_AND_MODELS[carMake].name}
|
|
/>
|
|
))}
|
|
</PickerIOS>
|
|
<Text>Please choose a model of {make.name}:</Text>
|
|
<PickerIOS
|
|
selectedValue={this.state.modelIndex}
|
|
key={this.state.carMake}
|
|
onValueChange={modelIndex => this.setState({modelIndex})}>
|
|
{CAR_MAKES_AND_MODELS[this.state.carMake].models.map(
|
|
(modelName, modelIndex) => (
|
|
<PickerItemIOS
|
|
key={this.state.carMake + '_' + modelIndex}
|
|
value={modelIndex}
|
|
label={modelName}
|
|
/>
|
|
),
|
|
)}
|
|
</PickerIOS>
|
|
<Text>You selected: {selectionString}</Text>
|
|
</View>
|
|
);
|
|
}
|
|
}
|
|
|
|
class PickerStyleExample extends React.Component<{}, $FlowFixMeState> {
|
|
state = {
|
|
carMake: 'cadillac',
|
|
modelIndex: 0,
|
|
};
|
|
|
|
render() {
|
|
return (
|
|
<PickerIOS
|
|
itemStyle={{
|
|
fontSize: 25,
|
|
color: 'red',
|
|
textAlign: 'left',
|
|
fontWeight: 'bold',
|
|
}}
|
|
selectedValue={this.state.carMake}
|
|
onValueChange={carMake => this.setState({carMake, modelIndex: 0})}>
|
|
{Object.keys(CAR_MAKES_AND_MODELS).map(carMake => (
|
|
<PickerItemIOS
|
|
key={carMake}
|
|
value={carMake}
|
|
label={CAR_MAKES_AND_MODELS[carMake].name}
|
|
/>
|
|
))}
|
|
</PickerIOS>
|
|
);
|
|
}
|
|
}
|
|
|
|
exports.displayName = (undefined: ?string);
|
|
exports.title = '<PickerIOS>';
|
|
exports.description = 'Render lists of selectable options with UIPickerView.';
|
|
exports.examples = [
|
|
{
|
|
title: '<PickerIOS>',
|
|
render: function(): React.Element<any> {
|
|
return <PickerExample />;
|
|
},
|
|
},
|
|
{
|
|
title: '<PickerIOS> with custom styling',
|
|
render: function(): React.Element<any> {
|
|
return <PickerStyleExample />;
|
|
},
|
|
},
|
|
];
|