Skip to content

Commit 3b065ba

Browse files
multiple personas clickable [Fixes #12645]
1 parent b4aa175 commit 3b065ba

File tree

5 files changed

+55
-20
lines changed

5 files changed

+55
-20
lines changed

src/components/FindWallet/WalletFilterPersona.tsx

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MdCircle } from "react-icons/md"
1+
import { MdCheckBox } from "react-icons/md"
22
import {
33
Box,
44
Flex,
@@ -19,11 +19,33 @@ import { useWalletPersonas } from "../../hooks/useWalletPersonas"
1919
type WalletFilterPersonaProps = {
2020
resetFilters: () => void
2121
setFilters: React.Dispatch<React.SetStateAction<WalletFilter>>
22-
selectedPersona: number
23-
setSelectedPersona: React.Dispatch<React.SetStateAction<number>>
22+
selectedPersona: number[]
23+
setSelectedPersona: React.Dispatch<React.SetStateAction<number[]>>
2424
showMobileSidebar: boolean
2525
}
2626

27+
const computeFilters = (
28+
selectedPersonas: number[],
29+
personas: WalletPersonas[]
30+
) => {
31+
if (selectedPersonas.length === 0) return {}
32+
33+
const firstPersona = personas[selectedPersonas[0]]
34+
const initialFilters = firstPersona.presetFilters
35+
return selectedPersonas
36+
.slice(1)
37+
.reduce((filters: { [key: string]: boolean }, personaId) => {
38+
const persona = personas[personaId]
39+
if (!persona) return filters
40+
41+
return Object.fromEntries(
42+
Object.entries(filters).map(([key, value]) => {
43+
return [key, value && persona.presetFilters[key]]
44+
})
45+
)
46+
}, initialFilters)
47+
}
48+
2749
const WalletFilterPersona = ({
2850
resetFilters,
2951
setFilters,
@@ -33,24 +55,25 @@ const WalletFilterPersona = ({
3355
}: WalletFilterPersonaProps) => {
3456
const personas = useWalletPersonas()
3557
const handleSelectPersona = (idx: number, persona: WalletPersonas) => {
36-
if (idx === selectedPersona) {
37-
resetFilters()
38-
58+
let newSelectedPersonas
59+
if (selectedPersona.includes(idx)) {
60+
newSelectedPersonas = selectedPersona.filter((persona) => persona !== idx)
3961
trackCustomEvent({
4062
eventCategory: "UserPersona",
4163
eventAction: `${persona.title}`,
4264
eventName: `${persona.title} false`,
4365
})
4466
} else {
45-
setSelectedPersona(idx)
46-
setFilters(persona.presetFilters)
47-
67+
newSelectedPersonas = [...selectedPersona, idx]
4868
trackCustomEvent({
4969
eventCategory: "UserPersona",
5070
eventAction: `${persona.title}`,
5171
eventName: `${persona.title} true`,
5272
})
5373
}
74+
setSelectedPersona(newSelectedPersonas)
75+
const newFilters = computeFilters(newSelectedPersonas, personas)
76+
setFilters(newFilters as WalletFilter)
5477
}
5578

5679
return (
@@ -95,16 +118,19 @@ const WalletFilterPersona = ({
95118
<Flex gap={2} mb={showMobileSidebar ? 0 : 1} px={1.5}>
96119
<Box role="radio" aria-label={`${persona.title} filter`}>
97120
<Icon
98-
as={MdCircle}
99-
borderRadius="full"
121+
as={MdCheckBox}
100122
boxSize={2.5}
101123
my={0}
102124
mx={1}
103125
fill={
104-
selectedPersona === idx ? "primary.base" : "transparent"
126+
selectedPersona.includes(idx)
127+
? "primary.base"
128+
: "transparent"
105129
}
106130
background={
107-
selectedPersona === idx ? "primary.base" : "transparent"
131+
selectedPersona.includes(idx)
132+
? "primary.base"
133+
: "transparent"
108134
}
109135
outline="1.5px solid"
110136
outlineColor="primary.base"
@@ -135,7 +161,9 @@ const WalletFilterPersona = ({
135161
{!showMobileSidebar && (
136162
<Text
137163
p="0.4rem"
138-
color={selectedPersona === idx ? "body.base" : "body.medium"}
164+
color={
165+
selectedPersona.includes(idx) ? "body.base" : "body.medium"
166+
}
139167
fontSize="sm"
140168
fontWeight="normal"
141169
transition="0.5s all"

src/components/FindWallet/WalletFilterSidebar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ export type WalletFilterSidebarProps = Omit<BoxProps, "children"> & {
1919
resetWalletFilter: React.MutableRefObject<() => void>
2020
resetFilters: () => void
2121
setFilters: React.Dispatch<React.SetStateAction<WalletFilter>>
22-
selectedPersona: number
23-
setSelectedPersona: React.Dispatch<React.SetStateAction<number>>
22+
selectedPersona: number[]
23+
setSelectedPersona: React.Dispatch<React.SetStateAction<number[]>>
2424
updateFilterOption: (key: any) => void
2525
updateFilterOptions: (keys: any, value: any) => void
2626
showMobileSidebar?: boolean

src/hooks/useWalletPersonas.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export const useWalletPersonas = () => {
6464
withdraw_crypto: false,
6565
multisig: false,
6666
social_recovery: false,
67+
new_to_crypto: false,
6768
},
6869
},
6970
{
@@ -94,6 +95,7 @@ export const useWalletPersonas = () => {
9495
withdraw_crypto: false,
9596
multisig: false,
9697
social_recovery: false,
98+
new_to_crypto: false,
9799
},
98100
},
99101
{
@@ -124,6 +126,7 @@ export const useWalletPersonas = () => {
124126
withdraw_crypto: false,
125127
multisig: false,
126128
social_recovery: false,
129+
new_to_crypto: false,
127130
},
128131
},
129132
{
@@ -154,6 +157,7 @@ export const useWalletPersonas = () => {
154157
withdraw_crypto: false,
155158
multisig: false,
156159
social_recovery: false,
160+
new_to_crypto: false,
157161
},
158162
},
159163
]

src/lib/utils/wallets.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,11 @@ export const formatSupportedLanguages = (
100100
}
101101

102102
// Get border custom color for Persona filter
103-
export const getPersonaBorderColor = (selectedPersona: number, idx: number) => {
104-
return selectedPersona === idx ? "primary.base" : "transparent"
103+
export const getPersonaBorderColor = (
104+
selectedPersona: number[],
105+
idx: number
106+
) => {
107+
return selectedPersona.includes(idx) ? "primary.base" : "transparent"
105108
}
106109

107110
// Get total count of wallets that support a language

src/pages/wallets/find-wallet.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const FindWalletPage = () => {
8282
const resetWalletFilter = useRef(() => {})
8383

8484
const [filters, setFilters] = useState(WALLETS_FILTERS_DEFAULT)
85-
const [selectedPersona, setSelectedPersona] = useState(NaN)
85+
const [selectedPersona, setSelectedPersona] = useState<number[]>([])
8686
const [supportedLanguage, setSupportedLanguage] = useState(DEFAULT_LOCALE)
8787

8888
const { isOpen: showMobileSidebar, onOpen, onClose } = useDisclosure()
@@ -120,7 +120,7 @@ const FindWalletPage = () => {
120120
}
121121

122122
const resetFilters = () => {
123-
setSelectedPersona(NaN)
123+
setSelectedPersona([])
124124
setFilters(WALLETS_FILTERS_DEFAULT)
125125
setSupportedLanguage(DEFAULT_LOCALE)
126126
}

0 commit comments

Comments
 (0)