From 206a236df24cbb9f94548afb25ebdaad3c5010ad Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sun, 20 May 2018 08:16:42 -0700 Subject: [PATCH] [add] AccessibilityInfo and DeviceInfo stubs --- package.json | 6 +-- .../src/moduleMap.js | 2 + .../src/exports/AccessibilityInfo/index.js | 52 ++++++++++++++++++ .../src/exports/DeviceInfo/index.js | 54 +++++++++++++++++++ packages/react-native-web/src/index.js | 6 +++ scripts/babel/createModuleMap.js | 2 +- 6 files changed, 118 insertions(+), 4 deletions(-) create mode 100644 packages/react-native-web/src/exports/AccessibilityInfo/index.js create mode 100644 packages/react-native-web/src/exports/DeviceInfo/index.js diff --git a/package.json b/package.json index 1c2a1220..1dcfb78f 100644 --- a/package.json +++ b/package.json @@ -63,13 +63,13 @@ "website" ], "lint-staged": { + "packages/react-native-web/src/index.js": [ + "node ./scripts/babel/createModuleMap.js" + ], "**/*.js": [ "prettier --write", "git update-index --again", "eslint" - ], - "packages/react-native-web/src/index.js": [ - "node ./scripts/babel/createModuleMap.js" ] }, "prettier": { diff --git a/packages/babel-plugin-react-native-web/src/moduleMap.js b/packages/babel-plugin-react-native-web/src/moduleMap.js index 6299c8da..4c0b0a93 100644 --- a/packages/babel-plugin-react-native-web/src/moduleMap.js +++ b/packages/babel-plugin-react-native-web/src/moduleMap.js @@ -1,6 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. module.exports = { ART: true, + AccessibilityInfo: true, ActivityIndicator: true, Animated: true, AppRegistry: true, @@ -11,6 +12,7 @@ module.exports = { CheckBox: true, Clipboard: true, ColorPropType: true, + DeviceInfo: true, Dimensions: true, Easing: true, EdgeInsetsPropType: true, diff --git a/packages/react-native-web/src/exports/AccessibilityInfo/index.js b/packages/react-native-web/src/exports/AccessibilityInfo/index.js new file mode 100644 index 00000000..8bd70797 --- /dev/null +++ b/packages/react-native-web/src/exports/AccessibilityInfo/index.js @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ + +function emptyFunction() {} + +const AccessibilityInfo = { + /** + * Query whether a screen reader is currently enabled. + * + * Returns a promise which resolves to a boolean. + * The result is `true` when a screen reader is enabled and `false` otherwise. + */ + fetch: function(): Promise<*> { + return new Promise((resolve, reject) => { + resolve(true); + }); + }, + + /** + * Add an event handler. Supported events: + */ + addEventListener: function(eventName: string, handler: Function): Object { + return { + remove: emptyFunction + }; + }, + + /** + * Set accessibility focus to a react component. + */ + setAccessibilityFocus: function(reactTag: number): void {}, + + /** + * Post a string to be announced by the screen reader. + */ + announceForAccessibility: function(announcement: string): void {}, + + /** + * Remove an event handler. + */ + removeEventListener: function(eventName: string, handler: Function): void { + return; + } +}; + +export default AccessibilityInfo; diff --git a/packages/react-native-web/src/exports/DeviceInfo/index.js b/packages/react-native-web/src/exports/DeviceInfo/index.js new file mode 100644 index 00000000..7411eea7 --- /dev/null +++ b/packages/react-native-web/src/exports/DeviceInfo/index.js @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2015-present, Nicolas Gallagher. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ + +import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment'; +import Dimensions from '../Dimensions'; + +const DeviceInfo = { + Dimensions: { + get windowPhysicalPixels() { + const { width, height, fontScale, scale } = Dimensions.get('window'); + return { + width: width * scale, + height: height * scale, + scale, + fontScale + }; + }, + get screenPhysicalPixels() { + const { width, height, fontScale, scale } = Dimensions.get('screen'); + return { + width: width * scale, + height: height * scale, + scale, + fontScale + }; + } + }, + + get locale() { + if (canUseDOM) { + if (window.navigator.languages) { + return window.navigator.languages[0]; + } else { + return window.navigator.language; + } + } + }, + + get totalMemory() { + return canUseDOM ? window.navigator.deviceMemory : undefined; + }, + + get userAgent() { + return canUseDOM ? window.navigator.userAgent : ''; + } +}; + +export default DeviceInfo; diff --git a/packages/react-native-web/src/index.js b/packages/react-native-web/src/index.js index e3e06ce9..e2f509f2 100644 --- a/packages/react-native-web/src/index.js +++ b/packages/react-native-web/src/index.js @@ -8,12 +8,14 @@ import TextPropTypes from './exports/TextPropTypes'; import ViewPropTypes from './exports/ViewPropTypes'; // APIs +import AccessibilityInfo from './exports/AccessibilityInfo'; import Animated from './exports/Animated'; import AppRegistry from './exports/AppRegistry'; import AppState from './exports/AppState'; import AsyncStorage from './exports/AsyncStorage'; import BackHandler from './exports/BackHandler'; import Clipboard from './exports/Clipboard'; +import DeviceInfo from './exports/DeviceInfo'; import Dimensions from './exports/Dimensions'; import Easing from './exports/Easing'; import I18nManager from './exports/I18nManager'; @@ -75,12 +77,14 @@ export { TextPropTypes, ViewPropTypes, // APIs + AccessibilityInfo, Animated, AppRegistry, AppState, AsyncStorage, BackHandler, Clipboard, + DeviceInfo, Dimensions, Easing, I18nManager, @@ -141,12 +145,14 @@ const ReactNative = { TextPropTypes, ViewPropTypes, // APIs + AccessibilityInfo, Animated, AppRegistry, AppState, AsyncStorage, BackHandler, Clipboard, + DeviceInfo, Dimensions, Easing, I18nManager, diff --git a/scripts/babel/createModuleMap.js b/scripts/babel/createModuleMap.js index 4a4f142c..1020392f 100644 --- a/scripts/babel/createModuleMap.js +++ b/scripts/babel/createModuleMap.js @@ -11,7 +11,7 @@ const getDirectories = source => const packagesDir = path.join(__dirname, '../../packages/'); const exportsDir = path.join(packagesDir, 'react-native-web/src/exports'); -const moduleMapOutfile = path.join(__dirname, 'babel-plugin-react-native-web/src/moduleMap.js'); +const moduleMapOutfile = path.join(packagesDir, 'babel-plugin-react-native-web/src/moduleMap.js'); const moduleMap = getDirectories(exportsDir).reduce((acc, curr) => { acc[curr] = true;