diff --git a/src/libs/PolicyUtils.js b/src/libs/PolicyUtils.js index f19420a2b38..91396be628a 100644 --- a/src/libs/PolicyUtils.js +++ b/src/libs/PolicyUtils.js @@ -92,4 +92,12 @@ function isExpensifyTeam(email) { return emailDomain === CONST.EXPENSIFY_PARTNER_NAME || emailDomain === CONST.EMAIL.GUIDES_DOMAIN; } -export {hasPolicyMemberError, hasPolicyError, hasPolicyErrorFields, hasCustomUnitsError, getPolicyBrickRoadIndicatorStatus, shouldShowPolicy, isExpensifyTeam}; +/** + * Checks if the current user is an admin of the policy. + * + * @param {Object} policy + * @returns {Boolean} + */ +const isPolicyAdmin = (policy) => lodashGet(policy, 'role') === CONST.POLICY.ROLE.ADMIN; + +export {hasPolicyMemberError, hasPolicyError, hasPolicyErrorFields, hasCustomUnitsError, getPolicyBrickRoadIndicatorStatus, shouldShowPolicy, isExpensifyTeam, isPolicyAdmin}; diff --git a/src/pages/ReportDetailsPage.js b/src/pages/ReportDetailsPage.js index 11badcede40..f073abbb261 100644 --- a/src/pages/ReportDetailsPage.js +++ b/src/pages/ReportDetailsPage.js @@ -2,7 +2,7 @@ import React, {Component} from 'react'; import PropTypes from 'prop-types'; import {withOnyx} from 'react-native-onyx'; import _ from 'underscore'; -import {View, ScrollView} from 'react-native'; +import {View, ScrollView, Pressable} from 'react-native'; import lodashGet from 'lodash/get'; import RoomHeaderAvatars from '../components/RoomHeaderAvatars'; import compose from '../libs/compose'; @@ -15,6 +15,7 @@ import styles from '../styles/styles'; import DisplayNames from '../components/DisplayNames'; import * as OptionsListUtils from '../libs/OptionsListUtils'; import * as ReportUtils from '../libs/ReportUtils'; +import * as PolicyUtils from '../libs/PolicyUtils'; import * as Report from '../libs/actions/Report'; import participantPropTypes from '../components/participantPropTypes'; import * as Expensicons from '../components/Icon/Expensicons'; @@ -56,6 +57,10 @@ const defaultProps = { }; class ReportDetailsPage extends Component { + getPolicy() { + return this.props.policies[`${ONYXKEYS.COLLECTION.POLICY}${this.props.report.policyID}`]; + } + getMenuItems() { const menuItems = [ { @@ -93,7 +98,7 @@ class ReportDetailsPage extends Component { }); } - const policy = this.props.policies[`${ONYXKEYS.COLLECTION.POLICY}${this.props.report.policyID}`]; + const policy = this.getPolicy(); const isThread = ReportUtils.isThread(this.props.report); if (ReportUtils.isUserCreatedPolicyRoom(this.props.report) || ReportUtils.canLeaveRoom(this.props.report, !_.isEmpty(policy)) || isThread) { menuItems.push({ @@ -119,6 +124,15 @@ class ReportDetailsPage extends Component { isMultipleParticipant, ); const menuItems = this.getMenuItems(); + const isPolicyAdmin = PolicyUtils.isPolicyAdmin(this.getPolicy()); + const chatRoomSubtitleText = ( + + {chatRoomSubtitle} + + ); return ( @@ -144,12 +158,17 @@ class ReportDetailsPage extends Component { shouldUseFullTitle={isChatRoom || isPolicyExpenseChat || isThread} /> - - {chatRoomSubtitle} - + {isPolicyAdmin ? ( + { + Navigation.navigate(ROUTES.getWorkspaceInitialRoute(this.props.report.policyID)); + }} + > + {chatRoomSubtitleText} + + ) : ( + chatRoomSubtitleText + )}