From 1cece211284fc870fc1c2ff35dc1bb268a97def9 Mon Sep 17 00:00:00 2001 From: Terry Sahaidak Date: Wed, 19 Apr 2023 00:02:22 +0300 Subject: [PATCH 1/6] Move buttons into edit composer --- src/pages/home/report/ReportActionItem.js | 58 +++++++++------ .../home/report/ReportActionItemDraft.js | 21 ++++++ .../report/ReportActionItemMessageEdit.js | 74 +++++++++++++------ src/styles/styles.js | 15 +++- 4 files changed, 123 insertions(+), 45 deletions(-) create mode 100644 src/pages/home/report/ReportActionItemDraft.js diff --git a/src/pages/home/report/ReportActionItem.js b/src/pages/home/report/ReportActionItem.js index c43da3092177..17c317a07253 100644 --- a/src/pages/home/report/ReportActionItem.js +++ b/src/pages/home/report/ReportActionItem.js @@ -50,6 +50,7 @@ import * as Expensicons from '../../../components/Icon/Expensicons'; import Text from '../../../components/Text'; import DisplayNames from '../../../components/DisplayNames'; import personalDetailsPropType from '../../personalDetailsPropType'; +import ReportActionItemDraft from './ReportActionItemDraft'; const propTypes = { /** Report for this action */ @@ -239,15 +240,46 @@ class ReportActionItem extends Component { <> {children} {hasReactions && ( - + + + )} ); } + renderReportActionItem(hovered, isWhisper) { + const content = this.renderItemContent(hovered || this.state.isContextMenuActive); + + if (this.props.draftMessage) { + return ( + + {content} + + ); + } if (!this.props.displayAsGroup) { + return ( + + {content} + + ); + } + return ( + + {content} + + ); + } + render() { if (this.props.action.actionName === CONST.REPORT.ACTIONS.TYPE.CREATED) { return ; @@ -335,23 +367,7 @@ class ReportActionItem extends Component { /> )} - {!this.props.displayAsGroup - ? ( - - {this.renderItemContent(hovered || this.state.isContextMenuActive)} - - ) - : ( - - {this.renderItemContent(hovered || this.state.isContextMenuActive)} - - )} + {this.renderReportActionItem(hovered, isWhisper)} diff --git a/src/pages/home/report/ReportActionItemDraft.js b/src/pages/home/report/ReportActionItemDraft.js new file mode 100644 index 000000000000..3639231babaf --- /dev/null +++ b/src/pages/home/report/ReportActionItemDraft.js @@ -0,0 +1,21 @@ +import React from 'react'; +import {View} from 'react-native'; +import PropTypes from 'prop-types'; +import styles from '../../../styles/styles'; + +const propTypes = { + /** Children view component for this action item */ + children: PropTypes.node.isRequired, +}; + +const ReportActionItemDraft = props => ( + + + {props.children} + + +); + +ReportActionItemDraft.propTypes = propTypes; +ReportActionItemDraft.displayName = 'ReportActionItemDraft'; +export default ReportActionItemDraft; diff --git a/src/pages/home/report/ReportActionItemMessageEdit.js b/src/pages/home/report/ReportActionItemMessageEdit.js index 8ca6e1c69da6..f15a149b8440 100644 --- a/src/pages/home/report/ReportActionItemMessageEdit.js +++ b/src/pages/home/report/ReportActionItemMessageEdit.js @@ -1,25 +1,32 @@ /* eslint-disable rulesdir/onyx-props-must-have-default */ import lodashGet from 'lodash/get'; import React from 'react'; -import {InteractionManager, Keyboard, View} from 'react-native'; +import { + InteractionManager, Keyboard, Pressable, TouchableOpacity, View, +} from 'react-native'; import PropTypes from 'prop-types'; import _ from 'underscore'; import ExpensiMark from 'expensify-common/lib/ExpensiMark'; import Str from 'expensify-common/lib/str'; import reportActionPropTypes from './reportActionPropTypes'; import styles from '../../../styles/styles'; +import themeColors from '../../../styles/themes/default'; +import * as StyleUtils from '../../../styles/StyleUtils'; import Composer from '../../../components/Composer'; import * as Report from '../../../libs/actions/Report'; import * as ReportScrollManager from '../../../libs/ReportScrollManager'; import toggleReportActionComposeView from '../../../libs/toggleReportActionComposeView'; import openReportActionComposeViewWhenClosingMessageEdit from '../../../libs/openReportActionComposeViewWhenClosingMessageEdit'; -import Button from '../../../components/Button'; import ReportActionComposeFocusManager from '../../../libs/ReportActionComposeFocusManager'; import compose from '../../../libs/compose'; import EmojiPickerButton from '../../../components/EmojiPicker/EmojiPickerButton'; +import Icon from '../../../components/Icon'; +import * as Expensicons from '../../../components/Icon/Expensicons'; +import Tooltip from '../../../components/Tooltip'; import * as ReportActionContextMenu from './ContextMenu/ReportActionContextMenu'; import * as ReportUtils from '../../../libs/ReportUtils'; import * as EmojiUtils from '../../../libs/EmojiUtils'; +import getButtonState from '../../../libs/getButtonState'; import reportPropTypes from '../../reportPropTypes'; import ExceededCommentLength from '../../../components/ExceededCommentLength'; import CONST from '../../../CONST'; @@ -255,9 +262,29 @@ class ReportActionItemMessageEdit extends React.Component { render() { const hasExceededMaxCommentLength = this.state.hasExceededMaxCommentLength; return ( - + + + + ([styles.chatItemSubmitButton, StyleUtils.getButtonBackgroundColorStyle(getButtonState(hovered, pressed))])} + nativeID={this.cancelButtonID} + onPress={this.deleteDraft} + hitSlop={{ + top: 3, right: 3, bottom: 3, left: 3, + }} + disabled={hasExceededMaxCommentLength} + > + {({hovered, pressed}) => ( + + )} + + + { this.setState({isFocused: true}); ReportScrollManager.scrollToIndex({animated: true, index: this.props.index}, true); @@ -307,26 +334,27 @@ class ReportActionItemMessageEdit extends React.Component { /> + + + + + + + - -