diff --git a/src/libs/actions/Policy/Category.ts b/src/libs/actions/Policy/Category.ts index 2e0a57c7e6f3..86baf09d9563 100644 --- a/src/libs/actions/Policy/Category.ts +++ b/src/libs/actions/Policy/Category.ts @@ -31,6 +31,7 @@ import {hasEnabledOptions} from '@libs/OptionsListUtils'; import {getPolicy, goBackWhenEnableFeature} from '@libs/PolicyUtils'; import {getAllPolicyReports} from '@libs/ReportUtils'; import {resolveEnableFeatureConflicts} from '@userActions/RequestConflictUtils'; +import {getFinishOnboardingTaskOnyxData} from '@userActions/Task'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type {Policy, PolicyCategories, PolicyCategory, RecentlyUsedCategories, Report} from '@src/types/onyx'; @@ -85,6 +86,14 @@ Onyx.connect({ callback: (val) => (allPolicyCategories = val), }); +function appendSetupCategoriesOnboardingData(onyxData: OnyxData) { + const finishOnboardingTaskData = getFinishOnboardingTaskOnyxData('setupCategories'); + onyxData.optimisticData?.push(...(finishOnboardingTaskData.optimisticData ?? [])); + onyxData.successData?.push(...(finishOnboardingTaskData.successData ?? [])); + onyxData.failureData?.push(...(finishOnboardingTaskData.failureData ?? [])); + return onyxData; +} + function buildOptimisticPolicyCategories(policyID: string, categories: readonly string[]) { const optimisticCategoryMap = categories.reduce>>((acc, category) => { acc[category] = { @@ -359,6 +368,7 @@ function setWorkspaceCategoryEnabled(policyID: string, categoriesToUpdate: Recor }, ], }; + appendSetupCategoriesOnboardingData(onyxData); if (shouldDisableRequiresCategory) { onyxData.optimisticData?.push({ onyxMethod: Onyx.METHOD.MERGE, @@ -591,7 +601,7 @@ function removePolicyCategoryReceiptsRequired(policyID: string, categoryName: st function createPolicyCategory(policyID: string, categoryName: string) { const onyxData = buildOptimisticPolicyCategories(policyID, [categoryName]); - + appendSetupCategoriesOnboardingData(onyxData); const parameters = { policyID, categories: JSON.stringify([{name: categoryName}]), @@ -999,6 +1009,7 @@ function deleteWorkspaceCategories(policyID: string, categoryNamesToDelete: stri }, ], }; + appendSetupCategoriesOnboardingData(onyxData); if (shouldDisableRequiresCategory) { onyxData.optimisticData?.push({ onyxMethod: Onyx.METHOD.MERGE, diff --git a/src/libs/actions/Task.ts b/src/libs/actions/Task.ts index 2d5d9c6641fc..8fd0693b709f 100644 --- a/src/libs/actions/Task.ts +++ b/src/libs/actions/Task.ts @@ -23,6 +23,7 @@ import type * as OnyxTypes from '@src/types/onyx'; import type {Icon} from '@src/types/onyx/OnyxCommon'; import type {ReportActions} from '@src/types/onyx/ReportAction'; import type ReportAction from '@src/types/onyx/ReportAction'; +import type {OnyxData} from '@src/types/onyx/Request'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import {getMostRecentReportID, navigateToConciergeChatAndDeleteReport, notifyNewAction} from './Report'; @@ -87,6 +88,12 @@ Onyx.connect({ }, }); +let introSelected: OnyxEntry = {}; +Onyx.connect({ + key: ONYXKEYS.NVP_INTRO_SELECTED, + callback: (val) => (introSelected = val), +}); + /** * Clears out the task info from the store */ @@ -370,11 +377,11 @@ function getOutstandingChildTask(taskReport: OnyxEntry) { /** * Complete a task */ -function completeTask(taskReport: OnyxEntry, reportIDFromAction?: string) { +function completeTask(taskReport: OnyxEntry, reportIDFromAction?: string): OnyxData { const taskReportID = taskReport?.reportID ?? reportIDFromAction; if (!taskReportID) { - return; + return {}; } const message = `marked as complete`; @@ -455,6 +462,7 @@ function completeTask(taskReport: OnyxEntry, reportIDFromActio playSound(SOUNDS.SUCCESS); API.write(WRITE_COMMANDS.COMPLETE_TASK, parameters, {optimisticData, successData, failureData}); + return {optimisticData, successData, failureData}; } /** @@ -1266,6 +1274,19 @@ function clearTaskErrors(reportID: string | undefined) { }); } +function getFinishOnboardingTaskOnyxData(taskName: keyof OnyxTypes.IntroSelected): OnyxData { + const taskReportID = introSelected?.[taskName]; + if (taskReportID) { + const taskReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${taskReportID}`]; + if (taskReport) { + if (taskReport.stateNum !== CONST.REPORT.STATE_NUM.APPROVED || taskReport.statusNum !== CONST.REPORT.STATUS_NUM.APPROVED) { + return completeTask(taskReport); + } + } + } + + return {}; +} function completeTestDriveTask() { const onboardingReport = ReportUtils.getChatUsedForOnboarding(); if (!onboardingReport) { @@ -1312,5 +1333,6 @@ export { setNewOptimisticAssignee, getNavigationUrlOnTaskDelete, canActionTask, + getFinishOnboardingTaskOnyxData, completeTestDriveTask, }; diff --git a/src/types/onyx/IntroSelected.ts b/src/types/onyx/IntroSelected.ts index 6d937efb6be0..e78e2cf72cb4 100644 --- a/src/types/onyx/IntroSelected.ts +++ b/src/types/onyx/IntroSelected.ts @@ -20,6 +20,9 @@ type IntroSelected = { /** Company size selected during onboarding */ companySize?: string; + + /** Task reportID for 'setupCategories' type */ + setupCategories?: string; }; export default IntroSelected;