Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed: Web - Desktop Attachments - Cannot attach a photo when the NEW ( green plus) button is pressed #9021

Merged
merged 9 commits into from
Jun 7, 2022
77 changes: 30 additions & 47 deletions src/pages/home/sidebar/SidebarScreen.js → ...idebar/SidebarScreen/BaseSidebarScreen.js
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,40 @@ import lodashGet from 'lodash/get';
import _ from 'underscore';
import React, {Component} from 'react';
import {View} from 'react-native';
import {withOnyx} from 'react-native-onyx';
import PropTypes from 'prop-types';
import {withNavigation} from '@react-navigation/compat';
import styles from '../../../styles/styles';
import SidebarLinks from './SidebarLinks';
import PopoverMenu from '../../../components/PopoverMenu';
import FAB from '../../../components/FAB';
import ScreenWrapper from '../../../components/ScreenWrapper';
import Navigation from '../../../libs/Navigation/Navigation';
import ROUTES from '../../../ROUTES';
import Timing from '../../../libs/actions/Timing';
import withWindowDimensions, {windowDimensionsPropTypes} from '../../../components/withWindowDimensions';
import CONST from '../../../CONST';
import withLocalize, {withLocalizePropTypes} from '../../../components/withLocalize';
import compose from '../../../libs/compose';
import * as Expensicons from '../../../components/Icon/Expensicons';
import Permissions from '../../../libs/Permissions';
import ONYXKEYS from '../../../ONYXKEYS';
import * as Policy from '../../../libs/actions/Policy';
import Performance from '../../../libs/Performance';
import * as Welcome from '../../../libs/actions/Welcome';
import styles from '../../../../styles/styles';
import SidebarLinks from '../SidebarLinks';
import PopoverMenu from '../../../../components/PopoverMenu';
import FAB from '../../../../components/FAB';
import ScreenWrapper from '../../../../components/ScreenWrapper';
import Navigation from '../../../../libs/Navigation/Navigation';
import ROUTES from '../../../../ROUTES';
import Timing from '../../../../libs/actions/Timing';
import CONST from '../../../../CONST';
import * as Expensicons from '../../../../components/Icon/Expensicons';
import Permissions from '../../../../libs/Permissions';
import * as Policy from '../../../../libs/actions/Policy';
import Performance from '../../../../libs/Performance';
import * as Welcome from '../../../../libs/actions/Welcome';
import {sidebarPropTypes, sidebarDefaultProps} from './sidebarPropTypes';

const propTypes = {
/* Beta features list */
betas: PropTypes.arrayOf(PropTypes.string).isRequired,

/* Is workspace is being created by the user? */
isCreatingWorkspace: PropTypes.bool,
/* Callback function when the menu is shown */
onShowCreateMenu: PropTypes.func,

...windowDimensionsPropTypes,
/* Callback function before the menu is hidden */
onHideCreateMenu: PropTypes.func,

...withLocalizePropTypes,
...sidebarPropTypes,
};
const defaultProps = {
isCreatingWorkspace: false,
onHideCreateMenu: () => {},
onShowCreateMenu: () => {},
...sidebarDefaultProps,
};

