mirror of
https://github.com/status-im/react-native-dialogs.git
synced 2025-03-01 08:40:26 +00:00
quick fix, although I'd say that serializing the result as JSON on the java side and simply passing it on on the js side would be nicer... (could do it, if you'd be interested)
82 lines
2.0 KiB
JavaScript
82 lines
2.0 KiB
JavaScript
/**
|
|
* @providesModule DialogAndroid
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var { NativeModules } = require('react-native');
|
|
|
|
var callbackNames = [
|
|
'onPositive',
|
|
'onNegative',
|
|
'onNeutral',
|
|
'onAny',
|
|
'itemsCallback',
|
|
'itemsCallbackSingleChoice',
|
|
'itemsCallbackMultiChoice',
|
|
'showListener',
|
|
'cancelListener',
|
|
'dismissListener',
|
|
];
|
|
|
|
class DialogAndroid {
|
|
constructor() {
|
|
this.options = {};
|
|
}
|
|
|
|
set(obj) {
|
|
Object.assign(this.options, obj);
|
|
}
|
|
|
|
show() {
|
|
var finalOptions = Object.assign({}, this.options);
|
|
|
|
var callbacks = {
|
|
error: (err, op) => console.error(err, op),
|
|
}
|
|
|
|
// Remove callbacks from the options, and store them separately
|
|
callbackNames.forEach(cb => {
|
|
if (cb in finalOptions) {
|
|
callbacks[cb] = finalOptions[cb];
|
|
finalOptions[cb] = true;
|
|
}
|
|
});
|
|
|
|
// Handle special case of input separately
|
|
if ('input' in finalOptions) {
|
|
finalOptions.input = Object.assign({}, finalOptions.input);
|
|
var inputCallback = finalOptions.input.callback || (x => console.log(x));
|
|
finalOptions.input.callback = true;
|
|
callbacks['input'] = inputCallback;
|
|
}
|
|
|
|
// Parse the result form multiple choice dialog
|
|
if ('itemsCallbackMultiChoice' in callbacks) {
|
|
var originalCallback = callbacks.itemsCallbackMultiChoice;
|
|
callbacks.itemsCallbackMultiChoice = selected => {
|
|
var indices = selected.split(',').map(x => parseInt(x));
|
|
var elements = indices.map(ind => (finalOptions.items || [])[ind]);
|
|
if(indices.length === 1 && isNaN(indices[0])){
|
|
indices=[] // the case of empty selection
|
|
}
|
|
originalCallback(indices, elements);
|
|
}
|
|
}
|
|
|
|
var callbackFunc = (cb, ...rest) => callbacks[cb](...rest);
|
|
|
|
NativeModules.DialogAndroid.show(finalOptions, callbackFunc);
|
|
}
|
|
|
|
dismiss() {
|
|
NativeModules.DialogAndroid.dismiss();
|
|
}
|
|
|
|
list(options, cb){
|
|
NativeModules.DialogAndroid.list(options, cb)
|
|
}
|
|
}
|
|
|
|
module.exports = DialogAndroid;
|