diff --git a/src/CONST.ts b/src/CONST.ts index 71ef5e26f7ae..d2152eb6f125 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -2126,6 +2126,8 @@ const CONST = { SETTINGS: 'settings', LEAVE_ROOM: 'leaveRoom', PRIVATE_NOTES: 'privateNotes', + DELETE: 'delete', + MARK_AS_INCOMPLETE: 'markAsIncomplete', }, EDIT_REQUEST_FIELD: { AMOUNT: 'amount', @@ -3735,6 +3737,14 @@ const CONST = { REPORT: 'REPORT', }, + PROMOTED_ACTIONS: { + PIN: 'pin', + SHARE: 'share', + JOIN: 'join', + MESSAGE: 'message', + HOLD: 'hold', + }, + THUMBNAIL_IMAGE: { SMALL_SCREEN: { SIZE: 250, diff --git a/src/components/PromotedActionsBar.tsx b/src/components/PromotedActionsBar.tsx index b98ab7fcbc32..b3bfe34df542 100644 --- a/src/components/PromotedActionsBar.tsx +++ b/src/components/PromotedActionsBar.tsx @@ -5,7 +5,12 @@ import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import * as HeaderUtils from '@libs/HeaderUtils'; import * as Localize from '@libs/Localize'; +import Navigation from '@libs/Navigation/Navigation'; +import * as ReportUtils from '@libs/ReportUtils'; import * as ReportActions from '@userActions/Report'; +import * as Session from '@userActions/Session'; +import CONST from '@src/CONST'; +import type {ReportAction} from '@src/types/onyx'; import type OnyxReport from '@src/types/onyx/Report'; import Button from './Button'; import type {ThreeDotsMenuItem} from './HeaderWithBackButton/types'; @@ -15,21 +20,34 @@ type PromotedAction = { key: string; } & ThreeDotsMenuItem; -type PromotedActionsType = Record<'pin' | 'share', (report: OnyxReport) => PromotedAction> & { +type BasePromotedActions = typeof CONST.PROMOTED_ACTIONS.PIN | typeof CONST.PROMOTED_ACTIONS.SHARE | typeof CONST.PROMOTED_ACTIONS.JOIN; + +type PromotedActionsType = Record PromotedAction> & { message: (params: {accountID?: number; login?: string}) => PromotedAction; +} & { + hold: (params: {isTextHold: boolean; reportAction: ReportAction | undefined}) => PromotedAction; }; const PromotedActions = { pin: (report) => ({ - key: 'pin', + key: CONST.PROMOTED_ACTIONS.PIN, ...HeaderUtils.getPinMenuItem(report), }), share: (report) => ({ - key: 'share', + key: CONST.PROMOTED_ACTIONS.SHARE, ...HeaderUtils.getShareMenuItem(report), }), + join: (report) => ({ + key: CONST.PROMOTED_ACTIONS.JOIN, + icon: Expensicons.ChatBubbles, + text: Localize.translateLocal('common.join'), + onSelected: Session.checkIfActionIsAllowed(() => { + Navigation.dismissModal(); + ReportActions.joinRoom(report); + }), + }), message: ({accountID, login}) => ({ - key: 'message', + key: CONST.PROMOTED_ACTIONS.MESSAGE, icon: Expensicons.CommentBubbles, text: Localize.translateLocal('common.message'), onSelected: () => { @@ -43,6 +61,15 @@ const PromotedActions = { } }, }), + hold: ({isTextHold, reportAction}) => ({ + key: CONST.PROMOTED_ACTIONS.HOLD, + icon: Expensicons.Stopwatch, + text: Localize.translateLocal(`iou.${isTextHold ? 'hold' : 'unhold'}`), + onSelected: () => { + Navigation.dismissModal(); + ReportUtils.changeMoneyRequestHoldStatus(reportAction); + }, + }), } satisfies PromotedActionsType; type PromotedActionsBarProps = { @@ -61,10 +88,6 @@ function PromotedActionsBar({promotedActions, containerStyle}: PromotedActionsBa return null; } - if (promotedActions.length === 0) { - return null; - } - return ( {promotedActions.map(({key, onSelected, ...props}) => ( diff --git a/src/components/RoomHeaderAvatars.tsx b/src/components/RoomHeaderAvatars.tsx index fc3dda9668dd..ac3b9c4d1396 100644 --- a/src/components/RoomHeaderAvatars.tsx +++ b/src/components/RoomHeaderAvatars.tsx @@ -44,8 +44,8 @@ function RoomHeaderAvatars({icons, reportID}: RoomHeaderAvatarsProps) { > `started settling up. Payment is on hold until ${submitterDisplayName} enables their wallet.`, enableWallet: 'Enable Wallet', hold: 'Hold', + unhold: 'Unhold', holdExpense: 'Hold expense', unholdExpense: 'Unhold expense', heldExpense: 'held this expense', @@ -1305,6 +1306,9 @@ export default { }, }, }, + reportDetailsPage: { + inWorkspace: ({policyName}) => `in ${policyName}`, + }, reportDescriptionPage: { roomDescription: 'Room description', roomDescriptionOptional: 'Room description (optional)', diff --git a/src/languages/es.ts b/src/languages/es.ts index f007c1211190..1efff57d3e3c 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -770,6 +770,7 @@ export default { payOnly: 'Solo pagar', approveOnly: 'Solo aprobar', hold: 'Bloqueada', + unhold: 'Desbloqueada', holdEducationalTitle: 'Este gasto está', whatIsHoldTitle: '¿Qué es Bloquear?', whatIsHoldExplain: 'Bloquear es nuestra forma de agilizar la colaboración financiera. ¡"Rechazar" es tan duro!', @@ -1305,6 +1306,9 @@ export default { }, }, }, + reportDetailsPage: { + inWorkspace: ({policyName}) => `en ${policyName}`, + }, reportDescriptionPage: { roomDescription: 'Descripción de la sala de chat', roomDescriptionOptional: 'Descripción de la sala de chat (opcional)', diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 0f6cbaad49fa..0a18b10b126f 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -6143,8 +6143,18 @@ function getAllWorkspaceReports(policyID: string): Array> { /** * @param policy - the workspace the report is on, null if the user isn't a member of the workspace */ -function shouldDisableRename(report: OnyxEntry, policy: OnyxEntry): boolean { - if (isDefaultRoom(report) || isArchivedRoom(report) || isThread(report) || isMoneyRequestReport(report) || isPolicyExpenseChat(report)) { +function shouldDisableRename(report: OnyxEntry): boolean { + if ( + isDefaultRoom(report) || + isArchivedRoom(report) || + isPublicRoom(report) || + isThread(report) || + isMoneyRequest(report) || + isMoneyRequestReport(report) || + isPolicyExpenseChat(report) || + isInvoiceRoom(report) || + isInvoiceReport(report) + ) { return true; } @@ -6152,13 +6162,10 @@ function shouldDisableRename(report: OnyxEntry, policy: OnyxEntry; +const CASES = { + DEFAULT: 'default', + MONEY_REQUEST: 'money_request', + MONEY_REPORT: 'money_report', +}; + +type CaseID = ValueOf; + function ReportDetailsPage({policies, report, session, personalDetails}: ReportDetailsPageProps) { const {translate} = useLocalize(); const {isOffline} = useNetwork(); const styles = useThemeStyles(); + const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report.parentReportID ?? ''}`); + const [sortedAllReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.reportID ?? ''}`, { + canEvict: false, + selector: (allReportActions: OnyxEntry) => ReportActionsUtils.getSortedReportActionsForDisplay(allReportActions, true), + }); + + const reportActions = useMemo(() => { + if (!sortedAllReportActions.length) { + return []; + } + return ReportActionsUtils.getContinuousReportActionChain(sortedAllReportActions); + }, [sortedAllReportActions]); + + const transactionThreadReportID = useMemo( + () => ReportActionsUtils.getOneTransactionThreadReportID(report.reportID, reportActions ?? [], isOffline), + [report.reportID, reportActions, isOffline], + ); + + const [transactionThreadReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionThreadReportID}`); + const [isLastMemberLeavingGroupModalVisible, setIsLastMemberLeavingGroupModalVisible] = useState(false); + const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); const policy = useMemo(() => policies?.[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID ?? '-1'}`], [policies, report?.policyID]); const isPolicyAdmin = useMemo(() => PolicyUtils.isPolicyAdmin(policy), [policy]); const isPolicyEmployee = useMemo(() => PolicyUtils.isPolicyEmployee(report?.policyID ?? '-1', policies), [report?.policyID, policies]); @@ -79,13 +114,19 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD const isMoneyRequestReport = useMemo(() => ReportUtils.isMoneyRequestReport(report), [report]); const isMoneyRequest = useMemo(() => ReportUtils.isMoneyRequest(report), [report]); const isInvoiceReport = useMemo(() => ReportUtils.isInvoiceReport(report), [report]); + const isInvoiceRoom = useMemo(() => ReportUtils.isInvoiceRoom(report), [report]); const isTaskReport = useMemo(() => ReportUtils.isTaskReport(report), [report]); + const parentReportAction = ReportActionsUtils.getReportAction(report?.parentReportID ?? '', report?.parentReportActionID ?? ''); + const isCanceledTaskReport = ReportUtils.isCanceledTaskReport(report, parentReportAction); const canEditReportDescription = useMemo(() => ReportUtils.canEditReportDescription(report, policy), [report, policy]); const shouldShowReportDescription = isChatRoom && (canEditReportDescription || report.description !== ''); + const isExpenseReport = isMoneyRequestReport || isInvoiceReport || isMoneyRequest; + const isSingleTransactionView = isMoneyRequest || ReportUtils.isTrackExpenseReport(report); + const shouldDisableRename = useMemo(() => ReportUtils.shouldDisableRename(report), [report]); + const parentNavigationSubtitleData = ReportUtils.getParentNavigationSubtitle(report); // eslint-disable-next-line react-hooks/exhaustive-deps -- policy is a dependency because `getChatRoomSubtitle` calls `getPolicyName` which in turn retrieves the value from the `policy` value stored in Onyx const chatRoomSubtitle = useMemo(() => ReportUtils.getChatRoomSubtitle(report), [report, policy]); - const parentNavigationSubtitleData = ReportUtils.getParentNavigationSubtitle(report); const isSystemChat = useMemo(() => ReportUtils.isSystemChat(report), [report]); const isGroupChat = useMemo(() => ReportUtils.isGroupChat(report), [report]); const isThread = useMemo(() => ReportUtils.isThread(report), [report]); @@ -100,12 +141,64 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD return !pendingMember || pendingMember.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE ? accountID : []; }); - const isGroupDMChat = useMemo(() => ReportUtils.isDM(report) && participants.length > 1, [report, participants.length]); - + const caseID = useMemo((): CaseID => { + // 3. MoneyReportHeader + if (isMoneyRequestReport || isInvoiceReport) { + return CASES.MONEY_REPORT; + } + // 2. MoneyRequestHeader + if (isSingleTransactionView) { + return CASES.MONEY_REQUEST; + } + // 1. HeaderView + return CASES.DEFAULT; + }, [isInvoiceReport, isMoneyRequestReport, isSingleTransactionView]); const isPrivateNotesFetchTriggered = report?.isLoadingPrivateNotes !== undefined; const isSelfDM = useMemo(() => ReportUtils.isSelfDM(report), [report]); + const requestParentReportAction = useMemo(() => { + // 2. MoneyReport case + if (caseID === CASES.MONEY_REPORT) { + if (!reportActions || !transactionThreadReport?.parentReportActionID) { + return null; + } + return reportActions.find((action) => action.reportActionID === transactionThreadReport.parentReportActionID); + } + return parentReportAction; + }, [caseID, parentReportAction, reportActions, transactionThreadReport?.parentReportActionID]); + + const isActionOwner = + typeof requestParentReportAction?.actorAccountID === 'number' && typeof session?.accountID === 'number' && requestParentReportAction.actorAccountID === session?.accountID; + const isDeletedParentAction = ReportActionsUtils.isDeletedAction(requestParentReportAction); + + const moneyRequestReport = useMemo(() => { + if (caseID === CASES.MONEY_REQUEST) { + return parentReport; + } + return report; + }, [caseID, parentReport, report]); + + const canModifyTask = Task.canModifyTask(report, session?.accountID ?? -1); + const shouldShowTaskDeleteButton = + isTaskReport && + !isCanceledTaskReport && + ReportUtils.canWriteInReport(report) && + report.stateNum !== CONST.REPORT.STATE_NUM.APPROVED && + !ReportUtils.isClosedReport(report) && + canModifyTask; + const canDeleteRequest = + isActionOwner && (ReportUtils.canAddOrDeleteTransactions(moneyRequestReport) || ReportUtils.isTrackExpenseReport(transactionThreadReport)) && !isDeletedParentAction; + const shouldShowDeleteButton = shouldShowTaskDeleteButton || canDeleteRequest; + + useEffect(() => { + if (canDeleteRequest) { + return; + } + + setIsDeleteModalVisible(false); + }, [canDeleteRequest]); + useEffect(() => { // Do not fetch private notes if isLoadingPrivateNotes is already defined, or if the network is offline, or if the report is a self DM. if (isPrivateNotesFetchTriggered || isOffline || isSelfDM) { @@ -124,6 +217,28 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD Report.leaveGroupChat(report.reportID); }, [isChatRoom, isPolicyEmployee, isPolicyExpenseChat, report.reportID, report.visibility]); + const shouldShowLeaveButton = !isThread && (isGroupChat || (isChatRoom && ReportUtils.canLeaveChat(report, policy)) || (isPolicyExpenseChat && !isPolicyAdmin)); + + const reportName = ReportUtils.isDeprecatedGroupDM(report) || isGroupChat ? ReportUtils.getGroupChatName(undefined, false, report) : ReportUtils.getReportName(report); + + const additionalRoomDetails = + (isPolicyExpenseChat && !!report?.isOwnPolicyExpenseChat) || ReportUtils.isExpenseReport(report) || isPolicyExpenseChat || isInvoiceRoom + ? chatRoomSubtitle + : `${translate('threads.in')} ${chatRoomSubtitle}`; + + let roomDescription; + if (caseID === CASES.MONEY_REQUEST) { + roomDescription = translate('common.name'); + } else if (isGroupChat) { + roomDescription = translate('groupConfirmPage.groupName'); + } else { + roomDescription = translate('newRoomPage.roomName'); + } + + const shouldShowNotificationPref = !isMoneyRequestReport && report?.notificationPreference !== CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN; + const shouldShowWriteCapability = !isMoneyRequestReport; + const shouldShowMenuItem = shouldShowNotificationPref || shouldShowWriteCapability || (!!report?.visibility && report.chatType !== CONST.REPORT.CHAT_TYPE.INVOICE); + const menuItems: ReportDetailsPageMenuItem[] = useMemo(() => { const items: ReportDetailsPageMenuItem[] = []; @@ -175,19 +290,21 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD }); } - items.push({ - key: CONST.REPORT_DETAILS_MENU_ITEM.SETTINGS, - translationKey: 'common.settings', - icon: Expensicons.Gear, - isAnonymousAction: false, - shouldShowRightIcon: true, - action: () => { - Navigation.navigate(ROUTES.REPORT_SETTINGS.getRoute(report?.reportID ?? '-1')); - }, - }); + if (shouldShowMenuItem) { + items.push({ + key: CONST.REPORT_DETAILS_MENU_ITEM.SETTINGS, + translationKey: 'common.settings', + icon: Expensicons.Gear, + isAnonymousAction: false, + shouldShowRightIcon: true, + action: () => { + Navigation.navigate(ROUTES.REPORT_SETTINGS.getRoute(report?.reportID ?? '-1')); + }, + }); + } // Prevent displaying private notes option for threads and task reports - if (!isChatThread && !isMoneyRequestReport && !isInvoiceReport && !ReportUtils.isTaskReport(report)) { + if (!isChatThread && !isMoneyRequestReport && !isInvoiceReport && !isTaskReport) { items.push({ key: CONST.REPORT_DETAILS_MENU_ITEM.PRIVATE_NOTES, translationKey: 'privateNotes.title', @@ -199,7 +316,23 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD }); } - if (!isThread && (isGroupChat || (isChatRoom && ReportUtils.canLeaveChat(report, policy)))) { + // Show actions related to Task Reports + if (isTaskReport && !isCanceledTaskReport) { + if (ReportUtils.isCompletedTaskReport(report) && canModifyTask) { + items.push({ + key: CONST.REPORT_DETAILS_MENU_ITEM.MARK_AS_INCOMPLETE, + icon: Expensicons.Checkmark, + translationKey: 'task.markAsIncomplete', + isAnonymousAction: false, + action: Session.checkIfActionIsAllowed(() => { + Navigation.dismissModal(); + Task.reopenTask(report); + }), + }); + } + } + + if (shouldShowLeaveButton) { items.push({ key: CONST.REPORT_DETAILS_MENU_ITEM.LEAVE_ROOM, translationKey: 'common.leave', @@ -215,27 +348,28 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD }, }); } - return items; }, [ isSelfDM, - isSystemChat, isArchivedRoom, isGroupChat, isDefaultRoom, - isThread, isChatThread, isPolicyEmployee, - isPolicyExpenseChat, - isPolicyAdmin, isUserCreatedPolicyRoom, participants.length, report, + canModifyTask, + isSystemChat, + isPolicyExpenseChat, + shouldShowMenuItem, isMoneyRequestReport, isInvoiceReport, - isChatRoom, - policy, + isTaskReport, + isCanceledTaskReport, + shouldShowLeaveButton, activeChatMembers.length, + isPolicyAdmin, session, leaveChat, ]); @@ -303,56 +437,138 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD ); }, [report, icons, isMoneyRequestReport, isInvoiceReport, isGroupChat, isThread, styles]); - const reportName = ReportUtils.isDeprecatedGroupDM(report) || isGroupChat ? ReportUtils.getGroupChatName(undefined, false, report) : ReportUtils.getReportName(report); + const iouTransactionID = ReportActionsUtils.isMoneyRequestAction(requestParentReportAction) + ? ReportActionsUtils.getOriginalMessage(requestParentReportAction)?.IOUTransactionID ?? '' + : ''; + + const isSettled = ReportUtils.isSettled(moneyRequestReport?.reportID); + const isApproved = ReportUtils.isReportApproved(moneyRequestReport); + + const shouldShowHoldAction = caseID !== CASES.MONEY_REPORT && !isSettled && !isApproved && !isDeletedParentAction && !ReportUtils.isArchivedRoom(parentReport); + const canHoldUnholdReportAction = ReportUtils.canHoldUnholdReportAction(parentReportAction); + + const canJoin = !isExpenseReport && ReportUtils.canJoinChat(report, parentReportAction, policy); + + const promotedActions = useMemo(() => { + const result: PromotedAction[] = []; + + if (canJoin) { + result.push(PromotedActions.join(report)); + } + + if (isExpenseReport && shouldShowHoldAction) { + result.push(PromotedActions.hold({isTextHold: canHoldUnholdReportAction.canHoldRequest, reportAction: parentReportAction})); + } + + if (report) { + result.push(PromotedActions.pin(report)); + } + + result.push(PromotedActions.share(report)); + + return result; + }, [report, parentReportAction, canJoin, isExpenseReport, shouldShowHoldAction, canHoldUnholdReportAction.canHoldRequest]); + + const nameSectionExpenseIOU = ( + + {shouldDisableRename && ( + <> + + + + {isPolicyAdmin ? ( + { + Navigation.navigate(ROUTES.WORKSPACE_INITIAL.getRoute(report?.policyID ?? '')); + }} + > + {chatRoomSubtitleText} + + ) : ( + chatRoomSubtitleText + )} + + )} + {!isEmptyObject(parentNavigationSubtitleData) && (isMoneyRequestReport || isInvoiceReport || isMoneyRequest || isTaskReport) && ( + + )} + + ); + + const nameSectionGroupWorkspace = ( + Report.clearPolicyRoomNameErrors(report?.reportID)} + > + + Navigation.navigate(ROUTES.REPORT_SETTINGS_NAME.getRoute(report.reportID))} + /> + + + ); + + const navigateBackToAfterDelete = useRef(); + + const deleteTransaction = useCallback(() => { + setIsDeleteModalVisible(false); + + if (caseID === CASES.DEFAULT) { + Task.deleteTask(report); + navigateBackToAfterDelete.current = undefined; + return; + } + + if (!requestParentReportAction) { + return; + } + + if (ReportActionsUtils.isTrackExpenseAction(requestParentReportAction)) { + navigateBackToAfterDelete.current = IOU.deleteTrackExpense(moneyRequestReport?.reportID ?? '', iouTransactionID, requestParentReportAction, true); + } else { + navigateBackToAfterDelete.current = IOU.deleteMoneyRequest(iouTransactionID, requestParentReportAction, true); + } + }, [caseID, iouTransactionID, moneyRequestReport?.reportID, report, requestParentReportAction]); return ( - + {renderedAvatar} - - - - - {isPolicyAdmin ? ( - { - Navigation.navigate(ROUTES.WORKSPACE_INITIAL.getRoute(report?.policyID ?? '-1')); - }} - > - {chatRoomSubtitleText} - - ) : ( - chatRoomSubtitleText - )} - {!isEmptyObject(parentNavigationSubtitleData) && (isMoneyRequestReport || isInvoiceReport || isMoneyRequest || isTaskReport) && ( - - )} - + {isExpenseReport && nameSectionExpenseIOU} + + {!isExpenseReport && nameSectionGroupWorkspace} + {shouldShowReportDescription && ( - + )} - + + + {menuItems.map((item) => { const brickRoadIndicator = ReportUtils.hasReportNameError(report) && item.key === CONST.REPORT_DETAILS_MENU_ITEM.SETTINGS ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined; @@ -381,6 +602,15 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD /> ); })} + + {shouldShowDeleteButton && ( + setIsDeleteModalVisible(true)} + /> + )} + setIsDeleteModalVisible(false)} + onModalHide={() => { + if (!navigateBackToAfterDelete.current) { + return; + } + Navigation.goBack(navigateBackToAfterDelete.current); + }} + prompt={caseID === CASES.DEFAULT ? translate('task.deleteConfirmation') : translate('iou.deleteConfirmation')} + confirmText={translate('common.delete')} + cancelText={translate('common.cancel')} + danger + shouldEnableNewFocusManagement + /> ); diff --git a/src/pages/settings/Report/ReportSettingsPage.tsx b/src/pages/settings/Report/ReportSettingsPage.tsx index 6e0746a75a8e..d88df4dcf9cf 100644 --- a/src/pages/settings/Report/ReportSettingsPage.tsx +++ b/src/pages/settings/Report/ReportSettingsPage.tsx @@ -2,10 +2,8 @@ import type {StackScreenProps} from '@react-navigation/stack'; import React, {useMemo} from 'react'; import {View} from 'react-native'; import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; -import DisplayNames from '@components/DisplayNames'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; -import OfflineWithFeedback from '@components/OfflineWithFeedback'; import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import Text from '@components/Text'; @@ -16,7 +14,6 @@ import * as ReportUtils from '@libs/ReportUtils'; import type {ReportSettingsNavigatorParamList} from '@navigation/types'; import withReportOrNotFound from '@pages/home/report/withReportOrNotFound'; import type {WithReportOrNotFoundProps} from '@pages/home/report/withReportOrNotFound'; -import * as ReportActions from '@userActions/Report'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; @@ -27,15 +24,12 @@ type ReportSettingsPageProps = WithReportOrNotFoundProps & StackScreenProps Object.values(policies ?? {}).find((policy) => policy && policy.id === report?.policyID), [policies, report?.policyID]); - const shouldDisableRename = useMemo(() => ReportUtils.shouldDisableRename(report, linkedWorkspace), [report, linkedWorkspace]); const isMoneyRequestReport = ReportUtils.isMoneyRequestReport(report); const shouldDisableSettings = isEmptyObject(report) || ReportUtils.isArchivedRoom(report) || ReportUtils.isSelfDM(report); - const shouldShowRoomName = !ReportUtils.isPolicyExpenseChat(report) && !ReportUtils.isChatThread(report) && !ReportUtils.isInvoiceRoom(report); const notificationPreference = report?.notificationPreference && report.notificationPreference !== CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN ? translate(`notificationPreferencesPage.notificationPreferences.${report.notificationPreference}`) @@ -47,8 +41,6 @@ function ReportSettingsPage({report, policies}: ReportSettingsPageProps) { const shouldAllowChangeVisibility = useMemo(() => ReportUtils.canEditRoomVisibility(report, linkedWorkspace), [report, linkedWorkspace]); const shouldShowNotificationPref = !isMoneyRequestReport && report?.notificationPreference !== CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN; - const roomNameLabel = translate(isMoneyRequestReport ? 'workspace.editor.nameInputLabel' : 'newRoomPage.roomName'); - const reportName = ReportUtils.getReportName(report); const shouldShowWriteCapability = !isMoneyRequestReport; @@ -68,39 +60,6 @@ function ReportSettingsPage({report, policies}: ReportSettingsPageProps) { onPress={() => Navigation.navigate(ROUTES.REPORT_SETTINGS_NOTIFICATION_PREFERENCES.getRoute(reportID))} /> )} - {shouldShowRoomName && ( - ReportActions.clearPolicyRoomNameErrors(reportID)} - > - {shouldDisableRename ? ( - - - {roomNameLabel} - - - - ) : ( - Navigation.navigate(ROUTES.REPORT_SETTINGS_NAME.getRoute(reportID))} - /> - )} - - )} {shouldShowWriteCapability && (shouldAllowWriteCapabilityEditing ? ( ))} - - {linkedWorkspace != null && ( - - - {translate('workspace.common.workspace')} - - - - )} - {!!report?.visibility && report.chatType !== CONST.REPORT.CHAT_TYPE.INVOICE && (shouldAllowChangeVisibility ? ( diff --git a/src/pages/settings/Report/RoomNamePage.tsx b/src/pages/settings/Report/RoomNamePage.tsx index cd9c536bf701..764ccbff6b3c 100644 --- a/src/pages/settings/Report/RoomNamePage.tsx +++ b/src/pages/settings/Report/RoomNamePage.tsx @@ -2,7 +2,7 @@ import {useIsFocused} from '@react-navigation/native'; import React, {useCallback, useRef} from 'react'; import {View} from 'react-native'; import {withOnyx} from 'react-native-onyx'; -import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; +import type {OnyxCollection} from 'react-native-onyx'; import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; @@ -22,21 +22,18 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import INPUT_IDS from '@src/types/form/RoomNameForm'; -import type {Policy, Report} from '@src/types/onyx'; +import type {Report} from '@src/types/onyx'; type RoomNamePageOnyxProps = { /** All reports shared with the user */ reports: OnyxCollection; - - /** Policy of the report for which the name is being edited */ - policy: OnyxEntry; }; type RoomNamePageProps = RoomNamePageOnyxProps & { report: Report; }; -function RoomNamePage({report, policy, reports}: RoomNamePageProps) { +function RoomNamePage({report, reports}: RoomNamePageProps) { const styles = useThemeStyles(); const roomNameInputRef = useRef(null); const isFocused = useIsFocused(); @@ -78,7 +75,7 @@ function RoomNamePage({report, policy, reports}: RoomNamePageProps) { includeSafeAreaPaddingBottom={false} testID={RoomNamePage.displayName} > - + Navigation.goBack(ROUTES.REPORT_SETTINGS.getRoute(report?.reportID ?? '-1'))} @@ -112,7 +109,4 @@ export default withOnyx({ reports: { key: ONYXKEYS.COLLECTION.REPORT, }, - policy: { - key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`, - }, })(RoomNamePage); diff --git a/src/styles/index.ts b/src/styles/index.ts index 93419580ae2c..f0eaad0fd1fd 100644 --- a/src/styles/index.ts +++ b/src/styles/index.ts @@ -2350,11 +2350,6 @@ const styles = (theme: ThemeColors) => backgroundColor: theme.appBG, }, - avatarLarge: { - width: variables.avatarSizeLarge, - height: variables.avatarSizeLarge, - }, - avatarXLarge: { width: variables.avatarSizeXLarge, height: variables.avatarSizeXLarge, @@ -2580,7 +2575,6 @@ const styles = (theme: ThemeColors) => ...flex.flexColumn, ...flex.alignItemsCenter, paddingHorizontal: 20, - paddingBottom: 20, }, reportDetailsRoomInfo: {