From d9fd6a942f81c80b7ed14cd802b04b7584b5ae6f Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 27 Jun 2022 16:09:00 -0700 Subject: [PATCH] [fix] Modal should pass through View props Fix #2314 --- .../src/exports/Modal/ModalContent.js | 10 +++++++--- .../__tests__/__snapshots__/index-test.js.snap | 16 ++++++++++++++++ .../src/exports/Modal/__tests__/index-test.js | 9 ++++++++- .../react-native-web/src/exports/Modal/index.js | 11 ++++++++--- 4 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 packages/react-native-web/src/exports/Modal/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/exports/Modal/ModalContent.js b/packages/react-native-web/src/exports/Modal/ModalContent.js index ec10e198..bcad824d 100644 --- a/packages/react-native-web/src/exports/Modal/ModalContent.js +++ b/packages/react-native-web/src/exports/Modal/ModalContent.js @@ -8,24 +8,27 @@ * @flow */ +import type { ViewProps } from '../View'; + import * as React from 'react'; import View from '../View'; import StyleSheet from '../StyleSheet'; import ExecutionEnvironment from 'fbjs/lib/ExecutionEnvironment'; const { canUseDOM } = ExecutionEnvironment; -export type ModalContentProps = {| +export type ModalContentProps = { + ...ViewProps, active?: ?(boolean | (() => boolean)), children?: any, onRequestClose?: ?() => void, transparent?: ?boolean -|}; +}; const ModalContent: React.AbstractComponent< ModalContentProps, React.ElementRef > = React.forwardRef((props, forwardedRef) => { - const { active, children, onRequestClose, transparent } = props; + const { active, children, onRequestClose, transparent, ...rest } = props; React.useEffect(() => { if (canUseDOM) { @@ -48,6 +51,7 @@ const ModalContent: React.AbstractComponent< return ( +
+
+`; diff --git a/packages/react-native-web/src/exports/Modal/__tests__/index-test.js b/packages/react-native-web/src/exports/Modal/__tests__/index-test.js index c2b7f934..995c983f 100644 --- a/packages/react-native-web/src/exports/Modal/__tests__/index-test.js +++ b/packages/react-native-web/src/exports/Modal/__tests__/index-test.js @@ -23,6 +23,13 @@ describe('components/Modal', () => { expect(insideElement).not.toBe(document.body); }); + test('forwards props', () => { + const { getByTestId } = render( + + ); + expect(getByTestId('root')).toMatchSnapshot(); + }); + test('render children when visible', () => { const { getByTestId } = render( @@ -218,7 +225,7 @@ describe('components/Modal', () => { } }); - test('creates view with role="modal" when active', () => { + test('creates view with role="dialog" when active', () => { const { baseElement } = render( Hello diff --git a/packages/react-native-web/src/exports/Modal/index.js b/packages/react-native-web/src/exports/Modal/index.js index 1185db7f..56ecba2d 100644 --- a/packages/react-native-web/src/exports/Modal/index.js +++ b/packages/react-native-web/src/exports/Modal/index.js @@ -8,13 +8,16 @@ * @flow */ +import type { ViewProps } from '../View'; + import * as React from 'react'; import ModalPortal from './ModalPortal'; import ModalAnimation from './ModalAnimation'; import ModalContent from './ModalContent'; import ModalFocusTrap from './ModalFocusTrap'; -export type ModalProps = {| +export type ModalProps = { + ...ViewProps, animationType?: 'none' | 'slide' | 'fade', children: any, hardwareAccelerated?: ?boolean, @@ -29,7 +32,7 @@ export type ModalProps = {| >, transparent?: ?boolean, visible?: ?boolean -|}; +}; let uniqueModalIdentifier = 0; @@ -80,7 +83,8 @@ const Modal: React.AbstractComponent< onRequestClose, onShow, transparent, - visible = true + visible = true, + ...rest } = props; // Set a unique model identifier so we can correctly route @@ -117,6 +121,7 @@ const Modal: React.AbstractComponent< >