Skip to content

Commit 74d21ff

Browse files
authored
Removing default props as they won't work with React 19 (#296)
* Removing default props as they work with React 19 for functional component - but we use it in our withCtx * remove menu def props
1 parent 68e61b8 commit 74d21ff

File tree

10 files changed

+28
-56
lines changed

10 files changed

+28
-56
lines changed

__tests__/MenuOption-test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ describe('MenuOption', () => {
3838
<MenuOption />,
3939
makeMockContext()
4040
);
41-
expect(instance.props.disabled).toBe(false);
41+
// react deprecated default props -> disabled = undefined
42+
expect(instance.props.disabled).toBe(undefined);
4243
});
4344

4445
it('should trigger on select event with value', () => {

__tests__/MenuTrigger-test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ describe('MenuTrigger', () => {
3838
const { instance } = render(
3939
<MenuTrigger />
4040
);
41-
expect(instance.props.disabled).toBe(false);
41+
// react deprecated default props -> disabled = undefined
42+
expect(instance.props.disabled).toBe(undefined);
4243
});
4344

4445
it('should trigger on ref event', () => {

src/Menu.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import PropTypes from 'prop-types';
33
import { View } from 'react-native';
44
import MenuOptions from './MenuOptions';
55
import MenuTrigger from './MenuTrigger';
6-
import ContextMenu from './renderers/ContextMenu';
76
import { makeName } from './helpers';
87
import { debug, CFG } from './logger';
98
import { withCtx } from './MenuProvider';
9+
import { menuConfig } from './config';
1010

1111
const isRegularComponent = c => c.type !== MenuOptions && c.type !== MenuTrigger;
1212
const isTrigger = c => c.type === MenuTrigger;
@@ -139,14 +139,6 @@ Menu.propTypes = {
139139
onBackdropPress: PropTypes.func,
140140
};
141141

142-
Menu.defaultProps = {
143-
renderer: ContextMenu,
144-
rendererProps: {},
145-
onSelect: () => {},
146-
onOpen: () => {},
147-
onClose: () => {},
148-
onBackdropPress: () => {},
149-
};
150142

151143
const MenuExternal = withCtx(Menu);
152144
Object.defineProperty(MenuExternal, 'debug',
@@ -155,9 +147,9 @@ Object.defineProperty(MenuExternal, 'debug',
155147
set: function(val) { CFG.debug = val },
156148
});
157149
MenuExternal.setDefaultRenderer = (renderer) => {
158-
Menu.defaultProps.renderer = renderer;
150+
menuConfig.defRenderer = renderer;
159151
}
160152
MenuExternal.setDefaultRendererProps = (rendererProps) => {
161-
Menu.defaultProps.rendererProps = rendererProps;
153+
menuConfig.defRendererProps = rendererProps;
162154
}
163155
export default MenuExternal;

src/MenuOption.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { debug } from './logger';
55
import { makeTouchable } from './helpers';
66
import { withCtx } from './MenuProvider';
77

8+
const noop = () => {};
89

910
export class MenuOption extends Component {
1011

@@ -20,7 +21,7 @@ export class MenuOption extends Component {
2021

2122
_getMenusOnSelect() {
2223
const menu = this.props.ctx.menuActions._getOpenedMenu();
23-
return menu.instance.props.onSelect;
24+
return menu.instance.props.onSelect || noop;
2425
}
2526

2627
_getCustomStyles() {
@@ -81,13 +82,6 @@ MenuOption.propTypes = {
8182
testID: PropTypes.string,
8283
};
8384

84-
MenuOption.defaultProps = {
85-
disabled: false,
86-
disableTouchable: false,
87-
customStyles: {},
88-
testID: undefined,
89-
};
90-
9185
const defaultStyles = StyleSheet.create({
9286
option: {
9387
padding: 5,

src/MenuOptions.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { withCtx } from './MenuProvider';
66
export class MenuOptions extends React.Component {
77

88
updateCustomStyles(_props) {
9-
const { customStyles } = _props
9+
const { customStyles = {} } = _props
1010
const menu = this.props.ctx.menuActions._getOpenedMenu()
1111
// FIXME react 16.3 workaround for ControlledExample!
1212
if (!menu) return
@@ -23,7 +23,7 @@ export class MenuOptions extends React.Component {
2323
}
2424

2525
render() {
26-
const { customStyles, style, children } = this.props
26+
const { customStyles = {}, style, children } = this.props
2727
return (
2828
<View style={[customStyles.optionsWrapper, style]}>
2929
{children}
@@ -42,8 +42,4 @@ MenuOptions.propTypes = {
4242
]),
4343
};
4444

45-
MenuOptions.defaultProps = {
46-
customStyles: {},
47-
};
48-
4945
export default withCtx(MenuOptions);

src/MenuProvider.js

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import MenuPlaceholder from './MenuPlaceholder';
88
import { measure, isClassComponent } from './helpers';
99
import { debug } from './logger.js';
1010
import MenuOutside from './renderers/MenuOutside';
11+
import { menuConfig } from './config.js';
1112

1213
const defaultOptionsContainerRenderer = options => options;
1314
const layoutsEqual = (a, b) => (
@@ -62,7 +63,7 @@ export default class MenuProvider extends Component {
6263
}
6364

6465
componentDidMount() {
65-
const { customStyles, skipInstanceCheck } = this.props;
66+
const { customStyles = {}, skipInstanceCheck } = this.props;
6667
if (customStyles.menuContextWrapper) {
6768
console.warn('menuContextWrapper custom style is deprecated and it might be removed in future releases, use menuProviderWrapper instead.');
6869
}
@@ -171,10 +172,10 @@ export default class MenuProvider extends Component {
171172
if (prev.name !== next.name) {
172173
if (prev !== NULL && !prev.instance.isOpen()) {
173174
beforeSetState = () => this._beforeClose(prev)
174-
.then(() => prev.instance.props.onClose());
175+
.then(() => prev.instance.props.onClose && prev.instance.props.onClose());
175176
}
176177
if (next !== NULL) {
177-
next.instance.props.onOpen();
178+
next.instance.props.onOpen && next.instance.props.onOpen();
178179
afterSetState = () => this._initOpen(next);
179180
}
180181
}
@@ -208,7 +209,7 @@ export default class MenuProvider extends Component {
208209
}
209210

210211
render() {
211-
const { style, customStyles } = this.props;
212+
const { style, customStyles = {} } = this.props;
212213
debug('render menu', this.isMenuOpen(), this._ownLayout);
213214
return (
214215
<PopupMenuContext.Provider value={this.menuCtx}>
@@ -262,7 +263,7 @@ export default class MenuProvider extends Component {
262263
debug('on backdrop press');
263264
const menu = this._getOpenedMenu();
264265
if (menu) {
265-
menu.instance.props.onBackdropPress();
266+
menu.instance.props.onBackdropPress && menu.instance.props.onBackdropPress();
266267
}
267268
this.closeMenu();
268269
}
@@ -293,10 +294,10 @@ export default class MenuProvider extends Component {
293294
_makeOptions() {
294295
const { instance, triggerLayout, optionsLayout } = this._getOpenedMenu();
295296
const options = instance._getOptions();
296-
const { renderer, rendererProps } = instance.props;
297+
const { renderer = menuConfig.defRenderer, rendererProps = menuConfig.defRendererProps } = instance.props;
297298
const windowLayout = this._ownLayout;
298299
const safeAreaLayout = this._safeAreaLayout;
299-
const { optionsContainerStyle, renderOptionsContainer, customStyles } = options.props;
300+
const { optionsContainerStyle, renderOptionsContainer, customStyles = {} } = options.props;
300301
const optionsRenderer = renderOptionsContainer || defaultOptionsContainerRenderer;
301302
const isOutside = !triggerLayout || !optionsLayout;
302303
const onLayout = e => this._onOptionsLayout(e, instance.getName(), isOutside);
@@ -349,12 +350,6 @@ MenuProvider.propTypes = {
349350
skipInstanceCheck: PropTypes.bool,
350351
}
351352

352-
MenuProvider.defaultProps = {
353-
customStyles: {},
354-
backHandler: false,
355-
skipInstanceCheck: false,
356-
};
357-
358353
const styles = StyleSheet.create({
359354
flex1: {
360355
flex: 1,

src/MenuTrigger.js

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export class MenuTrigger extends Component {
1414
}
1515

1616
render() {
17-
const { disabled, onRef, text, children, style, customStyles, menuName,
17+
const { disabled, onRef, text, children, style, customStyles = {}, menuName,
1818
triggerOnLongPress, onAlternativeAction, testID, ...other } = this.props;
1919
const onPress = () => !disabled && this._onPress();
2020
const { Touchable, defaultTouchableProps } = makeTouchable(customStyles.TriggerTouchableComponent);
@@ -47,10 +47,4 @@ MenuTrigger.propTypes = {
4747
testID: PropTypes.string,
4848
};
4949

50-
MenuTrigger.defaultProps = {
51-
disabled: false,
52-
customStyles: {},
53-
testID: undefined,
54-
};
55-
5650
export default withCtx(MenuTrigger)

src/config.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import ContextMenu from './renderers/ContextMenu';
2+
3+
export const menuConfig = {
4+
defRenderer: ContextMenu,
5+
defRendererProps: {},
6+
}

src/renderers/Popover.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,10 @@ export default class Popover extends React.Component {
233233
children,
234234
layouts,
235235
anchorStyle,
236-
preferredPlacement,
236+
preferredPlacement = 'top',
237237
openAnimationDuration,
238238
closeAnimationDuration,
239-
placement: userPlacement,
239+
placement: userPlacement = 'auto',
240240
...other
241241
} = this.props;
242242
const isRTL = I18nManager.isRTL;
@@ -288,11 +288,6 @@ Popover.propTypes = {
288288
closeAnimationDuration: PropTypes.number,
289289
};
290290

291-
Popover.defaultProps = {
292-
preferredPlacement: 'top',
293-
placement: 'auto',
294-
};
295-
296291
const getContainerStyle = ({ placement, isRTL }) => ({
297292
left: {
298293
flexDirection: isRTL ? 'row' : 'row-reverse',

src/with-context.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ export function withContext(Context, propName = "context") {
3333
enhanceForwardRef.displayName = `enhanceContext-${consumerName}(${name})`;
3434

3535
const FC = React.forwardRef(enhanceForwardRef);
36-
FC.defaultProps = Component.defaultProps;
37-
FC.propTypes = Component.propTypes;
3836
return FC
3937
};
4038
}

0 commit comments

Comments
 (0)