1
- import React , { useEffect , useReducer , useState } from 'react' ;
1
+ import React , { useState } from 'react' ;
2
2
import { Button , Col , Form , InputGroup , OverlayTrigger , Tooltip } from "react-bootstrap" ;
3
+ import { useDispatch , useSelector } from "react-redux" ;
4
+ import { removeCustomAggregator , selectAggregator } from "../../store/settingsSlice" ;
3
5
import AddAggregatorModal from "./AddAggregatorModal" ;
4
- import { initAggregatorList , aggregatorListReducer } from "./reducer" ;
5
6
6
7
export default function AggregatorSetter ( props ) {
7
8
const [ showAddModal , toggleAddModal ] = useState ( false ) ;
8
- const [ state , dispatch ] =
9
- useReducer (
10
- aggregatorListReducer ,
11
- [ props . aggregator , props . defaultAvailableAggregators ] ,
12
- initAggregatorList ) ;
13
-
14
- useEffect ( ( ) => {
15
- const aggregator = props . aggregator ;
16
- dispatch ( { type : 'addAggregator' , aggregator : aggregator } ) ;
17
- props . onAggregatorChange ( aggregator ) ;
18
- } , [ props . aggregator ] ) ;
9
+ const selectedAggregator = useSelector ( ( state ) => state . settings . selectedAggregator ) ;
10
+ const availableAggregators = useSelector ( ( state ) => state . settings . availableAggregators ) ;
11
+ const canRemoveSelected = useSelector ( ( state ) => state . settings . canRemoveSelected ) ;
12
+ const dispatch = useDispatch ( ) ;
19
13
20
14
function copySelected ( ) {
21
- if ( window . isSecureContext && props . aggregator ) {
22
- navigator . clipboard . writeText ( props . aggregator ) . then ( ( ) => { } ) ;
15
+ if ( window . isSecureContext && selectedAggregator ) {
16
+ navigator . clipboard . writeText ( selectedAggregator ) . then ( ( ) => { } ) ;
23
17
}
24
18
}
25
19
26
- function handleChange ( aggregator ) {
27
- dispatch ( { type : 'aggregatorSelected' , aggregator : aggregator } ) ;
28
- props . onAggregatorChange ( aggregator ) ;
29
- }
30
-
31
- function addAggregatorSource ( aggregator ) {
32
- props . onAggregatorChange ( aggregator ) ;
33
- }
34
-
35
- function deleteSelectedAggregatorSource ( ) {
36
- dispatch ( { type : 'deleteSelected' , aggregator : props . aggregator } ) ;
37
- props . onAggregatorChange ( state . availableAggregators . at ( 0 ) ) ;
38
- }
39
-
40
20
return (
41
21
< >
42
22
< AddAggregatorModal
43
23
show = { showAddModal }
44
- onAdd = { addAggregatorSource }
45
24
onAskClose = { ( ) => toggleAddModal ( false ) } />
46
25
47
26
< Form . Group as = { Col } className = { props . className } >
@@ -50,20 +29,20 @@ export default function AggregatorSetter(props) {
50
29
< Button variant = "outline-success" onClick = { ( ) => toggleAddModal ( true ) } >
51
30
< i className = "bi bi-plus-circle" > </ i >
52
31
</ Button >
53
- { state . canRemoveSelected &&
32
+ { canRemoveSelected &&
54
33
< >
55
- < Button variant = "outline-danger" onClick = { deleteSelectedAggregatorSource } >
34
+ < Button variant = "outline-danger" onClick = { ( ) => dispatch ( removeCustomAggregator ( ) ) } >
56
35
< i className = "bi bi-dash-circle" > </ i >
57
36
</ Button >
58
37
< OverlayTrigger overlay = { < Tooltip > Unofficial Aggregator</ Tooltip > } >
59
- < Button variant = "outline-warning" onClick = { copySelected } >
38
+ < Button variant = "outline-warning" >
60
39
< i className = "bi bi-exclamation-triangle" > </ i >
61
40
</ Button >
62
41
</ OverlayTrigger >
63
42
</ >
64
43
}
65
- < Form . Select value = { props . aggregator } onChange = { e => handleChange ( e . target . value ) } >
66
- { state . availableAggregators . map ( ( aggregator , index ) =>
44
+ < Form . Select value = { selectedAggregator } onChange = { ( e ) => dispatch ( selectAggregator ( e . target . value ) ) } >
45
+ { availableAggregators . map ( ( aggregator , index ) =>
67
46
< option key = { "agg-" + index } value = { aggregator } > { aggregator } </ option >
68
47
) }
69
48
</ Form . Select >
0 commit comments