mirror of
https://github.com/zhigang1992/react-native-picker.git
synced 2026-01-12 22:50:37 +08:00
98 lines
2.4 KiB
JavaScript
98 lines
2.4 KiB
JavaScript
import {
|
|
Platform,
|
|
NativeModules,
|
|
NativeAppEventEmitter
|
|
} from 'react-native';
|
|
|
|
const ios = Platform.OS === 'ios';
|
|
const android = Platform.OS === 'android';
|
|
const Picker = NativeModules.BEEPickerManager;
|
|
const options = {
|
|
isLoop: false,
|
|
pickerConfirmBtnText: 'confirm',
|
|
pickerCancelBtnText: 'cancel',
|
|
pickerTitleText: 'pls select',
|
|
pickerConfirmBtnColor: [1, 186, 245, 1],
|
|
pickerCancelBtnColor: [1, 186, 245, 1],
|
|
pickerTitleColor: [20, 20, 20, 1],
|
|
pickerToolBarBg: [232, 232, 232, 1],
|
|
pickerTextEllipsisLen: 6,
|
|
pickerBg: [196, 199, 206, 1],
|
|
pickerRowHeight: 24,
|
|
wheelFlex: [1, 1, 1],
|
|
pickerData: [],
|
|
selectedValue: [],
|
|
onPickerConfirm(){},
|
|
onPickerCancel(){},
|
|
onPickerSelect(){},
|
|
pickerToolBarFontSize: 16,
|
|
pickerFontSize: 16,
|
|
pickerFontColor: [31, 31 ,31, 1]
|
|
};
|
|
|
|
export default {
|
|
init(params){
|
|
const opt = {
|
|
...options,
|
|
...params
|
|
};
|
|
const fnConf = {
|
|
confirm: opt.onPickerConfirm,
|
|
cancel: opt.onPickerCancel,
|
|
select: opt.onPickerSelect
|
|
};
|
|
|
|
Picker._init(opt);
|
|
//there are no `removeListener` for NativeAppEventEmitter & DeviceEventEmitter
|
|
this.listener && this.listener.remove();
|
|
this.listener = NativeAppEventEmitter.addListener('pickerEvent', event => {
|
|
fnConf[event['type']](event['selectedValue'], event['selectedIndex']);
|
|
});
|
|
},
|
|
|
|
show(){
|
|
Picker.show();
|
|
},
|
|
|
|
hide(){
|
|
Picker.hide();
|
|
},
|
|
|
|
select(arr, fn) {
|
|
if(ios){
|
|
Picker.select(arr);
|
|
}
|
|
else if(android){
|
|
Picker.select(arr, err => {
|
|
typeof fn === 'function' && fn(err);
|
|
});
|
|
}
|
|
},
|
|
|
|
toggle(){
|
|
this.isPickerShow(show => {
|
|
if(show){
|
|
this.hide();
|
|
}
|
|
else{
|
|
this.show();
|
|
}
|
|
});
|
|
},
|
|
|
|
isPickerShow(fn){
|
|
//android return two params: err(error massage) and status(show or not)
|
|
//ios return only one param: hide or not...
|
|
Picker.isPickerShow((err, status) => {
|
|
let returnValue = null;
|
|
if(android){
|
|
returnValue = err ? false : status;
|
|
}
|
|
else if(ios){
|
|
returnValue = !err;
|
|
}
|
|
fn && fn(returnValue);
|
|
});
|
|
}
|
|
};
|