Skip to content

Commit 85c80d0

Browse files
committed
Fix: Prevent removal of default members from workspace chats
1 parent 4176e95 commit 85c80d0

File tree

2 files changed

+29
-24
lines changed

2 files changed

+29
-24
lines changed

src/pages/ReportDetailsPage.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD
160160
isAnonymousAction: false,
161161
shouldShowRightIcon: true,
162162
action: () => {
163-
if (isUserCreatedPolicyRoom || isChatThread || isPolicyExpenseChat) {
163+
if (isUserCreatedPolicyRoom || isChatThread || (isPolicyExpenseChat && isPolicyAdmin)) {
164164
Navigation.navigate(ROUTES.ROOM_MEMBERS.getRoute(report?.reportID ?? ''));
165165
} else {
166166
Navigation.navigate(ROUTES.REPORT_PARTICIPANTS.getRoute(report?.reportID ?? ''));
@@ -204,7 +204,7 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD
204204
});
205205
}
206206

207-
if (isGroupChat || (isChatRoom && ReportUtils.canLeaveChat(report, policy ?? null))) {
207+
if (isGroupChat || (isChatRoom && ReportUtils.canLeaveChat(report, policy ?? null)) || (isPolicyExpenseChat && !isPolicyAdmin)) {
208208
items.push({
209209
key: CONST.REPORT_DETAILS_MENU_ITEM.LEAVE_ROOM,
210210
translationKey: 'common.leave',
@@ -231,6 +231,7 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD
231231
isChatThread,
232232
isPolicyEmployee,
233233
isPolicyExpenseChat,
234+
isPolicyAdmin,
234235
isUserCreatedPolicyRoom,
235236
participants.length,
236237
report,

src/pages/RoomMembersPage.tsx

+26-22
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ function RoomMembersPage({report, session, policies}: RoomMembersPageProps) {
5555
const [searchValue, setSearchValue] = useState('');
5656
const [didLoadRoomMembers, setDidLoadRoomMembers] = useState(false);
5757
const personalDetails = usePersonalDetails() || CONST.EMPTY_OBJECT;
58+
const policy = useMemo(() => policies?.[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID ?? ''}`], [policies, report?.policyID]);
59+
const isPolicyExpenseChat = useMemo(() => ReportUtils.isPolicyExpenseChat(report), [report]);
5860

5961
const isFocusedScreen = useIsFocused();
6062

@@ -196,31 +198,33 @@ function RoomMembersPage({report, session, policies}: RoomMembersPageProps) {
196198
memberDetails += ` ${details.phoneNumber.toLowerCase()}`;
197199
}
198200

199-
if (!OptionsListUtils.isSearchStringMatch(searchValue.trim(), memberDetails)) {
200-
return;
201+
if (!OptionsListUtils.isSearchStringMatch(searchValue.trim(), memberDetails)) {
202+
return;
203+
}
201204
}
202-
}
203-
const pendingChatMember = report?.pendingChatMembers?.findLast((member) => member.accountID === accountID.toString());
205+
const pendingChatMember = report?.pendingChatMembers?.findLast((member) => member.accountID === accountID.toString());
206+
const isAdmin = !!(policy && policy.employeeList && details.login && policy.employeeList[details.login]?.role === CONST.POLICY.ROLE.ADMIN);
207+
const isDisabled = (isPolicyExpenseChat && isAdmin) || accountID === session?.accountID || pendingChatMember?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE;
204208

205-
result.push({
206-
keyForList: String(accountID),
207-
accountID,
208-
isSelected: selectedMembers.includes(accountID),
209-
isDisabled: accountID === session?.accountID || pendingChatMember?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE,
210-
text: formatPhoneNumber(PersonalDetailsUtils.getDisplayNameOrDefault(details)),
211-
alternateText: details?.login ? formatPhoneNumber(details.login) : '',
212-
icons: [
213-
{
214-
source: details.avatar ?? FallbackAvatar,
215-
name: details.login ?? '',
216-
type: CONST.ICON_TYPE_AVATAR,
217-
id: accountID,
218-
},
219-
],
220-
pendingAction: pendingChatMember?.pendingAction,
221-
errors: pendingChatMember?.errors,
209+
result.push({
210+
keyForList: String(accountID),
211+
accountID,
212+
isSelected: selectedMembers.includes(accountID),
213+
isDisabled,
214+
text: formatPhoneNumber(PersonalDetailsUtils.getDisplayNameOrDefault(details)),
215+
alternateText: details?.login ? formatPhoneNumber(details.login) : '',
216+
icons: [
217+
{
218+
source: details.avatar ?? FallbackAvatar,
219+
name: details.login ?? '',
220+
type: CONST.ICON_TYPE_AVATAR,
221+
id: accountID,
222+
},
223+
],
224+
pendingAction: pendingChatMember?.pendingAction,
225+
errors: pendingChatMember?.errors,
226+
});
222227
});
223-
});
224228

225229
result = result.sort((value1, value2) => localeCompare(value1.text ?? '', value2.text ?? ''));
226230

0 commit comments

Comments
 (0)