Skip to content

Commit 7788cc1

Browse files
authored
Merge pull request #52109 from callstack-internal/fix/51876-change-offline-pattern-for-unassigning-cards
Fix: Change offline pattern for unassigning cards
2 parents 27b4786 + 39b17d1 commit 7788cc1

File tree

4 files changed

+41
-6
lines changed

4 files changed

+41
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
type UnassignCompanyCard = {
22
authToken?: string | null;
3-
cardID: string;
3+
cardID: number;
44
};
55

66
export default UnassignCompanyCard;
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
type UpdateCompanyCard = {
22
authToken?: string | null;
3-
cardID: string;
3+
cardID: number;
44
};
55

66
export default UpdateCompanyCard;

src/libs/actions/CompanyCards.ts

+35-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import * as PolicyUtils from '@libs/PolicyUtils';
1717
import * as ReportUtils from '@libs/ReportUtils';
1818
import CONST from '@src/CONST';
1919
import ONYXKEYS from '@src/ONYXKEYS';
20+
import type {Card} from '@src/types/onyx';
2021
import type {AssignCard, AssignCardData} from '@src/types/onyx/AssignCard';
2122
import type {AddNewCardFeedData, AddNewCardFeedStep, CompanyCardFeed} from '@src/types/onyx/CardFeeds';
2223
import type {OnyxData} from '@src/types/onyx/Request';
@@ -233,8 +234,9 @@ function assignWorkspaceCompanyCard(policyID: string, data?: Partial<AssignCardD
233234
API.write(WRITE_COMMANDS.ASSIGN_COMPANY_CARD, parameters, onyxData);
234235
}
235236

236-
function unassignWorkspaceCompanyCard(workspaceAccountID: number, cardID: string, bankName: string) {
237+
function unassignWorkspaceCompanyCard(workspaceAccountID: number, bankName: string, card?: Card) {
237238
const authToken = NetworkStore.getAuthToken();
239+
const cardID = card?.cardID ?? '-1';
238240

239241
const onyxData: OnyxData = {
240242
optimisticData: [
@@ -245,12 +247,42 @@ function unassignWorkspaceCompanyCard(workspaceAccountID: number, cardID: string
245247
[cardID]: null,
246248
},
247249
},
250+
{
251+
onyxMethod: Onyx.METHOD.MERGE,
252+
key: ONYXKEYS.CARD_LIST,
253+
value: {
254+
[cardID]: null,
255+
},
256+
},
257+
],
258+
259+
failureData: [
260+
{
261+
onyxMethod: Onyx.METHOD.MERGE,
262+
key: `${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${workspaceAccountID}_${bankName}`,
263+
value: {
264+
[cardID]: {
265+
...card,
266+
errors: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
267+
},
268+
},
269+
},
270+
{
271+
onyxMethod: Onyx.METHOD.MERGE,
272+
key: ONYXKEYS.CARD_LIST,
273+
value: {
274+
[cardID]: {
275+
...card,
276+
errors: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
277+
},
278+
},
279+
},
248280
],
249281
};
250282

251283
const parameters = {
252284
authToken,
253-
cardID,
285+
cardID: Number(cardID),
254286
};
255287

256288
API.write(WRITE_COMMANDS.UNASSIGN_COMPANY_CARD, parameters, onyxData);
@@ -379,7 +411,7 @@ function updateWorkspaceCompanyCard(workspaceAccountID: number, cardID: string,
379411

380412
const parameters = {
381413
authToken,
382-
cardID,
414+
cardID: Number(cardID),
383415
};
384416

385417
API.write(WRITE_COMMANDS.UPDATE_COMPANY_CARD, parameters, {optimisticData, finallyData, failureData});

src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import OfflineWithFeedback from '@components/OfflineWithFeedback';
1414
import ScreenWrapper from '@components/ScreenWrapper';
1515
import ScrollView from '@components/ScrollView';
1616
import useLocalize from '@hooks/useLocalize';
17+
import useNetwork from '@hooks/useNetwork';
1718
import usePolicy from '@hooks/usePolicy';
1819
import useTheme from '@hooks/useTheme';
1920
import useThemeStyles from '@hooks/useThemeStyles';
@@ -48,6 +49,7 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag
4849
const {translate} = useLocalize();
4950
const styles = useThemeStyles();
5051
const theme = useTheme();
52+
const {isOffline} = useNetwork();
5153
const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME);
5254
const connectedIntegration = getConnectedIntegration(policy, accountingIntegrations) ?? connectionSyncProgress?.connectionName;
5355

@@ -62,7 +64,7 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag
6264

6365
const unassignCard = () => {
6466
setIsUnassignModalVisible(false);
65-
CompanyCards.unassignWorkspaceCompanyCard(workspaceAccountID, cardID, bank);
67+
CompanyCards.unassignWorkspaceCompanyCard(workspaceAccountID, bank, card);
6668
Navigation.goBack();
6769
};
6870

@@ -168,6 +170,7 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag
168170
>
169171
<MenuItem
170172
icon={Expensicons.Sync}
173+
disabled={isOffline || card?.isLoadingLastUpdated}
171174
iconFill={theme.success}
172175
title={translate('workspace.moreFeatures.companyCards.updateCard')}
173176
style={styles.mv1}

0 commit comments

Comments
 (0)