Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .flowconfig
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,11 @@
.*/Libraries/polyfills/.*

; Ignore metro
; .*/node_modules/metro/.*
.*/node_modules/metro/.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How close does this get us to the CI loops passing? If we're still not close, there's always the risk these just break again without people realizing.

Comment thread
acoates-ms marked this conversation as resolved.
.*/node_modules/metro-config/src/configTypes.flow.js.flow

; Ignore rn-cli.config.js
<PROJECT_ROOT>/rn-cli.config.js

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
Expand Down
2 changes: 1 addition & 1 deletion IntegrationTests/AsyncStorageTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ function testMerge() {
expectEqual(JSON.parse(result), VAL_MERGE_EXPECT, 'testMerge');
updateMessage('objects deeply merged\nDone!');
runTestCase('multi set and get', testOptimizedMultiGet);
});
});
});
});
} else {
Expand Down
13 changes: 9 additions & 4 deletions IntegrationTests/LayoutEventsTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,10 +52,15 @@ const LayoutEventsTest = createReactClass({
},
animateViewLayout: function() {
debug('animateViewLayout invoked');
LayoutAnimation.configureNext(Platform.OS === 'macos' ? LayoutAnimation.Presets.easeInEaseOut : LayoutAnimation.Presets.spring, () => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
});
LayoutAnimation.configureNext(
Platform.OS === 'macos'
? LayoutAnimation.Presets.easeInEaseOut
: LayoutAnimation.Presets.spring,
() => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
},
);
this.setState({viewStyle: {margin: 60}});
},
addWrapText: function() {
Expand Down
4 changes: 2 additions & 2 deletions Libraries/Alert/Alert.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ class Alert {
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
AlertMacOS.alert(title, message, buttons); // TODO(macOS ISS#2323203)
} else if (Platform.OS === 'macos' /* TODO[(macOS ISS#2323203) */) {
AlertMacOS.alert(title, message, buttons); // TODO](macOS ISS#2323203)
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
Expand Down
33 changes: 17 additions & 16 deletions Libraries/Alert/AlertMacOS.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@

'use strict';

import type {AlertType, AlertButtonStyle} from 'AlertIOS';
import type {AlertType, AlertButtonStyle} from 'AlertIOS';

var RCTAlertManager = require('NativeModules').AlertManager;

Expand DownExpand Up@@ -175,13 +175,11 @@ class AlertMacOS {
modal?: ?boolean,
critical?: ?boolean,
): void {

var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
} else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
Expand All@@ -192,18 +190,21 @@ class AlertMacOS {
});
}

RCTAlertManager.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
RCTAlertManager.alertWithArgs(
{
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
},
(id, value) => {
var cb = callbacks[id];
cb && cb(value);
},
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion Libraries/Animated/src/nodes/AnimatedInterpolation.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -167,7 +167,10 @@ function interpolate(

function colorToRgba(input: string): string {
let int32Color = normalizeColor(input);
if (int32Color === null || typeof int32Color !== 'number') { // TODO(macOS ISS#2323203)
if (
int32Color === null ||
typeof int32Color !== 'number' /* TODO(macOS ISS#2323203) */
) {
return input;
}

Expand Down
21 changes: 14 additions & 7 deletions Libraries/Color/normalizeColor.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,11 +17,17 @@ export type SemanticOrDynamicColorType = {
semantic?: string,
dynamic?: {
light: ?(string | number | SemanticOrDynamicColorType),
dark: ?(string | number | SemanticOrDynamicColorType)
}
dark: ?(string | number | SemanticOrDynamicColorType),
},
}; // ]TODO(macOS ISS#2323203)

function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)): ?(number | SemanticOrDynamicColorType) { // TODO(macOS ISS#2323203)
function normalizeColor(
color: ?(
| string
| number
| SemanticOrDynamicColorType
) /* TODO(macOS ISS#2323203) */,
): ?(number | SemanticOrDynamicColorType) /* TODO(macOS ISS#2323203) */ {
const matchers = getMatchers();
let match;

Expand All@@ -32,7 +38,8 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
return null;
}

if (typeof color === 'object' && color !== null && Platform.OS === 'macos') { // [TODO(macOS ISS#2323203)
if (typeof color === 'object' && color !== null && Platform.OS === 'macos') {
// [TODO(macOS ISS#2323203)
if ('semantic' in color) {
// a macos semantic color
return color;
Expand All@@ -42,12 +49,12 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
const dynamicColor: SemanticOrDynamicColorType = {
dynamic: {
light: normalizeColor(dynamic.light),
dark: normalizeColor(dynamic.dark)
}
dark: normalizeColor(dynamic.dark),
},
};
return dynamicColor;
}
}
}
if (typeof color !== 'string') {
return null;
} // ]TODO(macOS ISS#2323203)
Expand Down
5 changes: 3 additions & 2 deletions Libraries/Components/ActivityIndicator/ActivityIndicator.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,6 +19,7 @@ const requireNativeComponent = require('requireNativeComponent');

import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

const RCTActivityIndicator =
Platform.OS === 'android'
Expand DownExpand Up@@ -53,7 +54,7 @@ type Props = $ReadOnly<{|
*
* See http://facebook.github.io/react-native/docs/activityindicator.html#color
*/
color?: ?string,
color?: ?(string | SemanticOrDynamicColorType), // ]TODO(macOS ISS#2323203)

/**
* Size of the indicator (default is 'small').
Expand DownExpand Up@@ -115,7 +116,7 @@ const ActivityIndicatorWithRef = React.forwardRef(ActivityIndicator);

ActivityIndicatorWithRef.defaultProps = {
animating: true,
color: (Platform.OS === 'ios' || Platform.OS === 'macos') ? GRAY : null, // TODO(macOS ISS#2323203)
color: Platform.OS === 'ios' || Platform.OS === 'macos' ? GRAY : null, // TODO(macOS ISS#2323203)
hidesWhenStopped: true,
size: 'small',
};
Expand Down
39 changes: 24 additions & 15 deletions Libraries/Components/Button.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,8 +71,8 @@ class Button extends React.Component<{
*/
accessibilityLabel: PropTypes.string,
/**
* Hint text to display blindness accessibility features
*/
* Hint text to display blindness accessibility features
*/
accessibilityHint: PropTypes.string, // TODO(OSS Candidate ISS#2710739)
/**
* Color of the text (iOS, macOS), or background color of the button (Android)
Expand DownExpand Up@@ -110,7 +110,10 @@ class Button extends React.Component<{
const buttonStyles = [styles.button];
const textStyles = [styles.text];
if (color) {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
textStyles.push({color: color});
} else {
buttonStyles.push({backgroundColor: color});
Expand All@@ -129,11 +132,11 @@ class Button extends React.Component<{
const formattedTitle =
Platform.OS === 'android' ? title.toUpperCase() : title;
const Touchable =
(Platform.OS === 'android') // [TODO(windows ISS)
? TouchableNativeFeedback
: (Platform.OS === 'uwp' || Platform.OS === 'windesktop')
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
Platform.OS === 'android' // [TODO(windows ISS)
? TouchableNativeFeedback
: Platform.OS === 'uwp' || Platform.OS === 'windesktop'
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
return (
<Touchable
accessibilityLabel={accessibilityLabel}
Expand DownExpand Up@@ -164,11 +167,12 @@ const styles = StyleSheet.create({
borderRadius: 2,
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#2196F3',
borderRadius: 2,
},
windesktop: {}, // ]TODO(windows ISS)
windesktop: {}, // ]TODO(windows ISS)
}),
text: Platform.select({
ios: {
Expand All@@ -184,13 +188,15 @@ const styles = StyleSheet.create({
padding: 8,
fontWeight: '500',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#007AFF',
textAlign: 'center',
padding: 8,
fontSize: 18,
}, // ]TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
textAlign: 'center',
color: 'white',
padding: 8,
Expand All@@ -205,7 +211,8 @@ const styles = StyleSheet.create({
backgroundColor: '#dfdfdf',
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#dfdfdf',
},
windesktop: {}, // ]TODO(windows ISS)
Expand All@@ -214,13 +221,15 @@ const styles = StyleSheet.create({
ios: {
color: '#cdcdcd',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#cdcdcd',
}, // ]TODO(macOS ISS#2323203)
android: {
color: '#a1a1a1',
},
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
color: '#a1a1a1',
},
windesktop: {
Expand Down
6 changes: 4 additions & 2 deletions Libraries/Components/DatePicker/DatePickerIOS.macos.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,9 @@ class DummyDatePickerIOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerIOS, this.props.style]}>
<Text style={styles.datePickerText}>DatePickerIOS is not supported on this platform!</Text>
<Text style={styles.datePickerText}>
DatePickerIOS is not supported on this platform!
</Text>
</View>
);
}
Expand All@@ -40,7 +42,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerIOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@
const DatePickerAndroid = {
async open(options: Object): Promise<Object> {
return Promise.reject({
message: 'DatePickerAndroid is not supported on this platform.'
message: 'DatePickerAndroid is not supported on this platform.',
});
},
};
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ var StyleSheet = require('StyleSheet');
var Text = require('Text');
var View = require('View');

class dummyDatePickerMacOS extends React.Component {
class DummyDatePickerMacOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerMacOS, this.props.style]}>
Expand All@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ const DatePickerMacOS = createReactClass({
/>
</View>
);
}
},
});

const RCTDatePickerMacOS = requireNativeComponent('RCTDatePicker' /* TODO refactor as class that extends React.Component<Props>, {
Expand Down
5 changes: 4 additions & 1 deletion Libraries/Components/Picker/Picker.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -150,7 +150,10 @@ class Picker extends React.Component<{
};

render() {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
// $FlowFixMe found when converting React.createClass to ES6
return <PickerIOS {...this.props}>{this.props.children}</PickerIOS>;
} else if (Platform.OS === 'android') {
Expand Down
2 changes: 1 addition & 1 deletion Libraries/Components/Picker/PickerIOS.ios.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ import type {SyntheticEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {TextStyleProp} from 'StyleSheet';
import type {SemanticOrDynamicColorType} from 'normalizeColor' // ]TODO(macOS ISS#2323203)
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .flowconfig
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,11 @@
.*/Libraries/polyfills/.*

; Ignore metro
; .*/node_modules/metro/.*
.*/node_modules/metro/.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How close does this get us to the CI loops passing? If we're still not close, there's always the risk these just break again without people realizing.

Comment thread
acoates-ms marked this conversation as resolved.
.*/node_modules/metro-config/src/configTypes.flow.js.flow

; Ignore rn-cli.config.js
<PROJECT_ROOT>/rn-cli.config.js

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
Expand Down
2 changes: 1 addition & 1 deletion IntegrationTests/AsyncStorageTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ function testMerge() {
expectEqual(JSON.parse(result), VAL_MERGE_EXPECT, 'testMerge');
updateMessage('objects deeply merged\nDone!');
runTestCase('multi set and get', testOptimizedMultiGet);
});
});
});
});
} else {
Expand Down
13 changes: 9 additions & 4 deletions IntegrationTests/LayoutEventsTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,10 +52,15 @@ const LayoutEventsTest = createReactClass({
},
animateViewLayout: function() {
debug('animateViewLayout invoked');
LayoutAnimation.configureNext(Platform.OS === 'macos' ? LayoutAnimation.Presets.easeInEaseOut : LayoutAnimation.Presets.spring, () => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
});
LayoutAnimation.configureNext(
Platform.OS === 'macos'
? LayoutAnimation.Presets.easeInEaseOut
: LayoutAnimation.Presets.spring,
() => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
},
);
this.setState({viewStyle: {margin: 60}});
},
addWrapText: function() {
Expand Down
4 changes: 2 additions & 2 deletions Libraries/Alert/Alert.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ class Alert {
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
AlertMacOS.alert(title, message, buttons); // TODO(macOS ISS#2323203)
} else if (Platform.OS === 'macos' /* TODO[(macOS ISS#2323203) */) {
AlertMacOS.alert(title, message, buttons); // TODO](macOS ISS#2323203)
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
Expand Down
33 changes: 17 additions & 16 deletions Libraries/Alert/AlertMacOS.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@

'use strict';

import type {AlertType, AlertButtonStyle} from 'AlertIOS';
import type {AlertType, AlertButtonStyle} from 'AlertIOS';

var RCTAlertManager = require('NativeModules').AlertManager;

Expand DownExpand Up@@ -175,13 +175,11 @@ class AlertMacOS {
modal?: ?boolean,
critical?: ?boolean,
): void {

var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
} else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
Expand All@@ -192,18 +190,21 @@ class AlertMacOS {
});
}