class SidebarScreen extends Component {
class BaseSidebarScreen extends Component {
constructor(props) {
super(props);

Expand Down Expand Up @@ -68,6 +64,7 @@ class SidebarScreen extends Component {
this.setState({
isCreateMenuActive: true,
});
this.props.onShowCreateMenu();
}

/**
Expand All @@ -83,6 +80,7 @@ class SidebarScreen extends Component {
* Selecting an item on CreateMenu or closing it by clicking outside of the modal component
*/
hideCreateMenu() {
this.props.onHideCreateMenu();
this.setState({
isCreateMenuActive: false,
});
Expand Down Expand Up @@ -184,22 +182,7 @@ class SidebarScreen extends Component {
}
}

SidebarScreen.propTypes = propTypes;
SidebarScreen.defaultProps = defaultProps;

export default compose(
withNavigation,
withLocalize,
withWindowDimensions,
withOnyx({
allPolicies: {
key: ONYXKEYS.COLLECTION.POLICY,
},
betas: {
key: ONYXKEYS.BETAS,
},
isCreatingWorkspace: {
key: ONYXKEYS.IS_CREATING_WORKSPACE,
},
}),
)(SidebarScreen);
BaseSidebarScreen.propTypes = propTypes;
BaseSidebarScreen.defaultProps = defaultProps;

export default BaseSidebarScreen;
57 changes: 57 additions & 0 deletions src/pages/home/sidebar/SidebarScreen/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import React from 'react';
import {withNavigation} from '@react-navigation/compat';
import {withOnyx} from 'react-native-onyx';
import compose from '../../../../libs/compose';
import withWindowDimensions from '../../../../components/withWindowDimensions';
import withLocalize from '../../../../components/withLocalize';
import ONYXKEYS from '../../../../ONYXKEYS';
import {sidebarPropTypes, sidebarDefaultProps} from './sidebarPropTypes';
import BaseSidebarScreen from './BaseSidebarScreen';

const SidebarScreen = (props) => {
let baseSidebarScreen = null;

/**
* Method create event listener
*/
const createDragoverListener = () => {
document.addEventListener('dragover', baseSidebarScreen.hideCreateMenu);
};

/**
* Method remove event listener.
*/
const removeDragoverListener = () => {
document.removeEventListener('dragover', baseSidebarScreen.hideCreateMenu);
};
return (
<BaseSidebarScreen
ref={el => baseSidebarScreen = el}
onShowCreateMenu={createDragoverListener}
onHideCreateMenu={removeDragoverListener}
// eslint-disable-next-line react/jsx-props-no-spreading
{...props}
/>
);
};

SidebarScreen.propTypes = sidebarPropTypes;
SidebarScreen.defaultProps = sidebarDefaultProps;
SidebarScreen.displayName = 'SidebarScreen';
Luke9389 marked this conversation as resolved.
Show resolved Hide resolved

export default compose(
withNavigation,
withLocalize,
withWindowDimensions,
withOnyx({
allPolicies: {
key: ONYXKEYS.COLLECTION.POLICY,
},
betas: {
key: ONYXKEYS.BETAS,
},
isCreatingWorkspace: {
key: ONYXKEYS.IS_CREATING_WORKSPACE,
},
}),
)(SidebarScreen);
Luke9389 marked this conversation as resolved.
Show resolved Hide resolved
33 changes: 33 additions & 0 deletions src/pages/home/sidebar/SidebarScreen/index.native.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import React from 'react';
import {withNavigation} from '@react-navigation/compat';
import {withOnyx} from 'react-native-onyx';
import compose from '../../../../libs/compose';
import withWindowDimensions from '../../../../components/withWindowDimensions';
import withLocalize from '../../../../components/withLocalize';
import ONYXKEYS from '../../../../ONYXKEYS';
import {sidebarPropTypes, sidebarDefaultProps} from './sidebarPropTypes';
import BaseSidebarScreen from './BaseSidebarScreen';

// eslint-disable-next-line react/jsx-props-no-spreading
const SidebarScreen = props => <BaseSidebarScreen {...props} />;

SidebarScreen.propTypes = sidebarPropTypes;
SidebarScreen.defaultProps = sidebarDefaultProps;
SidebarScreen.displayName = 'SidebarScreen';
Luke9389 marked this conversation as resolved.
Show resolved Hide resolved

export default compose(
withNavigation,
withLocalize,
withWindowDimensions,
withOnyx({
allPolicies: {
key: ONYXKEYS.COLLECTION.POLICY,
},
betas: {
key: ONYXKEYS.BETAS,
},
isCreatingWorkspace: {
key: ONYXKEYS.IS_CREATING_WORKSPACE,
},
}),
)(SidebarScreen);
28 changes: 28 additions & 0 deletions src/pages/home/sidebar/SidebarScreen/sidebarPropTypes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import PropTypes from 'prop-types';
import {windowDimensionsPropTypes} from '../../../../components/withWindowDimensions';
import {withLocalizePropTypes} from '../../../../components/withLocalize';

const sidebarPropTypes = {

/** The list of policies the user has access to. */
allPolicies: PropTypes.shape({
/** The policy name */
name: PropTypes.string,
}).isRequired,

/* Beta features list */
betas: PropTypes.arrayOf(PropTypes.string).isRequired,
Luke9389 marked this conversation as resolved.
Show resolved Hide resolved

/* Is workspace is being created by the user? */
isCreatingWorkspace: PropTypes.bool,

...windowDimensionsPropTypes,

...withLocalizePropTypes,
};

const sidebarDefaultProps = {
isCreatingWorkspace: false,
};

export {sidebarPropTypes, sidebarDefaultProps};