-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Expand file tree
/
Copy pathuseRampsButtonClickData.ts
More file actions
80 lines (69 loc) · 2.25 KB
/
useRampsButtonClickData.ts
File metadata and controls
80 lines (69 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import { useEffect, useMemo, useState } from 'react';
import { useSelector } from 'react-redux';
import {
getOrders,
getRampRoutingDecision,
UnifiedRampRoutingType,
} from '../../../../reducers/fiatOrders';
import { selectRampsOrdersForSelectedAccountGroup } from '../../../../selectors/rampsController';
import { getProviderToken } from '../Deposit/utils/ProviderTokenVault';
import {
completedOrdersFromFiatOrders,
completedOrdersFromRampsOrders,
} from '../utils/determinePreferredProvider';
export interface RampsButtonClickData {
ramp_routing?: UnifiedRampRoutingType;
is_authenticated?: boolean;
preferred_provider?: string;
order_count: number;
}
export function useRampsButtonClickData(): RampsButtonClickData {
const orders = useSelector(getOrders);
const controllerOrders = useSelector(
selectRampsOrdersForSelectedAccountGroup,
);
const rampRoutingDecision = useSelector(getRampRoutingDecision);
const [isAuthenticated, setIsAuthenticated] = useState<boolean>(false);
useEffect(() => {
let isMounted = true;
const checkAuthentication = async () => {
try {
const tokenResponse = await getProviderToken();
if (isMounted) {
setIsAuthenticated(
tokenResponse.success && !!tokenResponse.token?.accessToken,
);
}
} catch (error) {
if (isMounted) {
setIsAuthenticated(false);
}
}
};
checkAuthentication();
return () => {
isMounted = false;
};
}, []);
const data = useMemo(() => {
const orderCount = orders.length + controllerOrders.length;
const completedOrders = [
...completedOrdersFromFiatOrders(orders),
...completedOrdersFromRampsOrders(controllerOrders),
];
let preferredProvider: string | undefined;
if (completedOrders.length > 0) {
const [mostRecent] = [...completedOrders].sort(
(a, b) => b.completedAt - a.completedAt,
);
preferredProvider = mostRecent.providerId;
}
return {
ramp_routing: rampRoutingDecision ?? undefined,
is_authenticated: isAuthenticated,
preferred_provider: preferredProvider,
order_count: orderCount,
};
}, [orders, controllerOrders, rampRoutingDecision, isAuthenticated]);
return data;
}