RCTAlertManager.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
RCTAlertManager.alertWithArgs(
{
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
},
(id, value) => {
var cb = callbacks[id];
cb && cb(value);
},
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion Libraries/Animated/src/nodes/AnimatedInterpolation.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -167,7 +167,10 @@ function interpolate(

function colorToRgba(input: string): string {
let int32Color = normalizeColor(input);
if (int32Color === null || typeof int32Color !== 'number') { // TODO(macOS ISS#2323203)
if (
int32Color === null ||
typeof int32Color !== 'number' /* TODO(macOS ISS#2323203) */
) {
return input;
}

Expand Down
21 changes: 14 additions & 7 deletions Libraries/Color/normalizeColor.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,11 +17,17 @@ export type SemanticOrDynamicColorType = {
semantic?: string,
dynamic?: {
light: ?(string | number | SemanticOrDynamicColorType),
dark: ?(string | number | SemanticOrDynamicColorType)
}
dark: ?(string | number | SemanticOrDynamicColorType),
},
}; // ]TODO(macOS ISS#2323203)

function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)): ?(number | SemanticOrDynamicColorType) { // TODO(macOS ISS#2323203)
function normalizeColor(
color: ?(
| string
| number
| SemanticOrDynamicColorType
) /* TODO(macOS ISS#2323203) */,
): ?(number | SemanticOrDynamicColorType) /* TODO(macOS ISS#2323203) */ {
const matchers = getMatchers();
let match;

Expand All@@ -32,7 +38,8 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
return null;
}

if (typeof color === 'object' && color !== null && Platform.OS === 'macos') { // [TODO(macOS ISS#2323203)
if (typeof color === 'object' && color !== null && Platform.OS === 'macos') {
// [TODO(macOS ISS#2323203)
if ('semantic' in color) {
// a macos semantic color
return color;
Expand All@@ -42,12 +49,12 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
const dynamicColor: SemanticOrDynamicColorType = {
dynamic: {
light: normalizeColor(dynamic.light),
dark: normalizeColor(dynamic.dark)
}
dark: normalizeColor(dynamic.dark),
},
};
return dynamicColor;
}
}
}
if (typeof color !== 'string') {
return null;
} // ]TODO(macOS ISS#2323203)
Expand Down
5 changes: 3 additions & 2 deletions Libraries/Components/ActivityIndicator/ActivityIndicator.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,6 +19,7 @@ const requireNativeComponent = require('requireNativeComponent');

import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

const RCTActivityIndicator =
Platform.OS === 'android'
Expand DownExpand Up@@ -53,7 +54,7 @@ type Props = $ReadOnly<{|
*
* See http://facebook.github.io/react-native/docs/activityindicator.html#color
*/
color?: ?string,
color?: ?(string | SemanticOrDynamicColorType), // ]TODO(macOS ISS#2323203)

/**
* Size of the indicator (default is 'small').
Expand DownExpand Up@@ -115,7 +116,7 @@ const ActivityIndicatorWithRef = React.forwardRef(ActivityIndicator);

ActivityIndicatorWithRef.defaultProps = {
animating: true,
color: (Platform.OS === 'ios' || Platform.OS === 'macos') ? GRAY : null, // TODO(macOS ISS#2323203)
color: Platform.OS === 'ios' || Platform.OS === 'macos' ? GRAY : null, // TODO(macOS ISS#2323203)
hidesWhenStopped: true,
size: 'small',
};
Expand Down
39 changes: 24 additions & 15 deletions Libraries/Components/Button.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,8 +71,8 @@ class Button extends React.Component<{
*/
accessibilityLabel: PropTypes.string,
/**
* Hint text to display blindness accessibility features
*/
* Hint text to display blindness accessibility features
*/
accessibilityHint: PropTypes.string, // TODO(OSS Candidate ISS#2710739)
/**
* Color of the text (iOS, macOS), or background color of the button (Android)
Expand DownExpand Up@@ -110,7 +110,10 @@ class Button extends React.Component<{
const buttonStyles = [styles.button];
const textStyles = [styles.text];
if (color) {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
textStyles.push({color: color});
} else {
buttonStyles.push({backgroundColor: color});
Expand All@@ -129,11 +132,11 @@ class Button extends React.Component<{
const formattedTitle =
Platform.OS === 'android' ? title.toUpperCase() : title;
const Touchable =
(Platform.OS === 'android') // [TODO(windows ISS)
? TouchableNativeFeedback
: (Platform.OS === 'uwp' || Platform.OS === 'windesktop')
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
Platform.OS === 'android' // [TODO(windows ISS)
? TouchableNativeFeedback
: Platform.OS === 'uwp' || Platform.OS === 'windesktop'
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
return (
<Touchable
accessibilityLabel={accessibilityLabel}
Expand DownExpand Up@@ -164,11 +167,12 @@ const styles = StyleSheet.create({
borderRadius: 2,
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#2196F3',
borderRadius: 2,
},
windesktop: {}, // ]TODO(windows ISS)
windesktop: {}, // ]TODO(windows ISS)
}),
text: Platform.select({
ios: {
Expand All@@ -184,13 +188,15 @@ const styles = StyleSheet.create({
padding: 8,
fontWeight: '500',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#007AFF',
textAlign: 'center',
padding: 8,
fontSize: 18,
}, // ]TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
textAlign: 'center',
color: 'white',
padding: 8,
Expand All@@ -205,7 +211,8 @@ const styles = StyleSheet.create({
backgroundColor: '#dfdfdf',
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#dfdfdf',
},
windesktop: {}, // ]TODO(windows ISS)
Expand All@@ -214,13 +221,15 @@ const styles = StyleSheet.create({
ios: {
color: '#cdcdcd',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#cdcdcd',
}, // ]TODO(macOS ISS#2323203)
android: {
color: '#a1a1a1',
},
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
color: '#a1a1a1',
},
windesktop: {
Expand Down
6 changes: 4 additions & 2 deletions Libraries/Components/DatePicker/DatePickerIOS.macos.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,9 @@ class DummyDatePickerIOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerIOS, this.props.style]}>
<Text style={styles.datePickerText}>DatePickerIOS is not supported on this platform!</Text>
<Text style={styles.datePickerText}>
DatePickerIOS is not supported on this platform!
</Text>
</View>
);
}
Expand All@@ -40,7 +42,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerIOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@
const DatePickerAndroid = {
async open(options: Object): Promise<Object> {
return Promise.reject({
message: 'DatePickerAndroid is not supported on this platform.'
message: 'DatePickerAndroid is not supported on this platform.',
});
},
};
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ var StyleSheet = require('StyleSheet');
var Text = require('Text');
var View = require('View');

class dummyDatePickerMacOS extends React.Component {
class DummyDatePickerMacOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerMacOS, this.props.style]}>
Expand All@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ const DatePickerMacOS = createReactClass({
/>
</View>
);
}
},
});

const RCTDatePickerMacOS = requireNativeComponent('RCTDatePicker' /* TODO refactor as class that extends React.Component<Props>, {
Expand Down
5 changes: 4 additions & 1 deletion Libraries/Components/Picker/Picker.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -150,7 +150,10 @@ class Picker extends React.Component<{
};

render() {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
// $FlowFixMe found when converting React.createClass to ES6
return <PickerIOS {...this.props}>{this.props.children}</PickerIOS>;
} else if (Platform.OS === 'android') {
Expand Down
2 changes: 1 addition & 1 deletion Libraries/Components/Picker/PickerIOS.ios.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ import type {SyntheticEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {TextStyleProp} from 'StyleSheet';
import type {SemanticOrDynamicColorType} from 'normalizeColor' // ]TODO(macOS ISS#2323203)
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .flowconfig
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,11 @@
.*/Libraries/polyfills/.*

; Ignore metro
; .*/node_modules/metro/.*
.*/node_modules/metro/.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How close does this get us to the CI loops passing? If we're still not close, there's always the risk these just break again without people realizing.

Comment thread
acoates-ms marked this conversation as resolved.
.*/node_modules/metro-config/src/configTypes.flow.js.flow

; Ignore rn-cli.config.js
<PROJECT_ROOT>/rn-cli.config.js

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
Expand Down
2 changes: 1 addition & 1 deletion IntegrationTests/AsyncStorageTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ function testMerge() {
expectEqual(JSON.parse(result), VAL_MERGE_EXPECT, 'testMerge');
updateMessage('objects deeply merged\nDone!');
runTestCase('multi set and get', testOptimizedMultiGet);
});
});
});
});
} else {
Expand Down
13 changes: 9 additions & 4 deletions IntegrationTests/LayoutEventsTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,10 +52,15 @@ const LayoutEventsTest = createReactClass({
},
animateViewLayout: function() {
debug('animateViewLayout invoked');
LayoutAnimation.configureNext(Platform.OS === 'macos' ? LayoutAnimation.Presets.easeInEaseOut : LayoutAnimation.Presets.spring, () => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
});
LayoutAnimation.configureNext(
Platform.OS === 'macos'
? LayoutAnimation.Presets.easeInEaseOut
: LayoutAnimation.Presets.spring,
() => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
},
);
this.setState({viewStyle: {margin: 60}});
},
addWrapText: function() {
Expand Down
4 changes: 2 additions & 2 deletions Libraries/Alert/Alert.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ class Alert {
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
AlertMacOS.alert(title, message, buttons); // TODO(macOS ISS#2323203)
} else if (Platform.OS === 'macos' /* TODO[(macOS ISS#2323203) */) {
AlertMacOS.alert(title, message, buttons); // TODO](macOS ISS#2323203)
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
Expand Down
33 changes: 17 additions & 16 deletions Libraries/Alert/AlertMacOS.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@

'use strict';

import type {AlertType, AlertButtonStyle} from 'AlertIOS';
import type {AlertType, AlertButtonStyle} from 'AlertIOS';

var RCTAlertManager = require('NativeModules').AlertManager;

Expand DownExpand Up@@ -175,13 +175,11 @@ class AlertMacOS {
modal?: ?boolean,
critical?: ?boolean,
): void {

var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
} else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
Expand All@@ -192,18 +190,21 @@ class AlertMacOS {
});
}

