diff --git a/src/components/ReportActionItem/TaskPreview.tsx b/src/components/ReportActionItem/TaskPreview.tsx index b7be9f1b44ea..d9ee9f9dc091 100644 --- a/src/components/ReportActionItem/TaskPreview.tsx +++ b/src/components/ReportActionItem/TaskPreview.tsx @@ -144,7 +144,7 @@ function TaskPreview({ disabled={!isTaskActionable} onPress={callFunctionIfActionIsAllowed(() => { if (isTaskCompleted) { - reopenTask(taskReport, taskReportID); + reopenTask(taskReport, currentUserPersonalDetails.accountID, taskReportID); } else { completeTask(taskReport, taskReportID); } diff --git a/src/components/ReportActionItem/TaskView.tsx b/src/components/ReportActionItem/TaskView.tsx index 08576412d4eb..59fa04a23acd 100644 --- a/src/components/ReportActionItem/TaskView.tsx +++ b/src/components/ReportActionItem/TaskView.tsx @@ -128,7 +128,7 @@ function TaskView({report, parentReport, action}: TaskViewProps) { return; } if (isCompleted) { - reopenTask(report); + reopenTask(report, currentUserPersonalDetails.accountID); } else { completeTask(report); } diff --git a/src/components/TaskHeaderActionButton.tsx b/src/components/TaskHeaderActionButton.tsx index 63f4000bc5cd..c755e907f3e8 100644 --- a/src/components/TaskHeaderActionButton.tsx +++ b/src/components/TaskHeaderActionButton.tsx @@ -1,5 +1,6 @@ import React from 'react'; import {View} from 'react-native'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useParentReport from '@hooks/useParentReport'; import useReportIsArchived from '@hooks/useReportIsArchived'; @@ -10,7 +11,6 @@ import {callFunctionIfActionIsAllowed} from '@userActions/Session'; import {canActionTask, completeTask, reopenTask} from '@userActions/Task'; import type * as OnyxTypes from '@src/types/onyx'; import Button from './Button'; -import {useSession} from './OnyxListItemProvider'; type TaskHeaderActionButtonProps = { /** The report currently being looked at */ @@ -20,10 +20,10 @@ type TaskHeaderActionButtonProps = { function TaskHeaderActionButton({report}: TaskHeaderActionButtonProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const session = useSession(); + const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const parentReport = useParentReport(report.reportID); const isParentReportArchived = useReportIsArchived(parentReport?.reportID); - const isTaskActionable = canActionTask(report, session?.accountID, parentReport, isParentReportArchived); + const isTaskActionable = canActionTask(report, currentUserPersonalDetails?.accountID, parentReport, isParentReportArchived); if (!canWriteInReport(report)) { return null; @@ -41,7 +41,7 @@ function TaskHeaderActionButton({report}: TaskHeaderActionButtonProps) { return; } if (isCompletedTaskReport(report)) { - reopenTask(report); + reopenTask(report, currentUserPersonalDetails.accountID); } else { completeTask(report); } diff --git a/src/components/TestDrive/TestDriveDemo.tsx b/src/components/TestDrive/TestDriveDemo.tsx index 1bf5702604bd..81daaf5881a1 100644 --- a/src/components/TestDrive/TestDriveDemo.tsx +++ b/src/components/TestDrive/TestDriveDemo.tsx @@ -43,7 +43,7 @@ function TestDriveDemo() { // eslint-disable-next-line @typescript-eslint/no-deprecated InteractionManager.runAfterInteractions(() => { setIsVisible(true); - completeTestDriveTask(viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived); + completeTestDriveTask(viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived, currentUserPersonalDetails.accountID); }); // This should fire only during mount. diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 1a49d4ffb866..134f1d5aaa5c 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -10012,13 +10012,13 @@ function shouldAutoFocusOnKeyPress(event: KeyboardEvent): boolean { /** * Navigates to the appropriate screen based on the presence of a private note for the current user. */ -function navigateToPrivateNotes(report: OnyxEntry, session: OnyxEntry, backTo?: string) { - if (isEmpty(report) || isEmpty(session) || !session.accountID) { +function navigateToPrivateNotes(report: OnyxEntry, accountID: number, backTo?: string) { + if (isEmpty(report) || !accountID) { return; } - const currentUserPrivateNote = report.privateNotes?.[session.accountID]?.note ?? ''; + const currentUserPrivateNote = report.privateNotes?.[accountID]?.note ?? ''; if (isEmpty(currentUserPrivateNote)) { - Navigation.navigate(ROUTES.PRIVATE_NOTES_EDIT.getRoute(report.reportID, session.accountID, backTo)); + Navigation.navigate(ROUTES.PRIVATE_NOTES_EDIT.getRoute(report.reportID, accountID, backTo)); return; } Navigation.navigate(ROUTES.PRIVATE_NOTES_LIST.getRoute(report.reportID, backTo)); diff --git a/src/libs/actions/Policy/Category.ts b/src/libs/actions/Policy/Category.ts index ff4c916013b3..f23f4297f9fa 100644 --- a/src/libs/actions/Policy/Category.ts +++ b/src/libs/actions/Policy/Category.ts @@ -43,8 +43,9 @@ function appendSetupCategoriesOnboardingData( setupCategoryTaskReport: OnyxEntry, setupCategoryTaskParentReport: OnyxEntry, isSetupCategoriesTaskParentReportArchived: boolean, + currentUserAccountID: number, ) { - const finishOnboardingTaskData = getFinishOnboardingTaskOnyxData(setupCategoryTaskReport, setupCategoryTaskParentReport, isSetupCategoriesTaskParentReportArchived); + const finishOnboardingTaskData = getFinishOnboardingTaskOnyxData(setupCategoryTaskReport, setupCategoryTaskParentReport, isSetupCategoriesTaskParentReportArchived, currentUserAccountID); onyxData.optimisticData?.push(...(finishOnboardingTaskData.optimisticData ?? [])); onyxData.successData?.push(...(finishOnboardingTaskData.successData ?? [])); onyxData.failureData?.push(...(finishOnboardingTaskData.failureData ?? [])); @@ -316,6 +317,7 @@ function setWorkspaceCategoryEnabled( isSetupCategoriesTaskParentReportArchived: boolean, setupCategoryTaskReport: OnyxEntry, setupCategoryTaskParentReport: OnyxEntry, + currentUserAccountID: number, policyCategories: PolicyCategories = {}, policyTagLists: PolicyTagLists = {}, allTransactionViolations: OnyxCollection = {}, @@ -385,7 +387,7 @@ function setWorkspaceCategoryEnabled( }; pushTransactionViolationsOnyxData(onyxData, policyID, policyTagLists, policyCategories, allTransactionViolations, {}, optimisticPolicyCategoriesData); - appendSetupCategoriesOnboardingData(onyxData, setupCategoryTaskReport, setupCategoryTaskParentReport, isSetupCategoriesTaskParentReportArchived); + appendSetupCategoriesOnboardingData(onyxData, setupCategoryTaskReport, setupCategoryTaskParentReport, isSetupCategoriesTaskParentReportArchived, currentUserAccountID); const parameters = { policyID, @@ -591,9 +593,10 @@ function createPolicyCategory( isSetupCategoriesTaskParentReportArchived: boolean, setupCategoryTaskReport: OnyxEntry, setupCategoryTaskParentReport: OnyxEntry, + currentUserAccountID: number, ) { const onyxData = buildOptimisticPolicyCategories(policyID, [categoryName]); - appendSetupCategoriesOnboardingData(onyxData, setupCategoryTaskReport, setupCategoryTaskParentReport, isSetupCategoriesTaskParentReportArchived); + appendSetupCategoriesOnboardingData(onyxData, setupCategoryTaskReport, setupCategoryTaskParentReport, isSetupCategoriesTaskParentReportArchived, currentUserAccountID); const parameters = { policyID, categories: JSON.stringify([{name: categoryName}]), @@ -975,6 +978,7 @@ function deleteWorkspaceCategories( isSetupCategoriesTaskParentReportArchived: boolean, setupCategoryTaskReport: OnyxEntry, setupCategoryTaskParentReport: OnyxEntry, + currentUserAccountID: number, policyTagLists: PolicyTagLists = {}, policyCategories: PolicyCategories = {}, transactionViolations: OnyxCollection = {}, @@ -1024,7 +1028,7 @@ function deleteWorkspaceCategories( const optimisticPolicyData: Partial = shouldDisableRequiresCategory ? {requiresCategory: false} : {}; pushTransactionViolationsOnyxData(onyxData, policyID, policyTagLists, policyCategories, transactionViolations, optimisticPolicyData, optimisticPolicyCategoriesData); - appendSetupCategoriesOnboardingData(onyxData, setupCategoryTaskReport, setupCategoryTaskParentReport, isSetupCategoriesTaskParentReportArchived); + appendSetupCategoriesOnboardingData(onyxData, setupCategoryTaskReport, setupCategoryTaskParentReport, isSetupCategoriesTaskParentReportArchived, currentUserAccountID); const parameters = { policyID, diff --git a/src/libs/actions/QuickActionNavigation.ts b/src/libs/actions/QuickActionNavigation.ts index 4f9ecab58b92..a7201904b4aa 100644 --- a/src/libs/actions/QuickActionNavigation.ts +++ b/src/libs/actions/QuickActionNavigation.ts @@ -12,6 +12,7 @@ type NavigateToQuickActionParams = { quickAction: QuickAction; selectOption: (onSelected: () => void, shouldRestrictAction: boolean) => void; lastDistanceExpenseType?: DistanceExpenseType; + currentUserAccountID: number; }; function getQuickActionRequestType(action: QuickActionName | undefined, lastDistanceExpenseType?: DistanceExpenseType): IOURequestType | undefined { @@ -34,7 +35,7 @@ function getQuickActionRequestType(action: QuickActionName | undefined, lastDist } function navigateToQuickAction(params: NavigateToQuickActionParams) { - const {isValidReport, quickAction, selectOption, lastDistanceExpenseType} = params; + const {isValidReport, quickAction, selectOption, lastDistanceExpenseType, currentUserAccountID} = params; const reportID = isValidReport && quickAction?.chatReportID ? quickAction?.chatReportID : generateReportID(); const requestType = getQuickActionRequestType(quickAction?.action, lastDistanceExpenseType); @@ -53,7 +54,7 @@ function navigateToQuickAction(params: NavigateToQuickActionParams) { selectOption(() => startMoneyRequest(CONST.IOU.TYPE.PAY, reportID, undefined, true), false); break; case CONST.QUICK_ACTIONS.ASSIGN_TASK: - selectOption(() => startOutCreateTaskQuickAction(isValidReport ? reportID : '', quickAction.targetAccountID ?? CONST.DEFAULT_NUMBER_ID), false); + selectOption(() => startOutCreateTaskQuickAction(currentUserAccountID, isValidReport ? reportID : '', quickAction.targetAccountID ?? CONST.DEFAULT_NUMBER_ID), false); break; case CONST.QUICK_ACTIONS.TRACK_MANUAL: case CONST.QUICK_ACTIONS.TRACK_SCAN: diff --git a/src/libs/actions/Task.ts b/src/libs/actions/Task.ts index 71fb6f57db50..084017d66a7c 100644 --- a/src/libs/actions/Task.ts +++ b/src/libs/actions/Task.ts @@ -43,16 +43,19 @@ type ShareDestination = { shouldUseFullTitleToDisplay: boolean; }; -let currentUserEmail = ''; -let currentUserAccountID = -1; - -Onyx.connect({ - key: ONYXKEYS.SESSION, - callback: (value) => { - currentUserEmail = value?.email ?? ''; - currentUserAccountID = value?.accountID ?? CONST.DEFAULT_NUMBER_ID; - }, -}); +type CreateTaskAndNavigateParams = { + parentReportID: string | undefined; + title: string; + description: string; + assigneeEmail: string; + currentUserAccountID: number; + currentUserEmail: string; + assigneeAccountID?: number; + assigneeChatReport?: OnyxEntry; + policyID?: string; + isCreatedUsingMarkdown?: boolean; + quickAction?: OnyxEntry; +}; let allPersonalDetails: OnyxEntry; Onyx.connect({ @@ -108,17 +111,20 @@ function clearOutTaskInfo(skipConfirmation = false) { * 3a. The CreatedReportAction for the assignee chat report * 3b. The TaskReportAction on the assignee chat report */ -function createTaskAndNavigate( - parentReportID: string | undefined, - title: string, - description: string, - assigneeEmail: string, - assigneeAccountID = 0, - assigneeChatReport?: OnyxEntry, - policyID: string = CONST.POLICY.OWNER_EMAIL_FAKE, - isCreatedUsingMarkdown = false, - quickAction: OnyxEntry = {}, -) { +function createTaskAndNavigate(params: CreateTaskAndNavigateParams) { + const { + parentReportID, + title, + description, + assigneeEmail, + currentUserAccountID, + currentUserEmail, + assigneeAccountID = 0, + assigneeChatReport, + policyID = CONST.POLICY.OWNER_EMAIL_FAKE, + isCreatedUsingMarkdown = false, + quickAction = {}, + } = params; if (!parentReportID) { return; } @@ -465,7 +471,7 @@ function completeTask(taskReport: OnyxEntry, reportIDFromActio /** * Reopen a closed task */ -function reopenTask(taskReport: OnyxEntry, reportIDFromAction?: string) { +function reopenTask(taskReport: OnyxEntry, currentUserAccountID: number, reportIDFromAction?: string) { const taskReportID = taskReport?.reportID ?? reportIDFromAction; if (!taskReportID) { return; @@ -628,7 +634,14 @@ function editTask(report: OnyxTypes.Report, {title, description}: OnyxTypes.Task API.write(WRITE_COMMANDS.EDIT_TASK, parameters, {optimisticData, successData, failureData}); } -function editTaskAssignee(report: OnyxTypes.Report, sessionAccountID: number, assigneeEmail: string, assigneeAccountID: number | null = 0, assigneeChatReport?: OnyxEntry) { +function editTaskAssignee( + report: OnyxTypes.Report, + sessionAccountID: number, + assigneeEmail: string, + currentUserAccountID: number, + assigneeAccountID: number | null = 0, + assigneeChatReport?: OnyxEntry, +) { // Create the EditedReportAction on the task const editTaskReportAction = ReportUtils.buildOptimisticChangedTaskAssigneeReportAction(assigneeAccountID ?? CONST.DEFAULT_NUMBER_ID); const reportName = report.reportName?.trim(); @@ -814,7 +827,7 @@ function setAssigneeChatReport(chatReport: OnyxTypes.Report, isOptimisticReport } } -function setNewOptimisticAssignee(assigneeLogin: string, assigneeAccountID: number) { +function setNewOptimisticAssignee(assigneeLogin: string, assigneeAccountID: number, currentUserAccountID: number) { const report: ReportUtils.OptimisticChatReport = ReportUtils.buildOptimisticChatReport({ participantList: [assigneeAccountID, currentUserAccountID], reportName: '', @@ -843,6 +856,7 @@ function setNewOptimisticAssignee(assigneeLogin: string, assigneeAccountID: numb function setAssigneeValue( assigneeEmail: string, assigneeAccountID: number, + currentUserAccountID: number, shareToReportID?: string, chatReport?: OnyxEntry, isCurrentUser = false, @@ -863,7 +877,7 @@ function setAssigneeValue( } // If chat report is still not found we need to build new optimistic chat report if (!report) { - report = setNewOptimisticAssignee(assigneeEmail, assigneeAccountID).assigneeReport; + report = setNewOptimisticAssignee(assigneeEmail, assigneeAccountID, currentUserAccountID).assigneeReport; } const reportMetadata = ReportUtils.getReportMetadata(report?.reportID); @@ -905,14 +919,14 @@ function setParentReportID(parentReportID: string) { /** * Clears out the task info from the store and navigates to the NewTaskDetails page */ -function clearOutTaskInfoAndNavigate(reportID?: string, chatReport?: OnyxEntry, accountID = 0, skipConfirmation = false) { +function clearOutTaskInfoAndNavigate(currentUserAccountID: number, reportID?: string, chatReport?: OnyxEntry, accountID = 0, skipConfirmation = false) { clearOutTaskInfo(skipConfirmation); if (reportID && reportID !== '0') { setParentReportID(reportID); } if (accountID > 0) { const accountLogin = allPersonalDetails?.[accountID]?.login ?? ''; - setAssigneeValue(accountLogin, accountID, reportID, chatReport, accountID === currentUserAccountID, skipConfirmation); + setAssigneeValue(accountLogin, accountID, currentUserAccountID, reportID, chatReport, accountID === currentUserAccountID, skipConfirmation); } Navigation.navigate(ROUTES.NEW_TASK_DETAILS.getRoute(Navigation.getReportRHPActiveRoute())); } @@ -920,12 +934,12 @@ function clearOutTaskInfoAndNavigate(reportID?: string, chatReport?: OnyxEntry): stri /** * Cancels a task by setting the report state to SUBMITTED and status to CLOSED */ -function deleteTask(report: OnyxEntry, isReportArchived: boolean) { +function deleteTask(report: OnyxEntry, isReportArchived: boolean, currentUserAccountID: number) { if (!report) { return; } @@ -1292,7 +1306,12 @@ function clearTaskErrors(reportID: string | undefined) { }); } -function getFinishOnboardingTaskOnyxData(taskReport: OnyxEntry, taskParentReport: OnyxEntry, isParentReportArchived: boolean): OnyxData { +function getFinishOnboardingTaskOnyxData( + taskReport: OnyxEntry, + taskParentReport: OnyxEntry, + isParentReportArchived: boolean, + currentUserAccountID: number, +): OnyxData { if (taskReport && canActionTask(taskReport, currentUserAccountID, taskParentReport, isParentReportArchived)) { if (taskReport) { if (taskReport.stateNum !== CONST.REPORT.STATE_NUM.APPROVED || taskReport.statusNum !== CONST.REPORT.STATUS_NUM.APPROVED) { @@ -1307,10 +1326,11 @@ function completeTestDriveTask( viewTourTaskReport: OnyxEntry, viewTourTaskParentReport: OnyxEntry, isViewTourTaskParentReportArchived: boolean, + currentUserAccountID: number, shouldUpdateSelfTourViewedOnlyLocally = false, ) { setSelfTourViewed(shouldUpdateSelfTourViewedOnlyLocally); - getFinishOnboardingTaskOnyxData(viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived); + getFinishOnboardingTaskOnyxData(viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived, currentUserAccountID); } export { diff --git a/src/libs/actions/Tour.ts b/src/libs/actions/Tour.ts index 147941067d32..a19e566ca481 100644 --- a/src/libs/actions/Tour.ts +++ b/src/libs/actions/Tour.ts @@ -15,6 +15,7 @@ function startTestDrive( viewTourTaskReport: OnyxEntry, viewTourTaskParentReport: OnyxEntry, isViewTourTaskParentReportArchived: boolean, + currentUserAccountID: number, ) { // eslint-disable-next-line @typescript-eslint/no-deprecated InteractionManager.runAfterInteractions(() => { @@ -26,7 +27,7 @@ function startTestDrive( introSelected?.choice === CONST.ONBOARDING_CHOICES.TRACK_WORKSPACE || (introSelected?.choice === CONST.ONBOARDING_CHOICES.SUBMIT && introSelected.inviteType === CONST.ONBOARDING_INVITE_TYPES.WORKSPACE) ) { - completeTestDriveTask(viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived, shouldUpdateSelfTourViewedOnlyLocally); + completeTestDriveTask(viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived, currentUserAccountID, shouldUpdateSelfTourViewedOnlyLocally); Navigation.navigate(ROUTES.TEST_DRIVE_DEMO_ROOT); } else { Navigation.navigate(ROUTES.TEST_DRIVE_MODAL_ROOT.route); diff --git a/src/pages/ProfilePage.tsx b/src/pages/ProfilePage.tsx index ab37fd6b9a0d..c14252210698 100755 --- a/src/pages/ProfilePage.tsx +++ b/src/pages/ProfilePage.tsx @@ -270,7 +270,7 @@ function ProfilePage({route}: ProfilePageProps) { title={`${translate('privateNotes.title')}`} titleStyle={styles.flex1} icon={Expensicons.Pencil} - onPress={() => navigateToPrivateNotes(report, session, navigateBackTo)} + onPress={() => navigateToPrivateNotes(report, session?.accountID ?? CONST.DEFAULT_NUMBER_ID, navigateBackTo)} wrapperStyle={styles.breakAll} shouldShowRightIcon brickRoadIndicator={hasErrorInPrivateNotes(report) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} diff --git a/src/pages/ReportDetailsPage.tsx b/src/pages/ReportDetailsPage.tsx index 5ff691ce20ed..ce22e45881cb 100644 --- a/src/pages/ReportDetailsPage.tsx +++ b/src/pages/ReportDetailsPage.tsx @@ -22,6 +22,7 @@ import ReportActionAvatars from '@components/ReportActionAvatars'; import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import {useSearchContext} from '@components/Search/SearchContext'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useDuplicateTransactionsAndViolations from '@hooks/useDuplicateTransactionsAndViolations'; import useGetIOUReportFromReportAction from '@hooks/useGetIOUReportFromReportAction'; import useLocalize from '@hooks/useLocalize'; @@ -170,7 +171,7 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail const [transactionThreadReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionThreadReportID}`, {canBeMissing: true}); const [isDebugModeEnabled = false] = useOnyx(ONYXKEYS.IS_DEBUG_MODE_ENABLED, {canBeMissing: true}); const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {canBeMissing: false}); - const [session] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false}); + const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const [isLastMemberLeavingGroupModalVisible, setIsLastMemberLeavingGroupModalVisible] = useState(false); const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); const isPolicyAdmin = useMemo(() => isPolicyAdminUtil(policy), [policy]); @@ -191,8 +192,8 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail const isTrackExpenseReport = useMemo(() => isTrackExpenseReportUtil(report), [report]); const isCanceledTaskReport = isCanceledTaskReportUtil(report, parentReportAction); const isParentReportArchived = useReportIsArchived(parentReport?.reportID); - const isTaskModifiable = canModifyTask(report, session?.accountID, isParentReportArchived); - const isTaskActionable = canActionTask(report, session?.accountID, parentReport, isParentReportArchived); + const isTaskModifiable = canModifyTask(report, currentUserPersonalDetails?.accountID, isParentReportArchived); + const isTaskActionable = canActionTask(report, currentUserPersonalDetails?.accountID, parentReport, isParentReportArchived); const canEditReportDescription = useMemo(() => canEditReportDescriptionUtil(report, policy), [report, policy]); const shouldShowReportDescription = isChatRoom && (canEditReportDescription || report.description !== '') && (isTaskReport ? isTaskModifiable : true); const isExpenseReport = isMoneyRequestReport || isInvoiceReport || isMoneyRequest; @@ -259,7 +260,9 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail const {iouReport, chatReport: chatIOUReport, isChatIOUReportArchived} = useGetIOUReportFromReportAction(requestParentReportAction); const isActionOwner = - typeof requestParentReportAction?.actorAccountID === 'number' && typeof session?.accountID === 'number' && requestParentReportAction.actorAccountID === session?.accountID; + typeof requestParentReportAction?.actorAccountID === 'number' && + typeof currentUserPersonalDetails?.accountID === 'number' && + requestParentReportAction.actorAccountID === currentUserPersonalDetails?.accountID; const isDeletedParentAction = isDeletedAction(requestParentReportAction); const moneyRequestReport: OnyxEntry = useMemo(() => { @@ -316,7 +319,7 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail }, [isPolicyEmployee, isRootGroupChat, report, isPolicyAdmin]); const shouldShowLeaveButton = canLeaveChat(report, policy, !!reportNameValuePairs?.private_isArchived); - const shouldShowGoToWorkspace = shouldShowPolicy(policy, false, session?.email) && !policy?.isJoinRequestPending; + const shouldShowGoToWorkspace = shouldShowPolicy(policy, false, currentUserPersonalDetails?.email) && !policy?.isJoinRequestPending; const reportName = Parser.htmlToText(getReportName(report, undefined, undefined, undefined, undefined, reportAttributes)); @@ -456,7 +459,7 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail icon: Expensicons.Pencil, isAnonymousAction: false, shouldShowRightIcon: true, - action: () => navigateToPrivateNotes(report, session, backTo), + action: () => navigateToPrivateNotes(report, currentUserPersonalDetails.accountID, backTo), brickRoadIndicator: hasErrorInPrivateNotes(report) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, }); } @@ -471,7 +474,7 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail isAnonymousAction: false, action: callFunctionIfActionIsAllowed(() => { Navigation.goBack(backTo); - reopenTask(report); + reopenTask(report, currentUserPersonalDetails?.accountID); }), }); } @@ -554,7 +557,7 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail parentReportAction, iouTransactionID, moneyRequestReport?.reportID, - session, + currentUserPersonalDetails?.accountID, isTaskActionable, isRootGroupChat, leaveChat, @@ -778,7 +781,7 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail const deleteTransaction = useCallback(() => { if (caseID === CASES.DEFAULT) { - deleteTask(report, isReportArchived); + deleteTask(report, isReportArchived, currentUserPersonalDetails.accountID); return; } @@ -816,10 +819,15 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail removeTransaction(iouTransactionID); } }, [ - duplicateTransactions, - duplicateTransactionViolations, caseID, + requestParentReportAction, + report, + isReportArchived, + currentUserPersonalDetails.accountID, + moneyRequestReport?.reportID, iouTransactionID, + duplicateTransactions, + duplicateTransactionViolations, isSingleTransactionView, moneyRequestReport, removeTransaction, diff --git a/src/pages/Search/EmptySearchView.tsx b/src/pages/Search/EmptySearchView.tsx index 99d9ae707f12..805717e94f50 100644 --- a/src/pages/Search/EmptySearchView.tsx +++ b/src/pages/Search/EmptySearchView.tsx @@ -288,6 +288,7 @@ function EmptySearchViewContent({ viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived, + currentUserPersonalDetails.accountID, ); }; diff --git a/src/pages/home/HeaderView.tsx b/src/pages/home/HeaderView.tsx index 352a8f1af8f3..85b8469b7fda 100644 --- a/src/pages/home/HeaderView.tsx +++ b/src/pages/home/HeaderView.tsx @@ -21,6 +21,7 @@ import HelpButton from '@components/SidePanel/HelpComponents/HelpButton'; import TaskHeaderActionButton from '@components/TaskHeaderActionButton'; import Text from '@components/Text'; import Tooltip from '@components/Tooltip'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useHasTeam2025Pricing from '@hooks/useHasTeam2025Pricing'; import useLoadingBarVisibility from '@hooks/useLoadingBarVisibility'; import useLocalize from '@hooks/useLocalize'; @@ -109,6 +110,7 @@ function HeaderView({report, parentReportAction, onNavigationMenuButtonClicked, const [firstDayFreeTrial] = useOnyx(ONYXKEYS.NVP_FIRST_DAY_FREE_TRIAL, {canBeMissing: true}); const [lastDayFreeTrial] = useOnyx(ONYXKEYS.NVP_LAST_DAY_FREE_TRIAL, {canBeMissing: true}); const [account] = useOnyx(ONYXKEYS.ACCOUNT, {canBeMissing: true}); + const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const [reportNameValuePairs] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report?.reportID}`, {canBeMissing: true}); const [reportMetadata] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_METADATA}${report?.reportID}`, {canBeMissing: true}); const isReportArchived = isArchivedReport(reportNameValuePairs); @@ -362,7 +364,7 @@ function HeaderView({report, parentReportAction, onNavigationMenuButtonClicked, isVisible={isDeleteTaskConfirmModalVisible} onConfirm={() => { setIsDeleteTaskConfirmModalVisible(false); - deleteTask(report, isReportArchived); + deleteTask(report, isReportArchived, currentUserPersonalDetails.accountID); }} onCancel={() => setIsDeleteTaskConfirmModalVisible(false)} title={translate('task.deleteTask')} diff --git a/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx b/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx index 84555c60dec6..3a5fc61cee8e 100644 --- a/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx +++ b/src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx @@ -276,10 +276,10 @@ function AttachmentPickerWithMenuItems({ icon: Expensicons.Task, text: translate('newTaskPage.assignTask'), shouldCallAfterModalHide: shouldUseNarrowLayout, - onSelected: () => clearOutTaskInfoAndNavigate(reportID, report), + onSelected: () => clearOutTaskInfoAndNavigate(currentUserPersonalDetails.accountID, reportID, report), }, ]; - }, [report, reportID, translate, shouldUseNarrowLayout]); + }, [report, translate, shouldUseNarrowLayout, currentUserPersonalDetails.accountID, reportID]); const onPopoverMenuClose = () => { setMenuVisibility(false); diff --git a/src/pages/home/report/ReportFooter.tsx b/src/pages/home/report/ReportFooter.tsx index 64d3fb6e9aff..6ffe045a57ca 100644 --- a/src/pages/home/report/ReportFooter.tsx +++ b/src/pages/home/report/ReportFooter.tsx @@ -25,7 +25,6 @@ import useWindowDimensions from '@hooks/useWindowDimensions'; import {addComment} from '@libs/actions/Report'; import {createTaskAndNavigate, setNewOptimisticAssignee} from '@libs/actions/Task'; import {isEmailPublicDomain} from '@libs/LoginUtils'; -import {getCurrentUserEmail} from '@libs/Network/NetworkStore'; import {addDomainToShortMention} from '@libs/ParsingUtils'; import {isPolicyAdmin} from '@libs/PolicyUtils'; import { @@ -121,7 +120,7 @@ function ReportFooter({ const allPersonalDetails = usePersonalDetails(); const {availableLoginsList} = useShortMentionsList(); - const currentUserEmail = getCurrentUserEmail(); + const currentUserEmail = personalDetail.email ?? ''; const handleCreateTask = useCallback( (text: string): boolean => { @@ -146,7 +145,7 @@ function ReportFooter({ assignee = Object.values(allPersonalDetails ?? {}).find((value) => value?.login === mentionWithDomain) ?? undefined; if (!Object.keys(assignee ?? {}).length) { const assigneeAccountID = generateAccountID(mentionWithDomain); - const optimisticDataForNewAssignee = setNewOptimisticAssignee(mentionWithDomain, assigneeAccountID); + const optimisticDataForNewAssignee = setNewOptimisticAssignee(mentionWithDomain, assigneeAccountID, personalDetail.accountID); assignee = optimisticDataForNewAssignee.assignee; assigneeChatReport = optimisticDataForNewAssignee.assigneeReport; } @@ -156,10 +155,22 @@ function ReportFooter({ title = `@${mentionWithDomain} ${title}`; } } - createTaskAndNavigate(report.reportID, title, '', assignee?.login ?? '', assignee?.accountID, assigneeChatReport, report.policyID, true, quickAction); + createTaskAndNavigate({ + parentReportID: report.reportID, + title, + description: '', + assigneeEmail: assignee?.login ?? '', + currentUserAccountID: personalDetail.accountID, + currentUserEmail, + assigneeAccountID: assignee?.accountID, + assigneeChatReport, + policyID: report.policyID, + isCreatedUsingMarkdown: true, + quickAction, + }); return true; }, - [allPersonalDetails, availableLoginsList, currentUserEmail, quickAction, report.policyID, report.reportID], + [allPersonalDetails, availableLoginsList, currentUserEmail, personalDetail.accountID, quickAction, report.policyID, report.reportID], ); const onSubmitComment = useCallback( diff --git a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx index c4ff1c951ca4..7a6e698e3efb 100644 --- a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx +++ b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx @@ -370,7 +370,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, ref showDelegateNoAccessModal(); return; } - navigateToQuickAction({isValidReport, quickAction, selectOption, lastDistanceExpenseType}); + navigateToQuickAction({isValidReport, quickAction, selectOption, lastDistanceExpenseType, currentUserAccountID: currentUserPersonalDetails.accountID}); }); }; return [ @@ -417,23 +417,24 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, ref translate, styles.pt3, styles.pb2, - quickActionAvatars, quickAction, policyChatForActivePolicy, + quickActionReport, + quickActionPolicy, + isReportArchived, + isRestrictedToPreferredPolicy, quickActionTitle, + quickActionAvatars, quickActionSubtitle, - quickActionPolicy, - quickActionReport, - isValidReport, - selectOption, shouldUseNarrowLayout, isDelegateAccessRestricted, - showDelegateNoAccessModal, - isReportArchived, + isValidReport, + selectOption, lastDistanceExpenseType, - allTransactionDrafts, + currentUserPersonalDetails.accountID, + showDelegateNoAccessModal, reportID, - isRestrictedToPreferredPolicy, + allTransactionDrafts, ]); const isTravelEnabled = useMemo(() => { @@ -571,6 +572,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, ref viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived, + currentUserPersonalDetails.accountID, ), ), }, diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 72398aadbf49..4a5ff7412774 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -487,7 +487,7 @@ function IOURequestStepConfirmation({ !!item.linkedTrackedExpenseReportID && archivedReportsIdSet.has(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${item.linkedTrackedExpenseReportID}`); if (isTestDriveReceipt) { - completeTestDriveTask(viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived); + completeTestDriveTask(viewTourTaskReport, viewTourTaskParentReport, isViewTourTaskParentReportArchived, currentUserPersonalDetails.accountID); } requestMoneyIOUActions({ diff --git a/src/pages/tasks/NewTaskDetailsPage.tsx b/src/pages/tasks/NewTaskDetailsPage.tsx index df7283fe98f4..082376a64ca7 100644 --- a/src/pages/tasks/NewTaskDetailsPage.tsx +++ b/src/pages/tasks/NewTaskDetailsPage.tsx @@ -7,6 +7,7 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; import TextInput from '@components/TextInput'; import useAutoFocusInput from '@hooks/useAutoFocusInput'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -29,6 +30,7 @@ type NewTaskDetailsPageProps = PlatformStackScreenProps getAssignee(task?.assigneeAccountID ?? CONST.DEFAULT_NUMBER_ID, personalDetails), [task?.assigneeAccountID, personalDetails]); @@ -97,17 +99,19 @@ function NewTaskPage({route}: NewTaskPageProps) { return; } - createTaskAndNavigate( - parentReport?.reportID, - task.title, - task?.description ?? '', - task?.assignee ?? '', - task.assigneeAccountID, - task.assigneeChatReport, - parentReport?.policyID, - false, + createTaskAndNavigate({ + parentReportID: parentReport?.reportID, + title: task.title, + description: task?.description ?? '', + assigneeEmail: task?.assignee ?? '', + currentUserAccountID: currentUserPersonalDetails.accountID, + currentUserEmail: currentUserPersonalDetails.email ?? '', + assigneeAccountID: task.assigneeAccountID, + assigneeChatReport: task.assigneeChatReport, + policyID: parentReport?.policyID, + isCreatedUsingMarkdown: false, quickAction, - ); + }); }; return ( diff --git a/src/pages/tasks/TaskAssigneeSelectorModal.tsx b/src/pages/tasks/TaskAssigneeSelectorModal.tsx index 4232d524b8ab..60502f039359 100644 --- a/src/pages/tasks/TaskAssigneeSelectorModal.tsx +++ b/src/pages/tasks/TaskAssigneeSelectorModal.tsx @@ -5,7 +5,6 @@ import {InteractionManager, View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; -import {useSession} from '@components/OnyxListItemProvider'; import ScreenWrapper from '@components/ScreenWrapper'; import SelectionList from '@components/SelectionListWithSections'; import type {ListItem} from '@components/SelectionListWithSections/types'; @@ -37,7 +36,6 @@ function TaskAssigneeSelectorModal() { const styles = useThemeStyles(); const route = useRoute>(); const {translate} = useLocalize(); - const session = useSession(); const backTo = route.params?.backTo; const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {canBeMissing: false}); const [task] = useOnyx(ONYXKEYS.TASK, {canBeMissing: false}); @@ -57,16 +55,16 @@ function TaskAssigneeSelectorModal() { }); const optionsWithoutCurrentUser = useMemo(() => { - if (!session?.accountID) { + if (!currentUserPersonalDetails?.accountID) { return availableOptions; } return { ...availableOptions, - personalDetails: availableOptions.personalDetails.filter((detail) => detail.accountID !== session.accountID), - recentReports: availableOptions.recentReports.filter((report) => report.accountID !== session.accountID), + personalDetails: availableOptions.personalDetails.filter((detail) => detail.accountID !== currentUserPersonalDetails.accountID), + recentReports: availableOptions.recentReports.filter((report) => report.accountID !== currentUserPersonalDetails.accountID), }; - }, [availableOptions, session?.accountID]); + }, [availableOptions, currentUserPersonalDetails?.accountID]); const headerMessage = useMemo(() => { return getHeaderMessage( @@ -149,12 +147,20 @@ function TaskAssigneeSelectorModal() { const assigneeChatReport = setAssigneeValue( option?.login ?? '', option?.accountID ?? CONST.DEFAULT_NUMBER_ID, + currentUserPersonalDetails.accountID, report.reportID, undefined, // passing null as report because for editing task the report will be task details report page not the actual report where task was created isCurrentUser({...option, accountID: option?.accountID ?? CONST.DEFAULT_NUMBER_ID, login: option?.login ?? ''}), ); // Pass through the selected assignee - editTaskAssignee(report, session?.accountID ?? CONST.DEFAULT_NUMBER_ID, option?.login ?? '', option?.accountID, assigneeChatReport); + editTaskAssignee( + report, + currentUserPersonalDetails?.accountID ?? CONST.DEFAULT_NUMBER_ID, + option?.login ?? '', + currentUserPersonalDetails.accountID, + option?.accountID, + assigneeChatReport, + ); } // eslint-disable-next-line @typescript-eslint/no-deprecated InteractionManager.runAfterInteractions(() => { @@ -165,6 +171,7 @@ function TaskAssigneeSelectorModal() { setAssigneeValue( option?.login ?? '', option.accountID ?? CONST.DEFAULT_NUMBER_ID, + currentUserPersonalDetails.accountID, task?.shareDestination ?? '', undefined, // passing null as report is null in this condition isCurrentUser({...option, accountID: option?.accountID ?? CONST.DEFAULT_NUMBER_ID, login: option?.login ?? undefined}), @@ -175,7 +182,7 @@ function TaskAssigneeSelectorModal() { }); } }, - [session?.accountID, task?.shareDestination, report, backTo], + [report, currentUserPersonalDetails.accountID, task?.shareDestination, backTo], ); const handleBackButtonPress = useCallback(() => Navigation.goBack(!route.params?.reportID ? ROUTES.NEW_TASK.getRoute(backTo) : backTo), [route.params, backTo]); diff --git a/src/pages/workspace/categories/CategorySettingsPage.tsx b/src/pages/workspace/categories/CategorySettingsPage.tsx index 9093e981b92b..a34d3dcde8da 100644 --- a/src/pages/workspace/categories/CategorySettingsPage.tsx +++ b/src/pages/workspace/categories/CategorySettingsPage.tsx @@ -11,6 +11,7 @@ import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import Switch from '@components/Switch'; import Text from '@components/Text'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useEnvironment from '@hooks/useEnvironment'; import useLocalize from '@hooks/useLocalize'; import useOnboardingTaskInformation from '@hooks/useOnboardingTaskInformation'; @@ -59,6 +60,7 @@ function CategorySettingsPage({ const [deleteCategoryConfirmModalVisible, setDeleteCategoryConfirmModalVisible] = useState(false); const policy = usePolicy(policyID); const {environmentURL} = useEnvironment(); + const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const policyCategory = policyCategories?.[categoryName] ?? Object.values(policyCategories ?? {}).find((category) => category.previousCategoryName === categoryName); const policyCurrency = policy?.outputCurrency ?? CONST.CURRENCY.USD; @@ -141,6 +143,7 @@ function CategorySettingsPage({ isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, policyCategories, policyTagLists, allTransactionViolations, @@ -160,6 +163,7 @@ function CategorySettingsPage({ isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, policyTagLists, policyCategories, allTransactionViolations, diff --git a/src/pages/workspace/categories/CreateCategoryPage.tsx b/src/pages/workspace/categories/CreateCategoryPage.tsx index d13954e83d54..d28f49213676 100644 --- a/src/pages/workspace/categories/CreateCategoryPage.tsx +++ b/src/pages/workspace/categories/CreateCategoryPage.tsx @@ -2,6 +2,7 @@ import React, {useCallback} from 'react'; import type {FormOnyxValues} from '@components/Form/types'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useOnboardingTaskInformation from '@hooks/useOnboardingTaskInformation'; import useOnyx from '@hooks/useOnyx'; @@ -27,6 +28,7 @@ function CreateCategoryPage({route}: CreateCategoryPageProps) { const {translate} = useLocalize(); const backTo = route.params?.backTo; const isQuickSettingsFlow = route.name === SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_CREATE; + const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const { taskReport: setupCategoryTaskReport, taskParentReport: setupCategoryTaskParentReport, @@ -35,10 +37,25 @@ function CreateCategoryPage({route}: CreateCategoryPageProps) { const createCategory = useCallback( (values: FormOnyxValues) => { - createPolicyCategory(route.params.policyID, values.categoryName.trim(), isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport); + createPolicyCategory( + route.params.policyID, + values.categoryName.trim(), + isSetupCategoryTaskParentReportArchived, + setupCategoryTaskReport, + setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, + ); Navigation.goBack(isQuickSettingsFlow ? ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(route.params.policyID, backTo) : undefined); }, - [route.params.policyID, isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport, isQuickSettingsFlow, backTo], + [ + route.params.policyID, + isSetupCategoryTaskParentReportArchived, + setupCategoryTaskReport, + setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, + isQuickSettingsFlow, + backTo, + ], ); return ( diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index 5ecdca89c098..fd14fac7be18 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -24,6 +24,7 @@ import Switch from '@components/Switch'; import Text from '@components/Text'; import useAutoTurnSelectionModeOffWhenHasNoActiveOption from '@hooks/useAutoTurnSelectionModeOffWhenHasNoActiveOption'; import useCleanupSelectedOptions from '@hooks/useCleanupSelectedOptions'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useEnvironment from '@hooks/useEnvironment'; import {useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; @@ -88,6 +89,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { const isConnectionVerified = connectedIntegration && !isConnectionUnverified(policy, connectedIntegration); const currentConnectionName = getCurrentConnectionName(policy); const isQuickSettingsFlow = route.name === SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_ROOT; + const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const [selectedCategories, setSelectedCategories] = useState([]); const canSelectMultiple = isSmallScreenWidth ? isMobileSelectionModeEnabled : true; @@ -155,12 +157,22 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, policyCategories, policyTagLists, allTransactionViolations, ); }, - [policyId, isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport, policyCategories, policyTagLists, allTransactionViolations], + [ + policyId, + isSetupCategoryTaskParentReportArchived, + setupCategoryTaskReport, + setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, + policyCategories, + policyTagLists, + allTransactionViolations, + ], ); const categoryList = useMemo(() => { @@ -276,6 +288,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, policyTagLists, policyCategories, allTransactionViolations, @@ -390,6 +403,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, policyCategories, policyTagLists, allTransactionViolations, @@ -421,6 +435,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { isSetupCategoryTaskParentReportArchived, setupCategoryTaskReport, setupCategoryTaskParentReport, + currentUserPersonalDetails.accountID, policyCategories, policyTagLists, allTransactionViolations, diff --git a/tests/actions/PolicyCategoryTest.ts b/tests/actions/PolicyCategoryTest.ts index 5d169c7ba1d5..fb5d6e5b6c41 100644 --- a/tests/actions/PolicyCategoryTest.ts +++ b/tests/actions/PolicyCategoryTest.ts @@ -71,7 +71,7 @@ describe('actions/PolicyCategory', () => { mockFetch?.pause?.(); Onyx.set(`${ONYXKEYS.COLLECTION.POLICY}${fakePolicy.id}`, fakePolicy); Onyx.set(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${fakePolicy.id}`, fakeCategories); - Category.createPolicyCategory(fakePolicy.id, newCategoryName, false, undefined, undefined); + Category.createPolicyCategory(fakePolicy.id, newCategoryName, false, undefined, undefined, CONST.DEFAULT_NUMBER_ID); await waitForBatchedUpdates(); await new Promise((resolve) => { const connection = Onyx.connect({ @@ -169,7 +169,7 @@ describe('actions/PolicyCategory', () => { mockFetch?.pause?.(); Onyx.set(`${ONYXKEYS.COLLECTION.POLICY}${fakePolicy.id}`, fakePolicy); Onyx.set(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${fakePolicy.id}`, fakeCategories); - Category.setWorkspaceCategoryEnabled(fakePolicy.id, categoriesToUpdate, false, undefined, undefined); + Category.setWorkspaceCategoryEnabled(fakePolicy.id, categoriesToUpdate, false, undefined, undefined, CONST.DEFAULT_NUMBER_ID); await waitForBatchedUpdates(); await new Promise((resolve) => { const connection = Onyx.connect({ @@ -214,7 +214,7 @@ describe('actions/PolicyCategory', () => { mockFetch?.pause?.(); Onyx.set(`${ONYXKEYS.COLLECTION.POLICY}${fakePolicy.id}`, fakePolicy); Onyx.set(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${fakePolicy.id}`, fakeCategories); - Category.deleteWorkspaceCategories(fakePolicy.id, categoriesToDelete, false, undefined, undefined); + Category.deleteWorkspaceCategories(fakePolicy.id, categoriesToDelete, false, undefined, undefined, CONST.DEFAULT_NUMBER_ID); await waitForBatchedUpdates(); await new Promise((resolve) => { const connection = Onyx.connect({ diff --git a/tests/actions/TaskTest.ts b/tests/actions/TaskTest.ts index b5d93e95f3d8..e93220807430 100644 --- a/tests/actions/TaskTest.ts +++ b/tests/actions/TaskTest.ts @@ -239,8 +239,8 @@ describe('actions/Task', () => { const conciergeChatReport: Report = getFakeReport([accountID, CONST.ACCOUNT_ID.CONCIERGE]); const testDriveTaskReport: Report = {...getFakeReport(), ownerAccountID: accountID}; it('Completes test drive task', () => { - completeTestDriveTask(testDriveTaskReport, conciergeChatReport, false); - expect(Object.values(getFinishOnboardingTaskOnyxData(testDriveTaskReport, conciergeChatReport, false)).length).toBe(0); + completeTestDriveTask(testDriveTaskReport, conciergeChatReport, false, accountID); + expect(Object.values(getFinishOnboardingTaskOnyxData(testDriveTaskReport, conciergeChatReport, false, 0)).length).toBe(0); }); }); @@ -253,10 +253,10 @@ describe('actions/Task', () => { await waitForBatchedUpdates(); }); it('Return not empty object', () => { - expect(Object.values(getFinishOnboardingTaskOnyxData(taskReport, parentReport, false)).length).toBeGreaterThan(0); + expect(Object.values(getFinishOnboardingTaskOnyxData(taskReport, parentReport, false, 2)).length).toBeGreaterThan(0); }); it('Return empty object', () => { - expect(Object.values(getFinishOnboardingTaskOnyxData(taskReport, parentReport, true)).length).toBe(0); + expect(Object.values(getFinishOnboardingTaskOnyxData(taskReport, parentReport, true, 2)).length).toBe(0); }); }); @@ -357,17 +357,19 @@ describe('actions/Task', () => { }; // When: Call createTaskAndNavigate - createTaskAndNavigate( - mockParentReportID, - mockTitle, - mockDescription, - mockAssigneeEmail, - mockAssigneeAccountID, - mockAssigneeChatReport, - mockPolicyID, - false, // isCreatedUsingMarkdown - {}, // quickAction - ); + createTaskAndNavigate({ + parentReportID: mockParentReportID, + title: mockTitle, + description: mockDescription, + assigneeEmail: mockAssigneeEmail, + currentUserAccountID: mockCurrentUserAccountID, + currentUserEmail: mockCurrentUserEmail, + assigneeAccountID: mockAssigneeAccountID, + assigneeChatReport: mockAssigneeChatReport, + policyID: mockPolicyID, + isCreatedUsingMarkdown: false, + quickAction: {}, + }); // Then: Verify API.write called with expected arguments const calls = (API.write as jest.Mock).mock.calls; expect(calls.length).toBe(1); @@ -401,17 +403,19 @@ describe('actions/Task', () => { }; // When: Call createTaskAndNavigate without assignee chat report - createTaskAndNavigate( - mockParentReportID, - mockTitle, - mockDescription, - mockAssigneeEmail, - mockAssigneeAccountID, - undefined, // assigneeChatReport - mockPolicyID, - false, // isCreatedUsingMarkdown - mockQuickAction, - ); + createTaskAndNavigate({ + parentReportID: mockParentReportID, + title: mockTitle, + description: mockDescription, + assigneeEmail: mockAssigneeEmail, + currentUserAccountID: mockCurrentUserAccountID, + currentUserEmail: mockCurrentUserEmail, + assigneeAccountID: mockAssigneeAccountID, + assigneeChatReport: undefined, + policyID: mockPolicyID, + isCreatedUsingMarkdown: false, + quickAction: mockQuickAction, + }); await waitForBatchedUpdatesWithAct(); @@ -459,17 +463,19 @@ describe('actions/Task', () => { }; // When: Call createTaskAndNavigate with markdown flag - createTaskAndNavigate( - mockParentReportID, - mockTitle, - mockDescription, - mockAssigneeEmail, - mockAssigneeAccountID, - mockAssigneeChatReport, - mockPolicyID, - true, // isCreatedUsingMarkdown - {}, // quickAction - ); + createTaskAndNavigate({ + parentReportID: mockParentReportID, + title: mockTitle, + description: mockDescription, + assigneeEmail: mockAssigneeEmail, + currentUserAccountID: mockCurrentUserAccountID, + currentUserEmail: mockCurrentUserEmail, + assigneeAccountID: mockAssigneeAccountID, + assigneeChatReport: mockAssigneeChatReport, + policyID: mockPolicyID, + isCreatedUsingMarkdown: true, + quickAction: {}, + }); await waitForBatchedUpdatesWithAct(); @@ -495,17 +501,19 @@ describe('actions/Task', () => { }; // When: Call createTaskAndNavigate with default policy ID - createTaskAndNavigate( - mockParentReportID, - mockTitle, - mockDescription, - mockAssigneeEmail, - mockAssigneeAccountID, - mockAssigneeChatReport, - CONST.POLICY.OWNER_EMAIL_FAKE, // default policy ID - false, // isCreatedUsingMarkdown - {}, // quickAction - ); + createTaskAndNavigate({ + parentReportID: mockParentReportID, + title: mockTitle, + description: mockDescription, + assigneeEmail: mockAssigneeEmail, + currentUserAccountID: mockCurrentUserAccountID, + currentUserEmail: mockCurrentUserEmail, + assigneeAccountID: mockAssigneeAccountID, + assigneeChatReport: mockAssigneeChatReport, + policyID: CONST.POLICY.OWNER_EMAIL_FAKE, + isCreatedUsingMarkdown: false, + quickAction: {}, + }); await waitForBatchedUpdatesWithAct(); @@ -538,17 +546,19 @@ describe('actions/Task', () => { }; // When: Call createTaskAndNavigate with assignee as current user - createTaskAndNavigate( - mockParentReportID, - mockTitle, - mockDescription, - mockCurrentUserEmail, - mockCurrentUserAccountID, // assignee is current user - mockAssigneeChatReport, - mockPolicyID, - false, // isCreatedUsingMarkdown - {}, // quickAction - ); + createTaskAndNavigate({ + parentReportID: mockParentReportID, + title: mockTitle, + description: mockDescription, + assigneeEmail: mockCurrentUserEmail, + currentUserAccountID: mockCurrentUserAccountID, + currentUserEmail: mockCurrentUserEmail, + assigneeAccountID: mockCurrentUserAccountID, // assignee is current user + assigneeChatReport: mockAssigneeChatReport, + policyID: mockPolicyID, + isCreatedUsingMarkdown: false, + quickAction: {}, + }); await waitForBatchedUpdatesWithAct(); @@ -591,17 +601,19 @@ describe('actions/Task', () => { }; // When: Call createTaskAndNavigate with undefined parent report ID - createTaskAndNavigate( - undefined, // parentReportID is undefined - mockTitle, - mockDescription, - mockAssigneeEmail, - mockAssigneeAccountID, - mockAssigneeChatReport, - mockPolicyID, - false, // isCreatedUsingMarkdown - {}, // quickAction - ); + createTaskAndNavigate({ + parentReportID: undefined, // parentReportID is undefined + title: mockTitle, + description: mockDescription, + assigneeEmail: mockAssigneeEmail, + currentUserAccountID: mockCurrentUserAccountID, + currentUserEmail: mockCurrentUserEmail, + assigneeAccountID: mockAssigneeAccountID, + assigneeChatReport: mockAssigneeChatReport, + policyID: mockPolicyID, + isCreatedUsingMarkdown: false, + quickAction: {}, + }); await waitForBatchedUpdatesWithAct(); @@ -624,17 +636,19 @@ describe('actions/Task', () => { }; // When: Call createTaskAndNavigate with empty quick action - createTaskAndNavigate( - mockParentReportID, - mockTitle, - mockDescription, - mockAssigneeEmail, - mockAssigneeAccountID, - mockAssigneeChatReport, - mockPolicyID, - false, // isCreatedUsingMarkdown - {}, // quickAction is empty - ); + createTaskAndNavigate({ + parentReportID: mockParentReportID, + title: mockTitle, + description: mockDescription, + assigneeEmail: mockAssigneeEmail, + currentUserAccountID: mockCurrentUserAccountID, + currentUserEmail: mockCurrentUserEmail, + assigneeAccountID: mockAssigneeAccountID, + assigneeChatReport: mockAssigneeChatReport, + policyID: mockPolicyID, + isCreatedUsingMarkdown: false, + quickAction: {}, // quickAction is empty + }); await waitForBatchedUpdatesWithAct(); diff --git a/tests/actions/TourTest.ts b/tests/actions/TourTest.ts index 3355f7f0361c..81604b4d9a52 100644 --- a/tests/actions/TourTest.ts +++ b/tests/actions/TourTest.ts @@ -40,14 +40,14 @@ describe('actions/Tour', () => { describe('startTestDrive', () => { describe('migrated users', () => { it('should show the Test Drive demo if user has been nudged to migrate', async () => { - startTestDrive(undefined, false, true, false, undefined, undefined, false); + startTestDrive(undefined, false, true, false, undefined, undefined, false, 2); await waitForBatchedUpdates(); expect(Navigation.navigate).toHaveBeenCalledWith(ROUTES.TEST_DRIVE_DEMO_ROOT); }); it("should show the Test Drive demo if user doesn't have the nudge flag but is member of a paid policy", async () => { - startTestDrive(undefined, false, false, true, undefined, undefined, false); + startTestDrive(undefined, false, false, true, undefined, undefined, false, 2); await waitForBatchedUpdates(); expect(Navigation.navigate).toHaveBeenCalledWith(ROUTES.TEST_DRIVE_DEMO_ROOT); @@ -87,14 +87,14 @@ describe('actions/Tour', () => { it.each(onboardingChoices.filter((choice) => onboardingDemoChoices.includes(choice)))('should show the Test Drive demo if user has "%s" onboarding choice', async (choice) => { await setTestDriveTaskData(); - startTestDrive({choice}, false, false, false, testDriveTaskReport, conciergeChatReport, false); + startTestDrive({choice}, false, false, false, testDriveTaskReport, conciergeChatReport, false, accountID); await waitForBatchedUpdates(); expect(Navigation.navigate).toHaveBeenCalledWith(ROUTES.TEST_DRIVE_DEMO_ROOT); }); it.each(onboardingChoices.filter((choice) => !onboardingDemoChoices.includes(choice)))('should show the Test Drive modal if user has "%s" onboarding choice', async (choice) => { - startTestDrive({choice}, false, false, false, undefined, undefined, false); + startTestDrive({choice}, false, false, false, undefined, undefined, false, accountID); await waitForBatchedUpdates(); expect(Navigation.navigate).toHaveBeenCalledWith(ROUTES.TEST_DRIVE_MODAL_ROOT.route); @@ -111,6 +111,7 @@ describe('actions/Tour', () => { testDriveTaskReport, conciergeChatReport, false, + accountID, ); await waitForBatchedUpdates(); @@ -118,7 +119,7 @@ describe('actions/Tour', () => { }); it('should show the Test Drive demo if user is member of a paid policy', async () => { - startTestDrive({choice: CONST.ONBOARDING_CHOICES.LOOKING_AROUND}, false, false, true, testDriveTaskReport, conciergeChatReport, false); + startTestDrive({choice: CONST.ONBOARDING_CHOICES.LOOKING_AROUND}, false, false, true, testDriveTaskReport, conciergeChatReport, false, accountID); await waitForBatchedUpdates(); expect(Navigation.navigate).toHaveBeenCalledWith(ROUTES.TEST_DRIVE_DEMO_ROOT); diff --git a/tests/unit/QuickActionNavigationTest.ts b/tests/unit/QuickActionNavigationTest.ts index 64f17ac2484d..d0faffa18fe6 100644 --- a/tests/unit/QuickActionNavigationTest.ts +++ b/tests/unit/QuickActionNavigationTest.ts @@ -28,6 +28,7 @@ describe('IOU Utils', () => { selectOption: (onSelected: () => void) => { onSelected(); }, + currentUserAccountID: CONST.DEFAULT_NUMBER_ID, }); // Then we should start manual submit request flow @@ -42,6 +43,7 @@ describe('IOU Utils', () => { selectOption: (onSelected: () => void) => { onSelected(); }, + currentUserAccountID: CONST.DEFAULT_NUMBER_ID, }); // Then we should start scan split request flow @@ -56,6 +58,7 @@ describe('IOU Utils', () => { selectOption: (onSelected: () => void) => { onSelected(); }, + currentUserAccountID: CONST.DEFAULT_NUMBER_ID, }); // Then we should start distance track request flow @@ -70,6 +73,7 @@ describe('IOU Utils', () => { selectOption: (onSelected: () => void) => { onSelected(); }, + currentUserAccountID: CONST.DEFAULT_NUMBER_ID, }); // Then we should start map distance request flow @@ -85,6 +89,7 @@ describe('IOU Utils', () => { onSelected(); }, lastDistanceExpenseType: CONST.IOU.REQUEST_TYPE.DISTANCE_MANUAL, + currentUserAccountID: CONST.DEFAULT_NUMBER_ID, }); // Then we should start manual distance request flow @@ -99,6 +104,7 @@ describe('IOU Utils', () => { selectOption: (onSelected: () => void) => { onSelected(); }, + currentUserAccountID: CONST.DEFAULT_NUMBER_ID, }); // Then we should start per diem request flow @@ -116,6 +122,7 @@ describe('Non IOU quickActions test:', () => { selectOption: (onSelected: () => void) => { onSelected(); }, + currentUserAccountID: CONST.DEFAULT_NUMBER_ID, }); expect(startOutCreateTaskQuickAction).toHaveBeenCalled(); });