Skip to content

Commit 288bd8c

Browse files
committed
fix: read api is not triggered consistently when switch between features of collect workspace
1 parent 014557c commit 288bd8c

8 files changed

+67
-52
lines changed

src/pages/workspace/WorkspaceMembersPage.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {useIsFocused} from '@react-navigation/native';
1+
import {useFocusEffect, useIsFocused} from '@react-navigation/native';
22
import type {StackScreenProps} from '@react-navigation/stack';
33
import lodashIsEqual from 'lodash/isEqual';
44
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
@@ -144,10 +144,11 @@ function WorkspaceMembersPage({
144144
// eslint-disable-next-line react-hooks/exhaustive-deps
145145
}, [selectedEmployees, policy?.owner, session?.accountID]);
146146

147-
useEffect(() => {
148-
getWorkspaceMembers();
149-
// eslint-disable-next-line react-hooks/exhaustive-deps
150-
}, []);
147+
useFocusEffect(
148+
useCallback(() => {
149+
getWorkspaceMembers();
150+
}, [getWorkspaceMembers]),
151+
);
151152

152153
useEffect(() => {
153154
validateSelection();

src/pages/workspace/WorkspaceMoreFeaturesPage.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import {useFocusEffect} from '@react-navigation/native';
12
import type {StackScreenProps} from '@react-navigation/stack';
2-
import React, {useCallback, useEffect} from 'react';
3+
import React, {useCallback} from 'react';
34
import {View} from 'react-native';
45
import HeaderWithBackButton from '@components/HeaderWithBackButton';
56
import * as Illustrations from '@components/Icon/Illustrations';
@@ -152,16 +153,17 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro
152153
[isSmallScreenWidth, styles, renderItem, translate],
153154
);
154155

155-
function fetchFeatures() {
156+
const fetchFeatures = useCallback(() => {
156157
Policy.openPolicyMoreFeaturesPage(route.params.policyID);
157-
}
158+
}, [route.params.policyID]);
158159

159160
useNetwork({onReconnect: fetchFeatures});
160161

161-
useEffect(() => {
162-
fetchFeatures();
163-
// eslint-disable-next-line react-hooks/exhaustive-deps
164-
}, []);
162+
useFocusEffect(
163+
useCallback(() => {
164+
fetchFeatures();
165+
}, [fetchFeatures]),
166+
);
165167

166168
return (
167169
<AdminPolicyAccessOrNotFoundWrapper policyID={route.params.policyID}>

src/pages/workspace/WorkspacePageWithSections.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import {useIsFocused} from '@react-navigation/native';
1+
import {useFocusEffect, useIsFocused} from '@react-navigation/native';
22
import type {ReactNode} from 'react';
3-
import React, {useEffect, useMemo, useRef} from 'react';
3+
import React, {useCallback, useEffect, useMemo, useRef} from 'react';
44
import {View} from 'react-native';
55
import type {OnyxEntry} from 'react-native-onyx';
66
import {withOnyx} from 'react-native-onyx';
@@ -133,9 +133,11 @@ function WorkspacePageWithSections({
133133
firstRender.current = false;
134134
}, []);
135135

136-
useEffect(() => {
137-
fetchData(policyID, shouldSkipVBBACall);
138-
}, [policyID, shouldSkipVBBACall]);
136+
useFocusEffect(
137+
useCallback(() => {
138+
fetchData(policyID, shouldSkipVBBACall);
139+
}, [policyID, shouldSkipVBBACall]),
140+
);
139141

140142
const shouldShow = useMemo(() => {
141143
// If the policy object doesn't exist or contains only error data, we shouldn't display it.

src/pages/workspace/categories/WorkspaceCategoriesPage.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import {useFocusEffect} from '@react-navigation/native';
12
import type {StackScreenProps} from '@react-navigation/stack';
2-
import React, {useEffect, useMemo, useRef, useState} from 'react';
3+
import React, {useCallback, useMemo, useRef, useState} from 'react';
34
import {ActivityIndicator, View} from 'react-native';
45
import {withOnyx} from 'react-native-onyx';
56
import type {OnyxEntry} from 'react-native-onyx';
@@ -61,16 +62,17 @@ function WorkspaceCategoriesPage({policy, policyCategories, route}: WorkspaceCat
6162
const dropdownButtonRef = useRef(null);
6263
const [deleteCategoriesConfirmModalVisible, setDeleteCategoriesConfirmModalVisible] = useState(false);
6364

64-
function fetchCategories() {
65+
const fetchCategories = useCallback(() => {
6566
Policy.openPolicyCategoriesPage(route.params.policyID);
66-
}
67+
}, [route.params.policyID]);
6768

6869
const {isOffline} = useNetwork({onReconnect: fetchCategories});
6970

70-
useEffect(() => {
71-
fetchCategories();
72-
// eslint-disable-next-line react-hooks/exhaustive-deps
73-
}, []);
71+
useFocusEffect(
72+
useCallback(() => {
73+
fetchCategories();
74+
}, [fetchCategories]),
75+
);
7476

7577
const categoryList = useMemo<PolicyOption[]>(
7678
() =>

src/pages/workspace/distanceRates/PolicyDistanceRatesPage.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import {useFocusEffect} from '@react-navigation/native';
12
import type {StackScreenProps} from '@react-navigation/stack';
2-
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
3+
import React, {useCallback, useMemo, useRef, useState} from 'react';
34
import {ActivityIndicator, View} from 'react-native';
45
import type {OnyxEntry} from 'react-native-onyx';
56
import {withOnyx} from 'react-native-onyx';
@@ -59,9 +60,9 @@ function PolicyDistanceRatesPage({policy, route}: PolicyDistanceRatesPageProps)
5960
);
6061
const customUnitRates: Record<string, Rate> = useMemo(() => customUnit?.rates ?? {}, [customUnit]);
6162

62-
function fetchDistanceRates() {
63+
const fetchDistanceRates = useCallback(() => {
6364
Policy.openPolicyDistanceRatesPage(policyID);
64-
}
65+
}, [policyID]);
6566

6667
const dismissError = useCallback(
6768
(item: RateForList) => {
@@ -72,10 +73,11 @@ function PolicyDistanceRatesPage({policy, route}: PolicyDistanceRatesPageProps)
7273

7374
const {isOffline} = useNetwork({onReconnect: fetchDistanceRates});
7475

75-
useEffect(() => {
76-
fetchDistanceRates();
77-
// eslint-disable-next-line react-hooks/exhaustive-deps
78-
}, []);
76+
useFocusEffect(
77+
useCallback(() => {
78+
fetchDistanceRates();
79+
}, [fetchDistanceRates]),
80+
);
7981

8082
const distanceRatesList = useMemo<RateForList[]>(
8183
() =>

src/pages/workspace/tags/WorkspaceTagsPage.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import {useFocusEffect} from '@react-navigation/native';
12
import type {StackScreenProps} from '@react-navigation/stack';
2-
import React, {useEffect, useMemo, useState} from 'react';
3+
import React, {useCallback, useMemo, useState} from 'react';
34
import {ActivityIndicator, View} from 'react-native';
45
import {withOnyx} from 'react-native-onyx';
56
import type {OnyxEntry} from 'react-native-onyx';
@@ -58,16 +59,17 @@ function WorkspaceTagsPage({policyTags, route}: WorkspaceTagsPageProps) {
5859
const {translate} = useLocalize();
5960
const [selectedTags, setSelectedTags] = useState<Record<string, boolean>>({});
6061

61-
function fetchTags() {
62+
const fetchTags = useCallback(() => {
6263
Policy.openPolicyTagsPage(route.params.policyID);
63-
}
64+
}, [route.params.policyID]);
6465

6566
const {isOffline} = useNetwork({onReconnect: fetchTags});
6667

67-
useEffect(() => {
68-
fetchTags();
69-
// eslint-disable-next-line react-hooks/exhaustive-deps
70-
}, []);
68+
useFocusEffect(
69+
useCallback(() => {
70+
fetchTags();
71+
}, [fetchTags]),
72+
);
7173

7274
const policyTagLists = useMemo(() => PolicyUtils.getTagLists(policyTags), [policyTags]);
7375
const tagList = useMemo<PolicyForList[]>(

src/pages/workspace/taxes/WorkspaceTaxesPage.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import {useFocusEffect} from '@react-navigation/native';
12
import type {StackScreenProps} from '@react-navigation/stack';
2-
import React, {useCallback, useEffect, useMemo, useState} from 'react';
3+
import React, {useCallback, useMemo, useState} from 'react';
34
import {ActivityIndicator, View} from 'react-native';
45
import Button from '@components/Button';
56
import HeaderWithBackButton from '@components/HeaderWithBackButton';
@@ -39,16 +40,17 @@ function WorkspaceTaxesPage({policy, route}: WorkspaceTaxesPageProps) {
3940
const defaultExternalID = policy?.taxRates?.defaultExternalID;
4041
const foreignTaxDefault = policy?.taxRates?.foreignTaxDefault;
4142

42-
const fetchTaxes = () => {
43+
const fetchTaxes = useCallback(() => {
4344
openPolicyTaxesPage(route.params.policyID);
44-
};
45+
}, [route.params.policyID]);
4546

4647
const {isOffline} = useNetwork({onReconnect: fetchTaxes});
4748

48-
useEffect(() => {
49-
fetchTaxes();
50-
// eslint-disable-next-line react-hooks/exhaustive-deps
51-
}, []);
49+
useFocusEffect(
50+
useCallback(() => {
51+
fetchTaxes();
52+
}, [fetchTaxes]),
53+
);
5254

5355
const textForDefault = useCallback(
5456
(taxID: string): string => {

src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import {useFocusEffect} from '@react-navigation/native';
12
import type {StackScreenProps} from '@react-navigation/stack';
2-
import React, {useCallback, useEffect, useMemo} from 'react';
3+
import React, {useCallback, useMemo} from 'react';
34
import {FlatList, View} from 'react-native';
45
import type {OnyxEntry} from 'react-native-onyx';
56
import {withOnyx} from 'react-native-onyx';
@@ -62,16 +63,17 @@ function WorkspaceWorkflowsPage({policy, betas, route, reimbursementAccount, ses
6263

6364
const onPressAutoReportingFrequency = useCallback(() => Navigation.navigate(ROUTES.WORKSPACE_WORKFLOWS_AUTOREPORTING_FREQUENCY.getRoute(policy?.id ?? '')), [policy?.id]);
6465

65-
const fetchData = () => {
66+
const fetchData = useCallback(() => {
6667
Policy.openPolicyWorkflowsPage(policy?.id ?? route.params.policyID);
67-
};
68+
}, [policy?.id, route.params.policyID]);
6869

6970
useNetwork({onReconnect: fetchData});
7071

71-
useEffect(() => {
72-
fetchData();
73-
// eslint-disable-next-line react-hooks/exhaustive-deps
74-
}, []);
72+
useFocusEffect(
73+
useCallback(() => {
74+
fetchData();
75+
}, [fetchData]),
76+
);
7577

7678
const optionItems: ToggleSettingOptionRowProps[] = useMemo(() => {
7779
const {accountNumber, state, bankName} = reimbursementAccount?.achData ?? {};

0 commit comments

Comments
 (0)