hcmobile-sdk
Version:
mobile-sdk
91 lines (79 loc) • 2.18 kB
JavaScript
;
import {
NativeModules,
processColor,
Platform,
NativeEventEmitter,Alert
} from 'react-native';
type AlertType = $Enum<{
'default': string,
'plain-text': string
}>;
type AlertButtonStyle = $Enum<{
'default': string,
'cancel': string,
'destructive': string,
}>;
type ButtonsArray = Array<{
text?: string,
onPress?: ?Function,
style?: AlertButtonStyle,
}>;
class AlertHC {
static alert(
title: ?string,
message?: ?string,
callbackOrButtons?: ?(() => void) | ButtonsArray,
type?: AlertType,
placeholder?: string,
doneButtonKey?: number,
cancelable?: boolean,
): void {
if (Platform.OS !== 'ios') {
var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
var btnDef = {};
btnDef['text'] = btn.text || '';
btnDef['index'] = String(index);
btnDef['style'] = btn.style || 'default';
buttons.push(btnDef);
}
});
}
const { RNKitAlertView } = NativeModules;
const nativeEventEmitter = new NativeEventEmitter(RNKitAlertView);
this.listener && this.listener.remove();
this.listener = nativeEventEmitter.addListener('AlertViewEvent', event => {
if (event.text.length && Platform.OS !== 'ios') {
this.listener && this.listener.remove();
}
var cb = callbacks[doneButtonKey];
cb && cb(event.text);
// console.log('=========>' + event.text);
});
RNKitAlertView.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
placeholder,
cancelable: cancelable || false,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
} else {
Alert.alert(
title,message,callbackOrButtons,type,cancelable
)
}
}
};
export default AlertHC;