From 2eda7b9255fceff9a5c86fa8935cb879b187e9b4 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Thu, 18 Mar 2021 16:06:09 -0700 Subject: [PATCH 01/39] initial commit --- src/pages/home/HeaderView.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index bd2a0fcf4fac..40f8ceff541b 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -71,6 +71,12 @@ const HeaderView = props => (
+ {}} + style={[styles.touchableButtonImage, styles.mr0]} + > + '📞' + togglePinnedState(props.report)} style={[styles.touchableButtonImage, styles.mr0]} From d495521ae714824fbf226416ab8fee61e7b984fb Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Fri, 19 Mar 2021 10:18:16 -0700 Subject: [PATCH 02/39] turned reportscreeen into a class component --- src/pages/home/ReportScreen.js | 59 +++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index 4cc437036309..0f44c76b7ffb 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -5,6 +5,7 @@ import {View} from 'react-native'; import styles from '../../styles/styles'; import ReportView from './report/ReportView'; import ScreenWrapper from '../../components/ScreenWrapper'; +import Popover from '../../components/Popover'; import HeaderView from './HeaderView'; import Navigation from '../../libs/Navigation/Navigation'; import ROUTES from '../../ROUTES'; @@ -19,34 +20,40 @@ const defaultProps = { currentlyViewedReportID: 0, }; -const ReportScreen = (props) => { - const activeReportID = parseInt(props.currentlyViewedReportID, 10); - if (!activeReportID) { - return null; +class ReportScreen extends React.Component { + constructor(props) { + this.state = { + isVideoChatModalActive: false + } } + + render() { + const activeReportID = parseInt(props.currentlyViewedReportID, 10); + if (!activeReportID) { + return null; + } + return ( + + Navigation.navigate(ROUTES.HOME)} + /> + + + + + ) + } +} - return ( - - Navigation.navigate(ROUTES.HOME)} - /> - - - - - ); -}; - -ReportScreen.displayName = 'ReportScreen'; ReportScreen.propTypes = propTypes; ReportScreen.defaultProps = defaultProps; export default withOnyx({ From a1c657ea0dce54d122fbda984a22c0561b05b97b Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Fri, 19 Mar 2021 12:40:48 -0700 Subject: [PATCH 03/39] added a button --- src/pages/home/HeaderView.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 40f8ceff541b..5957de320b9d 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -72,10 +72,10 @@ const HeaderView = props => (
{}} + onPress={() => {console.log('bang')}} style={[styles.touchableButtonImage, styles.mr0]} > - '📞' + togglePinnedState(props.report)} From 917ca422faa433f746b9a7cfa4fed0ca1df21737 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Fri, 19 Mar 2021 12:59:35 -0700 Subject: [PATCH 04/39] cleaned up --- src/pages/home/ReportScreen.js | 47 +++++++++++++++++----------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index 0f44c76b7ffb..19ba6a27fc40 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -22,35 +22,36 @@ const defaultProps = { class ReportScreen extends React.Component { constructor(props) { + super(props); this.state = { - isVideoChatModalActive: false - } + isVideoChatModalActive: false, + }; } - + render() { - const activeReportID = parseInt(props.currentlyViewedReportID, 10); + const activeReportID = parseInt(this.props.currentlyViewedReportID, 10); if (!activeReportID) { - return null; - } + return null; + } return ( - Navigation.navigate(ROUTES.HOME)} - /> - - - - - ) + style={[ + styles.appContent, + styles.flex1, + styles.flexColumn, + ]} + > + Navigation.navigate(ROUTES.HOME)} + /> + + + + + ); } } From e506b41a83edafb790f81b180315863c8ec6577a Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Fri, 19 Mar 2021 13:15:31 -0700 Subject: [PATCH 05/39] scaffold popover in report screen --- src/pages/home/ReportScreen.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index 19ba6a27fc40..e60768fb7040 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -23,11 +23,19 @@ const defaultProps = { class ReportScreen extends React.Component { constructor(props) { super(props); + this.toggleVideoChatMenu = this.toggleVideoChatMenu.bind(this); + this.state = { - isVideoChatModalActive: false, + isVideoChatMenuActive: false, }; } + toggleVideoChatMenu() { + this.setState(state => ({ + isVideoChatMenuActive: !state.isVideoChatMenuActive, + })); + } + render() { const activeReportID = parseInt(this.props.currentlyViewedReportID, 10); if (!activeReportID) { @@ -45,6 +53,17 @@ class ReportScreen extends React.Component { reportID={activeReportID} onNavigationMenuButtonClicked={() => Navigation.navigate(ROUTES.HOME)} /> + { + this.onModalHide(); + this.resetOnModalHide(); + }} + anchorPosition={styles.videoChatMenuPosition} + > + {/* Here is where we'd map the data for each menu item. */} + Date: Fri, 19 Mar 2021 13:17:40 -0700 Subject: [PATCH 06/39] clean up --- src/pages/home/HeaderView.js | 2 +- src/pages/home/ReportScreen.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 5957de320b9d..02aec9b3cd16 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -72,7 +72,7 @@ const HeaderView = props => (
{console.log('bang')}} + onPress={() => { /* Open the video chat menu */ }} style={[styles.touchableButtonImage, styles.mr0]} > diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index e60768fb7040..e5804ce87907 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -30,7 +30,7 @@ class ReportScreen extends React.Component { }; } - toggleVideoChatMenu() { + toggleVideoChatMenu() { this.setState(state => ({ isVideoChatMenuActive: !state.isVideoChatMenuActive, })); From 2266752ee9cb1c5b2f50ee29e25cb51b376edecf Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Fri, 19 Mar 2021 16:33:52 -0700 Subject: [PATCH 07/39] set up a component for the menu --- src/components/VideoChatMenu.js | 70 +++++++++++++++++++++++++++++++++ src/pages/home/HeaderView.js | 17 ++++---- src/pages/home/ReportScreen.js | 15 +++---- 3 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 src/components/VideoChatMenu.js diff --git a/src/components/VideoChatMenu.js b/src/components/VideoChatMenu.js new file mode 100644 index 000000000000..154dce89d8a9 --- /dev/null +++ b/src/components/VideoChatMenu.js @@ -0,0 +1,70 @@ +import React, {Component} from 'react'; +import Popover from "./Popover"; +import PropTypes from 'prop-types'; +import {ChatBubble, Users} from './Icon/Expensicons'; +import styles from '../styles/styles'; +import withWindowDimensions, {windowDimensionsPropTypes} from "./withWindowDimensions"; +import MenuItem from './MenuItem'; + +const propTypes = { + // State that determines whether to display the create menu or not + isVisible: PropTypes.bool.isRequired, + + // + onClose: PropTypes.func.isRequired, + + ...windowDimensionsPropTypes, +}; + +class VideoChatMenu extends Component { + constructor(props) { + super(props) + + + } + + render() { + const menuItemData = [ + { + icon: ChatBubble, + text: 'New Chat', + onPress: () => console.log('new chat'), + }, + { + icon: Users, + text: 'New Group', + onPress: () => console.log('new group'), + }, + ].map(item => ({ + ...item, + onPress: () => { + this.props.onItemSelected(); + item.onPress(); + }, + })); + return ( + { + this.onModalHide(); + this.resetOnModalHide(); + }} + anchorPosition={styles.createMenuPosition} + > + {menuItemData.map(({icon, text, onPress}) => ( + + ))} + + ) + } +} + +VideoChatMenu.propTypes = propTypes; +VideoChatMenu.displayName = 'VideoChatMenu'; +export default withWindowDimensions(VideoChatMenu); \ No newline at end of file diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 5187ef80f1c3..f78efea14fee 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -7,7 +7,7 @@ import styles from '../../styles/styles'; import ONYXKEYS from '../../ONYXKEYS'; import themeColors from '../../styles/themes/default'; import Icon from '../../components/Icon'; -import {BackArrow, Pin} from '../../components/Icon/Expensicons'; +import {BackArrow, Pin, Trashcan} from '../../components/Icon/Expensicons'; import compose from '../../libs/compose'; import {togglePinnedState} from '../../libs/actions/Report'; import withWindowDimensions, {windowDimensionsPropTypes} from '../../components/withWindowDimensions'; @@ -23,6 +23,9 @@ const propTypes = { // Toggles the navigationMenu open and closed onNavigationMenuButtonClicked: PropTypes.func.isRequired, + // Toggles the videoChatMenu open and closed + onVideoChatMenuButtonClicked: PropTypes.func.isRequired, + /* Onyx Props */ // The report currently being looked at report: PropTypes.shape({ @@ -77,12 +80,6 @@ const HeaderView = (props) => { styles.justifyContentBetween, ]} > - { /* Open the video chat menu */ }} - style={[styles.touchableButtonImage, styles.mr0]} - > - - togglePinnedState(props.report)} style={[styles.touchableButtonImage, styles.mr0]} @@ -98,6 +95,12 @@ const HeaderView = (props) => { /> + props.onVideoChatMenuButtonClicked} + style={[styles.touchableButtonImage, styles.mr0]} + > + + togglePinnedState(props.report)} style={[styles.touchableButtonImage, styles.mr0]} diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index e5804ce87907..545d3baa3568 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -5,11 +5,11 @@ import {View} from 'react-native'; import styles from '../../styles/styles'; import ReportView from './report/ReportView'; import ScreenWrapper from '../../components/ScreenWrapper'; -import Popover from '../../components/Popover'; import HeaderView from './HeaderView'; import Navigation from '../../libs/Navigation/Navigation'; import ROUTES from '../../ROUTES'; import ONYXKEYS from '../../ONYXKEYS'; +import VideoChatMenu from '../../components/VideoChatMenu'; const propTypes = { // id of the most recently viewed report @@ -52,18 +52,13 @@ class ReportScreen extends React.Component { Navigation.navigate(ROUTES.HOME)} + onVideoChatMenuButtonClicked={this.toggleVideoChatMenu} /> - { - this.onModalHide(); - this.resetOnModalHide(); - }} - anchorPosition={styles.videoChatMenuPosition} - > - {/* Here is where we'd map the data for each menu item. */} - + onItemSelected={this.toggleVideoChatMenu} + /> Date: Mon, 22 Mar 2021 14:57:49 -0700 Subject: [PATCH 08/39] added zoom and meet links and svgs --- assets/images/Zoom - Blue.svg | 22 ++++++++++++++++++++++ assets/images/google-meet.svg | 8 ++++++++ src/CONST.js | 2 ++ 3 files changed, 32 insertions(+) create mode 100644 assets/images/Zoom - Blue.svg create mode 100644 assets/images/google-meet.svg diff --git a/assets/images/Zoom - Blue.svg b/assets/images/Zoom - Blue.svg new file mode 100644 index 000000000000..f1eceec6134f --- /dev/null +++ b/assets/images/Zoom - Blue.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/assets/images/google-meet.svg b/assets/images/google-meet.svg new file mode 100644 index 000000000000..138a11859321 --- /dev/null +++ b/assets/images/google-meet.svg @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/src/CONST.js b/src/CONST.js index 779a6edd1a6f..c09d29e2f1d2 100644 --- a/src/CONST.js +++ b/src/CONST.js @@ -11,6 +11,8 @@ const CONST = { PRESSED: 'pressed', }, CLOUDFRONT_URL, + NEW_ZOOM_MEETING_URL: 'https://zoom.us/start/videomeeting', + NEW_GOOGLE_MEET_MEETING_URL: 'https://meet.google.com/new', PDF_VIEWER_URL: '/pdf/web/viewer.html', EXPENSIFY_ICON_URL: `${CLOUDFRONT_URL}/images/favicon-2019.png`, UPWORK_URL: 'https://www.upwork.com/ab/jobs/search/?q=Expensify%20React%20Native&user_location_match=2', From 2a783c92d7aa878f3b97be354f879694862ee78a Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Mon, 22 Mar 2021 15:00:38 -0700 Subject: [PATCH 09/39] made the menu --- src/components/VideoChatMenu.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/components/VideoChatMenu.js b/src/components/VideoChatMenu.js index 154dce89d8a9..c9b30142eee5 100644 --- a/src/components/VideoChatMenu.js +++ b/src/components/VideoChatMenu.js @@ -1,10 +1,12 @@ import React, {Component} from 'react'; import Popover from "./Popover"; import PropTypes from 'prop-types'; -import {ChatBubble, Users} from './Icon/Expensicons'; -import styles from '../styles/styles'; import withWindowDimensions, {windowDimensionsPropTypes} from "./withWindowDimensions"; import MenuItem from './MenuItem'; +import openURLInNewTab from '../libs/openURLInNewTab'; +import ZoomIcon from '../../assets/images/Zoom - Blue.svg'; +import GoogleMeetIcon from '../../assets/images/google-meet.svg' +import CONST from '../CONST'; const propTypes = { // State that determines whether to display the create menu or not @@ -19,21 +21,19 @@ const propTypes = { class VideoChatMenu extends Component { constructor(props) { super(props) - - } render() { const menuItemData = [ { - icon: ChatBubble, - text: 'New Chat', - onPress: () => console.log('new chat'), + icon: ZoomIcon, + text: 'Zoom', + onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), }, { - icon: Users, - text: 'New Group', - onPress: () => console.log('new group'), + icon: GoogleMeetIcon, + text: 'Google Meet', + onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), }, ].map(item => ({ ...item, @@ -46,11 +46,10 @@ class VideoChatMenu extends Component { { - this.onModalHide(); - this.resetOnModalHide(); + anchorPosition={{ + left: this.props.windowWidth - 250, + top: 50 }} - anchorPosition={styles.createMenuPosition} > {menuItemData.map(({icon, text, onPress}) => ( Date: Mon, 22 Mar 2021 15:00:59 -0700 Subject: [PATCH 10/39] loosened Icon prop conditions to allow for non-expensify content --- src/components/Icon/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Icon/index.js b/src/components/Icon/index.js index 34e1b6c410fd..e1bad2f112ec 100644 --- a/src/components/Icon/index.js +++ b/src/components/Icon/index.js @@ -7,7 +7,10 @@ import * as Expensicons from './Expensicons'; const propTypes = { // The asset to render. - src: PropTypes.oneOf(_.values(Expensicons)).isRequired, + src: PropTypes.oneOfType([ + PropTypes.oneOf(_.values(Expensicons)), + PropTypes.func, + ]).isRequired, // The width of the icon. width: PropTypes.number, From 48d4b1da8733b22f9c7e346ffa4e66b4e51c1aa5 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Mon, 22 Mar 2021 15:01:22 -0700 Subject: [PATCH 11/39] whoops --- src/pages/home/HeaderView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 84c09b3cb714..7841b402ee51 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -100,7 +100,7 @@ const HeaderView = (props) => { props.onVideoChatMenuButtonClicked} + onPress={() => props.onVideoChatMenuButtonClicked()} style={[styles.touchableButtonImage, styles.mr0]} > From a75f4dfb364d2e3eadc9f7b99e5b6b67b5836f73 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Mon, 22 Mar 2021 15:01:33 -0700 Subject: [PATCH 12/39] added style for video chat menu --- src/styles/styles.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/styles/styles.js b/src/styles/styles.js index 916b12be0b75..57d546af9bf6 100644 --- a/src/styles/styles.js +++ b/src/styles/styles.js @@ -501,6 +501,11 @@ const styles = { color: themeColors.heading, }, + videoChatMenuPosition: { + left: 0, + bottom: 100, + }, + chatLinkRowPressable: { minWidth: 0, textDecorationLine: 'none', From 1707c2f92bff8f642d02ea19b89e55e0b42e521c Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Mon, 22 Mar 2021 15:05:59 -0700 Subject: [PATCH 13/39] took out custom style --- src/styles/styles.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/styles/styles.js b/src/styles/styles.js index 57d546af9bf6..916b12be0b75 100644 --- a/src/styles/styles.js +++ b/src/styles/styles.js @@ -501,11 +501,6 @@ const styles = { color: themeColors.heading, }, - videoChatMenuPosition: { - left: 0, - bottom: 100, - }, - chatLinkRowPressable: { minWidth: 0, textDecorationLine: 'none', From ec774a4d6c21bb7525a4612d37298e582b924054 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Mon, 22 Mar 2021 15:25:58 -0700 Subject: [PATCH 14/39] style - keeping class comp for now --- src/components/VideoChatMenu.js | 18 +++++++++--------- src/pages/home/HeaderView.js | 5 ++++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/components/VideoChatMenu.js b/src/components/VideoChatMenu.js index c9b30142eee5..8bbfa4f575a1 100644 --- a/src/components/VideoChatMenu.js +++ b/src/components/VideoChatMenu.js @@ -1,18 +1,18 @@ import React, {Component} from 'react'; -import Popover from "./Popover"; import PropTypes from 'prop-types'; -import withWindowDimensions, {windowDimensionsPropTypes} from "./withWindowDimensions"; +import Popover from './Popover'; +import withWindowDimensions, {windowDimensionsPropTypes} from './withWindowDimensions'; import MenuItem from './MenuItem'; import openURLInNewTab from '../libs/openURLInNewTab'; import ZoomIcon from '../../assets/images/Zoom - Blue.svg'; -import GoogleMeetIcon from '../../assets/images/google-meet.svg' +import GoogleMeetIcon from '../../assets/images/google-meet.svg'; import CONST from '../CONST'; const propTypes = { // State that determines whether to display the create menu or not isVisible: PropTypes.bool.isRequired, - // + // Callback that determines behavior when menu is closed onClose: PropTypes.func.isRequired, ...windowDimensionsPropTypes, @@ -20,7 +20,7 @@ const propTypes = { class VideoChatMenu extends Component { constructor(props) { - super(props) + super(props); } render() { @@ -48,7 +48,7 @@ class VideoChatMenu extends Component { isVisible={this.props.isVisible} anchorPosition={{ left: this.props.windowWidth - 250, - top: 50 + top: 50, }} > {menuItemData.map(({icon, text, onPress}) => ( @@ -59,11 +59,11 @@ class VideoChatMenu extends Component { onPress={onPress} /> ))} - - ) + + ); } } VideoChatMenu.propTypes = propTypes; VideoChatMenu.displayName = 'VideoChatMenu'; -export default withWindowDimensions(VideoChatMenu); \ No newline at end of file +export default withWindowDimensions(VideoChatMenu); diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 7841b402ee51..373925c9fe05 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -103,7 +103,10 @@ const HeaderView = (props) => { onPress={() => props.onVideoChatMenuButtonClicked()} style={[styles.touchableButtonImage, styles.mr0]} > - + togglePinnedState(props.report)} From 692e9adabc1313c82c49860f7386d0932f9ef678 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Wed, 24 Mar 2021 11:55:48 -0700 Subject: [PATCH 15/39] updated zoom icon --- assets/images/Zoom - Blue.svg | 22 ---------------------- assets/images/zoom-icon.svg | 1 + src/components/VideoChatMenu.js | 2 +- 3 files changed, 2 insertions(+), 23 deletions(-) delete mode 100644 assets/images/Zoom - Blue.svg create mode 100644 assets/images/zoom-icon.svg diff --git a/assets/images/Zoom - Blue.svg b/assets/images/Zoom - Blue.svg deleted file mode 100644 index f1eceec6134f..000000000000 --- a/assets/images/Zoom - Blue.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - diff --git a/assets/images/zoom-icon.svg b/assets/images/zoom-icon.svg new file mode 100644 index 000000000000..6c6ed03cb2f3 --- /dev/null +++ b/assets/images/zoom-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/VideoChatMenu.js b/src/components/VideoChatMenu.js index 8bbfa4f575a1..9fdaedc8cdff 100644 --- a/src/components/VideoChatMenu.js +++ b/src/components/VideoChatMenu.js @@ -4,7 +4,7 @@ import Popover from './Popover'; import withWindowDimensions, {windowDimensionsPropTypes} from './withWindowDimensions'; import MenuItem from './MenuItem'; import openURLInNewTab from '../libs/openURLInNewTab'; -import ZoomIcon from '../../assets/images/Zoom - Blue.svg'; +import ZoomIcon from '../../assets/images/zoom-icon.svg'; import GoogleMeetIcon from '../../assets/images/google-meet.svg'; import CONST from '../CONST'; From ebbdbd8d2a3526c93892d986c7f636474c43de03 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Wed, 24 Mar 2021 12:41:15 -0700 Subject: [PATCH 16/39] refactored and included phone.svg --- assets/images/phone.svg | 8 +++ src/components/Icon/Expensicons.js | 2 + src/components/VideoChatMenu.js | 86 ++++++++++++++---------------- src/pages/home/HeaderView.js | 14 +++-- src/pages/home/ReportScreen.js | 2 +- 5 files changed, 62 insertions(+), 50 deletions(-) create mode 100644 assets/images/phone.svg diff --git a/assets/images/phone.svg b/assets/images/phone.svg new file mode 100644 index 000000000000..a8fcf348b331 --- /dev/null +++ b/assets/images/phone.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/src/components/Icon/Expensicons.js b/src/components/Icon/Expensicons.js index d06bd2620fb0..7f1d237037aa 100644 --- a/src/components/Icon/Expensicons.js +++ b/src/components/Icon/Expensicons.js @@ -7,6 +7,7 @@ import MagnifyingGlass from '../../../assets/images/magnifyingglass.svg'; import Mail from '../../../assets/images/mail.svg'; import Paperclip from '../../../assets/images/paperclip.svg'; import Pencil from '../../../assets/images/pencil.svg'; +import Phone from '../../../assets/images/phone.svg'; import Pin from '../../../assets/images/pin.svg'; import PinCircle from '../../../assets/images/pin-circle.svg'; import Plus from '../../../assets/images/plus.svg'; @@ -35,6 +36,7 @@ export { Mail, Paperclip, Pencil, + Phone, Pin, PinCircle, Plus, diff --git a/src/components/VideoChatMenu.js b/src/components/VideoChatMenu.js index 9fdaedc8cdff..1e863273506d 100644 --- a/src/components/VideoChatMenu.js +++ b/src/components/VideoChatMenu.js @@ -1,4 +1,4 @@ -import React, {Component} from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import Popover from './Popover'; import withWindowDimensions, {windowDimensionsPropTypes} from './withWindowDimensions'; @@ -18,51 +18,47 @@ const propTypes = { ...windowDimensionsPropTypes, }; -class VideoChatMenu extends Component { - constructor(props) { - super(props); - } +const VideoChatMenu = (props) => { + const menuItemData = [ + { + icon: ZoomIcon, + text: 'Zoom', + onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), + }, + { + icon: GoogleMeetIcon, + text: 'Google Meet', + onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), + }, + ].map(item => ({ + ...item, + onPress: () => { + item.onPress(); + props.onClose(); + }, + })); + + return ( + + {menuItemData.map(({icon, text, onPress}) => ( + + ))} + + ); +}; - render() { - const menuItemData = [ - { - icon: ZoomIcon, - text: 'Zoom', - onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), - }, - { - icon: GoogleMeetIcon, - text: 'Google Meet', - onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), - }, - ].map(item => ({ - ...item, - onPress: () => { - this.props.onItemSelected(); - item.onPress(); - }, - })); - return ( - - {menuItemData.map(({icon, text, onPress}) => ( - - ))} - - ); - } -} VideoChatMenu.propTypes = propTypes; VideoChatMenu.displayName = 'VideoChatMenu'; diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 5f521a97033e..68f011b45be7 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -7,7 +7,7 @@ import styles from '../../styles/styles'; import ONYXKEYS from '../../ONYXKEYS'; import themeColors from '../../styles/themes/default'; import Icon from '../../components/Icon'; -import {BackArrow, Pin, Trashcan} from '../../components/Icon/Expensicons'; +import {BackArrow, Pin, Phone} from '../../components/Icon/Expensicons'; import compose from '../../libs/compose'; import {togglePinnedState} from '../../libs/actions/Report'; import withWindowDimensions, {windowDimensionsPropTypes} from '../../components/withWindowDimensions'; @@ -26,6 +26,9 @@ const propTypes = { // Toggles the videoChatMenu open and closed onVideoChatMenuButtonClicked: PropTypes.func.isRequired, + // Indicates whether the video chat menu is active + isVideoChatMenuActive: PropTypes.bool.isRequired, + /* Onyx Props */ // The report currently being looked at report: PropTypes.shape({ @@ -104,15 +107,18 @@ const HeaderView = (props) => { style={[styles.touchableButtonImage, styles.mr0]} > togglePinnedState(props.report)} style={[styles.touchableButtonImage, styles.mr0]} > - + diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index 545d3baa3568..f762efba99d2 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -53,11 +53,11 @@ class ReportScreen extends React.Component { reportID={activeReportID} onNavigationMenuButtonClicked={() => Navigation.navigate(ROUTES.HOME)} onVideoChatMenuButtonClicked={this.toggleVideoChatMenu} + isVideoChatMenuActive={this.state.isVideoChatMenuActive} /> Date: Fri, 26 Mar 2021 13:57:01 -0700 Subject: [PATCH 17/39] refactored headerview to class component --- src/pages/home/HeaderView.js | 178 +++++++++++++++++++++-------------- 1 file changed, 108 insertions(+), 70 deletions(-) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 68f011b45be7..b02ea4139387 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, {Component} from 'react'; import {View, Pressable} from 'react-native'; import PropTypes from 'prop-types'; import {withOnyx} from 'react-native-onyx'; @@ -18,17 +18,12 @@ import {getReportParticipantsTitle} from '../../libs/reportUtils'; import OptionRowTitle from './sidebar/OptionRowTitle'; import {getPersonalDetailsForLogins} from '../../libs/OptionsListUtils'; import {participantPropTypes} from './sidebar/optionPropTypes'; +import VideoChatMenu from '../../components/VideoChatMenu'; const propTypes = { // Toggles the navigationMenu open and closed onNavigationMenuButtonClicked: PropTypes.func.isRequired, - // Toggles the videoChatMenu open and closed - onVideoChatMenuButtonClicked: PropTypes.func.isRequired, - - // Indicates whether the video chat menu is active - isVideoChatMenuActive: PropTypes.bool.isRequired, - /* Onyx Props */ // The report currently being looked at report: PropTypes.shape({ @@ -55,78 +50,121 @@ const defaultProps = { report: null, }; -const HeaderView = (props) => { - const participants = lodashGet(props.report, 'participants', []); - const reportOption = { - text: lodashGet(props.report, 'reportName', ''), - tooltipText: getReportParticipantsTitle(participants), - participantsList: getPersonalDetailsForLogins(participants, props.personalDetails), - }; - - return ( - - - {props.isSmallScreenWidth && ( - - - - )} - {props.report && props.report.reportName && ( - +class HeaderView extends Component { + constructor(props) { + super(props); + + this.participants = lodashGet(this.props.report, 'participants', []); + this.reportOption = { + text: lodashGet(this.props.report, 'reportName', ''), + tooltipText: getReportParticipantsTitle(this.participants), + participantsList: getPersonalDetailsForLogins(this.participants, this.props.personalDetails), + }; + this.toggleVideoChatMenu = this.toggleVideoChatMenu.bind(this); + this.measureVideoChatIconPosition = this.measureVideoChatIconPosition.bind(this); + this.videoChatIconWrapper = null; + + this.state = { + isVideoChatMenuActive: false, + videoChatIconPosition: {x: 0, y: 0}, + }; + } + + toggleVideoChatMenu() { + this.setState(prevState => ({ + isVideoChatMenuActive: !prevState.isVideoChatMenuActive, + })); + } + + measureVideoChatIconPosition() { + if (this.videoChatIconWrapper) { + this.videoChatIconWrapper.measureInWindow((x, y) => this.setState({ + videoChatIconPosition: {x, y}, + })); + } + } + + render() { + return ( + + + {this.props.isSmallScreenWidth && ( { - if (participants.length === 1) { - Navigation.navigate(ROUTES.getDetailsRoute(participants[0])); - } - }} - style={[styles.flexRow, styles.alignItemsCenter, styles.flex1]} + onPress={this.props.onNavigationMenuButtonClicked} + style={[styles.LHNToggle]} > - - - - + - + )} + {this.props.report && this.props.report.reportName && ( + props.onVideoChatMenuButtonClicked()} - style={[styles.touchableButtonImage, styles.mr0]} + onPress={() => { + if (this.participants.length === 1) { + Navigation.navigate(ROUTES.getDetailsRoute(this.participants[0])); + } + }} + style={[styles.flexRow, styles.alignItemsCenter, styles.flex1]} > - + + + + - togglePinnedState(props.report)} - style={[styles.touchableButtonImage, styles.mr0]} - > - + this.videoChatIconWrapper = el} + onLayout={this.measureVideoChatIconPosition} + > + { + this.toggleVideoChatMenu(); + }} + style={[styles.touchableButtonImage, styles.mr0]} + > + + + + togglePinnedState(this.props.report)} + style={[styles.touchableButtonImage, styles.mr0]} + > + + + - + - - )} + )} + - - ); -}; + ); + } +} + HeaderView.propTypes = propTypes; HeaderView.displayName = 'HeaderView'; HeaderView.defaultProps = defaultProps; From 83a34e8dbc1809e3426f58519ee8196e0f39bb4c Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Fri, 26 Mar 2021 13:57:55 -0700 Subject: [PATCH 18/39] made video chat menu anchor to the ui button --- src/components/VideoChatMenu.js | 16 +++++--- src/pages/home/ReportScreen.js | 68 +++++++++++---------------------- 2 files changed, 33 insertions(+), 51 deletions(-) diff --git a/src/components/VideoChatMenu.js b/src/components/VideoChatMenu.js index 1e863273506d..38f0ba54dd97 100644 --- a/src/components/VideoChatMenu.js +++ b/src/components/VideoChatMenu.js @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import Popover from './Popover'; -import withWindowDimensions, {windowDimensionsPropTypes} from './withWindowDimensions'; import MenuItem from './MenuItem'; import openURLInNewTab from '../libs/openURLInNewTab'; import ZoomIcon from '../../assets/images/zoom-icon.svg'; @@ -15,7 +14,14 @@ const propTypes = { // Callback that determines behavior when menu is closed onClose: PropTypes.func.isRequired, - ...windowDimensionsPropTypes, + // Anchor position of the menu + anchorPosition: PropTypes.shape({ + // x position of the anchor icon + x: PropTypes.number, + + // y position of the anchor icon + y: PropTypes.number, + }).isRequired, }; const VideoChatMenu = (props) => { @@ -43,8 +49,8 @@ const VideoChatMenu = (props) => { onClose={props.onClose} isVisible={props.isVisible} anchorPosition={{ - left: props.windowWidth - 250, - top: 50, + left: props.anchorPosition.x - 150, + top: props.anchorPosition.y + 40, }} > {menuItemData.map(({icon, text, onPress}) => ( @@ -62,4 +68,4 @@ const VideoChatMenu = (props) => { VideoChatMenu.propTypes = propTypes; VideoChatMenu.displayName = 'VideoChatMenu'; -export default withWindowDimensions(VideoChatMenu); +export default VideoChatMenu; diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index f762efba99d2..6a8f3b0d8cf2 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -9,7 +9,6 @@ import HeaderView from './HeaderView'; import Navigation from '../../libs/Navigation/Navigation'; import ROUTES from '../../ROUTES'; import ONYXKEYS from '../../ONYXKEYS'; -import VideoChatMenu from '../../components/VideoChatMenu'; const propTypes = { // id of the most recently viewed report @@ -20,54 +19,31 @@ const defaultProps = { currentlyViewedReportID: 0, }; -class ReportScreen extends React.Component { - constructor(props) { - super(props); - this.toggleVideoChatMenu = this.toggleVideoChatMenu.bind(this); - - this.state = { - isVideoChatMenuActive: false, - }; - } - - toggleVideoChatMenu() { - this.setState(state => ({ - isVideoChatMenuActive: !state.isVideoChatMenuActive, - })); +const ReportScreen = (props) => { + const activeReportID = parseInt(props.currentlyViewedReportID, 10); + if (!activeReportID) { + return null; } - - render() { - const activeReportID = parseInt(this.props.currentlyViewedReportID, 10); - if (!activeReportID) { - return null; - } - return ( - - + Navigation.navigate(ROUTES.HOME)} + /> + + Navigation.navigate(ROUTES.HOME)} - onVideoChatMenuButtonClicked={this.toggleVideoChatMenu} - isVideoChatMenuActive={this.state.isVideoChatMenuActive} /> - - - - - - ); - } -} + + + ); +}; ReportScreen.propTypes = propTypes; ReportScreen.defaultProps = defaultProps; From 1570d72555683f0fa826966732a28243871b1748 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Fri, 26 Mar 2021 15:57:09 -0700 Subject: [PATCH 19/39] fixed report screen stuff --- src/pages/home/ReportScreen.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index 6a8f3b0d8cf2..4cc437036309 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -24,6 +24,7 @@ const ReportScreen = (props) => { if (!activeReportID) { return null; } + return ( { ); }; +ReportScreen.displayName = 'ReportScreen'; ReportScreen.propTypes = propTypes; ReportScreen.defaultProps = defaultProps; export default withOnyx({ From 5d53d182f402e8e87586705052a21abe54073d60 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Tue, 30 Mar 2021 14:28:55 -0700 Subject: [PATCH 20/39] added additional style prop --- src/components/MenuItem.js | 7 +++++++ src/components/VideoChatMenu.js | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/components/MenuItem.js b/src/components/MenuItem.js index a4a68e1e3c51..46c326197106 100644 --- a/src/components/MenuItem.js +++ b/src/components/MenuItem.js @@ -10,6 +10,10 @@ import Icon from './Icon'; import {ArrowRight} from './Icon/Expensicons'; const propTypes = { + // Any additional styles to apply + // eslint-disable-next-line react/forbid-prop-types + style: PropTypes.any, + // Function to fire when component is pressed onPress: PropTypes.func.isRequired, @@ -25,6 +29,7 @@ const propTypes = { const defaultProps = { shouldShowRightArrow: false, + style: {}, }; const MenuItem = ({ @@ -32,12 +37,14 @@ const MenuItem = ({ icon, title, shouldShowRightArrow, + style, }) => ( ([ styles.createMenuItem, hovered && {backgroundColor: themeColors.buttonHoveredBG}, + ...style, ])} > diff --git a/src/components/VideoChatMenu.js b/src/components/VideoChatMenu.js index 38f0ba54dd97..ccadf44b12f4 100644 --- a/src/components/VideoChatMenu.js +++ b/src/components/VideoChatMenu.js @@ -6,6 +6,7 @@ import openURLInNewTab from '../libs/openURLInNewTab'; import ZoomIcon from '../../assets/images/zoom-icon.svg'; import GoogleMeetIcon from '../../assets/images/google-meet.svg'; import CONST from '../CONST'; +import styles from '../styles/styles'; const propTypes = { // State that determines whether to display the create menu or not @@ -52,9 +53,12 @@ const VideoChatMenu = (props) => { left: props.anchorPosition.x - 150, top: props.anchorPosition.y + 40, }} + animationIn="fadeInDown" + animationOut="fadeOutDown" > {menuItemData.map(({icon, text, onPress}) => ( Date: Tue, 30 Mar 2021 14:29:09 -0700 Subject: [PATCH 21/39] added animationOut prop for popovers --- src/components/Modal/BaseModal.js | 2 +- src/components/Popover/index.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Modal/BaseModal.js b/src/components/Modal/BaseModal.js index 51884d6fdd6b..2431eae6fd70 100644 --- a/src/components/Modal/BaseModal.js +++ b/src/components/Modal/BaseModal.js @@ -86,7 +86,7 @@ class BaseModal extends PureComponent { deviceHeight={this.props.windowHeight} deviceWidth={this.props.windowWidth} animationIn={this.props.animationIn || animationIn} - animationOut={animationOut} + animationOut={this.props.animationOut || animationOut} useNativeDriver={this.props.useNativeDriver} statusBarTranslucent > diff --git a/src/components/Popover/index.js b/src/components/Popover/index.js index 36f6fd80d551..31d819346de3 100644 --- a/src/components/Popover/index.js +++ b/src/components/Popover/index.js @@ -15,6 +15,7 @@ const Popover = props => ( // eslint-disable-next-line react/jsx-props-no-spreading {...props} animationIn={props.isSmallScreenWidth ? undefined : props.animationIn} + animationOut={props.isSmallScreenWidth ? undefined : props.animationOut} /> ); From 6331bd00a4505432875ee7d4bad02a0fb0266c85 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Tue, 30 Mar 2021 18:13:45 -0700 Subject: [PATCH 22/39] renamed the video chat component and included the button in it --- src/components/VideoChatButtonAndMenu.js | 115 +++++++++++++++++++++++ src/components/VideoChatMenu.js | 75 --------------- 2 files changed, 115 insertions(+), 75 deletions(-) create mode 100644 src/components/VideoChatButtonAndMenu.js delete mode 100644 src/components/VideoChatMenu.js diff --git a/src/components/VideoChatButtonAndMenu.js b/src/components/VideoChatButtonAndMenu.js new file mode 100644 index 000000000000..aac36f6ee342 --- /dev/null +++ b/src/components/VideoChatButtonAndMenu.js @@ -0,0 +1,115 @@ +import React, {Component} from 'react'; +import {View, Pressable} from 'react-native'; +import Icon from './Icon'; +import {Phone} from './Icon/Expensicons'; +import Popover from './Popover'; +import MenuItem from './MenuItem'; +import openURLInNewTab from '../libs/openURLInNewTab'; +import ZoomIcon from '../../assets/images/zoom-icon.svg'; +import GoogleMeetIcon from '../../assets/images/google-meet.svg'; +import CONST from '../CONST'; +import styles from '../styles/styles'; +import themeColors from '../styles/themes/default'; +import withWindowDimensions from './withWindowDimensions'; + +class VideoChatButtonAndMenu extends Component { + constructor(props) { + super(props); + + this.toggleVideoChatMenu = this.toggleVideoChatMenu.bind(this); + this.measureVideoChatIconPosition = this.measureVideoChatIconPosition.bind(this); + this.videoChatIconWrapper = null; + + this.state = { + isVideoChatMenuActive: false, + videoChatIconPosition: {x: 0, y: 0}, + } + } + + /** + * + */ + toggleVideoChatMenu() { + this.setState(prevState => ({ + isVideoChatMenuActive: !prevState.isVideoChatMenuActive, + })); + } + + /** + * + */ + measureVideoChatIconPosition() { + if (this.videoChatIconWrapper) { + this.videoChatIconWrapper.measureInWindow((x, y) => this.setState({ + videoChatIconPosition: {x, y}, + })); + } + } + + menuItemData = [ + { + icon: ZoomIcon, + text: 'Zoom', + onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), + }, + { + icon: GoogleMeetIcon, + text: 'Google Meet', + onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), + }, + ].map(item => ({ + ...item, + onPress: () => { + item.onPress(); + this.toggleVideoChatMenu(); + }, + })); + + render() { + return ( + <> + this.videoChatIconWrapper = el} + onLayout={this.measureVideoChatIconPosition} + > + { + this.toggleVideoChatMenu(); + }} + style={[styles.touchableButtonImage, styles.mr0]} + > + + + + + {this.menuItemData.map(({icon, text, onPress}) => ( + + ))} + + + ); + } +}; + +VideoChatButtonAndMenu.displayName = 'VideoChatButtonAndMenu'; +export default withWindowDimensions(VideoChatButtonAndMenu); diff --git a/src/components/VideoChatMenu.js b/src/components/VideoChatMenu.js deleted file mode 100644 index ccadf44b12f4..000000000000 --- a/src/components/VideoChatMenu.js +++ /dev/null @@ -1,75 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Popover from './Popover'; -import MenuItem from './MenuItem'; -import openURLInNewTab from '../libs/openURLInNewTab'; -import ZoomIcon from '../../assets/images/zoom-icon.svg'; -import GoogleMeetIcon from '../../assets/images/google-meet.svg'; -import CONST from '../CONST'; -import styles from '../styles/styles'; - -const propTypes = { - // State that determines whether to display the create menu or not - isVisible: PropTypes.bool.isRequired, - - // Callback that determines behavior when menu is closed - onClose: PropTypes.func.isRequired, - - // Anchor position of the menu - anchorPosition: PropTypes.shape({ - // x position of the anchor icon - x: PropTypes.number, - - // y position of the anchor icon - y: PropTypes.number, - }).isRequired, -}; - -const VideoChatMenu = (props) => { - const menuItemData = [ - { - icon: ZoomIcon, - text: 'Zoom', - onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), - }, - { - icon: GoogleMeetIcon, - text: 'Google Meet', - onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), - }, - ].map(item => ({ - ...item, - onPress: () => { - item.onPress(); - props.onClose(); - }, - })); - - return ( - - {menuItemData.map(({icon, text, onPress}) => ( - - ))} - - ); -}; - - -VideoChatMenu.propTypes = propTypes; -VideoChatMenu.displayName = 'VideoChatMenu'; -export default VideoChatMenu; From 0f77ca54306b72abeb7b2c3e2a30c4e94684ce02 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Tue, 30 Mar 2021 18:13:57 -0700 Subject: [PATCH 23/39] took lots of stuff out of the header view --- src/pages/home/HeaderView.js | 48 ++---------------------------------- 1 file changed, 2 insertions(+), 46 deletions(-) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 388a6dc4e8a0..a9282f58c2af 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -18,7 +18,7 @@ import {getReportParticipantsTitle} from '../../libs/reportUtils'; import OptionRowTitle from './sidebar/OptionRowTitle'; import {getPersonalDetailsForLogins} from '../../libs/OptionsListUtils'; import {participantPropTypes} from './sidebar/optionPropTypes'; -import VideoChatMenu from '../../components/VideoChatMenu'; +import VideoChatButtonAndMenu from '../../components/VideoChatButtonAndMenu'; import IOUBadge from '../../components/IOUBadge'; const propTypes = { @@ -61,28 +61,6 @@ class HeaderView extends Component { tooltipText: getReportParticipantsTitle(this.participants), participantsList: getPersonalDetailsForLogins(this.participants, this.props.personalDetails), }; - this.toggleVideoChatMenu = this.toggleVideoChatMenu.bind(this); - this.measureVideoChatIconPosition = this.measureVideoChatIconPosition.bind(this); - this.videoChatIconWrapper = null; - - this.state = { - isVideoChatMenuActive: false, - videoChatIconPosition: {x: 0, y: 0}, - }; - } - - toggleVideoChatMenu() { - this.setState(prevState => ({ - isVideoChatMenuActive: !prevState.isVideoChatMenuActive, - })); - } - - measureVideoChatIconPosition() { - if (this.videoChatIconWrapper) { - this.videoChatIconWrapper.measureInWindow((x, y) => this.setState({ - videoChatIconPosition: {x, y}, - })); - } } render() { @@ -128,24 +106,7 @@ class HeaderView extends Component { {this.props.report.hasOutstandingIOU && ( )} - this.videoChatIconWrapper = el} - onLayout={this.measureVideoChatIconPosition} - > - { - this.toggleVideoChatMenu(); - }} - style={[styles.touchableButtonImage, styles.mr0]} - > - - - + togglePinnedState(this.props.report)} style={[styles.touchableButtonImage, styles.mr0]} @@ -155,11 +116,6 @@ class HeaderView extends Component { fill={this.props.report.isPinned ? themeColors.heading : themeColors.icon} /> - )} From bb2e83b0c9a06397ddbcf55613d1cf74aab2dd8a Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Tue, 30 Mar 2021 18:27:47 -0700 Subject: [PATCH 24/39] refactored back to stateless component --- src/pages/home/HeaderView.js | 126 +++++++++++++++++------------------ 1 file changed, 60 insertions(+), 66 deletions(-) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index a9282f58c2af..7d38ba9f862c 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -1,4 +1,4 @@ -import React, {Component} from 'react'; +import React from 'react'; import {View, Pressable} from 'react-native'; import PropTypes from 'prop-types'; import {withOnyx} from 'react-native-onyx'; @@ -7,7 +7,7 @@ import styles from '../../styles/styles'; import ONYXKEYS from '../../ONYXKEYS'; import themeColors from '../../styles/themes/default'; import Icon from '../../components/Icon'; -import {BackArrow, Pin, Phone} from '../../components/Icon/Expensicons'; +import {BackArrow, Pin} from '../../components/Icon/Expensicons'; import compose from '../../libs/compose'; import {togglePinnedState} from '../../libs/actions/Report'; import withWindowDimensions, {windowDimensionsPropTypes} from '../../components/withWindowDimensions'; @@ -51,79 +51,73 @@ const defaultProps = { report: null, }; -class HeaderView extends Component { - constructor(props) { - super(props); +const HeaderView = (props) => { + const participants = lodashGet(props.report, 'participants', []); + const reportOption = { + text: lodashGet(props.report, 'reportName', ''), + tooltipText: getReportParticipantsTitle(participants), + participantsList: getPersonalDetailsForLogins(participants, props.personalDetails), + }; - this.participants = lodashGet(this.props.report, 'participants', []); - this.reportOption = { - text: lodashGet(this.props.report, 'reportName', ''), - tooltipText: getReportParticipantsTitle(this.participants), - participantsList: getPersonalDetailsForLogins(this.participants, this.props.personalDetails), - }; - } - - render() { - return ( - - - {this.props.isSmallScreenWidth && ( + return ( + + + {props.isSmallScreenWidth && ( + + + + )} + {props.report && props.report.reportName && ( + { + if (participants.length === 1) { + Navigation.navigate(ROUTES.getDetailsRoute(participants[0])); + } + }} + style={[styles.flexRow, styles.alignItemsCenter, styles.flex1]} > - + + + + - )} - {this.props.report && this.props.report.reportName && ( - + + {props.report.hasOutstandingIOU && ( + + )} + { - if (this.participants.length === 1) { - Navigation.navigate(ROUTES.getDetailsRoute(this.participants[0])); - } - }} - style={[styles.flexRow, styles.alignItemsCenter, styles.flex1]} + onPress={() => togglePinnedState(props.report)} + style={[styles.touchableButtonImage, styles.mr0]} > - - - - + - - {this.props.report.hasOutstandingIOU && ( - - )} - - togglePinnedState(this.props.report)} - style={[styles.touchableButtonImage, styles.mr0]} - > - - - - )} - + + )} - ); - } -} + + ); +}; HeaderView.propTypes = propTypes; HeaderView.displayName = 'HeaderView'; From df8c59012b5706619a7110ca289529d96378c2cf Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Tue, 30 Mar 2021 18:27:58 -0700 Subject: [PATCH 25/39] cleaned up --- src/components/VideoChatButtonAndMenu.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/VideoChatButtonAndMenu.js b/src/components/VideoChatButtonAndMenu.js index aac36f6ee342..26341ce9351f 100644 --- a/src/components/VideoChatButtonAndMenu.js +++ b/src/components/VideoChatButtonAndMenu.js @@ -23,11 +23,12 @@ class VideoChatButtonAndMenu extends Component { this.state = { isVideoChatMenuActive: false, videoChatIconPosition: {x: 0, y: 0}, - } + }; } + /** - * + * Toggles the state variable isVideoChatMenuActive */ toggleVideoChatMenu() { this.setState(prevState => ({ @@ -36,7 +37,7 @@ class VideoChatButtonAndMenu extends Component { } /** - * + * This gets called onLayout to find the cooridnates of the wrapper for the video chat button. */ measureVideoChatIconPosition() { if (this.videoChatIconWrapper) { From 112c806ff6fe9c83e6b77b9c21d415a5bfebf8e8 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Tue, 30 Mar 2021 18:28:55 -0700 Subject: [PATCH 26/39] whitespace --- src/pages/home/HeaderView.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 7d38ba9f862c..ab9166f0f64d 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -118,7 +118,6 @@ const HeaderView = (props) => { ); }; - HeaderView.propTypes = propTypes; HeaderView.displayName = 'HeaderView'; HeaderView.defaultProps = defaultProps; From 448ccc6cd54df0a0f1275d588f9e1a8e8dfda3fd Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Tue, 30 Mar 2021 18:31:23 -0700 Subject: [PATCH 27/39] style --- src/components/VideoChatButtonAndMenu.js | 41 ++++++++++++------------ 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/components/VideoChatButtonAndMenu.js b/src/components/VideoChatButtonAndMenu.js index 26341ce9351f..2456e95d15f9 100644 --- a/src/components/VideoChatButtonAndMenu.js +++ b/src/components/VideoChatButtonAndMenu.js @@ -13,6 +13,25 @@ import themeColors from '../styles/themes/default'; import withWindowDimensions from './withWindowDimensions'; class VideoChatButtonAndMenu extends Component { + menuItemData = [ + { + icon: ZoomIcon, + text: 'Zoom', + onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), + }, + { + icon: GoogleMeetIcon, + text: 'Google Meet', + onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), + }, + ].map(item => ({ + ...item, + onPress: () => { + item.onPress(); + this.toggleVideoChatMenu(); + }, + })); + constructor(props) { super(props); @@ -26,7 +45,6 @@ class VideoChatButtonAndMenu extends Component { }; } - /** * Toggles the state variable isVideoChatMenuActive */ @@ -47,25 +65,6 @@ class VideoChatButtonAndMenu extends Component { } } - menuItemData = [ - { - icon: ZoomIcon, - text: 'Zoom', - onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), - }, - { - icon: GoogleMeetIcon, - text: 'Google Meet', - onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), - }, - ].map(item => ({ - ...item, - onPress: () => { - item.onPress(); - this.toggleVideoChatMenu(); - }, - })); - render() { return ( <> @@ -110,7 +109,7 @@ class VideoChatButtonAndMenu extends Component { ); } -}; +} VideoChatButtonAndMenu.displayName = 'VideoChatButtonAndMenu'; export default withWindowDimensions(VideoChatButtonAndMenu); From 452fa7be607085be10c9f2ad7c9716eebcea3a04 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Tue, 30 Mar 2021 18:33:40 -0700 Subject: [PATCH 28/39] style --- src/components/VideoChatButtonAndMenu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/VideoChatButtonAndMenu.js b/src/components/VideoChatButtonAndMenu.js index 2456e95d15f9..8a293ad573a7 100644 --- a/src/components/VideoChatButtonAndMenu.js +++ b/src/components/VideoChatButtonAndMenu.js @@ -31,7 +31,7 @@ class VideoChatButtonAndMenu extends Component { this.toggleVideoChatMenu(); }, })); - + constructor(props) { super(props); From 6fa2c38eae770875d0a3b7c178cc113bcebfc6da Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Wed, 31 Mar 2021 12:35:34 -0700 Subject: [PATCH 29/39] changed style name and added support for arrays --- src/components/MenuItem.js | 63 ++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/src/components/MenuItem.js b/src/components/MenuItem.js index 46c326197106..0ca30faa144c 100644 --- a/src/components/MenuItem.js +++ b/src/components/MenuItem.js @@ -1,6 +1,6 @@ import React from 'react'; import { - View, Text, Pressable, + View, Text, Pressable, StyleSheet, } from 'react-native'; import PropTypes from 'prop-types'; @@ -12,7 +12,7 @@ import {ArrowRight} from './Icon/Expensicons'; const propTypes = { // Any additional styles to apply // eslint-disable-next-line react/forbid-prop-types - style: PropTypes.any, + wrapperStyle: PropTypes.any, // Function to fire when component is pressed onPress: PropTypes.func.isRequired, @@ -29,7 +29,7 @@ const propTypes = { const defaultProps = { shouldShowRightArrow: false, - style: {}, + wrapperStyle: null, }; const MenuItem = ({ @@ -37,33 +37,38 @@ const MenuItem = ({ icon, title, shouldShowRightArrow, - style, -}) => ( - ([ - styles.createMenuItem, - hovered && {backgroundColor: themeColors.buttonHoveredBG}, - ...style, - ])} - > - - - - - - - {title} - - - - {shouldShowRightArrow && ( - - + wrapperStyle, +}) => { + // Flatten the wrapperStyle in case it's an array of styles + const flatWrapperStyle = StyleSheet.flatten(wrapperStyle); + + return ( + ([ + styles.createMenuItem, + hovered && {backgroundColor: themeColors.buttonHoveredBG}, + flatWrapperStyle, + ])} + > + + + + + + + {title} + + - )} - -); + {shouldShowRightArrow && ( + + + + )} + + ); +}; MenuItem.propTypes = propTypes; MenuItem.defaultProps = defaultProps; From c2590e7569c698b5fc1c9f0403c84dd1f357fe36 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Wed, 31 Mar 2021 12:35:47 -0700 Subject: [PATCH 30/39] clean up --- src/components/VideoChatButtonAndMenu.js | 2 +- src/pages/home/ReportScreen.js | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/VideoChatButtonAndMenu.js b/src/components/VideoChatButtonAndMenu.js index 8a293ad573a7..aaceeb0c8e6d 100644 --- a/src/components/VideoChatButtonAndMenu.js +++ b/src/components/VideoChatButtonAndMenu.js @@ -98,7 +98,7 @@ class VideoChatButtonAndMenu extends Component { > {this.menuItemData.map(({icon, text, onPress}) => ( { onNavigationMenuButtonClicked={() => Navigation.navigate(ROUTES.HOME)} /> - + ); From 9a5dd82169a5ad62b80d76aaa63752158643fe3f Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Wed, 31 Mar 2021 13:12:04 -0700 Subject: [PATCH 31/39] style --- src/pages/home/HeaderView.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index ab9166f0f64d..a6c355ff1766 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -106,10 +106,7 @@ const HeaderView = (props) => { onPress={() => togglePinnedState(props.report)} style={[styles.touchableButtonImage, styles.mr0]} > - + From 4f5ef640161513112e98277521d2232923fca97b Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Wed, 31 Mar 2021 14:07:39 -0700 Subject: [PATCH 32/39] changed wrapperStyle type to object --- src/components/MenuItem.js | 62 ++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/src/components/MenuItem.js b/src/components/MenuItem.js index 0ca30faa144c..5bf426dd3a16 100644 --- a/src/components/MenuItem.js +++ b/src/components/MenuItem.js @@ -1,6 +1,6 @@ import React from 'react'; import { - View, Text, Pressable, StyleSheet, + View, Text, Pressable, } from 'react-native'; import PropTypes from 'prop-types'; @@ -12,7 +12,7 @@ import {ArrowRight} from './Icon/Expensicons'; const propTypes = { // Any additional styles to apply // eslint-disable-next-line react/forbid-prop-types - wrapperStyle: PropTypes.any, + wrapperStyle: PropTypes.object, // Function to fire when component is pressed onPress: PropTypes.func.isRequired, @@ -29,7 +29,7 @@ const propTypes = { const defaultProps = { shouldShowRightArrow: false, - wrapperStyle: null, + wrapperStyle: {}, }; const MenuItem = ({ @@ -38,37 +38,33 @@ const MenuItem = ({ title, shouldShowRightArrow, wrapperStyle, -}) => { - // Flatten the wrapperStyle in case it's an array of styles - const flatWrapperStyle = StyleSheet.flatten(wrapperStyle); - - return ( - ([ - styles.createMenuItem, - hovered && {backgroundColor: themeColors.buttonHoveredBG}, - flatWrapperStyle, - ])} - > - - - - - - - {title} - - +}) => ( + ([ + styles.createMenuItem, + hovered && {backgroundColor: themeColors.buttonHoveredBG}, + wrapperStyle, + ])} + > + + + - {shouldShowRightArrow && ( - - - - )} - - ); -}; + + + {title} + + + + {shouldShowRightArrow && ( + + + + )} + +); + MenuItem.propTypes = propTypes; MenuItem.defaultProps = defaultProps; From a396379fba1dbb2ce8d57f0a9dae5ed706c25bc1 Mon Sep 17 00:00:00 2001 From: Ali Abbas Malik Date: Wed, 31 Mar 2021 18:21:10 -0400 Subject: [PATCH 33/39] [IS-2151] Fixed Fab hidden by keyboard on IPAD --- src/components/FAB.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/components/FAB.js b/src/components/FAB.js index b79f070ae41e..585641dbea69 100644 --- a/src/components/FAB.js +++ b/src/components/FAB.js @@ -1,5 +1,7 @@ import React, {PureComponent} from 'react'; -import {Pressable, Animated, Easing} from 'react-native'; +import { + Pressable, Animated, Easing, KeyboardAvoidingView, Platform, +} from 'react-native'; import PropTypes from 'prop-types'; import Icon from './Icon'; import {Plus} from './Icon/Expensicons'; @@ -64,15 +66,17 @@ class FAB extends PureComponent { }); return ( - - - + + + + + ); } } From e9c932a694dd4bd50a152b8900b8ca78d3e46b06 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Wed, 31 Mar 2021 16:13:06 -0700 Subject: [PATCH 34/39] style --- src/components/MenuItem.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/MenuItem.js b/src/components/MenuItem.js index 5bf426dd3a16..ef6c0817b4b3 100644 --- a/src/components/MenuItem.js +++ b/src/components/MenuItem.js @@ -65,7 +65,6 @@ const MenuItem = ({ ); - MenuItem.propTypes = propTypes; MenuItem.defaultProps = defaultProps; MenuItem.displayName = 'MenuItem'; From d994dd77d30445dc9df80400f78f879cad24dd77 Mon Sep 17 00:00:00 2001 From: Luke Donahue Date: Wed, 31 Mar 2021 16:13:55 -0700 Subject: [PATCH 35/39] added menuItems array to constructor --- src/components/VideoChatButtonAndMenu.js | 39 ++++++++++++------------ 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/components/VideoChatButtonAndMenu.js b/src/components/VideoChatButtonAndMenu.js index aaceeb0c8e6d..e5419ce8acae 100644 --- a/src/components/VideoChatButtonAndMenu.js +++ b/src/components/VideoChatButtonAndMenu.js @@ -13,31 +13,30 @@ import themeColors from '../styles/themes/default'; import withWindowDimensions from './withWindowDimensions'; class VideoChatButtonAndMenu extends Component { - menuItemData = [ - { - icon: ZoomIcon, - text: 'Zoom', - onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), - }, - { - icon: GoogleMeetIcon, - text: 'Google Meet', - onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), - }, - ].map(item => ({ - ...item, - onPress: () => { - item.onPress(); - this.toggleVideoChatMenu(); - }, - })); - constructor(props) { super(props); this.toggleVideoChatMenu = this.toggleVideoChatMenu.bind(this); this.measureVideoChatIconPosition = this.measureVideoChatIconPosition.bind(this); this.videoChatIconWrapper = null; + this.menuItemData = [ + { + icon: ZoomIcon, + text: 'Zoom', + onPress: () => openURLInNewTab(CONST.NEW_ZOOM_MEETING_URL), + }, + { + icon: GoogleMeetIcon, + text: 'Google Meet', + onPress: () => openURLInNewTab(CONST.NEW_GOOGLE_MEET_MEETING_URL), + }, + ].map(item => ({ + ...item, + onPress: () => { + item.onPress(); + this.toggleVideoChatMenu(); + }, + })); this.state = { isVideoChatMenuActive: false, @@ -94,7 +93,7 @@ class VideoChatButtonAndMenu extends Component { top: this.state.videoChatIconPosition.y + 40, }} animationIn="fadeInDown" - animationOut="fadeOutDown" + animationOut="fadeOutUp" > {this.menuItemData.map(({icon, text, onPress}) => ( Date: Wed, 31 Mar 2021 16:14:04 -0700 Subject: [PATCH 36/39] changed Icon propTypes --- src/components/Icon/index.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/components/Icon/index.js b/src/components/Icon/index.js index e1bad2f112ec..a43d73e69bf4 100644 --- a/src/components/Icon/index.js +++ b/src/components/Icon/index.js @@ -1,16 +1,11 @@ -import _ from 'underscore'; import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import themeColors from '../../styles/themes/default'; import variables from '../../styles/variables'; -import * as Expensicons from './Expensicons'; const propTypes = { // The asset to render. - src: PropTypes.oneOfType([ - PropTypes.oneOf(_.values(Expensicons)), - PropTypes.func, - ]).isRequired, + src: PropTypes.func.isRequired, // The width of the icon. width: PropTypes.number, From b312b188408819848f7249a4148fdbbfca8a4e27 Mon Sep 17 00:00:00 2001 From: OSBotify Date: Thu, 1 Apr 2021 00:25:02 +0000 Subject: [PATCH 37/39] Update version to 1.0.10-1 --- android/app/build.gradle | 4 ++-- ios/ExpensifyCash/Info.plist | 2 +- ios/ExpensifyCashTests/Info.plist | 2 +- package-lock.json | 2 +- package.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index b0aff01de816..621af7dc29d7 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -148,8 +148,8 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion multiDexEnabled rootProject.ext.multiDexEnabled - versionCode 1001001000 - versionName "1.0.10-0" + versionCode 1001001001 + versionName "1.0.10-1" } splits { abi { diff --git a/ios/ExpensifyCash/Info.plist b/ios/ExpensifyCash/Info.plist index 9ddceefec52f..e44580983970 100644 --- a/ios/ExpensifyCash/Info.plist +++ b/ios/ExpensifyCash/Info.plist @@ -30,7 +30,7 @@ CFBundleVersion - 1.0.10.0 + 1.0.10.1 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/ExpensifyCashTests/Info.plist b/ios/ExpensifyCashTests/Info.plist index 7344dfb79c50..1088a7a6547e 100644 --- a/ios/ExpensifyCashTests/Info.plist +++ b/ios/ExpensifyCashTests/Info.plist @@ -19,6 +19,6 @@ CFBundleSignature ???? CFBundleVersion - 1.0.10.0 + 1.0.10.1 diff --git a/package-lock.json b/package-lock.json index f7abc65073ec..6c9ee7e75910 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "expensify.cash", - "version": "1.0.10-0", + "version": "1.0.10-1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 36d93db7ae04..5bfbf4409928 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "expensify.cash", - "version": "1.0.10-0", + "version": "1.0.10-1", "author": "Expensify, Inc.", "homepage": "https://expensify.cash", "description": "Expensify.cash is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.", From bbae7e4c2327139b03b32619e7ee7e7675d7c59d Mon Sep 17 00:00:00 2001 From: Jasper Huang Date: Thu, 1 Apr 2021 11:54:04 +0800 Subject: [PATCH 38/39] add flex: 1 --- src/styles/styles.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/styles/styles.js b/src/styles/styles.js index 4962d9edeaa3..9ef88778a851 100644 --- a/src/styles/styles.js +++ b/src/styles/styles.js @@ -341,6 +341,7 @@ const styles = { backgroundColor: themeColors.sidebar, padding: 20, minHeight: '100%', + flex: 1, }, signInPageLogo: { From 09ab43c08d06f402d580610bb8653afdb0788fba Mon Sep 17 00:00:00 2001 From: OSBotify Date: Thu, 1 Apr 2021 04:21:37 +0000 Subject: [PATCH 39/39] Update version to 1.0.10-2 --- android/app/build.gradle | 4 ++-- ios/ExpensifyCash/Info.plist | 2 +- ios/ExpensifyCashTests/Info.plist | 2 +- package-lock.json | 2 +- package.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 621af7dc29d7..329661226a4a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -148,8 +148,8 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion multiDexEnabled rootProject.ext.multiDexEnabled - versionCode 1001001001 - versionName "1.0.10-1" + versionCode 1001001002 + versionName "1.0.10-2" } splits { abi { diff --git a/ios/ExpensifyCash/Info.plist b/ios/ExpensifyCash/Info.plist index e44580983970..b158052454db 100644 --- a/ios/ExpensifyCash/Info.plist +++ b/ios/ExpensifyCash/Info.plist @@ -30,7 +30,7 @@ CFBundleVersion - 1.0.10.1 + 1.0.10.2 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/ExpensifyCashTests/Info.plist b/ios/ExpensifyCashTests/Info.plist index 1088a7a6547e..929c25e9d984 100644 --- a/ios/ExpensifyCashTests/Info.plist +++ b/ios/ExpensifyCashTests/Info.plist @@ -19,6 +19,6 @@ CFBundleSignature ???? CFBundleVersion - 1.0.10.1 + 1.0.10.2 diff --git a/package-lock.json b/package-lock.json index 6c9ee7e75910..b46973bf09ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "expensify.cash", - "version": "1.0.10-1", + "version": "1.0.10-2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5bfbf4409928..e0f7e76fcaee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "expensify.cash", - "version": "1.0.10-1", + "version": "1.0.10-2", "author": "Expensify, Inc.", "homepage": "https://expensify.cash", "description": "Expensify.cash is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",