Skip to content

Commit 4797281

Browse files
committed
Merge pull request #14 from Giveth/10-multisig-sessions-count
Add MultisigSessionsCount section to the dashboard
1 parent 21af4e8 commit 4797281

File tree

4 files changed

+140
-0
lines changed

4 files changed

+140
-0
lines changed

src/components/views/home/Home.index.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import TotalDonations from './TotalDonations';
66
import DonationsCount from './DonationsCount';
77
import NewDonorsCount from './NewDonorsCount';
88
import NewDonorsDonationTotalUsd from './NewDonorsDonationTotalUsd';
9+
import MultisigSessionsCount from './MultisigSessionsCount';
910

1011
const HomeIndex = () => {
1112
return (
@@ -22,6 +23,8 @@ const HomeIndex = () => {
2223
<NewDonorsCount />
2324
<hr />
2425
<NewDonorsDonationTotalUsd />
26+
<hr />
27+
<MultisigSessionsCount />
2528
</ContainerStyled>
2629
);
2730
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import React, { useState } from 'react';
2+
import {
3+
H2,
4+
H4,
5+
H6,
6+
IconHelpFilled16,
7+
neutralColors,
8+
Subline,
9+
} from '@giveth/ui-design-system';
10+
import styled from 'styled-components';
11+
import {
12+
firstOfNextMonth,
13+
firstOfGiveth,
14+
thousandsSeparator,
15+
} from '../../../lib/helpers';
16+
import { Col, Row } from '../../styled-components/grid';
17+
import { FlexCenter } from '../../styled-components/flex';
18+
import { IconWithTooltip } from '../../IconWithTooltip';
19+
import Spinner from '../../Spinner';
20+
import DatePicker from '../../DatePicker';
21+
import useMultisigSessionsCount from '../../../hooks/useMultisigSessionsCount';
22+
23+
const MultisigSessionsCount = () => {
24+
const [fromDate, setFromDate] = useState(firstOfGiveth());
25+
const [toDate, setToDate] = useState(firstOfNextMonth());
26+
const { multisigSessionsCount, loading, error } = useMultisigSessionsCount(
27+
fromDate,
28+
toDate,
29+
);
30+
31+
return (
32+
<RowStyled>
33+
<Col md={4}>
34+
<FlexCenter gap='10px'>
35+
<H4>Multisig Sessions Count</H4>
36+
<IconWithTooltip
37+
icon={<IconHelpFilled16 />}
38+
direction={'top'}
39+
>
40+
<TooltipBody>
41+
Total number of multisig sessions during the
42+
selected timeframe.
43+
</TooltipBody>
44+
</IconWithTooltip>
45+
</FlexCenter>
46+
</Col>
47+
<Col md={4}>
48+
<div>
49+
From: <DatePicker date={fromDate} setDate={setFromDate} />
50+
</div>
51+
<br />
52+
<div>
53+
To: <DatePicker date={toDate} setDate={setToDate} />
54+
</div>
55+
<br />
56+
</Col>
57+
<Col md={1} />
58+
<Col md={2}>
59+
<H6>Total:</H6>
60+
{loading ? (
61+
<Spinner />
62+
) : (
63+
<H2>
64+
{multisigSessionsCount !== null
65+
? thousandsSeparator(multisigSessionsCount)
66+
: 'N/A'}
67+
</H2>
68+
)}
69+
{error && <p style={{ color: 'red' }}>{error}</p>}
70+
</Col>
71+
</RowStyled>
72+
);
73+
};
74+
75+
const TooltipBody = styled(Subline)`
76+
color: ${neutralColors.gray[100]};
77+
width: 270px;
78+
`;
79+
80+
const RowStyled = styled(Row)`
81+
margin-top: 40px;
82+
align-items: center;
83+
margin-bottom: 40px;
84+
`;
85+
86+
export default MultisigSessionsCount;

src/configuration.ts

+5
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@ const BASE_ROUTE = isDevelopment
44
? 'https://impact-graph.serve.giveth.io'
55
: 'https://mainnet.serve.giveth.io';
66

7+
const SWIE_AUTH_ROUTE = isDevelopment
8+
? 'https://auth.serve.giveth.io'
9+
: 'https://auth.giveth.io';
10+
711
const config = {
812
BACKEND_LINK: `${BASE_ROUTE}/graphql`,
13+
SWIE_AUTH_MICROSERVICE_URL: SWIE_AUTH_ROUTE,
914
};
1015

1116
export default config;

src/hooks/useMultisigSessionsCount.ts

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { useEffect, useState } from 'react';
2+
import config from '../configuration';
3+
4+
const useMultisigSessionsCount = (fromDate: Date, toDate: Date) => {
5+
const [multisigSessionsCount, setMultisigSessionsCount] = useState<
6+
number | null
7+
>(null);
8+
const [loading, setLoading] = useState<boolean>(true);
9+
const [error, setError] = useState<string | null>(null);
10+
11+
useEffect(() => {
12+
const fetchData = async () => {
13+
setLoading(true);
14+
setError(null);
15+
try {
16+
const url = new URL(
17+
`${config.SWIE_AUTH_MICROSERVICE_URL}/v1/multisigSessionCount`,
18+
);
19+
url.searchParams.append(
20+
'from',
21+
fromDate.toISOString().split('T')[0],
22+
);
23+
url.searchParams.append(
24+
'to',
25+
toDate.toISOString().split('T')[0],
26+
);
27+
28+
const response = await fetch(url.toString(), {
29+
method: 'GET',
30+
});
31+
const data = await response.json();
32+
setMultisigSessionsCount(data.count);
33+
} catch (err) {
34+
setError('Failed to fetch data');
35+
} finally {
36+
setLoading(false);
37+
}
38+
};
39+
40+
fetchData();
41+
}, [fromDate, toDate]);
42+
43+
return { multisigSessionsCount, loading, error };
44+
};
45+
46+
export default useMultisigSessionsCount;

0 commit comments

Comments
 (0)