RCTAlertManager.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
RCTAlertManager.alertWithArgs(
{
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
},
(id, value) => {
var cb = callbacks[id];
cb && cb(value);
},
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion Libraries/Animated/src/nodes/AnimatedInterpolation.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -167,7 +167,10 @@ function interpolate(

function colorToRgba(input: string): string {
let int32Color = normalizeColor(input);
if (int32Color === null || typeof int32Color !== 'number') { // TODO(macOS ISS#2323203)
if (
int32Color === null ||
typeof int32Color !== 'number' /* TODO(macOS ISS#2323203) */
) {
return input;
}

Expand Down
21 changes: 14 additions & 7 deletions Libraries/Color/normalizeColor.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,11 +17,17 @@ export type SemanticOrDynamicColorType = {
semantic?: string,
dynamic?: {
light: ?(string | number | SemanticOrDynamicColorType),
dark: ?(string | number | SemanticOrDynamicColorType)
}
dark: ?(string | number | SemanticOrDynamicColorType),
},
}; // ]TODO(macOS ISS#2323203)

function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)): ?(number | SemanticOrDynamicColorType) { // TODO(macOS ISS#2323203)
function normalizeColor(
color: ?(
| string
| number
| SemanticOrDynamicColorType
) /* TODO(macOS ISS#2323203) */,
): ?(number | SemanticOrDynamicColorType) /* TODO(macOS ISS#2323203) */ {
const matchers = getMatchers();
let match;

Expand All@@ -32,7 +38,8 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
return null;
}

if (typeof color === 'object' && color !== null && Platform.OS === 'macos') { // [TODO(macOS ISS#2323203)
if (typeof color === 'object' && color !== null && Platform.OS === 'macos') {
// [TODO(macOS ISS#2323203)
if ('semantic' in color) {
// a macos semantic color
return color;
Expand All@@ -42,12 +49,12 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
const dynamicColor: SemanticOrDynamicColorType = {
dynamic: {
light: normalizeColor(dynamic.light),
dark: normalizeColor(dynamic.dark)
}
dark: normalizeColor(dynamic.dark),
},
};
return dynamicColor;
}
}
}
if (typeof color !== 'string') {
return null;
} // ]TODO(macOS ISS#2323203)
Expand Down
5 changes: 3 additions & 2 deletions Libraries/Components/ActivityIndicator/ActivityIndicator.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,6 +19,7 @@ const requireNativeComponent = require('requireNativeComponent');

import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

const RCTActivityIndicator =
Platform.OS === 'android'
Expand DownExpand Up@@ -53,7 +54,7 @@ type Props = $ReadOnly<{|
*
* See http://facebook.github.io/react-native/docs/activityindicator.html#color
*/
color?: ?string,
color?: ?(string | SemanticOrDynamicColorType), // ]TODO(macOS ISS#2323203)

/**
* Size of the indicator (default is 'small').
Expand DownExpand Up@@ -115,7 +116,7 @@ const ActivityIndicatorWithRef = React.forwardRef(ActivityIndicator);

ActivityIndicatorWithRef.defaultProps = {
animating: true,
color: (Platform.OS === 'ios' || Platform.OS === 'macos') ? GRAY : null, // TODO(macOS ISS#2323203)
color: Platform.OS === 'ios' || Platform.OS === 'macos' ? GRAY : null, // TODO(macOS ISS#2323203)
hidesWhenStopped: true,
size: 'small',
};
Expand Down
39 changes: 24 additions & 15 deletions Libraries/Components/Button.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,8 +71,8 @@ class Button extends React.Component<{
*/
accessibilityLabel: PropTypes.string,
/**
* Hint text to display blindness accessibility features
*/
* Hint text to display blindness accessibility features
*/
accessibilityHint: PropTypes.string, // TODO(OSS Candidate ISS#2710739)
/**
* Color of the text (iOS, macOS), or background color of the button (Android)
Expand DownExpand Up@@ -110,7 +110,10 @@ class Button extends React.Component<{
const buttonStyles = [styles.button];
const textStyles = [styles.text];
if (color) {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
textStyles.push({color: color});
} else {
buttonStyles.push({backgroundColor: color});
Expand All@@ -129,11 +132,11 @@ class Button extends React.Component<{
const formattedTitle =
Platform.OS === 'android' ? title.toUpperCase() : title;
const Touchable =
(Platform.OS === 'android') // [TODO(windows ISS)
? TouchableNativeFeedback
: (Platform.OS === 'uwp' || Platform.OS === 'windesktop')
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
Platform.OS === 'android' // [TODO(windows ISS)
? TouchableNativeFeedback
: Platform.OS === 'uwp' || Platform.OS === 'windesktop'
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
return (
<Touchable
accessibilityLabel={accessibilityLabel}
Expand DownExpand Up@@ -164,11 +167,12 @@ const styles = StyleSheet.create({
borderRadius: 2,
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#2196F3',
borderRadius: 2,
},
windesktop: {}, // ]TODO(windows ISS)
windesktop: {}, // ]TODO(windows ISS)
}),
text: Platform.select({
ios: {
Expand All@@ -184,13 +188,15 @@ const styles = StyleSheet.create({
padding: 8,
fontWeight: '500',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#007AFF',
textAlign: 'center',
padding: 8,
fontSize: 18,
}, // ]TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
textAlign: 'center',
color: 'white',
padding: 8,
Expand All@@ -205,7 +211,8 @@ const styles = StyleSheet.create({
backgroundColor: '#dfdfdf',
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#dfdfdf',
},
windesktop: {}, // ]TODO(windows ISS)
Expand All@@ -214,13 +221,15 @@ const styles = StyleSheet.create({
ios: {
color: '#cdcdcd',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#cdcdcd',
}, // ]TODO(macOS ISS#2323203)
android: {
color: '#a1a1a1',
},
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
color: '#a1a1a1',
},
windesktop: {
Expand Down
6 changes: 4 additions & 2 deletions Libraries/Components/DatePicker/DatePickerIOS.macos.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,9 @@ class DummyDatePickerIOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerIOS, this.props.style]}>
<Text style={styles.datePickerText}>DatePickerIOS is not supported on this platform!</Text>
<Text style={styles.datePickerText}>
DatePickerIOS is not supported on this platform!
</Text>
</View>
);
}
Expand All@@ -40,7 +42,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerIOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@
const DatePickerAndroid = {
async open(options: Object): Promise<Object> {
return Promise.reject({
message: 'DatePickerAndroid is not supported on this platform.'
message: 'DatePickerAndroid is not supported on this platform.',
});
},
};
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ var StyleSheet = require('StyleSheet');
var Text = require('Text');
var View = require('View');

class dummyDatePickerMacOS extends React.Component {
class DummyDatePickerMacOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerMacOS, this.props.style]}>
Expand All@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ const DatePickerMacOS = createReactClass({
/>
</View>
);
}
},
});

const RCTDatePickerMacOS = requireNativeComponent('RCTDatePicker' /* TODO refactor as class that extends React.Component<Props>, {
Expand Down
5 changes: 4 additions & 1 deletion Libraries/Components/Picker/Picker.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -150,7 +150,10 @@ class Picker extends React.Component<{
};

render() {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
// $FlowFixMe found when converting React.createClass to ES6
return <PickerIOS {...this.props}>{this.props.children}</PickerIOS>;
} else if (Platform.OS === 'android') {
Expand Down
2 changes: 1 addition & 1 deletion Libraries/Components/Picker/PickerIOS.ios.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ import type {SyntheticEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {TextStyleProp} from 'StyleSheet';
import type {SemanticOrDynamicColorType} from 'normalizeColor' // ]TODO(macOS ISS#2323203)
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .flowconfig
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,11 @@
.*/Libraries/polyfills/.*

; Ignore metro
; .*/node_modules/metro/.*
.*/node_modules/metro/.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How close does this get us to the CI loops passing? If we're still not close, there's always the risk these just break again without people realizing.

Comment thread
acoates-ms marked this conversation as resolved.
.*/node_modules/metro-config/src/configTypes.flow.js.flow

; Ignore rn-cli.config.js
<PROJECT_ROOT>/rn-cli.config.js

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
Expand Down
2 changes: 1 addition & 1 deletion IntegrationTests/AsyncStorageTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ function testMerge() {
expectEqual(JSON.parse(result), VAL_MERGE_EXPECT, 'testMerge');
updateMessage('objects deeply merged\nDone!');
runTestCase('multi set and get', testOptimizedMultiGet);
});
});
});
});
} else {
Expand Down
13 changes: 9 additions & 4 deletions IntegrationTests/LayoutEventsTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,10 +52,15 @@ const LayoutEventsTest = createReactClass({
},
animateViewLayout: function() {
debug('animateViewLayout invoked');
LayoutAnimation.configureNext(Platform.OS === 'macos' ? LayoutAnimation.Presets.easeInEaseOut : LayoutAnimation.Presets.spring, () => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
});
LayoutAnimation.configureNext(
Platform.OS === 'macos'
? LayoutAnimation.Presets.easeInEaseOut
: LayoutAnimation.Presets.spring,
() => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
},
);
this.setState({viewStyle: {margin: 60}});
},
addWrapText: function() {
Expand Down
4 changes: 2 additions & 2 deletions Libraries/Alert/Alert.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ class Alert {
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
AlertMacOS.alert(title, message, buttons); // TODO(macOS ISS#2323203)
} else if (Platform.OS === 'macos' /* TODO[(macOS ISS#2323203) */) {
AlertMacOS.alert(title, message, buttons); // TODO](macOS ISS#2323203)
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
Expand Down
33 changes: 17 additions & 16 deletions Libraries/Alert/AlertMacOS.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@

'use strict';

import type {AlertType, AlertButtonStyle} from 'AlertIOS';
import type {AlertType, AlertButtonStyle} from 'AlertIOS';

var RCTAlertManager = require('NativeModules').AlertManager;

Expand DownExpand Up@@ -175,13 +175,11 @@ class AlertMacOS {
modal?: ?boolean,
critical?: ?boolean,
): void {

var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
} else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
Expand All@@ -192,18 +190,21 @@ class AlertMacOS {
});
}

