Skip to content

Commit bf35a10

Browse files
authored
Merge pull request Expensify#75533 from TaduJR/fix-Migrate-simple-illustrations-common-to-lazy-loading
2 parents cae1e1a + fa06cc2 commit bf35a10

35 files changed

+323
-210
lines changed

src/components/Icon/Illustrations.ts

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -52,39 +52,9 @@ import ToddBehindCloud from '@assets/images/product-illustrations/todd-behind-cl
5252
import ToddInCar from '@assets/images/product-illustrations/todd-in-car.svg';
5353
import ToddWithPhones from '@assets/images/product-illustrations/todd-with-phones.svg';
5454
import RunningTurtle from '@assets/images/running-turtle.svg';
55-
import Puzzle from '@assets/images/simple-illustrations/emptystate__puzzlepieces.svg';
56-
import Abacus from '@assets/images/simple-illustrations/simple-illustration__abacus.svg';
57-
import Alert from '@assets/images/simple-illustrations/simple-illustration__alert.svg';
58-
import Approval from '@assets/images/simple-illustrations/simple-illustration__approval.svg';
59-
import Binoculars from '@assets/images/simple-illustrations/simple-illustration__binoculars.svg';
6055
import BlueShield from '@assets/images/simple-illustrations/simple-illustration__blueshield.svg';
61-
import Buildings from '@assets/images/simple-illustrations/simple-illustration__buildings.svg';
6256
import CarIce from '@assets/images/simple-illustrations/simple-illustration__car-ice.svg';
63-
import Car from '@assets/images/simple-illustrations/simple-illustration__car.svg';
64-
import PinkCar from '@assets/images/simple-illustrations/simple-illustration__car_pink.svg';
65-
import ChatBubbles from '@assets/images/simple-illustrations/simple-illustration__chatbubbles.svg';
66-
import CheckmarkCircle from '@assets/images/simple-illustrations/simple-illustration__checkmarkcircle.svg';
67-
import CommentBubbles from '@assets/images/simple-illustrations/simple-illustration__commentbubbles.svg';
68-
import ConciergeBubble from '@assets/images/simple-illustrations/simple-illustration__concierge-bubble.svg';
69-
import CreditCardEyes from '@assets/images/simple-illustrations/simple-illustration__creditcardeyes.svg';
70-
import CreditCardsNewGreen from '@assets/images/simple-illustrations/simple-illustration__creditcards--green.svg';
71-
import EmailAddress from '@assets/images/simple-illustrations/simple-illustration__email-address.svg';
72-
import EmptyShelves from '@assets/images/simple-illustrations/simple-illustration__empty-shelves.svg';
73-
import Encryption from '@assets/images/simple-illustrations/simple-illustration__encryption.svg';
74-
import EnvelopeReceipt from '@assets/images/simple-illustrations/simple-illustration__envelopereceipt.svg';
75-
import Filters from '@assets/images/simple-illustrations/simple-illustration__filters.svg';
76-
import Flash from '@assets/images/simple-illustrations/simple-illustration__flash.svg';
77-
import Gears from '@assets/images/simple-illustrations/simple-illustration__gears.svg';
78-
import HeadSet from '@assets/images/simple-illustrations/simple-illustration__headset.svg';
79-
import Hourglass from '@assets/images/simple-illustrations/simple-illustration__hourglass.svg';
80-
import House from '@assets/images/simple-illustrations/simple-illustration__house.svg';
81-
import Lightbulb from '@assets/images/simple-illustrations/simple-illustration__lightbulb.svg';
82-
import LockClosed from '@assets/images/simple-illustrations/simple-illustration__lockclosed.svg';
83-
import LockClosedOrange from '@assets/images/simple-illustrations/simple-illustration__lockclosed_orange.svg';
84-
import LockOpen from '@assets/images/simple-illustrations/simple-illustration__lockopen.svg';
85-
import Luggage from '@assets/images/simple-illustrations/simple-illustration__luggage.svg';
8657
import MagnifyingGlassReceipt from '@assets/images/simple-illustrations/simple-illustration__magnifyingglass-receipt.svg';
87-
import Mailbox from '@assets/images/simple-illustrations/simple-illustration__mailbox.svg';
8858
import ExpensifyMobileApp from '@assets/images/simple-illustrations/simple-illustration__mobileapp.svg';
8959
import MoneyIntoWallet from '@assets/images/simple-illustrations/simple-illustration__moneyintowallet.svg';
9060
import OpenSafe from '@assets/images/simple-illustrations/simple-illustration__opensafe.svg';
@@ -118,20 +88,14 @@ import TurtleInShell from '@assets/images/turtle-in-shell.svg';
11888

