Skip to content

Commit

Permalink
Merge pull request Expensify#31076 from abzokhattab/introduce-persona…
Browse files Browse the repository at this point in the history
…l-details-hoc-in-places-that-use-with-current-user-personal-details-hoc

Introducing usePersonalDetails hoc in places that use withCurrentUserPersonalDetails HOC
  • Loading branch information
Li357 authored Nov 30, 2023
2 parents 53f2f9f + 10b460d commit d95b135
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 58 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import lodashGet from 'lodash/get';
import React from 'react';
import {withOnyx} from 'react-native-onyx';
import {TNodeChildrenRenderer} from 'react-native-render-html';
import _ from 'underscore';
import {usePersonalDetails} from '@components/OnyxProvider';
import {ShowContextMenuContext, showContextMenuForReport} from '@components/ShowContextMenuContext';
import Text from '@components/Text';
import UserDetailsTooltip from '@components/UserDetailsTooltip';
import withCurrentUserPersonalDetails from '@components/withCurrentUserPersonalDetails';
import useLocalize from '@hooks/useLocalize';
import compose from '@libs/compose';
import * as LocalePhoneNumber from '@libs/LocalePhoneNumber';
import Navigation from '@libs/Navigation/Navigation';
import * as PersonalDetailsUtils from '@libs/PersonalDetailsUtils';
Expand All @@ -18,7 +17,6 @@ import * as StyleUtils from '@styles/StyleUtils';
import useTheme from '@styles/themes/useTheme';
import useThemeStyles from '@styles/useThemeStyles';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import htmlRendererPropTypes from './htmlRendererPropTypes';

Expand All @@ -27,9 +25,6 @@ const propTypes = {

/** Current user personal details */
currentUserPersonalDetails: personalDetailsPropType.isRequired,

/** Personal details of all users */
personalDetails: personalDetailsPropType.isRequired,
};

