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
3 changes: 2 additions & 1 deletion __tests__/MenuOption-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ describe('MenuOption', () => {
<MenuOption />,
makeMockContext()
);
expect(instance.props.disabled).toBe(false);
// react deprecated default props -> disabled = undefined
expect(instance.props.disabled).toBe(undefined);
});

it('should trigger on select event with value', () => {
Expand Down
3 changes: 2 additions & 1 deletion __tests__/MenuTrigger-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ describe('MenuTrigger', () => {
const { instance } = render(
<MenuTrigger />
);
expect(instance.props.disabled).toBe(false);
// react deprecated default props -> disabled = undefined
expect(instance.props.disabled).toBe(undefined);
});

it('should trigger on ref event', () => {
Expand Down
14 changes: 3 additions & 11 deletions src/Menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import PropTypes from 'prop-types';
import { View } from 'react-native';
import MenuOptions from './MenuOptions';
import MenuTrigger from './MenuTrigger';
import ContextMenu from './renderers/ContextMenu';
import { makeName } from './helpers';
import { debug, CFG } from './logger';
import { withCtx } from './MenuProvider';
import { menuConfig } from './config';

const isRegularComponent = c => c.type !== MenuOptions && c.type !== MenuTrigger;
const isTrigger = c => c.type === MenuTrigger;
Expand Down Expand Up @@ -139,14 +139,6 @@ Menu.propTypes = {
onBackdropPress: PropTypes.func,
};

Menu.defaultProps = {
renderer: ContextMenu,
rendererProps: {},
onSelect: () => {},
onOpen: () => {},
onClose: () => {},
onBackdropPress: () => {},
};

const MenuExternal = withCtx(Menu);
Object.defineProperty(MenuExternal, 'debug',
Expand All @@ -155,9 +147,9 @@ Object.defineProperty(MenuExternal, 'debug',
set: function(val) { CFG.debug = val },
});
MenuExternal.setDefaultRenderer = (renderer) => {
Menu.defaultProps.renderer = renderer;
menuConfig.defRenderer = renderer;
}
MenuExternal.setDefaultRendererProps = (rendererProps) => {
Menu.defaultProps.rendererProps = rendererProps;
menuConfig.defRendererProps = rendererProps;
}
export default MenuExternal;
10 changes: 2 additions & 8 deletions src/MenuOption.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { debug } from './logger';
import { makeTouchable } from './helpers';
import { withCtx } from './MenuProvider';

const noop = () => {};

export class MenuOption extends Component {

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

_getMenusOnSelect() {
const menu = this.props.ctx.menuActions._getOpenedMenu();
return menu.instance.props.onSelect;
return menu.instance.props.onSelect || noop;
}

_getCustomStyles() {
Expand Down Expand Up @@ -81,13 +82,6 @@ MenuOption.propTypes = {
testID: PropTypes.string,
};

MenuOption.defaultProps = {
disabled: false,
disableTouchable: false,
customStyles: {},
testID: undefined,
};

const defaultStyles = StyleSheet.create({
option: {
padding: 5,
Expand Down
8 changes: 2 additions & 6 deletions src/MenuOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { withCtx } from './MenuProvider';
export class MenuOptions extends React.Component {

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

render() {
const { customStyles, style, children } = this.props
const { customStyles = {}, style, children } = this.props
return (
<View style={[customStyles.optionsWrapper, style]}>
{children}
Expand All @@ -42,8 +42,4 @@ MenuOptions.propTypes = {
]),
};

MenuOptions.defaultProps = {
customStyles: {},
};

export default withCtx(MenuOptions);
21 changes: 8 additions & 13 deletions src/MenuProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import MenuPlaceholder from './MenuPlaceholder';
import { measure, isClassComponent } from './helpers';
import { debug } from './logger.js';
import MenuOutside from './renderers/MenuOutside';
import { menuConfig } from './config.js';

const defaultOptionsContainerRenderer = options => options;
const layoutsEqual = (a, b) => (
Expand Down Expand Up @@ -62,7 +63,7 @@ export default class MenuProvider extends Component {
}

componentDidMount() {
const { customStyles, skipInstanceCheck } = this.props;
const { customStyles = {}, skipInstanceCheck } = this.props;
if (customStyles.menuContextWrapper) {
console.warn('menuContextWrapper custom style is deprecated and it might be removed in future releases, use menuProviderWrapper instead.');
}
Expand Down Expand Up @@ -171,10 +172,10 @@ export default class MenuProvider extends Component {
if (prev.name !== next.name) {
if (prev !== NULL && !prev.instance.isOpen()) {
beforeSetState = () => this._beforeClose(prev)
.then(() => prev.instance.props.onClose());
.then(() => prev.instance.props.onClose && prev.instance.props.onClose());
}
if (next !== NULL) {
next.instance.props.onOpen();
next.instance.props.onOpen && next.instance.props.onOpen();
afterSetState = () => this._initOpen(next);
}
}
Expand Down Expand Up @@ -208,7 +209,7 @@ export default class MenuProvider extends Component {
}

render() {
const { style, customStyles } = this.props;
const { style, customStyles = {} } = this.props;
debug('render menu', this.isMenuOpen(), this._ownLayout);
return (
<PopupMenuContext.Provider value={this.menuCtx}>
Expand Down Expand Up @@ -262,7 +263,7 @@ export default class MenuProvider extends Component {
debug('on backdrop press');
const menu = this._getOpenedMenu();
if (menu) {
menu.instance.props.onBackdropPress();
menu.instance.props.onBackdropPress && menu.instance.props.onBackdropPress();
}
this.closeMenu();
}
Expand Down Expand Up @@ -293,10 +294,10 @@ export default class MenuProvider extends Component {
_makeOptions() {
const { instance, triggerLayout, optionsLayout } = this._getOpenedMenu();
const options = instance._getOptions();
const { renderer, rendererProps } = instance.props;
const { renderer = menuConfig.defRenderer, rendererProps = menuConfig.defRendererProps } = instance.props;
const windowLayout = this._ownLayout;
const safeAreaLayout = this._safeAreaLayout;
const { optionsContainerStyle, renderOptionsContainer, customStyles } = options.props;
const { optionsContainerStyle, renderOptionsContainer, customStyles = {} } = options.props;
const optionsRenderer = renderOptionsContainer || defaultOptionsContainerRenderer;
const isOutside = !triggerLayout || !optionsLayout;
const onLayout = e => this._onOptionsLayout(e, instance.getName(), isOutside);
Expand Down Expand Up @@ -349,12 +350,6 @@ MenuProvider.propTypes = {
skipInstanceCheck: PropTypes.bool,
}

MenuProvider.defaultProps = {
customStyles: {},
backHandler: false,
skipInstanceCheck: false,
};

const styles = StyleSheet.create({
flex1: {
flex: 1,
Expand Down
8 changes: 1 addition & 7 deletions src/MenuTrigger.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export class MenuTrigger extends Component {
}

render() {
const { disabled, onRef, text, children, style, customStyles, menuName,
const { disabled, onRef, text, children, style, customStyles = {}, menuName,
triggerOnLongPress, onAlternativeAction, testID, ...other } = this.props;
const onPress = () => !disabled && this._onPress();
const { Touchable, defaultTouchableProps } = makeTouchable(customStyles.TriggerTouchableComponent);
Expand Down Expand Up @@ -47,10 +47,4 @@ MenuTrigger.propTypes = {
testID: PropTypes.string,
};

MenuTrigger.defaultProps = {
disabled: false,
customStyles: {},
testID: undefined,
};

export default withCtx(MenuTrigger)
6 changes: 6 additions & 0 deletions src/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import ContextMenu from './renderers/ContextMenu';

export const menuConfig = {
defRenderer: ContextMenu,
defRendererProps: {},
}
9 changes: 2 additions & 7 deletions src/renderers/Popover.js
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,10 @@ export default class Popover extends React.Component {
children,
layouts,
anchorStyle,
preferredPlacement,
preferredPlacement = 'top',
openAnimationDuration,
closeAnimationDuration,
placement: userPlacement,
placement: userPlacement = 'auto',
...other
} = this.props;
const isRTL = I18nManager.isRTL;
Expand Down Expand Up @@ -288,11 +288,6 @@ Popover.propTypes = {
closeAnimationDuration: PropTypes.number,
};

Popover.defaultProps = {
preferredPlacement: 'top',
placement: 'auto',
};

const getContainerStyle = ({ placement, isRTL }) => ({
left: {
flexDirection: isRTL ? 'row' : 'row-reverse',
Expand Down
2 changes: 0 additions & 2 deletions src/with-context.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ export function withContext(Context, propName = "context") {
enhanceForwardRef.displayName = `enhanceContext-${consumerName}(${name})`;

const FC = React.forwardRef(enhanceForwardRef);
FC.defaultProps = Component.defaultProps;
FC.propTypes = Component.propTypes;
return FC
};
}