RCTAlertManager.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
RCTAlertManager.alertWithArgs(
{
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
},
(id, value) => {
var cb = callbacks[id];
cb && cb(value);
},
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion Libraries/Animated/src/nodes/AnimatedInterpolation.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -167,7 +167,10 @@ function interpolate(

function colorToRgba(input: string): string {
let int32Color = normalizeColor(input);
if (int32Color === null || typeof int32Color !== 'number') { // TODO(macOS ISS#2323203)
if (
int32Color === null ||
typeof int32Color !== 'number' /* TODO(macOS ISS#2323203) */
) {
return input;
}

Expand Down
21 changes: 14 additions & 7 deletions Libraries/Color/normalizeColor.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,11 +17,17 @@ export type SemanticOrDynamicColorType = {
semantic?: string,
dynamic?: {
light: ?(string | number | SemanticOrDynamicColorType),
dark: ?(string | number | SemanticOrDynamicColorType)
}
dark: ?(string | number | SemanticOrDynamicColorType),
},
}; // ]TODO(macOS ISS#2323203)

function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)): ?(number | SemanticOrDynamicColorType) { // TODO(macOS ISS#2323203)
function normalizeColor(
color: ?(
| string
| number
| SemanticOrDynamicColorType
) /* TODO(macOS ISS#2323203) */,
): ?(number | SemanticOrDynamicColorType) /* TODO(macOS ISS#2323203) */ {
const matchers = getMatchers();
let match;

Expand All@@ -32,7 +38,8 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
return null;
}

if (typeof color === 'object' && color !== null && Platform.OS === 'macos') { // [TODO(macOS ISS#2323203)
if (typeof color === 'object' && color !== null && Platform.OS === 'macos') {
// [TODO(macOS ISS#2323203)
if ('semantic' in color) {
// a macos semantic color
return color;
Expand All@@ -42,12 +49,12 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
const dynamicColor: SemanticOrDynamicColorType = {
dynamic: {
light: normalizeColor(dynamic.light),
dark: normalizeColor(dynamic.dark)
}
dark: normalizeColor(dynamic.dark),
},
};
return dynamicColor;
}
}
}
if (typeof color !== 'string') {
return null;
} // ]TODO(macOS ISS#2323203)
Expand Down
5 changes: 3 additions & 2 deletions Libraries/Components/ActivityIndicator/ActivityIndicator.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,6 +19,7 @@ const requireNativeComponent = require('requireNativeComponent');

import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

const RCTActivityIndicator =
Platform.OS === 'android'
Expand DownExpand Up@@ -53,7 +54,7 @@ type Props = $ReadOnly<{|
*
* See http://facebook.github.io/react-native/docs/activityindicator.html#color
*/
color?: ?string,
color?: ?(string | SemanticOrDynamicColorType), // ]TODO(macOS ISS#2323203)

/**
* Size of the indicator (default is 'small').
Expand DownExpand Up@@ -115,7 +116,7 @@ const ActivityIndicatorWithRef = React.forwardRef(ActivityIndicator);

ActivityIndicatorWithRef.defaultProps = {
animating: true,
color: (Platform.OS === 'ios' || Platform.OS === 'macos') ? GRAY : null, // TODO(macOS ISS#2323203)
color: Platform.OS === 'ios' || Platform.OS === 'macos' ? GRAY : null, // TODO(macOS ISS#2323203)
hidesWhenStopped: true,
size: 'small',
};
Expand Down
39 changes: 24 additions & 15 deletions Libraries/Components/Button.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,8 +71,8 @@ class Button extends React.Component<{
*/
accessibilityLabel: PropTypes.string,
/**
* Hint text to display blindness accessibility features
*/
* Hint text to display blindness accessibility features
*/
accessibilityHint: PropTypes.string, // TODO(OSS Candidate ISS#2710739)
/**
* Color of the text (iOS, macOS), or background color of the button (Android)
Expand DownExpand Up@@ -110,7 +110,10 @@ class Button extends React.Component<{
const buttonStyles = [styles.button];
const textStyles = [styles.text];
if (color) {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
textStyles.push({color: color});
} else {
buttonStyles.push({backgroundColor: color});
Expand All@@ -129,11 +132,11 @@ class Button extends React.Component<{
const formattedTitle =
Platform.OS === 'android' ? title.toUpperCase() : title;
const Touchable =
(Platform.OS === 'android') // [TODO(windows ISS)
? TouchableNativeFeedback
: (Platform.OS === 'uwp' || Platform.OS === 'windesktop')
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
Platform.OS === 'android' // [TODO(windows ISS)
? TouchableNativeFeedback
: Platform.OS === 'uwp' || Platform.OS === 'windesktop'
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
return (
<Touchable
accessibilityLabel={accessibilityLabel}
Expand DownExpand Up@@ -164,11 +167,12 @@ const styles = StyleSheet.create({
borderRadius: 2,
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#2196F3',
borderRadius: 2,
},
windesktop: {}, // ]TODO(windows ISS)
windesktop: {}, // ]TODO(windows ISS)
}),
text: Platform.select({
ios: {
Expand All@@ -184,13 +188,15 @@ const styles = StyleSheet.create({
padding: 8,
fontWeight: '500',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#007AFF',
textAlign: 'center',
padding: 8,
fontSize: 18,
}, // ]TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
textAlign: 'center',
color: 'white',
padding: 8,
Expand All@@ -205,7 +211,8 @@ const styles = StyleSheet.create({
backgroundColor: '#dfdfdf',
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#dfdfdf',
},
windesktop: {}, // ]TODO(windows ISS)
Expand All@@ -214,13 +221,15 @@ const styles = StyleSheet.create({
ios: {
color: '#cdcdcd',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#cdcdcd',
}, // ]TODO(macOS ISS#2323203)
android: {
color: '#a1a1a1',
},
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
color: '#a1a1a1',
},
windesktop: {
Expand Down
6 changes: 4 additions & 2 deletions Libraries/Components/DatePicker/DatePickerIOS.macos.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,9 @@ class DummyDatePickerIOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerIOS, this.props.style]}>
<Text style={styles.datePickerText}>DatePickerIOS is not supported on this platform!</Text>
<Text style={styles.datePickerText}>
DatePickerIOS is not supported on this platform!
</Text>
</View>
);
}
Expand All@@ -40,7 +42,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerIOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@
const DatePickerAndroid = {
async open(options: Object): Promise<Object> {
return Promise.reject({
message: 'DatePickerAndroid is not supported on this platform.'
message: 'DatePickerAndroid is not supported on this platform.',
});
},
};
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ var StyleSheet = require('StyleSheet');
var Text = require('Text');
var View = require('View');

class dummyDatePickerMacOS extends React.Component {
class DummyDatePickerMacOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerMacOS, this.props.style]}>
Expand All@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ const DatePickerMacOS = createReactClass({
/>
</View>
);
}
},
});

const RCTDatePickerMacOS = requireNativeComponent('RCTDatePicker' /* TODO refactor as class that extends React.Component<Props>, {
Expand Down
5 changes: 4 additions & 1 deletion Libraries/Components/Picker/Picker.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -150,7 +150,10 @@ class Picker extends React.Component<{
};

render() {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
// $FlowFixMe found when converting React.createClass to ES6
return <PickerIOS {...this.props}>{this.props.children}</PickerIOS>;
} else if (Platform.OS === 'android') {
Expand Down
2 changes: 1 addition & 1 deletion Libraries/Components/Picker/PickerIOS.ios.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ import type {SyntheticEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {TextStyleProp} from 'StyleSheet';
import type {SemanticOrDynamicColorType} from 'normalizeColor' // ]TODO(macOS ISS#2323203)
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .flowconfig
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,11 @@
.*/Libraries/polyfills/.*

; Ignore metro
; .*/node_modules/metro/.*
.*/node_modules/metro/.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How close does this get us to the CI loops passing? If we're still not close, there's always the risk these just break again without people realizing.

Comment thread
acoates-ms marked this conversation as resolved.
.*/node_modules/metro-config/src/configTypes.flow.js.flow

; Ignore rn-cli.config.js
<PROJECT_ROOT>/rn-cli.config.js

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
Expand Down
2 changes: 1 addition & 1 deletion IntegrationTests/AsyncStorageTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ function testMerge() {
expectEqual(JSON.parse(result), VAL_MERGE_EXPECT, 'testMerge');
updateMessage('objects deeply merged\nDone!');
runTestCase('multi set and get', testOptimizedMultiGet);
});
});
});
});
} else {
Expand Down
13 changes: 9 additions & 4 deletions IntegrationTests/LayoutEventsTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,10 +52,15 @@ const LayoutEventsTest = createReactClass({
},
animateViewLayout: function() {
debug('animateViewLayout invoked');
LayoutAnimation.configureNext(Platform.OS === 'macos' ? LayoutAnimation.Presets.easeInEaseOut : LayoutAnimation.Presets.spring, () => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
});
LayoutAnimation.configureNext(
Platform.OS === 'macos'
? LayoutAnimation.Presets.easeInEaseOut
: LayoutAnimation.Presets.spring,
() => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
},
);
this.setState({viewStyle: {margin: 60}});
},
addWrapText: function() {
Expand Down
4 changes: 2 additions & 2 deletions Libraries/Alert/Alert.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ class Alert {
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
AlertMacOS.alert(title, message, buttons); // TODO(macOS ISS#2323203)
} else if (Platform.OS === 'macos' /* TODO[(macOS ISS#2323203) */) {
AlertMacOS.alert(title, message, buttons); // TODO](macOS ISS#2323203)
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
Expand Down
33 changes: 17 additions & 16 deletions Libraries/Alert/AlertMacOS.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@

'use strict';

import type {AlertType, AlertButtonStyle} from 'AlertIOS';
import type {AlertType, AlertButtonStyle} from 'AlertIOS';

var RCTAlertManager = require('NativeModules').AlertManager;

Expand DownExpand Up@@ -175,13 +175,11 @@ class AlertMacOS {
modal?: ?boolean,
critical?: ?boolean,
): void {

var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
} else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
Expand All@@ -192,18 +190,21 @@ class AlertMacOS {
});
}

