Skip to content

Commit b8ef627

Browse files
authored
Merge pull request Expensify#63832 from nkdengineer/fix/62536
Tasks are duplicated for invited member
2 parents a2970b8 + b1984a9 commit b8ef627

2 files changed

Lines changed: 16 additions & 3 deletions

File tree

src/libs/API/index.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {isOffline} from '@libs/Network/NetworkStore';
77
import {push as pushToSequentialQueue, waitForIdle as waitForSequentialQueueIdle} from '@libs/Network/SequentialQueue';
88
import Pusher from '@libs/Pusher';
99
import {processWithMiddleware, use} from '@libs/Request';
10-
import {getLength as getPersistedRequestsLength} from '@userActions/PersistedRequests';
10+
import {getAll, getLength as getPersistedRequestsLength} from '@userActions/PersistedRequests';
1111
import CONST from '@src/CONST';
1212
import type OnyxRequest from '@src/types/onyx/Request';
1313
import type {PaginatedRequest, PaginationConfig, RequestConflictResolver} from '@src/types/onyx/Request';
@@ -62,8 +62,15 @@ function prepareRequest<TCommand extends ApiCommand>(
6262
): OnyxRequest {
6363
Log.info('[API] Preparing request', false, {command, type});
6464

65+
let shouldApplyOptimisticData = true;
66+
if (conflictResolver?.checkAndFixConflictingRequest) {
67+
const requests = getAll();
68+
const {conflictAction} = conflictResolver.checkAndFixConflictingRequest(requests);
69+
shouldApplyOptimisticData = conflictAction.type !== 'noAction';
70+
}
71+
6572
const {optimisticData, ...onyxDataWithoutOptimisticData} = onyxData;
66-
if (optimisticData) {
73+
if (optimisticData && shouldApplyOptimisticData) {
6774
Log.info('[API] Applying optimistic data', false, {command, type});
6875
Onyx.update(optimisticData);
6976
}

src/libs/actions/Report.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ import {clearByKey} from './CachedPDFPaths';
197197
import {setDownload} from './Download';
198198
import {close} from './Modal';
199199
import navigateFromNotification from './navigateFromNotification';
200+
import {getAll} from './PersistedRequests';
200201
import {buildAddMembersToWorkspaceOnyxData, buildRoomMembersOnyxData} from './Policy/Member';
201202
import {createPolicyExpenseChats} from './Policy/Policy';
202203
import {
@@ -1089,9 +1090,14 @@ function openReport(
10891090
const isInviteOnboardingComplete = introSelected?.isInviteOnboardingComplete ?? false;
10901091
const isOnboardingCompleted = onboarding?.hasCompletedGuidedSetupFlow ?? false;
10911092

1093+
// Some cases we can have two open report requests with guide setup data because isInviteOnboardingComplete is not updated completely.
1094+
// Then we need to check the list request and prevent the guided setup data from being duplicated.
1095+
const allPersistedRequests = getAll();
1096+
const hasOpenReportWithGuidedSetupData = allPersistedRequests.some((request) => request.command === WRITE_COMMANDS.OPEN_REPORT && request.data?.guidedSetupData);
1097+
10921098
// Prepare guided setup data only when nvp_introSelected is set and onboarding is not completed
10931099
// OldDot users will never have nvp_introSelected set, so they will not see guided setup messages
1094-
if (introSelected && !isOnboardingCompleted && !isInviteOnboardingComplete) {
1100+
if (introSelected && !isOnboardingCompleted && !isInviteOnboardingComplete && !hasOpenReportWithGuidedSetupData) {
10951101
const {choice, inviteType} = introSelected;
10961102
const isInviteIOUorInvoice = inviteType === CONST.ONBOARDING_INVITE_TYPES.IOU || inviteType === CONST.ONBOARDING_INVITE_TYPES.INVOICE;
10971103
const isInviteChoiceCorrect = choice === CONST.ONBOARDING_CHOICES.ADMIN || choice === CONST.ONBOARDING_CHOICES.SUBMIT || choice === CONST.ONBOARDING_CHOICES.CHAT_SPLIT;

0 commit comments

Comments
 (0)