diff --git a/src/components/AvatarWithDisplayName.js b/src/components/AvatarWithDisplayName.js
index 7889dcb0b703..181b2ff19146 100644
--- a/src/components/AvatarWithDisplayName.js
+++ b/src/components/AvatarWithDisplayName.js
@@ -7,6 +7,7 @@ import reportPropTypes from '../pages/reportPropTypes';
import participantPropTypes from './participantPropTypes';
import withWindowDimensions, {windowDimensionsPropTypes} from './withWindowDimensions';
import withLocalize, {withLocalizePropTypes} from './withLocalize';
+import UserDetailsTooltip from './UserDetailsTooltip';
import styles from '../styles/styles';
import themeColors from '../styles/themes/default';
import SubscriptAvatar from './SubscriptAvatar';
@@ -71,13 +72,17 @@ function AvatarWithDisplayName(props) {
size={props.size}
/>
) : (
-
+
+
+
+
+
)}
{!_.isEmpty(subtitle) && (
- {props.fullTitle}
+ {props.shouldUseFullTitle
+ ? props.fullTitle
+ : _.map(props.displayNamesWithTooltips, ({displayName}, index) => (
+
+ {displayName}
+ {index < props.displayNamesWithTooltips.length - 1 && , }
+
+ ))}
);
}
diff --git a/src/components/MoneyRequestHeader.js b/src/components/MoneyRequestHeader.js
index af79fd2b8132..fb63ad9c2e17 100644
--- a/src/components/MoneyRequestHeader.js
+++ b/src/components/MoneyRequestHeader.js
@@ -4,6 +4,7 @@ import {View} from 'react-native';
import PropTypes from 'prop-types';
import lodashGet from 'lodash/get';
import HeaderWithBackButton from './HeaderWithBackButton';
+import UserDetailsTooltip from './UserDetailsTooltip';
import iouReportPropTypes from '../pages/iouReportPropTypes';
import withLocalize, {withLocalizePropTypes} from './withLocalize';
import * as ReportUtils from '../libs/ReportUtils';
@@ -115,19 +116,33 @@ function MoneyRequestHeader(props) {
{props.translate('common.to')}
-
+
+
+
+
+
-
- {payeeName}
-
+
+
+
+ {payeeName}
+
+
+
{isExpenseReport && (
{
expect(displayNameTexts).toHaveLength(2);
const firstReportOption = displayNameTexts[0];
expect(lodashGet(firstReportOption, ['props', 'style', 0, 'fontWeight'])).toBe(fontWeightBold);
- expect(lodashGet(firstReportOption, ['props', 'children'])).toBe('C User');
+ expect(firstReportOption).toHaveTextContent('C User');
const secondReportOption = displayNameTexts[1];
expect(lodashGet(secondReportOption, ['props', 'style', 0, 'fontWeight'])).toBe(fontWeightBold);
- expect(lodashGet(secondReportOption, ['props', 'children'])).toBe('B User');
+ expect(secondReportOption).toHaveTextContent('B User');
// Tap the new report option and navigate back to the sidebar again via the back button
return navigateToSidebarOption(0);
@@ -372,9 +372,9 @@ describe('Unread Indicators', () => {
const displayNameTexts = screen.queryAllByLabelText(hintText);
expect(displayNameTexts).toHaveLength(2);
expect(lodashGet(displayNameTexts[0], ['props', 'style', 0, 'fontWeight'])).toBe(undefined);
- expect(lodashGet(displayNameTexts[0], ['props', 'children'])).toBe('C User');
+ expect(displayNameTexts[0]).toHaveTextContent('C User');
expect(lodashGet(displayNameTexts[1], ['props', 'style', 0, 'fontWeight'])).toBe(fontWeightBold);
- expect(lodashGet(displayNameTexts[1], ['props', 'children'])).toBe('B User');
+ expect(displayNameTexts[1]).toHaveTextContent('B User');
}));
xit('Manually marking a chat message as unread shows the new line indicator and updates the LHN', () =>
diff --git a/tests/unit/SidebarFilterTest.js b/tests/unit/SidebarFilterTest.js
index 927381177223..68f3d0107eae 100644
--- a/tests/unit/SidebarFilterTest.js
+++ b/tests/unit/SidebarFilterTest.js
@@ -1,6 +1,5 @@
import {cleanup, screen} from '@testing-library/react-native';
import Onyx from 'react-native-onyx';
-import lodashGet from 'lodash/get';
import * as LHNTestUtils from '../utils/LHNTestUtils';
import waitForPromisesToResolve from '../utils/waitForPromisesToResolve';
import CONST from '../../src/CONST';
@@ -331,7 +330,7 @@ describe('Sidebar', () => {
const navigatesToChatHintText = Localize.translateLocal('accessibilityHints.navigatesToChat');
expect(screen.queryAllByAccessibilityHint(navigatesToChatHintText)).toHaveLength(1);
expect(displayNames).toHaveLength(1);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Three, Four');
} else {
// Both reports visible
const navigatesToChatHintText = Localize.translateLocal('accessibilityHints.navigatesToChat');
@@ -371,8 +370,8 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(2);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('One, Two');
+ expect(displayNames[1]).toHaveTextContent('Three, Four');
})
// When report3 becomes unread
@@ -440,8 +439,8 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(2);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Three, Four');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('One, Two');
+ expect(displayNames[0]).toHaveTextContent('Three, Four');
+ expect(displayNames[1]).toHaveTextContent('One, Two');
})
);
});
@@ -652,7 +651,7 @@ describe('Sidebar', () => {
const navigatesToChatHintText = Localize.translateLocal('accessibilityHints.navigatesToChat');
expect(screen.queryAllByAccessibilityHint(navigatesToChatHintText)).toHaveLength(1);
expect(displayNames).toHaveLength(1);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Three, Four');
} else {
// Both reports visible
const navigatesToChatHintText = Localize.translateLocal('accessibilityHints.navigatesToChat');
diff --git a/tests/unit/SidebarOrderTest.js b/tests/unit/SidebarOrderTest.js
index 3c3863c411b2..bfad3b925e8a 100644
--- a/tests/unit/SidebarOrderTest.js
+++ b/tests/unit/SidebarOrderTest.js
@@ -1,6 +1,5 @@
import Onyx from 'react-native-onyx';
import {cleanup, screen} from '@testing-library/react-native';
-import lodashGet from 'lodash/get';
import waitForPromisesToResolve from '../utils/waitForPromisesToResolve';
import * as LHNTestUtils from '../utils/LHNTestUtils';
import CONST from '../../src/CONST';
@@ -128,9 +127,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Three, Four');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('One, Two');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('Three, Four');
+ expect(displayNames[2]).toHaveTextContent('One, Two');
})
);
});
@@ -169,9 +168,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('One, Two'); // this has `hasDraft` flag enabled so it will be on top
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('One, Two'); // this has `hasDraft` flag enabled so it will be on top: ;
+ expect(displayNames[1]).toHaveTextContent('Five, Six');
+ expect(displayNames[2]).toHaveTextContent('Three, Four');
})
);
});
@@ -210,9 +209,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('One, Two');
+ expect(displayNames[1]).toHaveTextContent('Five, Six');
+ expect(displayNames[2]).toHaveTextContent('Three, Four');
})
);
});
@@ -257,9 +256,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Three, Four');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('One, Two');
+ expect(displayNames[0]).toHaveTextContent('Three, Four');
+ expect(displayNames[1]).toHaveTextContent('Five, Six');
+ expect(displayNames[2]).toHaveTextContent('One, Two');
})
);
});
@@ -395,10 +394,10 @@ describe('Sidebar', () => {
expect(displayNames).toHaveLength(4);
expect(screen.queryAllByTestId('Pin Icon')).toHaveLength(1);
expect(screen.queryAllByTestId('Pencil Icon')).toHaveLength(1);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Email Two owes $100.00');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [3, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('One, Two');
+ expect(displayNames[1]).toHaveTextContent('Email Two owes $100.00');
+ expect(displayNames[2]).toHaveTextContent('Five, Six');
+ expect(displayNames[3]).toHaveTextContent('Three, Four');
})
);
});
@@ -441,9 +440,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('One, Two');
+ expect(displayNames[2]).toHaveTextContent('Three, Four');
})
// When a new report is added
@@ -454,10 +453,10 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(4);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Seven, Eight');
- expect(lodashGet(displayNames, [3, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('One, Two');
+ expect(displayNames[2]).toHaveTextContent('Seven, Eight');
+ expect(displayNames[3]).toHaveTextContent('Three, Four');
})
);
});
@@ -500,9 +499,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('One, Two');
+ expect(displayNames[2]).toHaveTextContent('Three, Four');
})
// When a new report is added
@@ -513,10 +512,10 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(4);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Seven, Eight');
- expect(lodashGet(displayNames, [3, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('One, Two');
+ expect(displayNames[2]).toHaveTextContent('Seven, Eight');
+ expect(displayNames[3]).toHaveTextContent('Three, Four');
})
);
});
@@ -554,9 +553,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Three, Four');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Report (archived)');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('Three, Four');
+ expect(displayNames[2]).toHaveTextContent('Report (archived)');
})
);
});
@@ -590,9 +589,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('One, Two');
+ expect(displayNames[2]).toHaveTextContent('Three, Four');
})
// When a new report is added
@@ -603,10 +602,10 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(4);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Seven, Eight');
- expect(lodashGet(displayNames, [3, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('One, Two');
+ expect(displayNames[2]).toHaveTextContent('Seven, Eight');
+ expect(displayNames[3]).toHaveTextContent('Three, Four');
})
);
});
@@ -644,9 +643,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Three, Four');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Report (archived)');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('Three, Four');
+ expect(displayNames[2]).toHaveTextContent('Report (archived)');
})
);
});
@@ -733,11 +732,11 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(5);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Email Two owes $100.00');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('Email Two owes $100.00');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Email Two owes $100.00');
- expect(lodashGet(displayNames, [3, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [4, 'props', 'children'])).toBe('One, Two');
+ expect(displayNames[0]).toHaveTextContent('Email Two owes $100.00');
+ expect(displayNames[1]).toHaveTextContent('Email Two owes $100.00');
+ expect(displayNames[2]).toHaveTextContent('Email Two owes $100.00');
+ expect(displayNames[3]).toHaveTextContent('Five, Six');
+ expect(displayNames[4]).toHaveTextContent('One, Two');
})
);
});
@@ -777,9 +776,9 @@ describe('Sidebar', () => {
const hintText = Localize.translateLocal('accessibilityHints.chatUserDisplayNames');
const displayNames = screen.queryAllByLabelText(hintText);
expect(displayNames).toHaveLength(3);
- expect(lodashGet(displayNames, [0, 'props', 'children'])).toBe('Five, Six');
- expect(lodashGet(displayNames, [1, 'props', 'children'])).toBe('One, Two');
- expect(lodashGet(displayNames, [2, 'props', 'children'])).toBe('Three, Four');
+ expect(displayNames[0]).toHaveTextContent('Five, Six');
+ expect(displayNames[1]).toHaveTextContent('One, Two');
+ expect(displayNames[2]).toHaveTextContent('Three, Four');
})
);
});