1
- import React , { useEffect , useState } from 'react' ;
2
- import { Button , Col , Form , InputGroup , OverlayTrigger , Tooltip } from "react-bootstrap" ;
1
+ import React , { useEffect , useState } from 'react' ;
2
+ import { Button , Col , Form , InputGroup , OverlayTrigger , Tooltip } from "react-bootstrap" ;
3
3
import AddAggregatorModal from "./AddAggregatorModal" ;
4
4
5
5
export default function AggregatorSetter ( props ) {
@@ -9,27 +9,38 @@ export default function AggregatorSetter(props) {
9
9
const [ canRemoveSelected , setCanRemoveSelected ] = useState ( false ) ;
10
10
11
11
useEffect ( ( ) => {
12
- let aggregators = props . defaultAvailableAggregators ;
13
-
14
- const storedAggregators = JSON . parse ( localStorage . getItem ( CUSTOM_AGGREGATORS_KEY ) ) ;
15
- if ( storedAggregators ) {
16
- aggregators = aggregators . concat ( storedAggregators ) ;
17
- }
18
-
19
- setAvailableAggregators ( aggregators ) ;
12
+ setAvailableAggregators ( getAggregatorsList ( ) ) ;
20
13
} , [ props . defaultAvailableAggregators ] ) ;
21
14
22
15
useEffect ( ( ) => {
23
16
setCanRemoveSelected ( ! props . defaultAvailableAggregators . includes ( props . aggregator ) ) ;
17
+
18
+ let aggregators = getAggregatorsList ( ) ;
19
+ if ( ! aggregators . includes ( props . aggregator ) ) {
20
+ aggregators . push ( props . aggregator ) ;
21
+ saveCustomAggregatorSources ( aggregators ) ;
22
+ setAvailableAggregators ( aggregators ) ;
23
+ }
24
24
} , [ props . aggregator ] ) ;
25
25
26
+ function getAggregatorsList ( ) {
27
+ let aggregators = [ ...props . defaultAvailableAggregators ] ;
28
+
29
+ const storedAggregators = JSON . parse ( localStorage . getItem ( CUSTOM_AGGREGATORS_KEY ) ) ;
30
+ if ( storedAggregators ) {
31
+ aggregators = aggregators . concat ( storedAggregators ) ;
32
+ }
33
+
34
+ return aggregators ;
35
+ }
36
+
26
37
function handleChange ( aggregator ) {
27
38
props . onAggregatorChange ( aggregator ) ;
28
39
}
29
40
30
41
function copySelected ( ) {
31
42
if ( window . isSecureContext && props . aggregator ) {
32
- navigator . clipboard . writeText ( props . aggregator ) . then ( ( ) => { } ) ;
43
+ navigator . clipboard . writeText ( props . aggregator ) . then ( ( ) => { } ) ;
33
44
}
34
45
}
35
46
@@ -62,10 +73,9 @@ export default function AggregatorSetter(props) {
62
73
handleChange ( availableAggregators . at ( 0 ) ) ;
63
74
saveCustomAggregatorSources ( aggregators ) ;
64
75
}
65
-
76
+
66
77
function saveCustomAggregatorSources ( aggregators ) {
67
78
const customAggregators = aggregators . filter ( a => ! props . defaultAvailableAggregators . includes ( a ) ) ;
68
- console . log ( "save" , customAggregators , aggregators , props . defaultAvailableAggregators ) ;
69
79
localStorage . setItem ( CUSTOM_AGGREGATORS_KEY , JSON . stringify ( customAggregators ) ) ;
70
80
}
71
81
@@ -74,7 +84,7 @@ export default function AggregatorSetter(props) {
74
84
< AddAggregatorModal
75
85
show = { showAddModal }
76
86
onAdd = { addAggregatorSource }
77
- onAskClose = { hideAddAggregatorSourceModal } />
87
+ onAskClose = { hideAddAggregatorSourceModal } />
78
88
79
89
< Form . Group as = { Col } className = { props . className } >
80
90
< Form . Label > Aggregator:</ Form . Label >
@@ -83,9 +93,16 @@ export default function AggregatorSetter(props) {
83
93
< i className = "bi bi-plus-circle" > </ i >
84
94
</ Button >
85
95
{ canRemoveSelected &&
86
- < Button variant = "outline-danger" onClick = { deleteSelectedAggregatorSource } >
87
- < i className = "bi bi-dash-circle" > </ i >
88
- </ Button >
96
+ < >
97
+ < Button variant = "outline-danger" onClick = { deleteSelectedAggregatorSource } >
98
+ < i className = "bi bi-dash-circle" > </ i >
99
+ </ Button >
100
+ < OverlayTrigger overlay = { < Tooltip > Unofficial Aggregator</ Tooltip > } >
101
+ < Button variant = "outline-warning" onClick = { copySelected } >
102
+ < i className = "bi bi-exclamation-triangle" > </ i >
103
+ </ Button >
104
+ </ OverlayTrigger >
105
+ </ >
89
106
}
90
107
< Form . Select value = { props . aggregator } onChange = { e => handleChange ( e . target . value ) } >
91
108
{ availableAggregators . map ( ( aggregator , index ) =>
0 commit comments