Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 46 additions & 43 deletions lib/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var React = require('react-native');

var React = require("react-native");
import PropTypes from "prop-types";
var {
StyleSheet,
Component,
Expand All @@ -8,15 +8,14 @@ var {
Image,
ScrollView,
TouchableWithoutFeedback,
NativeModules: {
UIManager
}
NativeModules: { UIManager }
} = React;

var window = require('Dimensions').get('window');
var window = require("Dimensions").get("window");

var arrow = {
uri: 'data:image/png;base64,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',
uri:
"data:image/png;base64,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",
isStatic: true,
width: 15,
height: 15
Expand All @@ -25,12 +24,12 @@ var arrow = {
var styles = StyleSheet.create({
container: {
height: 40,
borderColor: '#BDBDC1',
borderColor: "#BDBDC1",
borderWidth: 2 / window.scale
},
select: {
position: 'absolute',
borderColor: '#BDBDC1',
position: "absolute",
borderColor: "#BDBDC1",
borderWidth: 2 / window.scale,
left: -1
},
Expand Down Expand Up @@ -59,7 +58,7 @@ class DropDown extends Component {
}

_toggleDropDownMenu() {
var selectDisplay = this.refs['select_display'];
var selectDisplay = this.refs["select_display"];
var { open } = this.state;
var handle;

Expand Down Expand Up @@ -109,20 +108,19 @@ class DropDown extends Component {
_renderOptions() {
var { options } = this.props;

return options.map((option, index) =>
return options.map((option, index) => (
<TouchableWithoutFeedback
key={index}
onPress={this._onSelect.bind(this, index)}>
onPress={this._onSelect.bind(this, index)}
>
{this.renderOption(option)}
</TouchableWithoutFeedback>
);
));
}

_onScroll(event) {
var {
nativeEvent: {
contentOffset
}
nativeEvent: { contentOffset }
} = event;

this.contentOffset = { ...contentOffset };
Expand All @@ -140,19 +138,19 @@ class DropDown extends Component {
height = optionHeight * options.length;
}

return !open? null :
(
<View style={[styles.select, { top: top, width: width, height: height }]}>
<ScrollView
scrollEventThrottle={1}
onScroll={this._onScroll.bind(this)}
contentOffset={this.contentOffset}
automaticallyAdjustContentInsets={false}
bounces={false}>
{this._renderOptions()}
</ScrollView>
</View>
);
return !open ? null : (
<View style={[styles.select, { top: top, width: width, height: height }]}>
<ScrollView
scrollEventThrottle={1}
onScroll={this._onScroll.bind(this)}
contentOffset={this.contentOffset}
automaticallyAdjustContentInsets={false}
bounces={false}
>
{this._renderOptions()}
</ScrollView>
</View>
);
}

getSelectedItem() {
Expand All @@ -173,9 +171,16 @@ class DropDown extends Component {
return (
<View style={styles.container}>
<TouchableWithoutFeedback onPress={this._toggleDropDownMenu.bind(this)}>
<View ref="select_display" style={{flex: 1, flexDirection: 'row', alignItems: 'center' }}>
<View style={{ flex: 1, paddingLeft: 10, paddingRight: 10 }}><Text>{option.label}</Text></View>
<View style={{ width: 25, alignItems: 'center' }}><Image source={arrow}/></View>
<View
ref="select_display"
style={{ flex: 1, flexDirection: "row", alignItems: "center" }}
>
<View style={{ flex: 1, paddingLeft: 10, paddingRight: 10 }}>
<Text>{option.label}</Text>
</View>
<View style={{ width: 25, alignItems: "center" }}>
<Image source={arrow} />
</View>
</View>
</TouchableWithoutFeedback>
{this._renderPopupWindow()}
Expand All @@ -185,17 +190,15 @@ class DropDown extends Component {
}

DropDown.propTypes = {
defaultOption: React.PropTypes.number,
options: React.PropTypes.arrayOf(
React.PropTypes.shape(
{
label: React.PropTypes.string.isRequired
}
)
defaultOption: PropTypes.number,
options: PropTypes.arrayOf(
PropTypes.shape({
label: PropTypes.string.isRequired
})
),
onSelect: React.PropTypes.func,
optionHeight: React.PropTypes.number,
numberOptionsDisplay: React.PropTypes.number
onSelect: PropTypes.func,
optionHeight: PropTypes.number,
numberOptionsDisplay: PropTypes.number
};

DropDown.defaultProps = {
Expand Down