Skip to content

Commit bde1509

Browse files
authored
Merge pull request Expensify#66148 from mohammadjafarinejad/fix/65961
Fix/65961 - Remove remaining withOnyx HOCs from the project | Batch 1
2 parents 17ac11a + b7ac129 commit bde1509

5 files changed

Lines changed: 43 additions & 92 deletions

File tree

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,30 @@
11
import React from 'react';
22
import {View} from 'react-native';
3-
import {withOnyx} from 'react-native-onyx';
43
import type {OnyxEntry} from 'react-native-onyx';
54
import useLocalize from '@hooks/useLocalize';
5+
import usePolicy from '@hooks/usePolicy';
66
import useThemeStyles from '@hooks/useThemeStyles';
7-
import * as Session from '@userActions/Session';
8-
import ONYXKEYS from '@src/ONYXKEYS';
9-
import type {Policy, Report} from '@src/types/onyx';
7+
import {signOutAndRedirectToSignIn} from '@userActions/Session';
8+
import type {Report} from '@src/types/onyx';
109
import AvatarWithDisplayName from './AvatarWithDisplayName';
1110
import Button from './Button';
1211
import ExpensifyWordmark from './ExpensifyWordmark';
1312
import Text from './Text';
1413

15-
type AnonymousReportFooterPropsWithOnyx = {
16-
/** The policy which the user has access to and which the report is tied to */
17-
policy: OnyxEntry<Policy>;
18-
};
19-
20-
type AnonymousReportFooterProps = AnonymousReportFooterPropsWithOnyx & {
14+
type AnonymousReportFooterProps = {
2115
/** The report currently being looked at */
2216
report: OnyxEntry<Report>;
2317

2418
/** Whether the small screen size layout should be used */
2519
isSmallSizeLayout?: boolean;
2620
};
2721

28-
function AnonymousReportFooter({isSmallSizeLayout = false, report, policy}: AnonymousReportFooterProps) {
22+
function AnonymousReportFooter({isSmallSizeLayout = false, report}: AnonymousReportFooterProps) {
2923
const styles = useThemeStyles();
3024
const {translate} = useLocalize();
3125

26+
const policy = usePolicy(report?.policyID);
27+
3228
return (
3329
<View style={styles.anonymousRoomFooter(isSmallSizeLayout)}>
3430
<View style={[styles.flexRow, styles.flexShrink1]}>
@@ -50,7 +46,7 @@ function AnonymousReportFooter({isSmallSizeLayout = false, report, policy}: Anon
5046
<Button
5147
success
5248
text={translate('common.signIn')}
53-
onPress={() => Session.signOutAndRedirectToSignIn()}
49+
onPress={signOutAndRedirectToSignIn as () => void}
5450
/>
5551
</View>
5652
</View>
@@ -60,8 +56,4 @@ function AnonymousReportFooter({isSmallSizeLayout = false, report, policy}: Anon
6056

6157
AnonymousReportFooter.displayName = 'AnonymousReportFooter';
6258

63-
export default withOnyx<AnonymousReportFooterProps, AnonymousReportFooterPropsWithOnyx>({
64-
policy: {
65-
key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`,
66-
},
67-
})(AnonymousReportFooter);
59+
export default AnonymousReportFooter;

src/components/CardPreview.tsx

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,19 @@
11
import React from 'react';
22
import {View} from 'react-native';
3-
import type {OnyxEntry} from 'react-native-onyx';
4-
import {withOnyx} from 'react-native-onyx';
53
import ExpensifyCardImage from '@assets/images/expensify-card.svg';
4+
import useOnyx from '@hooks/useOnyx';
65
import useThemeStyles from '@hooks/useThemeStyles';
76
import variables from '@styles/variables';
87
import ONYXKEYS from '@src/ONYXKEYS';
9-
import type {PrivatePersonalDetails, Session} from '@src/types/onyx';
108
import ImageSVG from './ImageSVG';
119
import Text from './Text';
1210

13-
type CardPreviewOnyxProps = {
14-
/** User's private personal details */
15-
privatePersonalDetails: OnyxEntry<PrivatePersonalDetails>;
16-
/** Session info for the currently logged in user. */
17-
session: OnyxEntry<Session>;
18-
};
11+
function CardPreview() {
12+
const styles = useThemeStyles();
1913

20-
type CardPreviewProps = CardPreviewOnyxProps;
14+
const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS, {canBeMissing: true});
15+
const [session] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: true});
2116

22-
function CardPreview({privatePersonalDetails, session}: CardPreviewProps) {
23-
const styles = useThemeStyles();
2417
const {legalFirstName, legalLastName} = privatePersonalDetails ?? {};
2518
const cardHolder = legalFirstName && legalLastName ? `${legalFirstName} ${legalLastName}` : (session?.email ?? '');
2619

@@ -46,11 +39,4 @@ function CardPreview({privatePersonalDetails, session}: CardPreviewProps) {
4639

4740
CardPreview.displayName = 'CardPreview';
4841

49-
export default withOnyx<CardPreviewProps, CardPreviewOnyxProps>({
50-
privatePersonalDetails: {
51-
key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS,
52-
},
53-
session: {
54-
key: ONYXKEYS.SESSION,
55-
},
56-
})(CardPreview);
42+
export default CardPreview;

src/components/ConfirmedRoute.tsx

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import React, {useCallback, useEffect} from 'react';
22
import type {ReactNode} from 'react';
3-
import {withOnyx} from 'react-native-onyx';
43
import type {OnyxEntry} from 'react-native-onyx';
54
import useNetwork from '@hooks/useNetwork';
5+
import useOnyx from '@hooks/useOnyx';
66
import useStyleUtils from '@hooks/useStyleUtils';
77
import useTheme from '@hooks/useTheme';
88
import useThemeStyles from '@hooks/useThemeStyles';
9-
import * as TransactionUtils from '@libs/TransactionUtils';
10-
import * as MapboxToken from '@userActions/MapboxToken';
9+
import {getWaypointIndex} from '@libs/TransactionUtils';
10+
import {init as initMapboxToken, stop as stopMapboxToken} from '@userActions/MapboxToken';
1111
import CONST from '@src/CONST';
1212
import ONYXKEYS from '@src/ONYXKEYS';
13-
import type {MapboxAccessToken, Transaction} from '@src/types/onyx';
13+
import type {Transaction} from '@src/types/onyx';
1414
import type {WaypointCollection} from '@src/types/onyx/Transaction';
1515
import type IconAsset from '@src/types/utils/IconAsset';
1616
import DistanceMapView from './DistanceMapView';
@@ -19,12 +19,7 @@ import ImageSVG from './ImageSVG';
1919
import type {WayPoint} from './MapView/MapViewTypes';
2020
import PendingMapView from './MapView/PendingMapView';
2121

22-
type ConfirmedRoutePropsOnyxProps = {
23-
/** Data about Mapbox token for calling Mapbox API */
24-
mapboxAccessToken: OnyxEntry<MapboxAccessToken>;
25-
};
26-
27-
type ConfirmedRouteProps = ConfirmedRoutePropsOnyxProps & {
22+
type ConfirmedRouteProps = {
2823
/** Transaction that stores the distance expense data */
2924
transaction: OnyxEntry<Transaction>;
3025

@@ -42,7 +37,7 @@ type ConfirmedRouteProps = ConfirmedRoutePropsOnyxProps & {
4237
interactive?: boolean;
4338
};
4439

45-
function ConfirmedRoute({mapboxAccessToken, transaction, isSmallerIcon, shouldHaveBorderRadius = true, requireRouteToDisplayMap = false, interactive}: ConfirmedRouteProps) {
40+
function ConfirmedRoute({transaction, isSmallerIcon, shouldHaveBorderRadius = true, requireRouteToDisplayMap = false, interactive}: ConfirmedRouteProps) {
4641
const {isOffline} = useNetwork();
4742
const {route0: route} = transaction?.routes ?? {};
4843
const waypoints = transaction?.comment?.waypoints ?? {};
@@ -51,6 +46,8 @@ function ConfirmedRoute({mapboxAccessToken, transaction, isSmallerIcon, shouldHa
5146
const styles = useThemeStyles();
5247
const StyleUtils = useStyleUtils();
5348

49+
const [mapboxAccessToken] = useOnyx(ONYXKEYS.MAPBOX_ACCESS_TOKEN, {canBeMissing: true});
50+
5451
const getMarkerComponent = useCallback(
5552
(icon: IconAsset): ReactNode => (
5653
<ImageSVG
@@ -74,7 +71,7 @@ function ConfirmedRoute({mapboxAccessToken, transaction, isSmallerIcon, shouldHa
7471
return;
7572
}
7673

77-
const index = TransactionUtils.getWaypointIndex(key);
74+
const index = getWaypointIndex(key);
7875
let MarkerComponent: IconAsset;
7976
if (index === 0) {
8077
MarkerComponent = Expensicons.DotIndicatorUnfilled;
@@ -98,8 +95,8 @@ function ConfirmedRoute({mapboxAccessToken, transaction, isSmallerIcon, shouldHa
9895
const waypointMarkers = getWaypointMarkers(waypoints);
9996

10097
useEffect(() => {
101-
MapboxToken.init();
102-
return MapboxToken.stop;
98+
initMapboxToken();
99+
return stopMapboxToken;
103100
}, []);
104101

105102
const shouldDisplayMap = !requireRouteToDisplayMap || !!coordinates.length;
@@ -128,10 +125,6 @@ function ConfirmedRoute({mapboxAccessToken, transaction, isSmallerIcon, shouldHa
128125
);
129126
}
130127

131-
export default withOnyx<ConfirmedRouteProps, ConfirmedRoutePropsOnyxProps>({
132-
mapboxAccessToken: {
133-
key: ONYXKEYS.MAPBOX_ACCESS_TOKEN,
134-
},
135-
})(ConfirmedRoute);
136-
137128
ConfirmedRoute.displayName = 'ConfirmedRoute';
129+
130+
export default ConfirmedRoute;

src/components/PDFView/index.tsx

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,26 @@ import type {CSSProperties} from 'react';
44
import React, {memo, useCallback, useEffect, useState} from 'react';
55
import {PDFPreviewer} from 'react-fast-pdf';
66
import {View} from 'react-native';
7-
import {withOnyx} from 'react-native-onyx';
87
import FullScreenLoadingIndicator from '@components/FullscreenLoadingIndicator';
98
import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback';
109
import useLocalize from '@hooks/useLocalize';
10+
import useOnyx from '@hooks/useOnyx';
1111
import usePrevious from '@hooks/usePrevious';
1212
import useResponsiveLayout from '@hooks/useResponsiveLayout';
1313
import useStyleUtils from '@hooks/useStyleUtils';
1414
import useThemeStyles from '@hooks/useThemeStyles';
1515
import useWindowDimensions from '@hooks/useWindowDimensions';
1616
import variables from '@styles/variables';
17-
import * as CanvasSize from '@userActions/CanvasSize';
17+
import {retrieveMaxCanvasArea, retrieveMaxCanvasHeight, retrieveMaxCanvasWidth} from '@userActions/CanvasSize';
1818
import CONST from '@src/CONST';
1919
import ONYXKEYS from '@src/ONYXKEYS';
2020
import PDFPasswordForm from './PDFPasswordForm';
21-
import type {PDFViewOnyxProps, PDFViewProps} from './types';
21+
import type {PDFViewProps} from './types';
2222

2323
const LOADING_THUMBNAIL_HEIGHT = 250;
2424
const LOADING_THUMBNAIL_WIDTH = 250;
2525

26-
function PDFView({onToggleKeyboard, fileName, onPress, isFocused, sourceURL, maxCanvasArea, maxCanvasHeight, maxCanvasWidth, style, isUsedAsChatAttachment, onLoadError}: PDFViewProps) {
26+
function PDFView({onToggleKeyboard, fileName, onPress, isFocused, sourceURL, style, isUsedAsChatAttachment, onLoadError}: PDFViewProps) {
2727
const [isKeyboardOpen, setIsKeyboardOpen] = useState(false);
2828
const styles = useThemeStyles();
2929
const StyleUtils = useStyleUtils();
@@ -32,6 +32,10 @@ function PDFView({onToggleKeyboard, fileName, onPress, isFocused, sourceURL, max
3232
const prevWindowHeight = usePrevious(windowHeight);
3333
const {translate} = useLocalize();
3434

35+
const [maxCanvasArea] = useOnyx(ONYXKEYS.MAX_CANVAS_AREA, {canBeMissing: true});
36+
const [maxCanvasHeight] = useOnyx(ONYXKEYS.MAX_CANVAS_HEIGHT, {canBeMissing: true});
37+
const [maxCanvasWidth] = useOnyx(ONYXKEYS.MAX_CANVAS_WIDTH, {canBeMissing: true});
38+
3539
/**
3640
* On small screens notify parent that the keyboard has opened or closed.
3741
*
@@ -53,15 +57,15 @@ function PDFView({onToggleKeyboard, fileName, onPress, isFocused, sourceURL, max
5357
*/
5458
const retrieveCanvasLimits = () => {
5559
if (!maxCanvasArea) {
56-
CanvasSize.retrieveMaxCanvasArea();
60+
retrieveMaxCanvasArea();
5761
}
5862

5963
if (!maxCanvasHeight) {
60-
CanvasSize.retrieveMaxCanvasHeight();
64+
retrieveMaxCanvasHeight();
6165
}
6266

6367
if (!maxCanvasWidth) {
64-
CanvasSize.retrieveMaxCanvasWidth();
68+
retrieveMaxCanvasWidth();
6569
}
6670
};
6771

@@ -142,14 +146,4 @@ function PDFView({onToggleKeyboard, fileName, onPress, isFocused, sourceURL, max
142146
);
143147
}
144148

145-
export default withOnyx<PDFViewProps, PDFViewOnyxProps>({
146-
maxCanvasArea: {
147-
key: ONYXKEYS.MAX_CANVAS_AREA,
148-
},
149-
maxCanvasHeight: {
150-
key: ONYXKEYS.MAX_CANVAS_HEIGHT,
151-
},
152-
maxCanvasWidth: {
153-
key: ONYXKEYS.MAX_CANVAS_WIDTH,
154-
},
155-
})(memo(PDFView));
149+
export default memo(PDFView);

src/components/PDFView/types.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type {GestureResponderEvent, StyleProp, ViewStyle} from 'react-native';
2-
import type {OnyxEntry} from 'react-native-onyx';
32

4-
type PDFViewBaseProps = {
3+
type PDFViewProps = {
54
/** URL to full-sized image */
65
sourceURL: string;
76

@@ -33,21 +32,8 @@ type PDFViewBaseProps = {
3332
isUsedAsChatAttachment?: boolean;
3433
};
3534

36-
type PDFViewOnyxProps = {
37-
// Maximum canvas area to render the PDF preview
38-
maxCanvasArea: OnyxEntry<number>;
39-
40-
// Maximum canvas height to render the PDF preview
41-
maxCanvasHeight: OnyxEntry<number>;
42-
43-
// Maximum canvas width to render the PDF preview
44-
maxCanvasWidth: OnyxEntry<number>;
45-
};
46-
47-
type PDFViewProps = PDFViewBaseProps & PDFViewOnyxProps;
48-
49-
type PDFViewNativeProps = PDFViewBaseProps & {
35+
type PDFViewNativeProps = PDFViewProps & {
5036
onPress?: (page: number, x: number, y: number) => void;
5137
};
5238

53-
export type {PDFViewNativeProps, PDFViewProps, PDFViewOnyxProps};
39+
export type {PDFViewNativeProps, PDFViewProps};

0 commit comments

Comments
 (0)