Add spec for AlertManager (#24906)

Summary:
Part of #24875

## Changelog

[General] [Added] - Add TurboModule spec for AlertManager
Pull Request resolved: https://github.com/facebook/react-native/pull/24906

Reviewed By: lunaleaps

Differential Revision: D15471065

Pulled By: fkgozali

fbshipit-source-id: bb22e6454b1f748987f3a8cd957bfd4e027493a5
This commit is contained in:
Daiki Ihara
2019-05-27 22:14:29 -07:00
committed by Facebook Github Bot
parent 956077675e
commit 122cc8ba8a
3 changed files with 72 additions and 34 deletions
+8 -32
View File
@@ -10,37 +10,12 @@
'use strict';
import NativeModules from '../BatchedBridge/NativeModules';
import Platform from '../Utilities/Platform';
import DialogManagerAndroid, {
import NativeDialogManagerAndroid, {
type DialogOptions,
} from '../NativeModules/specs/NativeDialogManagerAndroid';
const RCTAlertManager = NativeModules.AlertManager;
export type Buttons = Array<{
text?: string,
onPress?: ?Function,
style?: AlertButtonStyle,
}>;
type Options = {
cancelable?: ?boolean,
onDismiss?: ?Function,
};
type AlertType = $Keys<{
default: string,
'plain-text': string,
'secure-text': string,
'login-password': string,
}>;
export type AlertButtonStyle = $Keys<{
default: string,
cancel: string,
destructive: string,
}>;
import RCTAlertManager from './RCTAlertManager';
import {type Buttons, type Options, type AlertType} from './NativeAlertManager';
/**
* Launches an alert dialog with the specified title and message.
@@ -57,10 +32,10 @@ class Alert {
if (Platform.OS === 'ios') {
Alert.prompt(title, message, buttons, 'default');
} else if (Platform.OS === 'android') {
if (!DialogManagerAndroid) {
if (!NativeDialogManagerAndroid) {
return;
}
const constants = DialogManagerAndroid.getConstants();
const constants = NativeDialogManagerAndroid.getConstants();
const config: DialogOptions = {
title: title || '',
@@ -105,7 +80,7 @@ class Alert {
}
};
const onError = errorMessage => console.warn(errorMessage);
DialogManagerAndroid.showAlert(config, onError, onAction);
NativeDialogManagerAndroid.showAlert(config, onError, onAction);
}
}
@@ -131,7 +106,7 @@ class Alert {
{
title: title || '',
type: 'plain-text',
defaultValue: message,
defaultValue: message || '',
},
(id, value) => {
callback(value);
@@ -175,6 +150,7 @@ class Alert {
},
(id, value) => {
const cb = callbacks[id];
// $FlowFixMe
cb && cb(value);
},
);
+51
View File
@@ -0,0 +1,51 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
*/
'use strict';
import type {TurboModule} from 'RCTExport';
import * as TurboModuleRegistry from 'TurboModuleRegistry';
export type Buttons = Array<{
text?: string,
onPress?: ?Function,
style?: AlertButtonStyle,
}>;
export type Options = {
cancelable?: ?boolean,
onDismiss?: ?() => void,
};
/* 'default' | plain-text' | 'secure-text' | 'login-password' */
export type AlertType = string;
/* 'default' | 'cancel' | 'destructive' */
export type AlertButtonStyle = string;
export type Args = {|
title?: string,
message?: string,
buttons?: Buttons,
type?: string,
defaultValue?: string,
cancelButtonKey?: string,
destructiveButtonKey?: string,
keyboardType?: string,
|};
export interface Spec extends TurboModule {
+alertWithArgs: (
args: Args,
callback: (id: number, value: string) => void,
) => void;
}
export default TurboModuleRegistry.get<Spec>('AlertManager');
+13 -2
View File
@@ -10,6 +10,17 @@
'use strict';
const RCTAlertManager = require('../BatchedBridge/NativeModules').AlertManager;
import NativeAlertManager from './NativeAlertManager';
import type {Args} from './NativeAlertManager';
module.exports = RCTAlertManager;
module.exports = {
alertWithArgs(
args: Args,
callback: (id: number, value: string) => void,
): void {
if (NativeAlertManager == null) {
return;
}
NativeAlertManager.alertWithArgs(args, callback);
},
};