RCTAlertManager.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
RCTAlertManager.alertWithArgs(
{
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
},
(id, value) => {
var cb = callbacks[id];
cb && cb(value);
},
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion Libraries/Animated/src/nodes/AnimatedInterpolation.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -167,7 +167,10 @@ function interpolate(

function colorToRgba(input: string): string {
let int32Color = normalizeColor(input);
if (int32Color === null || typeof int32Color !== 'number') { // TODO(macOS ISS#2323203)
if (
int32Color === null ||
typeof int32Color !== 'number' /* TODO(macOS ISS#2323203) */
) {
return input;
}

Expand Down
21 changes: 14 additions & 7 deletions Libraries/Color/normalizeColor.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,11 +17,17 @@ export type SemanticOrDynamicColorType = {
semantic?: string,
dynamic?: {
light: ?(string | number | SemanticOrDynamicColorType),
dark: ?(string | number | SemanticOrDynamicColorType)
}
dark: ?(string | number | SemanticOrDynamicColorType),
},
}; // ]TODO(macOS ISS#2323203)

function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)): ?(number | SemanticOrDynamicColorType) { // TODO(macOS ISS#2323203)
function normalizeColor(
color: ?(
| string
| number
| SemanticOrDynamicColorType
) /* TODO(macOS ISS#2323203) */,
): ?(number | SemanticOrDynamicColorType) /* TODO(macOS ISS#2323203) */ {
const matchers = getMatchers();
let match;

Expand All@@ -32,7 +38,8 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
return null;
}

if (typeof color === 'object' && color !== null && Platform.OS === 'macos') { // [TODO(macOS ISS#2323203)
if (typeof color === 'object' && color !== null && Platform.OS === 'macos') {
// [TODO(macOS ISS#2323203)
if ('semantic' in color) {
// a macos semantic color
return color;
Expand All@@ -42,12 +49,12 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
const dynamicColor: SemanticOrDynamicColorType = {
dynamic: {
light: normalizeColor(dynamic.light),
dark: normalizeColor(dynamic.dark)
}
dark: normalizeColor(dynamic.dark),
},
};
return dynamicColor;
}
}
}
if (typeof color !== 'string') {
return null;
} // ]TODO(macOS ISS#2323203)
Expand Down
5 changes: 3 additions & 2 deletions Libraries/Components/ActivityIndicator/ActivityIndicator.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,6 +19,7 @@ const requireNativeComponent = require('requireNativeComponent');

import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

const RCTActivityIndicator =
Platform.OS === 'android'
Expand DownExpand Up@@ -53,7 +54,7 @@ type Props = $ReadOnly<{|
*
* See http://facebook.github.io/react-native/docs/activityindicator.html#color
*/
color?: ?string,
color?: ?(string | SemanticOrDynamicColorType), // ]TODO(macOS ISS#2323203)

/**
* Size of the indicator (default is 'small').
Expand DownExpand Up@@ -115,7 +116,7 @@ const ActivityIndicatorWithRef = React.forwardRef(ActivityIndicator);

ActivityIndicatorWithRef.defaultProps = {
animating: true,
color: (Platform.OS === 'ios' || Platform.OS === 'macos') ? GRAY : null, // TODO(macOS ISS#2323203)
color: Platform.OS === 'ios' || Platform.OS === 'macos' ? GRAY : null, // TODO(macOS ISS#2323203)
hidesWhenStopped: true,
size: 'small',
};
Expand Down
39 changes: 24 additions & 15 deletions Libraries/Components/Button.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,8 +71,8 @@ class Button extends React.Component<{
*/
accessibilityLabel: PropTypes.string,
/**
* Hint text to display blindness accessibility features
*/
* Hint text to display blindness accessibility features
*/
accessibilityHint: PropTypes.string, // TODO(OSS Candidate ISS#2710739)
/**
* Color of the text (iOS, macOS), or background color of the button (Android)
Expand DownExpand Up@@ -110,7 +110,10 @@ class Button extends React.Component<{
const buttonStyles = [styles.button];
const textStyles = [styles.text];
if (color) {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
textStyles.push({color: color});
} else {
buttonStyles.push({backgroundColor: color});
Expand All@@ -129,11 +132,11 @@ class Button extends React.Component<{
const formattedTitle =
Platform.OS === 'android' ? title.toUpperCase() : title;
const Touchable =
(Platform.OS === 'android') // [TODO(windows ISS)
? TouchableNativeFeedback
: (Platform.OS === 'uwp' || Platform.OS === 'windesktop')
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
Platform.OS === 'android' // [TODO(windows ISS)
? TouchableNativeFeedback
: Platform.OS === 'uwp' || Platform.OS === 'windesktop'
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
return (
<Touchable
accessibilityLabel={accessibilityLabel}
Expand DownExpand Up@@ -164,11 +167,12 @@ const styles = StyleSheet.create({
borderRadius: 2,
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#2196F3',
borderRadius: 2,
},
windesktop: {}, // ]TODO(windows ISS)
windesktop: {}, // ]TODO(windows ISS)
}),
text: Platform.select({
ios: {
Expand All@@ -184,13 +188,15 @@ const styles = StyleSheet.create({
padding: 8,
fontWeight: '500',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#007AFF',
textAlign: 'center',
padding: 8,
fontSize: 18,
}, // ]TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
textAlign: 'center',
color: 'white',
padding: 8,
Expand All@@ -205,7 +211,8 @@ const styles = StyleSheet.create({
backgroundColor: '#dfdfdf',
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#dfdfdf',
},
windesktop: {}, // ]TODO(windows ISS)
Expand All@@ -214,13 +221,15 @@ const styles = StyleSheet.create({
ios: {
color: '#cdcdcd',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#cdcdcd',
}, // ]TODO(macOS ISS#2323203)
android: {
color: '#a1a1a1',
},
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
color: '#a1a1a1',
},
windesktop: {
Expand Down
6 changes: 4 additions & 2 deletions Libraries/Components/DatePicker/DatePickerIOS.macos.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,9 @@ class DummyDatePickerIOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerIOS, this.props.style]}>
<Text style={styles.datePickerText}>DatePickerIOS is not supported on this platform!</Text>
<Text style={styles.datePickerText}>
DatePickerIOS is not supported on this platform!
</Text>
</View>
);
}
Expand All@@ -40,7 +42,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerIOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@
const DatePickerAndroid = {
async open(options: Object): Promise<Object> {
return Promise.reject({
message: 'DatePickerAndroid is not supported on this platform.'
message: 'DatePickerAndroid is not supported on this platform.',
});
},
};
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ var StyleSheet = require('StyleSheet');
var Text = require('Text');
var View = require('View');

class dummyDatePickerMacOS extends React.Component {
class DummyDatePickerMacOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerMacOS, this.props.style]}>
Expand All@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ const DatePickerMacOS = createReactClass({
/>
</View>
);
}
},
});

const RCTDatePickerMacOS = requireNativeComponent('RCTDatePicker' /* TODO refactor as class that extends React.Component<Props>, {
Expand Down
5 changes: 4 additions & 1 deletion Libraries/Components/Picker/Picker.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -150,7 +150,10 @@ class Picker extends React.Component<{
};

render() {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
// $FlowFixMe found when converting React.createClass to ES6
return <PickerIOS {...this.props}>{this.props.children}</PickerIOS>;
} else if (Platform.OS === 'android') {
Expand Down
2 changes: 1 addition & 1 deletion Libraries/Components/Picker/PickerIOS.ios.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ import type {SyntheticEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {TextStyleProp} from 'StyleSheet';
import type {SemanticOrDynamicColorType} from 'normalizeColor' // ]TODO(macOS ISS#2323203)
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .flowconfig
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,11 @@
.*/Libraries/polyfills/.*

; Ignore metro
; .*/node_modules/metro/.*
.*/node_modules/metro/.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How close does this get us to the CI loops passing? If we're still not close, there's always the risk these just break again without people realizing.

Comment thread
acoates-ms marked this conversation as resolved.
.*/node_modules/metro-config/src/configTypes.flow.js.flow

; Ignore rn-cli.config.js
<PROJECT_ROOT>/rn-cli.config.js

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
Expand Down
2 changes: 1 addition & 1 deletion IntegrationTests/AsyncStorageTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ function testMerge() {
expectEqual(JSON.parse(result), VAL_MERGE_EXPECT, 'testMerge');
updateMessage('objects deeply merged\nDone!');
runTestCase('multi set and get', testOptimizedMultiGet);
});
});
});
});
} else {
Expand Down
13 changes: 9 additions & 4 deletions IntegrationTests/LayoutEventsTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,10 +52,15 @@ const LayoutEventsTest = createReactClass({
},
animateViewLayout: function() {
debug('animateViewLayout invoked');
LayoutAnimation.configureNext(Platform.OS === 'macos' ? LayoutAnimation.Presets.easeInEaseOut : LayoutAnimation.Presets.spring, () => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
});
LayoutAnimation.configureNext(
Platform.OS === 'macos'
? LayoutAnimation.Presets.easeInEaseOut
: LayoutAnimation.Presets.spring,
() => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
},
);
this.setState({viewStyle: {margin: 60}});
},
addWrapText: function() {
Expand Down
4 changes: 2 additions & 2 deletions Libraries/Alert/Alert.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ class Alert {
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
AlertMacOS.alert(title, message, buttons); // TODO(macOS ISS#2323203)
} else if (Platform.OS === 'macos' /* TODO[(macOS ISS#2323203) */) {
AlertMacOS.alert(title, message, buttons); // TODO](macOS ISS#2323203)
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
Expand Down
33 changes: 17 additions & 16 deletions Libraries/Alert/AlertMacOS.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@

'use strict';

import type {AlertType, AlertButtonStyle} from 'AlertIOS';
import type {AlertType, AlertButtonStyle} from 'AlertIOS';

var RCTAlertManager = require('NativeModules').AlertManager;

Expand DownExpand Up@@ -175,13 +175,11 @@ class AlertMacOS {
modal?: ?boolean,
critical?: ?boolean,
): void {

var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
} else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
Expand All@@ -192,18 +190,21 @@ class AlertMacOS {
});
}

