Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/hooks/useAutoCreateTrackWorkspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import type {OnyxCollection} from 'react-native-onyx';
import {useCallback, useMemo} from 'react';

import useDelegateAccountID from './useDelegateAccountID';
import useIsAnonymousUser from './useIsAnonymousUser';
import useOnboardingWorkspaceCreationState from './useOnboardingWorkspaceCreationState';
import useOnyx from './useOnyx';
import usePermissions from './usePermissions';
Expand Down Expand Up @@ -62,6 +63,7 @@ function useAutoCreateTrackWorkspace() {
const [selfDMReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${selfDMReportID}`);
const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING);
const [reportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS);
const isAnonymousUser = useIsAnonymousUser();
const {isBetaEnabled} = usePermissions();
const delegateAccountID = useDelegateAccountID();

Expand Down Expand Up @@ -143,6 +145,7 @@ function useAutoCreateTrackWorkspace() {
isBetaEnabled(CONST.BETAS.DEFAULT_ROOMS),
conciergeChatReportID,
reportNameValuePairs,
isAnonymousUser,
newPolicyID,
mergedAccountConciergeReportID,
false,
Expand Down Expand Up @@ -172,6 +175,7 @@ function useAutoCreateTrackWorkspace() {
isBetaEnabled,
conciergeChatReportID,
reportNameValuePairs,
isAnonymousUser,
mergedAccountConciergeReportID,
conciergeChat,
selfDMReport,
Expand Down
3 changes: 3 additions & 0 deletions src/hooks/useCompleteOnboarding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails';
import useDelegateAccountID from './useDelegateAccountID';
import useHasActiveAdminPolicies from './useHasActiveAdminPolicies';
import useHasOwnedPaidPolicy from './useHasOwnedPaidPolicy';
import useIsAnonymousUser from './useIsAnonymousUser';
import useLastWorkspaceNumber from './useLastWorkspaceNumber';
import useLocalize from './useLocalize';
import useOnboardingMessages from './useOnboardingMessages';
Expand Down Expand Up @@ -59,6 +60,7 @@ function useCompleteOnboarding() {
const [adminsChatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${onboardingAdminsChatReportID}`);
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
const [reportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS);
const isAnonymousUser = useIsAnonymousUser();
const [isLoading, setIsLoading] = useState(false);

const groupPolicy = Object.values(allPolicies ?? {}).find((policy) => isGroupPolicy(policy) && isPolicyAdmin(policy, currentUserPersonalDetails.email));
Expand Down Expand Up @@ -143,6 +145,7 @@ function useCompleteOnboarding() {
isBetaEnabled(CONST.BETAS.DEFAULT_ROOMS),
conciergeReportID,
reportNameValuePairs,
isAnonymousUser,
policyID,
adminsChatReportID,
(currentUserPersonalDetails.email ?? '').includes('+'),
Expand Down
5 changes: 4 additions & 1 deletion src/hooks/useFindLastAccessedReport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {findLastAccessedReport} from '@libs/ReportUtils';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';

import useIsAnonymousUser from './useIsAnonymousUser';
import useOnyx from './useOnyx';
import usePermissions from './usePermissions';

Expand All @@ -20,9 +21,11 @@ function useFindLastAccessedReport({openOnAdminRoom, enabled = true}: UseFindLas
const ignoreDomainRooms = !isBetaEnabled(CONST.BETAS.DEFAULT_ROOMS);
const shouldPreferAdminRoom = openOnAdminRoom ?? shouldOpenOnAdminRoom();
const [guideAccountIDs] = useOnyx(ONYXKEYS.DERIVED.GUIDE_ACCOUNT_IDS);
const isAnonymousUser = useIsAnonymousUser();
const [reportNameValuePairs, reportNameValuePairsMetadata] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS);
const [lastAccessedReportID, reportsMetadata] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {
selector: (reports) => (enabled ? findLastAccessedReport(ignoreDomainRooms, guideAccountIDs, shouldPreferAdminRoom, undefined, reportNameValuePairs, reports)?.reportID : undefined),
selector: (reports) =>
enabled ? findLastAccessedReport(ignoreDomainRooms, guideAccountIDs, isAnonymousUser, shouldPreferAdminRoom, undefined, reportNameValuePairs, reports)?.reportID : undefined,
});
return {lastAccessedReportID, reportsMetadata, reportNameValuePairsMetadata};
}
Expand Down
14 changes: 7 additions & 7 deletions src/libs/ReportUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ import type {AvatarSource} from './UserAvatarUtils';
import {isIntuitEnterpriseSuiteConnection} from './AccountingUtils';
import {getBankAccountFromID} from './actions/BankAccounts';
import hasCreditBankAccount from './actions/ReimbursementAccount/hasCreditBankAccount';
import {isAnonymousUser as isAnonymousUserSession} from './actions/Session';
import {convertAttendeesToArray, normalizeAttendees} from './AttendeeUtils';
import {buildOnboardingMessagesWithoutManageTeam} from './buildOnboardingMessages';
import {isCardWithPotentialFraud} from './CardUtils';
Expand Down Expand Up @@ -2571,9 +2570,9 @@ function hasExpensifyGuidesEmails(accountIDs: number[], guideAccountIDs: GuideAc
return accountIDs.some((accountID) => Str.extractEmailDomain(getPersonalDetail(accountID)?.login ?? '') === CONST.EMAIL.GUIDES_DOMAIN);
}