11989
export {
12090
Abracadabra,
121-
Encryption,
12291
BrokenMagnifyingGlass,
123-
ChatBubbles,
124-
PinkCar,
12592
Computer,
126-
EmailAddress,
12793
EmptyCardState,
12894
EmptyStateExpenses,
129-
EnvelopeReceipt,
13095
ExpensifyCardImage,
13196
PaymentHands,
13297
MagicCode,
13398
MagnifyingGlassReceipt,
134-
Mailbox,
13599
MushroomTopHat,
136100
RocketBlue,
137101
RocketDude,
@@ -141,61 +105,39 @@ export {
141105
ToddInCar,
142106
ShieldYellow,
143107
BrokenCompanyCardBankConnection,
144-
CreditCardsNewGreen,
145108
LaptopWithSecondScreenAndHourglass,
146109
LaptopWithSecondScreenSync,
147110
LaptopWithSecondScreenX,
148-
LockOpen,
149-
Luggage,
150111
MoneyIntoWallet,
151-
ConciergeBubble,
152112
TreasureChest,
153113
ThumbsUpStars,
154114
Hands,
155-
HeadSet,
156115
SmartScan,
157-
Hourglass,
158-
CommentBubbles,
159116
TrashCan,
160117
Profile,
161-
Puzzle,
162118
PalmTree,
163-
LockClosed,
164-
Gears,
165119
QRCode,
166120
RealtimeReport,
167121
HoldExpense,
168122
ReceiptFairy,
169-
Approval,
170123
PendingBank,
171124
ThreeLeggedLaptopWoman,
172-
House,
173-
Buildings,
174-
Alert,
175125
TeachersUnite,
176-
Abacus,
177-
Binoculars,
178126
ReceiptUpload,
179127
SplitBill,
180128
PiggyBank,
181129
Pillow,
182-
Car,
183130
Pencil,
184131
CarIce,
185132
ReceiptLocationMarker,
186-
Lightbulb,
187133
Stopwatch,
188134
SubscriptionAnnual,
189135
SubscriptionPPU,
190136
ExpensifyApprovedLogo,
191137
SendMoney,
192-
CheckmarkCircle,
193-
CreditCardEyes,
194-
LockClosedOrange,
195138
FolderWithPapers,
196139
VirtualCard,
197140
Tire,
198-
Filters,
199141
RunningTurtle,
200142
CompanyCardsPendingState,
201143
VisaCompanyCardDetail,
@@ -220,7 +162,6 @@ export {
220162
StripeCompanyCardDetailLarge,
221163
VisaCompanyCardDetailLarge,
222164
WellsFargoCompanyCardDetailLarge,
223-
Flash,
224165
ExpensifyMobileApp,
225166
ModalHoldOrReject,
226167
ThumbsDown,
@@ -229,7 +170,6 @@ export {
229170
ReceiptsStackedOnPin,
230171
PaperAirplane,
231172
CardReplacementSuccess,
232-
EmptyShelves,
233173
BlueShield,
234174
OpenSafe,
235175
LaptopOnDeskWithCoffeeAndKey,

src/components/Icon/chunks/illustrations.chunk.ts

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,48 @@ import LaptopWithSecondScreenX from '@assets/images/laptop-with-second-screen-x.
1414
import ModalHoldOrReject from '@assets/images/product-illustrations/modal-hold-or-reject.svg';
1515
import TeleScope from '@assets/images/product-illustrations/telescope.svg';
1616
import ToddBehindCloud from '@assets/images/product-illustrations/todd-behind-cloud.svg';
17-
// Simple Illustrations - Core ones that are actually used
17+
// Simple Illustrations - Bucket 3 (Common)
18+
import Puzzle from '@assets/images/simple-illustrations/emptystate__puzzlepieces.svg';
19+
import Abacus from '@assets/images/simple-illustrations/simple-illustration__abacus.svg';
20+
// Simple Illustrations - Original core ones
1821
import Accounting from '@assets/images/simple-illustrations/simple-illustration__accounting.svg';
22+
import Alert from '@assets/images/simple-illustrations/simple-illustration__alert.svg';
23+
import Approval from '@assets/images/simple-illustrations/simple-illustration__approval.svg';
24+
import Binoculars from '@assets/images/simple-illustrations/simple-illustration__binoculars.svg';
1925
import BlueShield from '@assets/images/simple-illustrations/simple-illustration__blueshield.svg';
2026
import Building from '@assets/images/simple-illustrations/simple-illustration__building.svg';
27+
import Buildings from '@assets/images/simple-illustrations/simple-illustration__buildings.svg';
2128
import CarIce from '@assets/images/simple-illustrations/simple-illustration__car-ice.svg';
29+
import Car from '@assets/images/simple-illustrations/simple-illustration__car.svg';
30+
import PinkCar from '@assets/images/simple-illustrations/simple-illustration__car_pink.svg';
31+
import ChatBubbles from '@assets/images/simple-illustrations/simple-illustration__chatbubbles.svg';
32+
import CheckmarkCircle from '@assets/images/simple-illustrations/simple-illustration__checkmarkcircle.svg';
2233
import Coins from '@assets/images/simple-illustrations/simple-illustration__coins.svg';
34+
import CommentBubbles from '@assets/images/simple-illustrations/simple-illustration__commentbubbles.svg';
35+
import ConciergeBubble from '@assets/images/simple-illustrations/simple-illustration__concierge-bubble.svg';
2336
import CreditCardsNew from '@assets/images/simple-illustrations/simple-illustration__credit-cards.svg';
37+
import CreditCardEyes from '@assets/images/simple-illustrations/simple-illustration__creditcardeyes.svg';
38+
import CreditCardsNewGreen from '@assets/images/simple-illustrations/simple-illustration__creditcards--green.svg';
39+
import EmailAddress from '@assets/images/simple-illustrations/simple-illustration__email-address.svg';
40+
import EmptyShelves from '@assets/images/simple-illustrations/simple-illustration__empty-shelves.svg';
41+
import Encryption from '@assets/images/simple-illustrations/simple-illustration__encryption.svg';
42+
import EnvelopeReceipt from '@assets/images/simple-illustrations/simple-illustration__envelopereceipt.svg';
43+
import Filters from '@assets/images/simple-illustrations/simple-illustration__filters.svg';
44+
import Flash from '@assets/images/simple-illustrations/simple-illustration__flash.svg';
2445
import FolderOpen from '@assets/images/simple-illustrations/simple-illustration__folder-open.svg';
46+
import Gears from '@assets/images/simple-illustrations/simple-illustration__gears.svg';
2547
import HandCard from '@assets/images/simple-illustrations/simple-illustration__handcard.svg';
48+
import HeadSet from '@assets/images/simple-illustrations/simple-illustration__headset.svg';
49+
import Hourglass from '@assets/images/simple-illustrations/simple-illustration__hourglass.svg';
50+
import House from '@assets/images/simple-illustrations/simple-illustration__house.svg';
2651
import InvoiceBlue from '@assets/images/simple-illustrations/simple-illustration__invoice.svg';
52+
import Lightbulb from '@assets/images/simple-illustrations/simple-illustration__lightbulb.svg';
53+
import LockClosed from '@assets/images/simple-illustrations/simple-illustration__lockclosed.svg';
54+
import LockClosedOrange from '@assets/images/simple-illustrations/simple-illustration__lockclosed_orange.svg';
55+
import LockOpen from '@assets/images/simple-illustrations/simple-illustration__lockopen.svg';
2756
import Luggage from '@assets/images/simple-illustrations/simple-illustration__luggage.svg';
2857
import MagnifyingGlassMoney from '@assets/images/simple-illustrations/simple-illustration__magnifyingglass-money.svg';
58+
import Mailbox from '@assets/images/simple-illustrations/simple-illustration__mailbox.svg';
2959
import MoneyReceipts from '@assets/images/simple-illustrations/simple-illustration__money-receipts.svg';
3060
import MoneyWings from '@assets/images/simple-illustrations/simple-illustration__moneywings.svg';
3161
import Pencil from '@assets/images/simple-illustrations/simple-illustration__pencil.svg';
@@ -34,6 +64,7 @@ import RealtimeReport from '@assets/images/simple-illustrations/simple-illustrat
3464
import ReceiptWrangler from '@assets/images/simple-illustrations/simple-illustration__receipt-wrangler.svg';
3565
import ReportReceipt from '@assets/images/simple-illustrations/simple-illustration__report-receipt.svg';
3666
import Rules from '@assets/images/simple-illustrations/simple-illustration__rules.svg';
67+
import ShieldYellow from '@assets/images/simple-illustrations/simple-illustration__shield.svg';
3768
import Stopwatch from '@assets/images/simple-illustrations/simple-illustration__stopwatch.svg';
3869
import Tag from '@assets/images/simple-illustrations/simple-illustration__tag.svg';
3970
import ThumbsDown from '@assets/images/simple-illustrations/simple-illustration__thumbsdown.svg';
@@ -61,7 +92,7 @@ const Illustrations = {
6192
Telescope: TeleScope, // Alias for consistency
6293
ToddBehindCloud,
6394

64-
// Simple Illustrations
95+
// Simple Illustrations - Original
6596
Accounting,
6697
Building,
6798
Coins,
@@ -86,8 +117,38 @@ const Illustrations = {
86117
BlueShield,
87118
Pencil,
88119
Luggage,
89-
// Legacy aliases for compatibility
90-
Car: CompanyCard, // Fallback for Car illustration requests
120+
121+
// Simple Illustrations - Bucket 3 (Common)
122+
Puzzle,
123+
Abacus,
124+
Alert,
125+
Approval,
126+
Binoculars,
127+
Buildings,
128+
Car,
129+
PinkCar,
130+
ChatBubbles,
131+
CheckmarkCircle,
132+
CommentBubbles,
133+
ConciergeBubble,
134+
CreditCardEyes,
135+
CreditCardsNewGreen,
136+
EmailAddress,
137+
EmptyShelves,
138+
Encryption,
139+
EnvelopeReceipt,
140+
Filters,
141+
Flash,
142+
Gears,
143+
HeadSet,
144+
Hourglass,
145+
House,
146+
Lightbulb,
147+
LockClosed,
148+
LockClosedOrange,
149+
LockOpen,
150+
Mailbox,
151+
ShieldYellow,
91152
};
92153

93154
/**

src/components/OnboardingHelpDropdownButton.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {accountIDSelector} from '@selectors/Session';
22
import {addMinutes} from 'date-fns';
33
import React from 'react';
44
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
5+
import {useMemoizedLazyIllustrations} from '@hooks/useLazyAsset';
56
import useLocalize from '@hooks/useLocalize';
67
import useOnyx from '@hooks/useOnyx';
78
import useThemeStyles from '@hooks/useThemeStyles';
@@ -17,7 +18,6 @@ import type {ReportNameValuePairs} from '@src/types/onyx';
1718
import ButtonWithDropdownMenu from './ButtonWithDropdownMenu';
1819
import type {DropdownOption, OnboardingHelpType} from './ButtonWithDropdownMenu/types';
1920
import {CalendarSolid, Close, Monitor} from './Icon/Expensicons';
20-
import * as Illustrations from './Icon/Illustrations';
2121

2222
type OnboardingHelpButtonProps = {
2323
/** The ID of onboarding chat report */
@@ -51,6 +51,8 @@ function OnboardingHelpDropdownButton({reportID, shouldUseNarrowLayout, shouldSh
5151
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
5252
const userTimezone = currentUserPersonalDetails?.timezone?.selected ? currentUserPersonalDetails?.timezone.selected : CONST.DEFAULT_TIME_ZONE.selected;
5353

54+
const illustrations = useMemoizedLazyIllustrations(['HeadSet'] as const);
55+
5456
if (!reportID || !accountID) {
5557
return null;
5658
}
@@ -84,7 +86,7 @@ function OnboardingHelpDropdownButton({reportID, shouldUseNarrowLayout, shouldSh
8486
)} ${DateUtils.getZoneAbbreviation(new Date(latestScheduledCall.eventTime), userTimezone)}`,
8587
descriptionTextStyle: [styles.themeTextColor, styles.ml2],
8688
displayInDefaultIconColor: true,
87-
icon: Illustrations.HeadSet,
89+
icon: illustrations.HeadSet,
8890
iconWidth: variables.avatarSizeLargeNormal,
8991
iconHeight: variables.avatarSizeLargeNormal,
9092
wrapperStyle: [styles.mb3, styles.pl4, styles.pr5, styles.pt3, styles.pb6, styles.borderBottom],

src/libs/SubscriptionUtils.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ import {differenceInSeconds, fromUnixTime, isAfter, isBefore} from 'date-fns';
22
import {fromZonedTime} from 'date-fns-tz';
33
import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
44
import Onyx from 'react-native-onyx';
5-
import type {SvgProps} from 'react-native-svg';
65
import type {ValueOf} from 'type-fest';
7-
import * as Illustrations from '@components/Icon/Illustrations';
86
import type {LocalizedTranslate} from '@components/LocaleContextProvider';
97
import type {PreferredCurrency} from '@hooks/usePreferredCurrency';
108
import type {PersonalPolicyTypeExcludedProps} from '@pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCard';
@@ -13,6 +11,7 @@ import CONST from '@src/CONST';
1311
import ONYXKEYS from '@src/ONYXKEYS';
1412
import type {BillingGraceEndPeriod, BillingStatus, Fund, FundList, IntroSelected, Policy, StripeCustomerID} from '@src/types/onyx';
1513
import {isEmptyObject} from '@src/types/utils/EmptyObject';
14+
import type IconAsset from '@src/types/utils/IconAsset';
1615
import {convertToShortDisplayString} from './CurrencyUtils';
1716
import {getOwnedPaidPolicies, isPolicyOwner} from './PolicyUtils';
1817

@@ -44,10 +43,15 @@ type SubscriptionPlanInfo = {
4443
subtitle: string;
4544
note: string | undefined;
4645
benefits: string[];
47-
src: React.FC<SvgProps>;
46+
src: IconAsset;
4847
description: string;
4948
};
5049

50+
type SubscriptionPlanIllustrations = {
51+
Mailbox: IconAsset;
52+
ShieldYellow: IconAsset;
53+
};
54+
5155
let currentUserAccountID = -1;
5256
Onyx.connect({
5357
key: ONYXKEYS.SESSION,
@@ -555,6 +559,7 @@ function getSubscriptionPlanInfo(
555559
preferredCurrency: PreferredCurrency,
556560
isFromComparisonModal: boolean,
557561
hasTeam2025Pricing: boolean,
562+
illustrations: Record<'Mailbox' | 'ShieldYellow', IconAsset>,
558563
): SubscriptionPlanInfo {
559564
const priceValue = getSubscriptionPrice(subscriptionPlan, preferredCurrency, privateSubscriptionType, hasTeam2025Pricing);
560565
const price = convertToShortDisplayString(priceValue, preferredCurrency);
@@ -587,7 +592,7 @@ function getSubscriptionPlanInfo(
587592
translate('subscription.yourPlan.collect.benefit7'),
588593
translate('subscription.yourPlan.collect.benefit8'),
589594
],
590-
src: Illustrations.Mailbox,
595+
src: illustrations.Mailbox,
591596
description: translate('subscription.yourPlan.collect.description'),
592597
};
593598
}
@@ -606,7 +611,7 @@ function getSubscriptionPlanInfo(
606611
translate('subscription.yourPlan.control.benefit7'),
607612
translate('subscription.yourPlan.control.benefit8'),
608613
],
609-
src: Illustrations.ShieldYellow,
614+
src: illustrations.ShieldYellow,
610615
description: translate('subscription.yourPlan.control.description'),
611616
};
612617
}
@@ -634,3 +639,5 @@ export {
634639
getSubscriptionPlanInfo,
635640
getSubscriptionPrice,
636641
};
642+
643+
export type {SubscriptionPlanIllustrations};

src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {useIsFocused} from '@react-navigation/native';
2-
import React, {useCallback, useImperativeHandle, useRef} from 'react';
2+
import React, {useCallback, useImperativeHandle, useMemo, useRef} from 'react';
33
import {InteractionManager, View} from 'react-native';
44
import {ScrollView} from 'react-native-gesture-handler';
55
import FormHelpMessage from '@components/FormHelpMessage';
@@ -9,6 +9,7 @@ import type {MenuItemProps} from '@components/MenuItem';
99
import MenuItemList from '@components/MenuItemList';
1010
import ScreenWrapper from '@components/ScreenWrapper';
1111
import Text from '@components/Text';
12+
import {useMemoizedLazyIllustrations} from '@hooks/useLazyAsset';
1213
import useLocalize from '@hooks/useLocalize';
1314
import useOnboardingMessages from '@hooks/useOnboardingMessages';
1415
import useOnyx from '@hooks/useOnyx';
@@ -39,17 +40,21 @@ function getOnboardingChoices(customChoices: OnboardingPurpose[]) {
3940
return selectableOnboardingChoices.filter((choice) => customChoices.includes(choice));
4041
}
4142

42-
const menuIcons = {
43-
[CONST.ONBOARDING_CHOICES.EMPLOYER]: Illustrations.ReceiptUpload,
44-
[CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: Illustrations.Abacus,
45-
[CONST.ONBOARDING_CHOICES.PERSONAL_SPEND]: Illustrations.PiggyBank,
46-
[CONST.ONBOARDING_CHOICES.CHAT_SPLIT]: Illustrations.SplitBill,
47-
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: Illustrations.Binoculars,
48-
};
49-
5043
function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, route}: BaseOnboardingPurposeProps) {
5144
const styles = useThemeStyles();
5245
const {translate} = useLocalize();
46+
const illustrations = useMemoizedLazyIllustrations(['Abacus', 'Binoculars'] as const);
47+
48+
const menuIcons = useMemo(
49+
() => ({
50+
[CONST.ONBOARDING_CHOICES.EMPLOYER]: Illustrations.ReceiptUpload,
51+
[CONST.ONBOARDING_CHOICES.MANAGE_TEAM]: illustrations.Abacus,
52+
[CONST.ONBOARDING_CHOICES.PERSONAL_SPEND]: Illustrations.PiggyBank,
53+
[CONST.ONBOARDING_CHOICES.CHAT_SPLIT]: Illustrations.SplitBill,
54+
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: illustrations.Binoculars,
55+
}),
56+
[illustrations.Abacus, illustrations.Binoculars],
57+
);
5358
const {onboardingIsMediumOrLargerScreenWidth} = useResponsiveLayout();
5459
const [account] = useOnyx(ONYXKEYS.ACCOUNT, {canBeMissing: true});
5560
const {onboardingMessages} = useOnboardingMessages();

0 commit comments

Comments
 (0)