RCTAlertManager.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
RCTAlertManager.alertWithArgs(
{
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
},
(id, value) => {
var cb = callbacks[id];
cb && cb(value);
},
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion Libraries/Animated/src/nodes/AnimatedInterpolation.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -167,7 +167,10 @@ function interpolate(

function colorToRgba(input: string): string {
let int32Color = normalizeColor(input);
if (int32Color === null || typeof int32Color !== 'number') { // TODO(macOS ISS#2323203)
if (
int32Color === null ||
typeof int32Color !== 'number' /* TODO(macOS ISS#2323203) */
) {
return input;
}

Expand Down
21 changes: 14 additions & 7 deletions Libraries/Color/normalizeColor.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,11 +17,17 @@ export type SemanticOrDynamicColorType = {
semantic?: string,
dynamic?: {
light: ?(string | number | SemanticOrDynamicColorType),
dark: ?(string | number | SemanticOrDynamicColorType)
}
dark: ?(string | number | SemanticOrDynamicColorType),
},
}; // ]TODO(macOS ISS#2323203)

function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)): ?(number | SemanticOrDynamicColorType) { // TODO(macOS ISS#2323203)
function normalizeColor(
color: ?(
| string
| number
| SemanticOrDynamicColorType
) /* TODO(macOS ISS#2323203) */,
): ?(number | SemanticOrDynamicColorType) /* TODO(macOS ISS#2323203) */ {
const matchers = getMatchers();
let match;

Expand All@@ -32,7 +38,8 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
return null;
}

if (typeof color === 'object' && color !== null && Platform.OS === 'macos') { // [TODO(macOS ISS#2323203)
if (typeof color === 'object' && color !== null && Platform.OS === 'macos') {
// [TODO(macOS ISS#2323203)
if ('semantic' in color) {
// a macos semantic color
return color;
Expand All@@ -42,12 +49,12 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
const dynamicColor: SemanticOrDynamicColorType = {
dynamic: {
light: normalizeColor(dynamic.light),
dark: normalizeColor(dynamic.dark)
}
dark: normalizeColor(dynamic.dark),
},
};
return dynamicColor;
}
}
}
if (typeof color !== 'string') {
return null;
} // ]TODO(macOS ISS#2323203)
Expand Down
5 changes: 3 additions & 2 deletions Libraries/Components/ActivityIndicator/ActivityIndicator.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,6 +19,7 @@ const requireNativeComponent = require('requireNativeComponent');

import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

const RCTActivityIndicator =
Platform.OS === 'android'
Expand DownExpand Up@@ -53,7 +54,7 @@ type Props = $ReadOnly<{|
*
* See http://facebook.github.io/react-native/docs/activityindicator.html#color
*/
color?: ?string,
color?: ?(string | SemanticOrDynamicColorType), // ]TODO(macOS ISS#2323203)

/**
* Size of the indicator (default is 'small').
Expand DownExpand Up@@ -115,7 +116,7 @@ const ActivityIndicatorWithRef = React.forwardRef(ActivityIndicator);

ActivityIndicatorWithRef.defaultProps = {
animating: true,
color: (Platform.OS === 'ios' || Platform.OS === 'macos') ? GRAY : null, // TODO(macOS ISS#2323203)
color: Platform.OS === 'ios' || Platform.OS === 'macos' ? GRAY : null, // TODO(macOS ISS#2323203)
hidesWhenStopped: true,
size: 'small',
};
Expand Down
39 changes: 24 additions & 15 deletions Libraries/Components/Button.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,8 +71,8 @@ class Button extends React.Component<{
*/
accessibilityLabel: PropTypes.string,
/**
* Hint text to display blindness accessibility features
*/
* Hint text to display blindness accessibility features
*/
accessibilityHint: PropTypes.string, // TODO(OSS Candidate ISS#2710739)
/**
* Color of the text (iOS, macOS), or background color of the button (Android)
Expand DownExpand Up@@ -110,7 +110,10 @@ class Button extends React.Component<{
const buttonStyles = [styles.button];
const textStyles = [styles.text];
if (color) {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
textStyles.push({color: color});
} else {
buttonStyles.push({backgroundColor: color});
Expand All@@ -129,11 +132,11 @@ class Button extends React.Component<{
const formattedTitle =
Platform.OS === 'android' ? title.toUpperCase() : title;
const Touchable =
(Platform.OS === 'android') // [TODO(windows ISS)
? TouchableNativeFeedback
: (Platform.OS === 'uwp' || Platform.OS === 'windesktop')
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
Platform.OS === 'android' // [TODO(windows ISS)
? TouchableNativeFeedback
: Platform.OS === 'uwp' || Platform.OS === 'windesktop'
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
return (
<Touchable
accessibilityLabel={accessibilityLabel}
Expand DownExpand Up@@ -164,11 +167,12 @@ const styles = StyleSheet.create({
borderRadius: 2,
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#2196F3',
borderRadius: 2,
},
windesktop: {}, // ]TODO(windows ISS)
windesktop: {}, // ]TODO(windows ISS)
}),
text: Platform.select({
ios: {
Expand All@@ -184,13 +188,15 @@ const styles = StyleSheet.create({
padding: 8,
fontWeight: '500',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#007AFF',
textAlign: 'center',
padding: 8,
fontSize: 18,
}, // ]TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
textAlign: 'center',
color: 'white',
padding: 8,
Expand All@@ -205,7 +211,8 @@ const styles = StyleSheet.create({
backgroundColor: '#dfdfdf',
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#dfdfdf',
},
windesktop: {}, // ]TODO(windows ISS)
Expand All@@ -214,13 +221,15 @@ const styles = StyleSheet.create({
ios: {
color: '#cdcdcd',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#cdcdcd',
}, // ]TODO(macOS ISS#2323203)
android: {
color: '#a1a1a1',
},
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
color: '#a1a1a1',
},
windesktop: {
Expand Down
6 changes: 4 additions & 2 deletions Libraries/Components/DatePicker/DatePickerIOS.macos.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,9 @@ class DummyDatePickerIOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerIOS, this.props.style]}>
<Text style={styles.datePickerText}>DatePickerIOS is not supported on this platform!</Text>
<Text style={styles.datePickerText}>
DatePickerIOS is not supported on this platform!
</Text>
</View>
);
}
Expand All@@ -40,7 +42,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerIOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@
const DatePickerAndroid = {
async open(options: Object): Promise<Object> {
return Promise.reject({
message: 'DatePickerAndroid is not supported on this platform.'
message: 'DatePickerAndroid is not supported on this platform.',
});
},
};
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ var StyleSheet = require('StyleSheet');
var Text = require('Text');
var View = require('View');

class dummyDatePickerMacOS extends React.Component {
class DummyDatePickerMacOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerMacOS, this.props.style]}>
Expand All@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ const DatePickerMacOS = createReactClass({
/>
</View>
);
}
},
});

const RCTDatePickerMacOS = requireNativeComponent('RCTDatePicker' /* TODO refactor as class that extends React.Component<Props>, {
Expand Down
5 changes: 4 additions & 1 deletion Libraries/Components/Picker/Picker.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -150,7 +150,10 @@ class Picker extends React.Component<{
};

render() {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
// $FlowFixMe found when converting React.createClass to ES6
return <PickerIOS {...this.props}>{this.props.children}</PickerIOS>;
} else if (Platform.OS === 'android') {
Expand Down
2 changes: 1 addition & 1 deletion Libraries/Components/Picker/PickerIOS.ios.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ import type {SyntheticEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {TextStyleProp} from 'StyleSheet';
import type {SemanticOrDynamicColorType} from 'normalizeColor' // ]TODO(macOS ISS#2323203)
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .flowconfig
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,11 @@
.*/Libraries/polyfills/.*

; Ignore metro
; .*/node_modules/metro/.*
.*/node_modules/metro/.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How close does this get us to the CI loops passing? If we're still not close, there's always the risk these just break again without people realizing.

Comment thread
acoates-ms marked this conversation as resolved.
.*/node_modules/metro-config/src/configTypes.flow.js.flow

; Ignore rn-cli.config.js
<PROJECT_ROOT>/rn-cli.config.js

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
Expand Down
2 changes: 1 addition & 1 deletion IntegrationTests/AsyncStorageTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ function testMerge() {
expectEqual(JSON.parse(result), VAL_MERGE_EXPECT, 'testMerge');
updateMessage('objects deeply merged\nDone!');
runTestCase('multi set and get', testOptimizedMultiGet);
});
});
});
});
} else {
Expand Down
13 changes: 9 additions & 4 deletions IntegrationTests/LayoutEventsTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,10 +52,15 @@ const LayoutEventsTest = createReactClass({
},
animateViewLayout: function() {
debug('animateViewLayout invoked');
LayoutAnimation.configureNext(Platform.OS === 'macos' ? LayoutAnimation.Presets.easeInEaseOut : LayoutAnimation.Presets.spring, () => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
});
LayoutAnimation.configureNext(
Platform.OS === 'macos'
? LayoutAnimation.Presets.easeInEaseOut
: LayoutAnimation.Presets.spring,
() => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
},
);
this.setState({viewStyle: {margin: 60}});
},
addWrapText: function() {
Expand Down
4 changes: 2 additions & 2 deletions Libraries/Alert/Alert.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ class Alert {
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
AlertMacOS.alert(title, message, buttons); // TODO(macOS ISS#2323203)
} else if (Platform.OS === 'macos' /* TODO[(macOS ISS#2323203) */) {
AlertMacOS.alert(title, message, buttons); // TODO](macOS ISS#2323203)
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
Expand Down
33 changes: 17 additions & 16 deletions Libraries/Alert/AlertMacOS.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@

'use strict';

import type {AlertType, AlertButtonStyle} from 'AlertIOS';
import type {AlertType, AlertButtonStyle} from 'AlertIOS';

var RCTAlertManager = require('NativeModules').AlertManager;

Expand DownExpand Up@@ -175,13 +175,11 @@ class AlertMacOS {
modal?: ?boolean,
critical?: ?boolean,
): void {

var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
} else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
Expand All@@ -192,18 +190,21 @@ class AlertMacOS {
});
}