function getMostRecentlyVisitedReport(reports: Array<OnyxEntry<Report>>, lastVisitTimes: Record<string, string>): OnyxEntry<Report> {
function getMostRecentlyVisitedReport(reports: Array<OnyxEntry<Report>>, lastVisitTimes: Record<string, string>, isAnonymousUser: boolean): OnyxEntry<Report> {
const filteredReports = reports.filter((report) => {
if (!report?.isPinned && isHiddenForCurrentUser(report) && !(isPublicRoom(report) && isAnonymousUserSession())) {
if (!report?.isPinned && isHiddenForCurrentUser(report) && !(isPublicRoom(report) && isAnonymousUser)) {
return false;
}
return !!report?.reportID && !!(lastVisitTimes?.[report.reportID] ?? report?.lastReadTime);
Expand All @@ -2600,6 +2599,7 @@ function toLastAccessedReport(report: OnyxEntry<Report>): LastAccessedReport | u
function findLastAccessedReport(
ignoreDomainRooms: boolean,
guideAccountIDs: GuideAccountIDsDerivedValue | undefined,
isAnonymousUser: boolean,
openOnAdminRoom = false,
excludeReportID?: string,
reportNameValuePairs?: OnyxCollection<ReportNameValuePairs>,
Expand Down Expand Up @@ -2631,7 +2631,7 @@ function findLastAccessedReport(
// and it prompts the user to use the Concierge chat instead.
return !isSystemChat(report) && !isArchivedReport(reportNameValuePairsCollection?.[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report?.reportID}`]);
};
const isVisible = (report: OnyxEntry<Report>) => !!report?.isPinned || !isHiddenForCurrentUser(report) || (isPublicRoom(report) && isAnonymousUserSession());
const isVisible = (report: OnyxEntry<Report>) => !!report?.isPinned || !isHiddenForCurrentUser(report) || (isPublicRoom(report) && isAnonymousUser);

// Any visited report outranks every unvisited one, so pick the newest eligible visit instead of scanning all reports.
let newestVisitTime = '';
Expand Down Expand Up @@ -2663,7 +2663,7 @@ function findLastAccessedReport(
}
return toLastAccessedReport(lodashMaxBy(reportsValues, (a) => a?.lastReadTime ?? ''));
}
return toLastAccessedReport(getMostRecentlyVisitedReport(reportsValues, allReportLastVisitTimes));
return toLastAccessedReport(getMostRecentlyVisitedReport(reportsValues, allReportLastVisitTimes, isAnonymousUser));
}

/**
Expand Down Expand Up @@ -12982,7 +12982,7 @@ function canJoinChat(
/**
* Whether the user can leave a report
*/
function canLeaveChat(report: OnyxEntry<Report>, policy: OnyxEntry<Policy>, currentUserAccountID: number | undefined, isReportArchived = false): boolean {
function canLeaveChat(report: OnyxEntry<Report>, policy: OnyxEntry<Policy>, currentUserAccountID: number | undefined, isAnonymousUser: boolean, isReportArchived = false): boolean {
if (isRootGroupChat(report, isReportArchived)) {
return true;
}
Expand All @@ -12991,7 +12991,7 @@ function canLeaveChat(report: OnyxEntry<Report>, policy: OnyxEntry<Policy>, curr
return true;
}

if (isPublicRoom(report) && isAnonymousUserSession()) {
if (isPublicRoom(report) && isAnonymousUser) {
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/Link.ts
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@ function openReportFromDeepLink(
// If the report does not exist, navigate to the last accessed report or Concierge chat
if (reportID && (!report?.reportID || report.errorFields?.notFound)) {
// TODO: Pass guideAccountIDs once callers are fully migrated — PR 33 (https://github.com/Expensify/App/issues/66413); findLastAccessedReport falls back to hasExpensifyGuidesEmails → allPersonalDetails
const lastAccessedReportID = findLastAccessedReport(false, undefined, shouldOpenOnAdminRoom(), reportID, reportNameValuePairs)?.reportID;
const lastAccessedReportID = findLastAccessedReport(false, undefined, isAnonymousUser(), shouldOpenOnAdminRoom(), reportID, reportNameValuePairs)?.reportID;
if (lastAccessedReportID) {
const lastAccessedReportRoute = ROUTES.REPORT_WITH_ID.getRoute(lastAccessedReportID);
Navigation.navigate(lastAccessedReportRoute, {forceReplace: Navigation.getTopmostReportId() === reportID, waitForTransition: true});
Expand Down
14 changes: 13 additions & 1 deletion src/libs/navigateAfterOnboarding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ function getReportIDAfterOnboarding(
canUseDefaultRooms: boolean | undefined,
conciergeReportID: string | undefined,
reportNameValuePairs: OnyxCollection<ReportNameValuePairs>,
isAnonymousUser: boolean,
onboardingPolicyID?: string,
onboardingAdminsChatReportID?: string,
shouldPreventOpenAdminRoom = false,
Expand All @@ -87,7 +88,14 @@ function getReportIDAfterOnboarding(
}

// TODO: Pass guideAccountIDs once callers are fully migrated — PR 33 (https://github.com/Expensify/App/issues/66413); findLastAccessedReport falls back to hasExpensifyGuidesEmails → allPersonalDetails
const lastAccessedReport = findLastAccessedReport(!canUseDefaultRooms, undefined, shouldOpenOnAdminRoom() && !shouldPreventOpenAdminRoom, undefined, reportNameValuePairs);
const lastAccessedReport = findLastAccessedReport(
!canUseDefaultRooms,
undefined,
isAnonymousUser,
shouldOpenOnAdminRoom() && !shouldPreventOpenAdminRoom,
undefined,
reportNameValuePairs,
);
const lastAccessedReportID = lastAccessedReport?.reportID;

// When the user goes through the onboarding flow, a workspace can be created if the user selects specific options. The user should be taken to the #admins room for that workspace because it is the most natural place for them to start their experience in the app.
Expand All @@ -109,6 +117,7 @@ function navigateAfterOnboarding(
canUseDefaultRooms: boolean | undefined,
conciergeReportID: string | undefined,
reportNameValuePairs: OnyxCollection<ReportNameValuePairs>,
isAnonymousUser: boolean,
onboardingPolicyID?: string,
onboardingAdminsChatReportID?: string,
shouldPreventOpenAdminRoom = false,
Expand Down Expand Up @@ -153,6 +162,7 @@ function navigateAfterOnboarding(
canUseDefaultRooms,
conciergeReportID,
reportNameValuePairs,
isAnonymousUser,
onboardingPolicyID,
onboardingAdminsChatReportID,
shouldPreventOpenAdminRoom,
Expand All @@ -170,6 +180,7 @@ function navigateAfterOnboardingWithMicrotaskQueue(
canUseDefaultRooms: boolean | undefined,
conciergeReportID: string | undefined,
reportNameValuePairs: OnyxCollection<ReportNameValuePairs>,
isAnonymousUser: boolean,
onboardingPolicyID?: string,
onboardingAdminsChatReportID?: string,
shouldPreventOpenAdminRoom = false,
Expand All @@ -182,6 +193,7 @@ function navigateAfterOnboardingWithMicrotaskQueue(
canUseDefaultRooms,
conciergeReportID,
reportNameValuePairs,
isAnonymousUser,
onboardingPolicyID,
onboardingAdminsChatReportID,
shouldPreventOpenAdminRoom,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {ModalActions} from '@components/Modal/Global/ModalContext';

import useConfirmModal from '@hooks/useConfirmModal';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useIsAnonymousUser from '@hooks/useIsAnonymousUser';
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
Expand Down Expand Up @@ -46,10 +47,11 @@ function ReportDetailsMenuLeaveItem({reportID}: ReportDetailsMenuLeaveItemProps)
const [personalDetails] = useAllPersonalDetails();
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
const currentUserAccountID = currentUserPersonalDetails?.accountID;
const isAnonymousUser = useIsAnonymousUser();
const isReportArchived = useReportIsArchived(reportID);
const {showConfirmModal} = useConfirmModal();

const shouldShowLeaveButton = canLeaveChat(report, policy, currentUserAccountID, !!reportNameValuePairs?.private_isArchived);
const shouldShowLeaveButton = canLeaveChat(report, policy, currentUserAccountID, isAnonymousUser, !!reportNameValuePairs?.private_isArchived);

if (!report || !shouldShowLeaveButton) {
return null;
Expand All @@ -61,7 +63,7 @@ function ReportDetailsMenuLeaveItem({reportID}: ReportDetailsMenuLeaveItemProps)

const leaveChat = () => {
// Resolve on tap from the module-scoped copies so this large page does not subscribe to whole collections.
const lastAccessedReportID = findLastAccessedReport(false, guideAccountIDs, false, report.reportID)?.reportID;
const lastAccessedReportID = findLastAccessedReport(false, guideAccountIDs, isAnonymousUser, false, report.reportID)?.reportID;
if (isRootGroupChat) {
leaveGroupChat(
report,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import MenuItemAction from '@components/MenuItem/presets/MenuItemAction';
import useAncestors from '@hooks/useAncestors';
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useHasOutstandingChildTask from '@hooks/useHasOutstandingChildTask';
import useIsAnonymousUser from '@hooks/useIsAnonymousUser';
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
Expand Down Expand Up @@ -47,6 +48,7 @@ function ReportDetailsTaskDeleteActionContent({report, parentReport, parentRepor
const taskDeleteBackTo = Navigation.getTopmostSearchReportRouteParams()?.backTo;
const hasOutstandingChildTask = useHasOutstandingChildTask(report);
const [guideAccountIDs] = useOnyx(ONYXKEYS.DERIVED.GUIDE_ACCOUNT_IDS);
const isAnonymousUser = useIsAnonymousUser();
const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID);
const [reportActionsForOriginalReportID] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.reportID}`);
const [delegateEmail] = useOnyx(ONYXKEYS.ACCOUNT, {selector: delegateEmailSelector});
Expand All @@ -68,7 +70,7 @@ function ReportDetailsTaskDeleteActionContent({report, parentReport, parentRepor
{
ancestors,
shouldNavigateBack: !taskDeleteBackTo,
lastAccessedReportID: findLastAccessedReport(false, guideAccountIDs, false, report.reportID)?.reportID,
lastAccessedReportID: findLastAccessedReport(false, guideAccountIDs, isAnonymousUser, false, report.reportID)?.reportID,
},
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import useAutoCreateSubmitWorkspace from '@hooks/useAutoCreateSubmitWorkspace';
import useAutoCreateTrackWorkspace from '@hooks/useAutoCreateTrackWorkspace';
import useAutoFocusInput from '@hooks/useAutoFocusInput';
import useDelegateAccountID from '@hooks/useDelegateAccountID';
import useIsAnonymousUser from '@hooks/useIsAnonymousUser';
import useLocalize from '@hooks/useLocalize';
import useOnboardingMessages from '@hooks/useOnboardingMessages';
import useOnyx from '@hooks/useOnyx';
Expand Down Expand Up @@ -56,6 +57,7 @@ function BaseOnboardingPersonalDetails({currentUserPersonalDetails, shouldUseNat
const delegateAccountID = useDelegateAccountID();
const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED);
const [reportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS);
const isAnonymousUser = useIsAnonymousUser();
const [loginList] = useOnyx(ONYXKEYS.LOGINS, {selector: expensifyLoginsSelector});
const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING);
const [conciergeChatReportID = ''] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID);
Expand Down Expand Up @@ -135,6 +137,7 @@ function BaseOnboardingPersonalDetails({currentUserPersonalDetails, shouldUseNat
isBetaEnabled(CONST.BETAS.DEFAULT_ROOMS),
conciergeChatReportID,
reportNameValuePairs,
isAnonymousUser,
onboardingPurposeSelected === CONST.ONBOARDING_CHOICES.JOIN_WORKSPACE && !onboardingPolicy ? undefined : onboardingPolicyID,
mergedAccountConciergeReportID,
false,
Expand All @@ -161,6 +164,7 @@ function BaseOnboardingPersonalDetails({currentUserPersonalDetails, shouldUseNat
onboardingPolicy,
isBetaEnabled,
reportNameValuePairs,
isAnonymousUser,
isSmallScreenWidth,
mergedAccountConciergeReportID,
conciergeChatReportID,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import ValidateCodeForm from '@components/ValidateCodeActionModal/ValidateCodeFo

import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
import useDelegateAccountID from '@hooks/useDelegateAccountID';
import useIsAnonymousUser from '@hooks/useIsAnonymousUser';
import useLocalize from '@hooks/useLocalize';
import useOnboardingIntent from '@hooks/useOnboardingIntent';
import useOnboardingMessages from '@hooks/useOnboardingMessages';
Expand Down Expand Up @@ -73,6 +74,7 @@ function BaseOnboardingPrivateDomain({shouldUseNativeStyles, route}: BaseOnboard
const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED);
const [isSelfTourViewed] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {selector: hasSeenTourSelector});
const [reportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS);
const isAnonymousUser = useIsAnonymousUser();
const {joinWorkspaceMessages} = useOnboardingMessages();
const {isBetaEnabled} = usePermissions();
const isVsb = onboardingValues?.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB;
Expand Down Expand Up @@ -168,6 +170,7 @@ function BaseOnboardingPrivateDomain({shouldUseNativeStyles, route}: BaseOnboard
isBetaEnabled(CONST.BETAS.DEFAULT_ROOMS),
conciergeReportID,
reportNameValuePairs,
isAnonymousUser,
onboardingPolicyID,
onboardingAdminsChatReportID,
false,
Expand All @@ -185,6 +188,7 @@ function BaseOnboardingPrivateDomain({shouldUseNativeStyles, route}: BaseOnboard
email,
introSelected,
isBetaEnabled,
isAnonymousUser,
firstName,
isCompletingOnboarding,
isSelfTourViewed,
Expand Down
Loading
Loading