Skip to content

Commit 2c05254

Browse files
committed
refactor code to minimize renders and code exec
1 parent 8d3504f commit 2c05254

File tree

4 files changed

+43
-44
lines changed

4 files changed

+43
-44
lines changed

src/components/FindWallet/MobileFiltersMenu.tsx

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import {
1010
Flex,
1111
} from "@chakra-ui/react"
1212

13-
import type { Wallet } from "@/lib/types"
14-
1513
import { Button } from "@/components/Buttons"
1614

1715
import OldHeading from "../OldHeading"
@@ -23,17 +21,15 @@ import WalletFilterSidebar, {
2321
WalletFilterSidebarProps,
2422
} from "./WalletFilterSidebar"
2523

26-
import { useWalletTable } from "@/hooks/useWalletTable"
27-
2824
type MobileFiltersMenuProps = WalletFilterSidebarProps & {
29-
walletData: Wallet[]
3025
showMobileSidebar: boolean
3126
onOpen: () => void
3227
onClose: () => void
28+
totalWallets: number
3329
}
3430

3531
export const MobileFiltersMenu = ({
36-
walletData,
32+
totalWallets,
3733
filters,
3834
resetWalletFilter,
3935
resetFilters,
@@ -47,7 +43,6 @@ export const MobileFiltersMenu = ({
4743
onClose,
4844
}: MobileFiltersMenuProps) => {
4945
const { t } = useTranslation("page-wallets-find-wallet")
50-
const { filteredWallets } = useWalletTable({ filters, t, walletData })
5146

5247
return (
5348
<>
@@ -128,8 +123,7 @@ export const MobileFiltersMenu = ({
128123
</Box>
129124

130125
<Button w="100%" flex={1} onClick={onClose}>
131-
{t("page-find-wallet-see-wallets")}{" "}
132-
{`(${filteredWallets.length})`}
126+
{t("page-find-wallet-see-wallets")} {`(${totalWallets})`}
133127
</Button>
134128
</Flex>
135129
</DrawerBody>

src/components/FindWallet/WalletTable/index.tsx

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
Text,
1717
} from "@chakra-ui/react"
1818

19-
import type { ChildOnlyProp, Wallet, WalletFilter } from "@/lib/types"
19+
import type { ChildOnlyProp, WalletFilter } from "@/lib/types"
2020

2121
import { ButtonLink } from "@/components/Buttons"
2222
import { WalletMoreInfo } from "@/components/FindWallet/WalletTable/WalletMoreInfo"
@@ -196,28 +196,30 @@ const FlexInfoCenter = (props: { children: ReactNode; className?: string }) => (
196196
/>
197197
)
198198

199+
type UseWalletTable = ReturnType<typeof useWalletTable>
200+
199201
export type WalletTableProps = {
200202
filters: WalletFilter
201203
resetFilters: () => void
202204
resetWalletFilter: React.MutableRefObject<() => void>
203-
walletData: Wallet[]
205+
filteredWallets: UseWalletTable["filteredWallets"]
206+
totalWallets: number
207+
updateMoreInfo: (key: string) => void
208+
featureDropdownItems: UseWalletTable["featureDropdownItems"]
204209
onOpen: () => void
205210
}
206211

207212
const WalletTable = ({
208213
filters,
209214
resetFilters,
210215
resetWalletFilter,
211-
walletData,
216+
filteredWallets,
217+
totalWallets,
218+
updateMoreInfo,
219+
featureDropdownItems,
212220
onOpen,
213221
}: WalletTableProps) => {
214222
const { t } = useTranslation("page-wallets-find-wallet")
215-
const {
216-
featureDropdownItems,
217-
filteredWallets,
218-
updateMoreInfo,
219-
walletCardData,
220-
} = useWalletTable({ filters, t, walletData })
221223

222224
// Context API
223225
const { supportedLanguage } = useContext(WalletSupportedLanguageContext)
@@ -232,6 +234,17 @@ const WalletTable = ({
232234
})
233235
}
234236

237+
const showMoreInfo = (wallet) => {
238+
updateMoreInfo(wallet.key)
239+
// Log "more info" event only on expanding
240+
wallet.moreInfo &&
241+
trackCustomEvent({
242+
eventCategory: "WalletMoreInfo",
243+
eventAction: `More info wallet`,
244+
eventName: `More info ${wallet.name}`,
245+
})
246+
}
247+
235248
return (
236249
<Container>
237250
<WalletContentHeader>
@@ -254,16 +267,16 @@ const WalletTable = ({
254267
})`}
255268
</Text>
256269

257-
{filteredWallets.length === walletCardData.length ? (
270+
{filteredWallets.length === totalWallets ? (
258271
<Text ps={{ base: 2, md: 0 }} as="span">
259272
{t("page-find-wallet-showing-all-wallets")} (
260-
<strong>{walletCardData.length}</strong>)
273+
<strong>{totalWallets}</strong>)
261274
</Text>
262275
) : (
263276
<Text ps={{ base: 2, md: 0 }} as="span">
264277
{t("page-find-wallet-showing")}{" "}
265278
<strong>
266-
{filteredWallets.length} / {walletCardData.length}
279+
{filteredWallets.length} / {totalWallets}
267280
</strong>{" "}
268281
{t("page-find-wallet-wallets")}
269282
</Text>
@@ -296,17 +309,6 @@ const WalletTable = ({
296309
const hasDeviceLabels = deviceLabels.length > 0
297310
const hasAllLabels = hasPersonasLabels && hasDeviceLabels
298311

299-
const showMoreInfo = (wallet) => {
300-
updateMoreInfo(wallet.key)
301-
// Log "more info" event only on expanding
302-
wallet.moreInfo &&
303-
trackCustomEvent({
304-
eventCategory: "WalletMoreInfo",
305-
eventAction: `More info wallet`,
306-
eventName: `More info ${wallet.name}`,
307-
})
308-
}
309-
310312
return (
311313
<WalletContainer
312314
key={wallet.key}

src/hooks/useWalletTable.tsx

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useContext, useEffect, useState } from "react"
1+
import { useContext, useState } from "react"
22

33
import type { DropdownOption, Wallet, WalletFilter } from "@/lib/types"
44

@@ -120,20 +120,12 @@ export const useWalletTable = ({
120120
},
121121
]
122122

123-
const [walletCardData, setWalletData] = useState(
123+
const [walletCardData, setWalletData] = useState(() =>
124124
walletData.map((wallet) => {
125125
return { ...wallet, moreInfo: false, key: wallet.name }
126126
})
127127
)
128128

129-
useEffect(() => {
130-
setWalletData(
131-
walletData.map((wallet) => {
132-
return { ...wallet, moreInfo: false, key: wallet.name }
133-
})
134-
)
135-
}, [walletData])
136-
137129
// Context API for language filter
138130
const { supportedLanguage } = useContext(WalletSupportedLanguageContext)
139131

src/pages/wallets/find-wallet.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
} from "@/lib/constants"
3636

3737
import { WalletSupportedLanguageContext } from "@/contexts/WalletSupportedLanguageContext"
38+
import { useWalletTable } from "@/hooks/useWalletTable"
3839
import HeroImage from "@/public/wallets/wallet-hero.png"
3940

4041
const Subtitle = ({ children }: ChildOnlyProp) => (
@@ -98,6 +99,13 @@ const FindWalletPage = ({
9899

99100
const { isOpen: showMobileSidebar, onOpen, onClose } = useDisclosure()
100101

102+
const {
103+
featureDropdownItems,
104+
filteredWallets,
105+
updateMoreInfo,
106+
walletCardData,
107+
} = useWalletTable({ filters, t, walletData: wallets })
108+
101109
const updateFilterOption = (key) => {
102110
const updatedFilters = { ...filters }
103111
updatedFilters[key] = !updatedFilters[key]
@@ -197,7 +205,7 @@ const FindWalletPage = ({
197205
{/* Mobile filters menu */}
198206
<Box hideFrom="lg">
199207
<MobileFiltersMenu
200-
walletData={wallets}
208+
totalWallets={filteredWallets.length}
201209
filters={filters}
202210
resetWalletFilter={resetWalletFilter}
203211
updateFilterOption={updateFilterOption}
@@ -236,7 +244,10 @@ const FindWalletPage = ({
236244
filters={filters}
237245
resetFilters={resetFilters}
238246
resetWalletFilter={resetWalletFilter}
239-
walletData={wallets}
247+
filteredWallets={filteredWallets}
248+
totalWallets={walletCardData.length}
249+
updateMoreInfo={updateMoreInfo}
250+
featureDropdownItems={featureDropdownItems}
240251
onOpen={onOpen}
241252
/>
242253
</Box>

0 commit comments

Comments
 (0)