RCTAlertManager.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
RCTAlertManager.alertWithArgs(
{
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
},
(id, value) => {
var cb = callbacks[id];
cb && cb(value);
},
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion Libraries/Animated/src/nodes/AnimatedInterpolation.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -167,7 +167,10 @@ function interpolate(

function colorToRgba(input: string): string {
let int32Color = normalizeColor(input);
if (int32Color === null || typeof int32Color !== 'number') { // TODO(macOS ISS#2323203)
if (
int32Color === null ||
typeof int32Color !== 'number' /* TODO(macOS ISS#2323203) */
) {
return input;
}

Expand Down
21 changes: 14 additions & 7 deletions Libraries/Color/normalizeColor.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,11 +17,17 @@ export type SemanticOrDynamicColorType = {
semantic?: string,
dynamic?: {
light: ?(string | number | SemanticOrDynamicColorType),
dark: ?(string | number | SemanticOrDynamicColorType)
}
dark: ?(string | number | SemanticOrDynamicColorType),
},
}; // ]TODO(macOS ISS#2323203)

function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)): ?(number | SemanticOrDynamicColorType) { // TODO(macOS ISS#2323203)
function normalizeColor(
color: ?(
| string
| number
| SemanticOrDynamicColorType
) /* TODO(macOS ISS#2323203) */,
): ?(number | SemanticOrDynamicColorType) /* TODO(macOS ISS#2323203) */ {
const matchers = getMatchers();
let match;

Expand All@@ -32,7 +38,8 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
return null;
}

if (typeof color === 'object' && color !== null && Platform.OS === 'macos') { // [TODO(macOS ISS#2323203)
if (typeof color === 'object' && color !== null && Platform.OS === 'macos') {
// [TODO(macOS ISS#2323203)
if ('semantic' in color) {
// a macos semantic color
return color;
Expand All@@ -42,12 +49,12 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
const dynamicColor: SemanticOrDynamicColorType = {
dynamic: {
light: normalizeColor(dynamic.light),
dark: normalizeColor(dynamic.dark)
}
dark: normalizeColor(dynamic.dark),
},
};
return dynamicColor;
}
}
}
if (typeof color !== 'string') {
return null;
} // ]TODO(macOS ISS#2323203)
Expand Down
5 changes: 3 additions & 2 deletions Libraries/Components/ActivityIndicator/ActivityIndicator.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,6 +19,7 @@ const requireNativeComponent = require('requireNativeComponent');

import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

const RCTActivityIndicator =
Platform.OS === 'android'
Expand DownExpand Up@@ -53,7 +54,7 @@ type Props = $ReadOnly<{|
*
* See http://facebook.github.io/react-native/docs/activityindicator.html#color
*/
color?: ?string,
color?: ?(string | SemanticOrDynamicColorType), // ]TODO(macOS ISS#2323203)

/**
* Size of the indicator (default is 'small').
Expand DownExpand Up@@ -115,7 +116,7 @@ const ActivityIndicatorWithRef = React.forwardRef(ActivityIndicator);

ActivityIndicatorWithRef.defaultProps = {
animating: true,
color: (Platform.OS === 'ios' || Platform.OS === 'macos') ? GRAY : null, // TODO(macOS ISS#2323203)
color: Platform.OS === 'ios' || Platform.OS === 'macos' ? GRAY : null, // TODO(macOS ISS#2323203)
hidesWhenStopped: true,
size: 'small',
};
Expand Down
39 changes: 24 additions & 15 deletions Libraries/Components/Button.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,8 +71,8 @@ class Button extends React.Component<{
*/
accessibilityLabel: PropTypes.string,
/**
* Hint text to display blindness accessibility features
*/
* Hint text to display blindness accessibility features
*/
accessibilityHint: PropTypes.string, // TODO(OSS Candidate ISS#2710739)
/**
* Color of the text (iOS, macOS), or background color of the button (Android)
Expand DownExpand Up@@ -110,7 +110,10 @@ class Button extends React.Component<{
const buttonStyles = [styles.button];
const textStyles = [styles.text];
if (color) {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
textStyles.push({color: color});
} else {
buttonStyles.push({backgroundColor: color});
Expand All@@ -129,11 +132,11 @@ class Button extends React.Component<{
const formattedTitle =
Platform.OS === 'android' ? title.toUpperCase() : title;
const Touchable =
(Platform.OS === 'android') // [TODO(windows ISS)
? TouchableNativeFeedback
: (Platform.OS === 'uwp' || Platform.OS === 'windesktop')
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
Platform.OS === 'android' // [TODO(windows ISS)
? TouchableNativeFeedback
: Platform.OS === 'uwp' || Platform.OS === 'windesktop'
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
return (
<Touchable
accessibilityLabel={accessibilityLabel}
Expand DownExpand Up@@ -164,11 +167,12 @@ const styles = StyleSheet.create({
borderRadius: 2,
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#2196F3',
borderRadius: 2,
},
windesktop: {}, // ]TODO(windows ISS)
windesktop: {}, // ]TODO(windows ISS)
}),
text: Platform.select({
ios: {
Expand All@@ -184,13 +188,15 @@ const styles = StyleSheet.create({
padding: 8,
fontWeight: '500',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#007AFF',
textAlign: 'center',
padding: 8,
fontSize: 18,
}, // ]TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
textAlign: 'center',
color: 'white',
padding: 8,
Expand All@@ -205,7 +211,8 @@ const styles = StyleSheet.create({
backgroundColor: '#dfdfdf',
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#dfdfdf',
},
windesktop: {}, // ]TODO(windows ISS)
Expand All@@ -214,13 +221,15 @@ const styles = StyleSheet.create({
ios: {
color: '#cdcdcd',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#cdcdcd',
}, // ]TODO(macOS ISS#2323203)
android: {
color: '#a1a1a1',
},
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
color: '#a1a1a1',
},
windesktop: {
Expand Down
6 changes: 4 additions & 2 deletions Libraries/Components/DatePicker/DatePickerIOS.macos.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,9 @@ class DummyDatePickerIOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerIOS, this.props.style]}>
<Text style={styles.datePickerText}>DatePickerIOS is not supported on this platform!</Text>
<Text style={styles.datePickerText}>
DatePickerIOS is not supported on this platform!
</Text>
</View>
);
}
Expand All@@ -40,7 +42,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerIOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@
const DatePickerAndroid = {
async open(options: Object): Promise<Object> {
return Promise.reject({
message: 'DatePickerAndroid is not supported on this platform.'
message: 'DatePickerAndroid is not supported on this platform.',
});
},
};
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ var StyleSheet = require('StyleSheet');
var Text = require('Text');
var View = require('View');

class dummyDatePickerMacOS extends React.Component {
class DummyDatePickerMacOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerMacOS, this.props.style]}>
Expand All@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ const DatePickerMacOS = createReactClass({
/>
</View>
);
}
},
});

const RCTDatePickerMacOS = requireNativeComponent('RCTDatePicker' /* TODO refactor as class that extends React.Component<Props>, {
Expand Down
5 changes: 4 additions & 1 deletion Libraries/Components/Picker/Picker.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -150,7 +150,10 @@ class Picker extends React.Component<{
};

render() {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
// $FlowFixMe found when converting React.createClass to ES6
return <PickerIOS {...this.props}>{this.props.children}</PickerIOS>;
} else if (Platform.OS === 'android') {
Expand Down
2 changes: 1 addition & 1 deletion Libraries/Components/Picker/PickerIOS.ios.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ import type {SyntheticEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {TextStyleProp} from 'StyleSheet';
import type {SemanticOrDynamicColorType} from 'normalizeColor' // ]TODO(macOS ISS#2323203)
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .flowconfig
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,11 @@
.*/Libraries/polyfills/.*

; Ignore metro
; .*/node_modules/metro/.*
.*/node_modules/metro/.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How close does this get us to the CI loops passing? If we're still not close, there's always the risk these just break again without people realizing.

Comment thread
acoates-ms marked this conversation as resolved.
.*/node_modules/metro-config/src/configTypes.flow.js.flow

; Ignore rn-cli.config.js
<PROJECT_ROOT>/rn-cli.config.js

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
Expand Down
2 changes: 1 addition & 1 deletion IntegrationTests/AsyncStorageTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ function testMerge() {
expectEqual(JSON.parse(result), VAL_MERGE_EXPECT, 'testMerge');
updateMessage('objects deeply merged\nDone!');
runTestCase('multi set and get', testOptimizedMultiGet);
});
});
});
});
} else {
Expand Down
13 changes: 9 additions & 4 deletions IntegrationTests/LayoutEventsTest.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,10 +52,15 @@ const LayoutEventsTest = createReactClass({
},
animateViewLayout: function() {
debug('animateViewLayout invoked');
LayoutAnimation.configureNext(Platform.OS === 'macos' ? LayoutAnimation.Presets.easeInEaseOut : LayoutAnimation.Presets.spring, () => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
});
LayoutAnimation.configureNext(
Platform.OS === 'macos'
? LayoutAnimation.Presets.easeInEaseOut
: LayoutAnimation.Presets.spring,
() => {
debug('animateViewLayout done');
this.checkLayout(this.addWrapText);
},
);
this.setState({viewStyle: {margin: 60}});
},
addWrapText: function() {
Expand Down
4 changes: 2 additions & 2 deletions Libraries/Alert/Alert.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,8 +55,8 @@ class Alert {
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
AlertMacOS.alert(title, message, buttons); // TODO(macOS ISS#2323203)
} else if (Platform.OS === 'macos' /* TODO[(macOS ISS#2323203) */) {
AlertMacOS.alert(title, message, buttons); // TODO](macOS ISS#2323203)
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
Expand Down
33 changes: 17 additions & 16 deletions Libraries/Alert/AlertMacOS.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,7 +13,7 @@

'use strict';

import type {AlertType, AlertButtonStyle} from 'AlertIOS';
import type {AlertType, AlertButtonStyle} from 'AlertIOS';

var RCTAlertManager = require('NativeModules').AlertManager;

Expand DownExpand Up@@ -175,13 +175,11 @@ class AlertMacOS {
modal?: ?boolean,
critical?: ?boolean,
): void {

var callbacks = [];
var buttons = [];
if (typeof callbackOrButtons === 'function') {
callbacks = [callbackOrButtons];
}
else if (callbackOrButtons instanceof Array) {
} else if (callbackOrButtons instanceof Array) {
callbackOrButtons.forEach((btn, index) => {
callbacks[index] = btn.onPress;
if (btn.text || index < (callbackOrButtons || []).length - 1) {
Expand All@@ -192,18 +190,21 @@ class AlertMacOS {
});
}

RCTAlertManager.alertWithArgs({
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
}, (id, value) => {
var cb = callbacks[id];
cb && cb(value);
});
RCTAlertManager.alertWithArgs(
{
title: title || undefined,
message: message || undefined,
buttons,
type: type || undefined,
defaultInputs,
modal: modal || undefined,
critical: critical || undefined,
},
(id, value) => {
var cb = callbacks[id];
cb && cb(value);
},
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion Libraries/Animated/src/nodes/AnimatedInterpolation.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -167,7 +167,10 @@ function interpolate(

function colorToRgba(input: string): string {
let int32Color = normalizeColor(input);
if (int32Color === null || typeof int32Color !== 'number') { // TODO(macOS ISS#2323203)
if (
int32Color === null ||
typeof int32Color !== 'number' /* TODO(macOS ISS#2323203) */
) {
return input;
}

Expand Down
21 changes: 14 additions & 7 deletions Libraries/Color/normalizeColor.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,11 +17,17 @@ export type SemanticOrDynamicColorType = {
semantic?: string,
dynamic?: {
light: ?(string | number | SemanticOrDynamicColorType),
dark: ?(string | number | SemanticOrDynamicColorType)
}
dark: ?(string | number | SemanticOrDynamicColorType),
},
}; // ]TODO(macOS ISS#2323203)

function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)): ?(number | SemanticOrDynamicColorType) { // TODO(macOS ISS#2323203)
function normalizeColor(
color: ?(
| string
| number
| SemanticOrDynamicColorType
) /* TODO(macOS ISS#2323203) */,
): ?(number | SemanticOrDynamicColorType) /* TODO(macOS ISS#2323203) */ {
const matchers = getMatchers();
let match;

Expand All@@ -32,7 +38,8 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
return null;
}

if (typeof color === 'object' && color !== null && Platform.OS === 'macos') { // [TODO(macOS ISS#2323203)
if (typeof color === 'object' && color !== null && Platform.OS === 'macos') {
// [TODO(macOS ISS#2323203)
if ('semantic' in color) {
// a macos semantic color
return color;
Expand All@@ -42,12 +49,12 @@ function normalizeColor(color: ?(string | number | SemanticOrDynamicColorType)):
const dynamicColor: SemanticOrDynamicColorType = {
dynamic: {
light: normalizeColor(dynamic.light),
dark: normalizeColor(dynamic.dark)
}
dark: normalizeColor(dynamic.dark),
},
};
return dynamicColor;
}
}
}
if (typeof color !== 'string') {
return null;
} // ]TODO(macOS ISS#2323203)
Expand Down
5 changes: 3 additions & 2 deletions Libraries/Components/ActivityIndicator/ActivityIndicator.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,6 +19,7 @@ const requireNativeComponent = require('requireNativeComponent');

import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

const RCTActivityIndicator =
Platform.OS === 'android'
Expand DownExpand Up@@ -53,7 +54,7 @@ type Props = $ReadOnly<{|
*
* See http://facebook.github.io/react-native/docs/activityindicator.html#color
*/
color?: ?string,
color?: ?(string | SemanticOrDynamicColorType), // ]TODO(macOS ISS#2323203)

/**
* Size of the indicator (default is 'small').
Expand DownExpand Up@@ -115,7 +116,7 @@ const ActivityIndicatorWithRef = React.forwardRef(ActivityIndicator);

ActivityIndicatorWithRef.defaultProps = {
animating: true,
color: (Platform.OS === 'ios' || Platform.OS === 'macos') ? GRAY : null, // TODO(macOS ISS#2323203)
color: Platform.OS === 'ios' || Platform.OS === 'macos' ? GRAY : null, // TODO(macOS ISS#2323203)
hidesWhenStopped: true,
size: 'small',
};
Expand Down
39 changes: 24 additions & 15 deletions Libraries/Components/Button.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -71,8 +71,8 @@ class Button extends React.Component<{
*/
accessibilityLabel: PropTypes.string,
/**
* Hint text to display blindness accessibility features
*/
* Hint text to display blindness accessibility features
*/
accessibilityHint: PropTypes.string, // TODO(OSS Candidate ISS#2710739)
/**
* Color of the text (iOS, macOS), or background color of the button (Android)
Expand DownExpand Up@@ -110,7 +110,10 @@ class Button extends React.Component<{
const buttonStyles = [styles.button];
const textStyles = [styles.text];
if (color) {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
textStyles.push({color: color});
} else {
buttonStyles.push({backgroundColor: color});
Expand All@@ -129,11 +132,11 @@ class Button extends React.Component<{
const formattedTitle =
Platform.OS === 'android' ? title.toUpperCase() : title;
const Touchable =
(Platform.OS === 'android') // [TODO(windows ISS)
? TouchableNativeFeedback
: (Platform.OS === 'uwp' || Platform.OS === 'windesktop')
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
Platform.OS === 'android' // [TODO(windows ISS)
? TouchableNativeFeedback
: Platform.OS === 'uwp' || Platform.OS === 'windesktop'
? TouchableHighlight
: TouchableOpacity; // ]TODO(windows ISS)
return (
<Touchable
accessibilityLabel={accessibilityLabel}
Expand DownExpand Up@@ -164,11 +167,12 @@ const styles = StyleSheet.create({
borderRadius: 2,
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#2196F3',
borderRadius: 2,
},
windesktop: {}, // ]TODO(windows ISS)
windesktop: {}, // ]TODO(windows ISS)
}),
text: Platform.select({
ios: {
Expand All@@ -184,13 +188,15 @@ const styles = StyleSheet.create({
padding: 8,
fontWeight: '500',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#007AFF',
textAlign: 'center',
padding: 8,
fontSize: 18,
}, // ]TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
textAlign: 'center',
color: 'white',
padding: 8,
Expand All@@ -205,7 +211,8 @@ const styles = StyleSheet.create({
backgroundColor: '#dfdfdf',
},
macos: {}, // TODO(macOS ISS#2323203)
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
backgroundColor: '#dfdfdf',
},
windesktop: {}, // ]TODO(windows ISS)
Expand All@@ -214,13 +221,15 @@ const styles = StyleSheet.create({
ios: {
color: '#cdcdcd',
},
macos: { // [TODO(macOS ISS#2323203)
macos: {
// [TODO(macOS ISS#2323203)
color: '#cdcdcd',
}, // ]TODO(macOS ISS#2323203)
android: {
color: '#a1a1a1',
},
uwp: { // [TODO(windows ISS)
uwp: {
// [TODO(windows ISS)
color: '#a1a1a1',
},
windesktop: {
Expand Down
6 changes: 4 additions & 2 deletions Libraries/Components/DatePicker/DatePickerIOS.macos.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,7 +20,9 @@ class DummyDatePickerIOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerIOS, this.props.style]}>
<Text style={styles.datePickerText}>DatePickerIOS is not supported on this platform!</Text>
<Text style={styles.datePickerText}>
DatePickerIOS is not supported on this platform!
</Text>
</View>
);
}
Expand All@@ -40,7 +42,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerIOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,7 +15,7 @@
const DatePickerAndroid = {
async open(options: Object): Promise<Object> {
return Promise.reject({
message: 'DatePickerAndroid is not supported on this platform.'
message: 'DatePickerAndroid is not supported on this platform.',
});
},
};
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ var StyleSheet = require('StyleSheet');
var Text = require('Text');
var View = require('View');

class dummyDatePickerMacOS extends React.Component {
class DummyDatePickerMacOS extends React.Component {
render() {
return (
<View style={[styles.dummyDatePickerMacOS, this.props.style]}>
Expand All@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ var styles = StyleSheet.create({
datePickerText: {
color: '#333333',
margin: 20,
}
},
});

module.exports = DummyDatePickerMacOS;
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ const DatePickerMacOS = createReactClass({
/>
</View>
);
}
},
});

const RCTDatePickerMacOS = requireNativeComponent('RCTDatePicker' /* TODO refactor as class that extends React.Component<Props>, {
Expand Down
5 changes: 4 additions & 1 deletion Libraries/Components/Picker/Picker.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -150,7 +150,10 @@ class Picker extends React.Component<{
};

render() {
if (Platform.OS === 'ios' || Platform.OS === 'macos') { // TODO(macOS ISS#2323203)
if (
Platform.OS === 'ios' ||
Platform.OS === 'macos' /* TODO(macOS ISS#2323203) */
) {
// $FlowFixMe found when converting React.createClass to ES6
return <PickerIOS {...this.props}>{this.props.children}</PickerIOS>;
} else if (Platform.OS === 'android') {
Expand Down
2 changes: 1 addition & 1 deletion Libraries/Components/Picker/PickerIOS.ios.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ import type {SyntheticEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {TextStyleProp} from 'StyleSheet';
import type {SemanticOrDynamicColorType} from 'normalizeColor' // ]TODO(macOS ISS#2323203)
import type {SemanticOrDynamicColorType} from 'normalizeColor'; // ]TODO(macOS ISS#2323203)

type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
Expand Down
Loading