Skip to content

Commit c8fb311

Browse files
committed
refactor: remove prop-drilling of reportID
1 parent a24eb9e commit c8fb311

20 files changed

Lines changed: 68 additions & 89 deletions

src/pages/inbox/report/ReportActionCompose/ComposerActionButton.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import ComposerActionMenu from './ComposerActionMenu';
22
import {useComposerEditState} from './ComposerContext';
33
import ComposerEditingButtons from './ComposerEditingButtons';
44

5-
function ReportActionComposeActionButton({reportID}: {reportID: string}) {
5+
function ComposerActionButton() {
66
const {isEditingInComposer} = useComposerEditState();
77

88
if (isEditingInComposer) {
9-
return <ComposerEditingButtons reportID={reportID} />;
9+
return <ComposerEditingButtons />;
1010
}
11-
return <ComposerActionMenu reportID={reportID} />;
11+
return <ComposerActionMenu />;
1212
}
1313

14-
export default ReportActionComposeActionButton;
14+
export default ComposerActionButton;

src/pages/inbox/report/ReportActionCompose/ComposerActionMenu.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@ import AttachmentPickerWithMenuItems from './AttachmentPickerWithMenuItems';
1111
import {useComposerActions, useComposerEditState, useComposerMeta, useComposerSendState, useComposerState} from './ComposerContext';
1212
import useAttachmentPicker from './useAttachmentPicker';
1313

14-
type ComposerActionMenuProps = {
15-
reportID: string;
16-
};
17-
18-
function ComposerActionMenu({reportID}: ComposerActionMenuProps) {
14+
function ComposerActionMenu() {
15+
const {reportID} = useComposerState();
1916
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
2017
const {isMenuVisible, isFullComposerAvailable} = useComposerState();
2118
const {draftComment} = useComposerEditState();

src/pages/inbox/report/ReportActionCompose/ComposerBox.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
import React from 'react';
2+
import type {PropsWithChildren} from 'react';
23
import {View} from 'react-native';
34
import useOnyx from '@hooks/useOnyx';
45
import useThemeStyles from '@hooks/useThemeStyles';
56
import ONYXKEYS from '@src/ONYXKEYS';
67
import {useComposerMeta, useComposerSendState, useComposerState} from './ComposerContext';
78

8-
type ComposerBoxProps = {
9-
reportID: string;
10-
children: React.ReactNode;
11-
};
12-
13-
function ComposerBox({reportID, children}: ComposerBoxProps) {
9+
function ComposerBox({children}: PropsWithChildren) {
10+
const {reportID} = useComposerState();
1411
const styles = useThemeStyles();
1512
const {isFocused} = useComposerState();
1613
const {isExceedingMaxLength, isBlockedFromConcierge} = useComposerSendState();

src/pages/inbox/report/ReportActionCompose/ComposerContainer.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import React from 'react';
2+
import type {PropsWithChildren} from 'react';
23
import OfflineWithFeedback from '@components/OfflineWithFeedback';
34
import useOnyx from '@hooks/useOnyx';
45
import useThemeStyles from '@hooks/useThemeStyles';
56
import {getReportOfflinePendingActionAndErrors} from '@libs/ReportUtils';
67
import ONYXKEYS from '@src/ONYXKEYS';
7-
import type {ReportActionComposeWithChildrenProps} from './ReportActionComposeTypes';
8+
import {useComposerState} from './ComposerContext';
89

9-
function ReportActionComposerContainer({reportID, children}: ReportActionComposeWithChildrenProps) {
10+
function ComposerContainer({children}: PropsWithChildren) {
11+
const {reportID} = useComposerState();
1012
const styles = useThemeStyles();
1113
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`);
1214
const [isComposerFullSize = false] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_IS_COMPOSER_FULL_SIZE}${reportID}`);
@@ -24,4 +26,4 @@ function ReportActionComposerContainer({reportID, children}: ReportActionCompose
2426
);
2527
}
2628

27-
export default ReportActionComposerContainer;
29+
export default ComposerContainer;

src/pages/inbox/report/ReportActionCompose/ComposerContext.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type ComposerText = string;
2626

2727
// Warm — changes on interaction
2828
type ComposerState = {
29+
reportID: string;
2930
isFocused: boolean;
3031
isMenuVisible: boolean;
3132
isFullComposerAvailable: boolean;
@@ -90,6 +91,7 @@ const noop = () => {};
9091
const ComposerTextContext = createContext<ComposerText>('');
9192

9293
const defaultState: ComposerState = {
94+
reportID: '',
9395
isFocused: false,
9496
isMenuVisible: false,
9597
isFullComposerAvailable: false,

src/pages/inbox/report/ReportActionCompose/ComposerDefaultFooter.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,21 @@ import React from 'react';
22
import OfflineIndicator from '@components/OfflineIndicator';
33
import useResponsiveLayout from '@hooks/useResponsiveLayout';
44
import useThemeStyles from '@hooks/useThemeStyles';
5-
import AgentZeroAwareTypingIndicator from './AgentZeroAwareTypingIndicator';
65
import ComposerExceededLength from './ComposerExceededLength';
76
import ComposerFooter from './ComposerFooter';
8-
import type {ReportActionComposeProps} from './ReportActionComposeTypes';
7+
import ComposerTypingIndicator from './ComposerTypingIndicator';
98

10-
function ReportActionComposeDefaultFooter({reportID}: ReportActionComposeProps) {
9+
function ComposerDefaultFooter() {
1110
const styles = useThemeStyles();
1211
const {shouldUseNarrowLayout} = useResponsiveLayout();
1312

1413
return (
1514
<ComposerFooter>
1615
{!shouldUseNarrowLayout && <OfflineIndicator containerStyles={[styles.chatItemComposeSecondaryRow]} />}
17-
<AgentZeroAwareTypingIndicator reportID={reportID} />
16+
<ComposerTypingIndicator />
1817
<ComposerExceededLength />
1918
</ComposerFooter>
2019
);
2120
}
2221

23-
export default ReportActionComposeDefaultFooter;
22+
export default ComposerDefaultFooter;

src/pages/inbox/report/ReportActionCompose/ComposerDropZone.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react';
2+
import type {PropsWithChildren} from 'react';
23
import DragAndDropConsumer from '@components/DragAndDrop/Consumer';
34
import DropZoneUI from '@components/DropZone/DropZoneUI';
45
import DualDropZone from '@components/DropZone/DualDropZone';
@@ -14,15 +15,11 @@ import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
1415
import {getParentReport, isChatRoom, isGroupChat, isInvoiceReport, isReportApproved, isSettled, temporary_getMoneyRequestOptions} from '@libs/ReportUtils';
1516
import {hasReceipt as hasReceiptTransactionUtils} from '@libs/TransactionUtils';
1617
import ONYXKEYS from '@src/ONYXKEYS';
18+
import {useComposerState} from './ComposerContext';
1719
import useAttachmentPicker from './useAttachmentPicker';
1820
import useReceiptDrop from './useReceiptDrop';
1921
import useShouldAddOrReplaceReceipt from './useShouldAddOrReplaceReceipt';
2022

21-
type ComposerDropZoneProps = {
22-
reportID: string;
23-
children: React.ReactNode;
24-
};
25-
2623
type RichDropZoneProps = {
2724
reportID: string;
2825
shouldAddOrReplaceReceipt: boolean;
@@ -110,7 +107,8 @@ function RichDropZone({reportID, shouldAddOrReplaceReceipt, transactionID, onAtt
110107
);
111108
}
112109

113-
function ComposerDropZone({reportID, children}: ComposerDropZoneProps) {
110+
function ComposerDropZone({children}: PropsWithChildren) {
111+
const {reportID} = useComposerState();
114112
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`);
115113
const {shouldAddOrReplaceReceipt, transactionID} = useShouldAddOrReplaceReceipt(reportID);
116114
const {pickAttachments, PDFValidationComponent: AttachmentPDFValidation, ErrorModal: AttachmentErrorModal} = useAttachmentPicker(reportID);

src/pages/inbox/report/ReportActionCompose/ComposerEditingButtons.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,12 @@ import React from 'react';
22
import {View} from 'react-native';
33
import useThemeStyles from '@hooks/useThemeStyles';
44
import CONST from '@src/CONST';
5-
import {useComposerEditActions} from './ComposerContext';
5+
import {useComposerEditActions, useComposerState} from './ComposerContext';
66
import ComposerExpandCollapseButton from './ComposerExpandCollapseButton';
77
import MessageEditCancelButton from './MessageEditCancelButton';
88

9-
type ComposerEditingButtonsProps = {
10-
/** The report ID */
11-
reportID: string;
12-
};
13-
14-
function ComposerEditingButtons({reportID}: ComposerEditingButtonsProps) {
9+
function ComposerEditingButtons() {
10+
const {reportID} = useComposerState();
1511
const styles = useThemeStyles();
1612

1713
const {deleteDraft} = useComposerEditActions();

src/pages/inbox/report/ReportActionCompose/ComposerEmojiPicker.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,10 @@ import {canUseTouchScreen} from '@libs/DeviceCapabilities';
66
import DomUtils from '@libs/DomUtils';
77
import {hideEmojiPicker, isActive as isActiveEmojiPickerAction} from '@userActions/EmojiPickerAction';
88
import CONST from '@src/CONST';
9-
import {useComposerMeta, useComposerSendState} from './ComposerContext';
9+
import {useComposerMeta, useComposerSendState, useComposerState} from './ComposerContext';
1010

11-
type ComposerEmojiPickerProps = {
12-
reportID: string;
13-
};
14-
15-
function ComposerEmojiPicker({reportID}: ComposerEmojiPickerProps) {
11+
function ComposerEmojiPicker() {
12+
const {reportID} = useComposerState();
1613
const styles = useThemeStyles();
1714

1815
const {isMediumScreenWidth} = useResponsiveLayout();

src/pages/inbox/report/ReportActionCompose/ComposerFooter.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import React from 'react';
2+
import type {PropsWithChildren} from 'react';
23
import {View} from 'react-native';
34
import useNetwork from '@hooks/useNetwork';
45
import useResponsiveLayout from '@hooks/useResponsiveLayout';
56
import useThemeStyles from '@hooks/useThemeStyles';
67

7-
type ComposerFooterProps = {
8-
children: React.ReactNode;
9-
};
10-
11-
function ComposerFooter({children}: ComposerFooterProps) {
8+
function ComposerFooter({children}: PropsWithChildren) {
129
const styles = useThemeStyles();
1310
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
1411
const {isSmallScreenWidth} = useResponsiveLayout();

0 commit comments

Comments
 (0)