function MentionUserRenderer(props) {
Expand All @@ -38,13 +33,14 @@ function MentionUserRenderer(props) {
const {translate} = useLocalize();
const defaultRendererProps = _.omit(props, ['TDefaultRenderer', 'style']);
const htmlAttribAccountID = lodashGet(props.tnode.attributes, 'accountid');
const personalDetails = usePersonalDetails() || CONST.EMPTY_OBJECT;

let accountID;
let displayNameOrLogin;
let navigationRoute;

if (!_.isEmpty(htmlAttribAccountID)) {
const user = lodashGet(props.personalDetails, htmlAttribAccountID);
const user = lodashGet(personalDetails, htmlAttribAccountID);
accountID = parseInt(htmlAttribAccountID, 10);
displayNameOrLogin = LocalePhoneNumber.formatPhoneNumber(lodashGet(user, 'login', '')) || lodashGet(user, 'displayName', '') || translate('common.hidden');
navigationRoute = ROUTES.PROFILE.getRoute(htmlAttribAccountID);
Expand Down Expand Up @@ -100,11 +96,4 @@ function MentionUserRenderer(props) {
MentionUserRenderer.propTypes = propTypes;
MentionUserRenderer.displayName = 'MentionUserRenderer';

export default compose(
withCurrentUserPersonalDetails,
withOnyx({
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
}),
)(MentionUserRenderer);
export default withCurrentUserPersonalDetails(MentionUserRenderer);
4 changes: 3 additions & 1 deletion src/components/ReportActionItem/TaskView.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import * as Expensicons from '@components/Icon/Expensicons';
import MenuItem from '@components/MenuItem';
import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
import OfflineWithFeedback from '@components/OfflineWithFeedback';
import {usePersonalDetails} from '@components/OnyxProvider';
import PressableWithSecondaryInteraction from '@components/PressableWithSecondaryInteraction';
import SpacerView from '@components/SpacerView';
import Text from '@components/Text';
Expand Down Expand Up @@ -56,6 +57,7 @@ function TaskView(props) {
const canModifyTask = Task.canModifyTask(props.report, props.currentUserPersonalDetails.accountID);
const disableState = !canModifyTask;
const isDisableInteractive = !canModifyTask || !isOpen;
const personalDetails = usePersonalDetails() || CONST.EMPTY_OBJECT;

return (
<View>
Expand Down Expand Up @@ -150,7 +152,7 @@ function TaskView(props) {
<MenuItem
label={props.translate('task.assignee')}
title={ReportUtils.getDisplayNameForParticipant(props.report.managerID)}
icon={OptionsListUtils.getAvatarsForAccountIDs([props.report.managerID], props.personalDetails)}
icon={OptionsListUtils.getAvatarsForAccountIDs([props.report.managerID], personalDetails)}
iconType={CONST.ICON_TYPE_AVATAR}
avatarSize={CONST.AVATAR_SIZE.SMALLER}
titleStyle={styles.assigneeTextStyle}
Expand Down
14 changes: 4 additions & 10 deletions src/pages/RoomMembersPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView
import Button from '@components/Button';
import ConfirmModal from '@components/ConfirmModal';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import {usePersonalDetails} from '@components/OnyxProvider';
import ScreenWrapper from '@components/ScreenWrapper';
import SelectionList from '@components/SelectionList';
import withCurrentUserPersonalDetails, {withCurrentUserPersonalDetailsDefaultProps, withCurrentUserPersonalDetailsPropTypes} from '@components/withCurrentUserPersonalDetails';
Expand All @@ -27,13 +28,9 @@ import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import withReportOrNotFound from './home/report/withReportOrNotFound';
import personalDetailsPropType from './personalDetailsPropType';
import reportPropTypes from './reportPropTypes';

const propTypes = {
/** All personal details asssociated with user */
personalDetails: PropTypes.objectOf(personalDetailsPropType),

/** Beta features list */
betas: PropTypes.arrayOf(PropTypes.string),

Expand Down Expand Up @@ -67,7 +64,6 @@ const propTypes = {
};

const defaultProps = {
personalDetails: {},
session: {
accountID: 0,
},
Expand All @@ -83,6 +79,7 @@ function RoomMembersPage(props) {
const [removeMembersConfirmModalVisible, setRemoveMembersConfirmModalVisible] = useState(false);
const [searchValue, setSearchValue] = useState('');
const [didLoadRoomMembers, setDidLoadRoomMembers] = useState(false);
const personalDetails = usePersonalDetails() || CONST.EMPTY_OBJECT;

/**
* Get members for the current room
Expand Down Expand Up @@ -187,7 +184,7 @@ function RoomMembersPage(props) {
let result = [];

_.each(props.report.participantAccountIDs, (accountID) => {
const details = props.personalDetails[accountID];
const details = personalDetails[accountID];

if (!details) {
Log.hmmm(`[RoomMembersPage] no personal details found for room member with accountID: ${accountID}`);
Expand Down Expand Up @@ -299,7 +296,7 @@ function RoomMembersPage(props) {
headerMessage={headerMessage}
onSelectRow={(item) => toggleUser(item.keyForList)}
onSelectAll={() => toggleAllUsers(data)}
showLoadingPlaceholder={!OptionsListUtils.isPersonalDetailsReady(props.personalDetails) || !didLoadRoomMembers}
showLoadingPlaceholder={!OptionsListUtils.isPersonalDetailsReady(personalDetails) || !didLoadRoomMembers}
showScrollIndicator
shouldPreventDefaultFocusOnSelectRow={!Browser.isMobile()}
/>
Expand All @@ -319,9 +316,6 @@ export default compose(
withWindowDimensions,
withReportOrNotFound(),
withOnyx({
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
session: {
key: ONYXKEYS.SESSION,
},
Expand Down
13 changes: 2 additions & 11 deletions src/pages/home/report/ReportActionCompose/ReportActionCompose.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ import EmojiPickerButton from '@components/EmojiPicker/EmojiPickerButton';
import ExceededCommentLength from '@components/ExceededCommentLength';
import OfflineIndicator from '@components/OfflineIndicator';
import OfflineWithFeedback from '@components/OfflineWithFeedback';
import {withNetwork} from '@components/OnyxProvider';
import participantPropTypes from '@components/participantPropTypes';
import {usePersonalDetails, withNetwork} from '@components/OnyxProvider';
import withCurrentUserPersonalDetails, {withCurrentUserPersonalDetailsDefaultProps, withCurrentUserPersonalDetailsPropTypes} from '@components/withCurrentUserPersonalDetails';
import useLocalize from '@hooks/useLocalize';
import useWindowDimensions from '@hooks/useWindowDimensions';
Expand Down Expand Up @@ -49,9 +48,6 @@ const propTypes = {
/** Array of report actions for this report */
reportActions: PropTypes.arrayOf(PropTypes.shape(reportActionPropTypes)),

/** Personal details of all the users */
personalDetails: PropTypes.objectOf(participantPropTypes),

/** The report currently being looked at */
report: reportPropTypes,

Expand Down Expand Up @@ -84,7 +80,6 @@ const propTypes = {
const defaultProps = {
report: {},
blockedFromConcierge: {},
personalDetails: {},
preferredSkinTone: CONST.EMOJI_DEFAULT_SKIN_TONE,
isComposerFullSize: false,
pendingAction: null,
Expand All @@ -108,7 +103,6 @@ function ReportActionCompose({
network,
onSubmit,
pendingAction,
personalDetails,
report,
reportID,
reportActions,
Expand All @@ -121,7 +115,7 @@ function ReportActionCompose({
const {isMediumScreenWidth, isSmallScreenWidth} = useWindowDimensions();
const animatedRef = useAnimatedRef();
const actionButtonRef = useRef(null);

const personalDetails = usePersonalDetails() || CONST.EMPTY_OBJECT;
/**
* Updates the Highlight state of the composer
*/
Expand Down Expand Up @@ -474,9 +468,6 @@ export default compose(
blockedFromConcierge: {
key: ONYXKEYS.NVP_BLOCKED_FROM_CONCIERGE,
},
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
shouldShowComposeInput: {
key: ONYXKEYS.SHOULD_SHOW_COMPOSE_INPUT,
},
Expand Down
1 change: 0 additions & 1 deletion src/pages/home/report/ReportActionsList.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ const propTypes = {
};

const defaultProps = {
personalDetails: {},
onScroll: () => {},
mostRecentIOUReportActionID: '',
isLoadingInitialReportActions: false,
Expand Down
15 changes: 5 additions & 10 deletions src/pages/iou/steps/MoneyRequestConfirmPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import _ from 'underscore';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import * as Expensicons from '@components/Icon/Expensicons';
import MoneyRequestConfirmationList from '@components/MoneyRequestConfirmationList';
import {usePersonalDetails} from '@components/OnyxProvider';
import ScreenWrapper from '@components/ScreenWrapper';
import withCurrentUserPersonalDetails, {withCurrentUserPersonalDetailsDefaultProps, withCurrentUserPersonalDetailsPropTypes} from '@components/withCurrentUserPersonalDetails';
import withLocalize from '@components/withLocalize';
Expand All @@ -20,7 +21,6 @@ import Navigation from '@libs/Navigation/Navigation';
import * as OptionsListUtils from '@libs/OptionsListUtils';
import * as ReportUtils from '@libs/ReportUtils';
import {iouDefaultProps, iouPropTypes} from '@pages/iou/propTypes';
import personalDetailsPropType from '@pages/personalDetailsPropType';
import reportPropTypes from '@pages/reportPropTypes';
import useThemeStyles from '@styles/useThemeStyles';
import * as IOU from '@userActions/IOU';
Expand All @@ -47,15 +47,11 @@ const propTypes = {
/** Holds data related to Money Request view state, rather than the underlying Money Request data. */
iou: iouPropTypes,

/** Personal details of all users */
personalDetails: personalDetailsPropType,

...withCurrentUserPersonalDetailsPropTypes,
};

const defaultProps = {
report: {},
personalDetails: {},
iou: iouDefaultProps,
...withCurrentUserPersonalDetailsDefaultProps,
};
Expand All @@ -70,16 +66,18 @@ function MoneyRequestConfirmPage(props) {
const isDistanceRequest = MoneyRequestUtils.isDistanceRequest(iouType, props.selectedTab);
const isScanRequest = MoneyRequestUtils.isScanRequest(props.selectedTab);
const [receiptFile, setReceiptFile] = useState();
const personalDetails = usePersonalDetails() || CONST.EMPTY_OBJECT;

const participants = useMemo(
() =>
_.chain(props.iou.participants)
.map((participant) => {
const isPolicyExpenseChat = lodashGet(participant, 'isPolicyExpenseChat', false);
return isPolicyExpenseChat ? OptionsListUtils.getPolicyExpenseReportOption(participant) : OptionsListUtils.getParticipantsOption(participant, props.personalDetails);
return isPolicyExpenseChat ? OptionsListUtils.getPolicyExpenseReportOption(participant) : OptionsListUtils.getParticipantsOption(participant, personalDetails);
})
.filter((participant) => !!participant.login || !!participant.text)
.value(),
[props.iou.participants, props.personalDetails],
[props.iou.participants, personalDetails],
);
const isPolicyExpenseChat = useMemo(() => ReportUtils.isPolicyExpenseChat(ReportUtils.getRootParentReport(props.report)), [props.report]);
const isManualRequestDM = props.selectedTab === CONST.TAB.MANUAL && iouType === CONST.IOU.TYPE.REQUEST;
Expand Down Expand Up @@ -419,9 +417,6 @@ export default compose(
return `${ONYXKEYS.COLLECTION.REPORT}${reportID}`;
},
},
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
selectedTab: {
key: `${ONYXKEYS.COLLECTION.SELECTED_TAB}${CONST.TAB.RECEIPT_TAB_ID}`,
},
Expand Down
14 changes: 4 additions & 10 deletions src/pages/tasks/TaskAssigneeSelectorModal.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {withOnyx} from 'react-native-onyx';
import _ from 'underscore';
import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import {usePersonalDetails} from '@components/OnyxProvider';
import OptionsSelector from '@components/OptionsSelector';
import ScreenWrapper from '@components/ScreenWrapper';
import withCurrentUserPersonalDetails from '@components/withCurrentUserPersonalDetails';
Expand All @@ -16,7 +17,6 @@ import compose from '@libs/compose';
import Navigation from '@libs/Navigation/Navigation';
import * as OptionsListUtils from '@libs/OptionsListUtils';
import * as ReportUtils from '@libs/ReportUtils';
import personalDetailsPropType from '@pages/personalDetailsPropType';
import reportPropTypes from '@pages/reportPropTypes';
import useThemeStyles from '@styles/useThemeStyles';
import * as Task from '@userActions/Task';
Expand All @@ -28,9 +28,6 @@ const propTypes = {
/** Beta features list */
betas: PropTypes.arrayOf(PropTypes.string),

/** All of the personal details for everyone */
personalDetails: PropTypes.objectOf(personalDetailsPropType),

/** All reports shared with the user */
reports: PropTypes.objectOf(reportPropTypes),

Expand Down Expand Up @@ -65,7 +62,6 @@ const propTypes = {

const defaultProps = {
betas: [],
personalDetails: {},
reports: {},
session: {},
route: {},
Expand All @@ -81,13 +77,14 @@ function TaskAssigneeSelectorModal(props) {
const [filteredUserToInvite, setFilteredUserToInvite] = useState(null);
const [filteredCurrentUserOption, setFilteredCurrentUserOption] = useState(null);
const [isLoading, setIsLoading] = React.useState(true);
const allPersonalDetails = usePersonalDetails() || CONST.EMPTY_OBJECT;

const {inputCallbackRef} = useAutoFocusInput();

const updateOptions = useCallback(() => {
const {recentReports, personalDetails, userToInvite, currentUserOption} = OptionsListUtils.getFilteredOptions(
props.reports,
props.personalDetails,
allPersonalDetails,
props.betas,
searchValue.trim(),
[],
Expand All @@ -112,7 +109,7 @@ function TaskAssigneeSelectorModal(props) {
if (isLoading) {
setIsLoading(false);
}
}, [props, searchValue, isLoading]);
}, [props, searchValue, allPersonalDetails, isLoading]);

useEffect(() => {
const debouncedSearch = _.debounce(updateOptions, 200);
Expand Down Expand Up @@ -253,9 +250,6 @@ export default compose(
reports: {
key: ONYXKEYS.COLLECTION.REPORT,
},
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
betas: {
key: ONYXKEYS.BETAS,
},
Expand Down

0 comments on commit d95b135

Please sign in to comment.