@@ -6,22 +6,17 @@ import { PageableModel } from '../../api/providers';
6
6
import { PlanModel } from '../plan/providers/types' ;
7
7
import Select from 'react-select' ;
8
8
import { Button , Col , Container , Form , FormGroup , Row } from 'react-bootstrap' ;
9
- import { getDataExtract } from './api' ;
9
+ import { getDataExtract , getQueryLabels } from './api' ;
10
+
11
+ import { DataExtractQueryResponse } from './providers/types' ;
10
12
11
13
const DataExtract = ( ) => {
12
14
const [ planList , setPlanList ] = useState < PageableModel < PlanModel > > ( ) ;
13
15
const [ selectedPlan , setSelectedPlan ] = useState < string > ( ) ;
16
+ const [ dataExtractLabels , setDataExtractLabels ] = useState < DataExtractQueryResponse [ ] > ( ) ;
17
+ const [ selectedDataExtractLabelId , setSelectedDataExtractLabelId ] = useState < string > ( ) ;
14
18
let link = useRef < HTMLAnchorElement > ( null ) ;
15
19
16
- // const paginationHandler = (size: number, page: number) => {
17
- // loadData(size, page);
18
- // };
19
- //
20
- // const sortHandler = (sortValue: string, direction: boolean) => {
21
- // setCurrentSortDirection(direction);
22
- // setCurrentSortField(sortValue);
23
- // };
24
-
25
20
const loadData = useCallback ( ( size : number , page : number ) => {
26
21
getPlanList ( size , page , true , '' , '' , false )
27
22
. then ( res => setPlanList ( res ) )
@@ -34,18 +29,19 @@ const DataExtract = () => {
34
29
35
30
const getCSV = useCallback ( ( ) => {
36
31
const planModel = planList ?. content . find ( plan => plan . identifier === selectedPlan ) ;
37
- if ( planModel ) {
38
- getDataExtract ( planModel . identifier )
32
+ if ( planModel && selectedDataExtractLabelId ) {
33
+ getDataExtract ( planModel . identifier , selectedDataExtractLabelId )
39
34
. then ( res => {
40
35
if ( link && link . current ) {
41
36
link . current . href = window . URL . createObjectURL ( new Blob ( [ res ] , { type : 'text/csv;charset=utf-8' } ) ) ;
42
37
link . current . download = 'data-extract.csv' ;
43
38
link . current . click ( ) ;
44
39
}
45
40
} )
41
+
46
42
. catch ( ex => toast . error ( ex ) ) ;
47
43
}
48
- } , [ selectedPlan , planList ] ) ;
44
+ } , [ selectedPlan , planList , selectedDataExtractLabelId ] ) ;
49
45
50
46
return (
51
47
< Container fluid className = "text-center my-4" >
@@ -54,12 +50,44 @@ const DataExtract = () => {
54
50
< FormGroup style = { { display : 'flex' , alignItems : 'center' } } >
55
51
< Form . Label style = { { marginRight : '10px' } } > Select Plan</ Form . Label >
56
52
< Select
53
+ styles = { {
54
+ container : provided => ( {
55
+ ...provided ,
56
+ width : 800 // Control the width here
57
+ } )
58
+ } }
57
59
options = { planList ?. content . map ( plan => new Option ( plan . name , plan . identifier ) ) }
58
- onChange = { e => setSelectedPlan ( e ?. value ) }
60
+ onChange = { e => {
61
+ setSelectedPlan ( e ?. value ) ;
62
+ if ( e ?. value != null ) {
63
+ getQueryLabels ( e ?. value ) . then ( labels => setDataExtractLabels ( labels ) ) ;
64
+ }
65
+ } }
59
66
/>
60
67
</ FormGroup >
61
68
</ Col >
62
- < Col md = { 1 } > { selectedPlan ? < Button onClick = { ( ) => getCSV ( ) } > Get CSV</ Button > : null } </ Col >
69
+ < Col md = { 2 } >
70
+ { selectedPlan ? (
71
+ < FormGroup style = { { display : 'flex' , alignItems : 'center' } } >
72
+ < Form . Label style = { { marginRight : '10px' } } > Select Extract</ Form . Label >
73
+ < Select
74
+ styles = { {
75
+ container : provided => ( {
76
+ ...provided ,
77
+ width : 300 // Control the width here
78
+ } )
79
+ } }
80
+ options = { dataExtractLabels ?. map (
81
+ dataExtractLabel => new Option ( dataExtractLabel . queryLabel , dataExtractLabel . queryLabel )
82
+ ) }
83
+ onChange = { e => setSelectedDataExtractLabelId ( e ?. value ) }
84
+ />
85
+ </ FormGroup >
86
+ ) : null }
87
+ </ Col >
88
+ < Col md = { 1 } >
89
+ { selectedPlan && selectedDataExtractLabelId ? < Button onClick = { ( ) => getCSV ( ) } > Get CSV</ Button > : null }
90
+ </ Col >
63
91
</ Row >
64
92
< a
65
93
style = { { display : 'none' } }
0 commit comments