Skip to content

Commit

Permalink
Add spec for AlertManager (#24906)
Browse files Browse the repository at this point in the history
Summary:
Part of #24875

## Changelog

[General] [Added] - Add TurboModule spec for AlertManager
Pull Request resolved: #24906

Reviewed By: lunaleaps

Differential Revision: D15471065

Pulled By: fkgozali

fbshipit-source-id: bb22e6454b1f748987f3a8cd957bfd4e027493a5
  • Loading branch information
sasurau4 authored and facebook-github-bot committed May 28, 2019
1 parent 9560776 commit 122cc8b
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 34 deletions.
40 changes: 8 additions & 32 deletions Libraries/Alert/Alert.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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 || '',
Expand Down Expand Up @@ -105,7 +80,7 @@ class Alert {
}
};
const onError = errorMessage => console.warn(errorMessage);
DialogManagerAndroid.showAlert(config, onError, onAction);
NativeDialogManagerAndroid.showAlert(config, onError, onAction);
}
}

Expand All @@ -131,7 +106,7 @@ class Alert {
{
title: title || '',
type: 'plain-text',
defaultValue: message,
defaultValue: message || '',
},
(id, value) => {
callback(value);
Expand Down Expand Up @@ -175,6 +150,7 @@ class Alert {
},
(id, value) => {
const cb = callbacks[id];
// $FlowFixMe
cb && cb(value);
},
);
Expand Down
51 changes: 51 additions & 0 deletions Libraries/Alert/NativeAlertManager.js
Original file line number Diff line number Diff line change
@@ -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');
15 changes: 13 additions & 2 deletions Libraries/Alert/RCTAlertManager.ios.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
},
};

0 comments on commit 122cc8b

Please sign in to comment.