Skip to content

Commit d08fa97

Browse files
Use MultiSelect in Sats Flow
1 parent beeedbf commit d08fa97

File tree

1 file changed

+49
-12
lines changed

1 file changed

+49
-12
lines changed

apps/frontend/src/components/bookkeeper/SatsFlow/SatsFlowRoot.tsx

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { useCallback, useEffect, useState } from 'react';
21
import './SatsFlowRoot.scss';
2+
import { useCallback, useEffect, useState } from 'react';
33
import { useNavigate } from 'react-router-dom';
44
import { Card, Col, Row } from 'react-bootstrap';
55
import { CloseSVG } from '../../../svgs/Close';
@@ -13,20 +13,46 @@ const SatsFlowRoot = () => {
1313
const navigate = useNavigate();
1414
const satsFlowPeriods = useSelector(selectSatsFlowPeriods);
1515
const [showZeroActivityPeriods, setShowZeroActivityPeriods] = useState<boolean>(false);
16+
const [selectedTags, setSelectedTags] = useState<string[]>([]);
17+
const [tagFilterMode, setTagFilterMode] = useState<string>('include');
1618
const [satsFlowData, setSatsFlowData] = useState<SatsFlowPeriod[]>(satsFlowPeriods);
1719

18-
const filterSatsFlowData = (periods, showZeroActivity) => {
19-
return (showZeroActivity) ? periods : periods.filter(key => key.tag_groups.length > 0)
20-
}
20+
const applyFilters = useCallback((
21+
periods: SatsFlowPeriod[],
22+
showZeroActivity: boolean,
23+
tags: string[],
24+
filterMode: string
25+
): SatsFlowPeriod[] => {
26+
const tagFiltered: SatsFlowPeriod[] = tags.length === 0
27+
? periods
28+
: periods.map(period => ({
29+
...period,
30+
tag_groups: period.tag_groups.filter(group => {
31+
const isMatch = tags.includes(group.tag);
32+
return filterMode === 'include' ? isMatch : !isMatch;
33+
}),
34+
}));
35+
return showZeroActivity
36+
? tagFiltered
37+
: tagFiltered.filter(period => period.tag_groups.length > 0);
38+
}, []);
2139

2240
const handleShowZeroActivityChange = useCallback((show: boolean) => {
2341
setShowZeroActivityPeriods(show);
24-
setSatsFlowData(filterSatsFlowData(satsFlowPeriods, show));
25-
}, [satsFlowPeriods]);
42+
setSatsFlowData(applyFilters(satsFlowPeriods, show, selectedTags, tagFilterMode));
43+
}, [satsFlowPeriods, selectedTags, tagFilterMode, applyFilters]);
44+
45+
const multiSelectChangeHandler = useCallback((selectedOptions: string[], filterMode: string) => {
46+
setTimeout(() => {
47+
setSelectedTags(selectedOptions);
48+
setTagFilterMode(filterMode);
49+
setSatsFlowData(applyFilters(satsFlowPeriods, showZeroActivityPeriods, selectedOptions, filterMode));
50+
}, 0);
51+
}, [satsFlowPeriods, showZeroActivityPeriods, applyFilters]);
2652

2753
useEffect(() => {
28-
setSatsFlowData(filterSatsFlowData(satsFlowPeriods, showZeroActivityPeriods));
29-
}, [satsFlowPeriods, showZeroActivityPeriods]);
54+
setSatsFlowData(applyFilters(satsFlowPeriods, showZeroActivityPeriods, selectedTags, tagFilterMode));
55+
}, [satsFlowPeriods]);
3056

3157
return (
3258
<div data-testid='satsflow-container' className='satsflow-container'>
@@ -37,15 +63,26 @@ const SatsFlowRoot = () => {
3763
<Col className='text-end'>
3864
<span
3965
className='span-close-svg'
40-
onClick={() => {
41-
navigate('..');
42-
}}
66+
onClick={() => navigate('..')}
4367
>
4468
<CloseSVG />
4569
</span>
4670
</Col>
4771
</Row>
48-
<DataFilterOptions filter='satsflow' onShowZeroActivityChange={handleShowZeroActivityChange} />
72+
<DataFilterOptions
73+
filter='satsflow'
74+
onShowZeroActivityChange={handleShowZeroActivityChange}
75+
multiSelectValues={[
76+
{ name: 'deposit', dataKey: 'deposit' },
77+
{ name: 'invoice_fee', dataKey: 'invoice_fee' },
78+
{ name: 'onchain_fee', dataKey: 'onchain_fee' },
79+
{ name: 'paid_invoice', dataKey: 'paid_invoice' },
80+
{ name: 'received_invoice', dataKey: 'received_invoice' },
81+
{ name: 'routed', dataKey: 'routed' },
82+
]}
83+
multiSelectPlaceholder='Filter Events'
84+
multiSelectChangeHandler={multiSelectChangeHandler}
85+
/>
4986
</Card.Header>
5087
<Card.Body className='pb-4 d-flex flex-column align-items-center'>
5188
<Col xs={12} className='sats-flow-graph-container'>

0 commit comments

Comments
 (0)