1- import React from 'react' ;
1+ import React , { useState } from 'react' ;
22import { Input , LegacyForms , Select } from '@grafana/ui' ;
33import { QueryEditorProps , SelectableValue } from '@grafana/data' ;
44import { DataSource } from './datasource' ;
@@ -9,16 +9,21 @@ import { useFetchRooms } from 'shared/hooks/useFetchRooms';
99import { useFetchContexts } from 'shared/hooks/useFetchContexts' ;
1010import { useFetchNodes } from 'shared/hooks/useFetchNodes' ;
1111import { Aggreagations , GroupByList , Methods } from 'shared/constants' ;
12- import { useFetchDimensions } from 'shared/hooks/useFetchDimensions' ;
1312import { Dropdown } from 'shared/types/dropdown.interface' ;
13+ import { getDimensions , getFilters , getGroupingByList , defaultFilter } from 'shared/utils/transformations' ;
1414import PubSub from 'pubsub-js' ;
1515
1616type Props = QueryEditorProps < DataSource , MyQuery , MyDataSourceOptions > ;
1717
1818const { FormField } = LegacyForms ;
1919
20- const QueryEditor : React . FC < Props > = ( { datasource, query, onChange, onRunQuery } ) => {
20+ const QueryEditor : React . FC < Props > = ( { datasource, query, range , onChange, onRunQuery } ) => {
2121 const { baseUrl } = datasource ;
22+ const from = range ! . from . valueOf ( ) ;
23+ const to = range ! . to . valueOf ( ) ;
24+ const after = Math . floor ( from / 1000 ) ;
25+ const before = Math . floor ( to / 1000 ) ;
26+
2227 const [ selectedSpace , setSelectedSpace ] = React . useState < Dropdown > ( ) ;
2328 const [ selectedRoom , setSelectedRoom ] = React . useState < Dropdown > ( ) ;
2429 const [ selectedFilter , setSelectedFilter ] = React . useState < Dropdown > ( ) ;
@@ -42,16 +47,26 @@ const QueryEditor: React.FC<Props> = ({ datasource, query, onChange, onRunQuery
4247 const { rooms, fetchRooms } = useFetchRooms ( baseUrl ) ;
4348 const { nodes, fetchNodes } = useFetchNodes ( baseUrl ) ;
4449 const { contexts, fetchContexts } = useFetchContexts ( baseUrl ) ;
45- const { allDimensions, groupingByList, filters, units, fetchDimensions } = useFetchDimensions ( baseUrl ) ;
50+ const [ allDimensions , setAllDimensions ] = useState ( [ ] ) ;
51+ const [ units , setUnits ] = useState ( '' ) ;
52+ const [ filters , setFilters ] = useState < any > ( defaultFilter ) ;
53+ const [ groupingByList , setGroupingByList ] = useState < Dropdown [ ] > ( GroupByList ) ;
4654
4755 const filterList = React . useMemo ( ( ) => Object . keys ( filters ) . map ( ( s ) => ( { label : s , value : s } ) ) , [ filters ] ) ;
4856 const nodeList = React . useMemo ( ( ) => nodes ?. map ( ( c : any ) => ( { label : c . name , value : c . id } ) ) , [ nodes ] ) ;
4957
5058 const { spaceId, roomId, nodes : allNodes , dimensions, groupBy, contextId, filterBy, filterValue } = query ;
5159
5260 const mySubscriber = ( msg : any , data : any ) => {
53- setTotalNodes ( data . data . nodes . length ) ;
54- setTotalInstances ( data . data . nodes . reduce ( ( acc : number , node : any ) => acc + node . chartIDs . length , 0 ) ) ;
61+ const { summary, view } = data ?. data || { } ;
62+ const { nodes = [ ] , instances = [ ] , labels = [ ] } = summary || { } ;
63+ const { dimensions, units } = view || { } ;
64+ setFilters ( getFilters ( labels ) ) ;
65+ setGroupingByList ( getGroupingByList ( labels ) ) ;
66+ setAllDimensions ( getDimensions ( dimensions ) ) ;
67+ setUnits ( units ) ;
68+ setTotalNodes ( nodes . length ) ;
69+ setTotalInstances ( instances . length ) ;
5570 } ;
5671
5772 const isGroupFunctionAvailable = React . useCallback ( ( ) => {
@@ -88,9 +103,9 @@ const QueryEditor: React.FC<Props> = ({ datasource, query, onChange, onRunQuery
88103 const room = rooms . find ( ( r ) => r . value === roomId ) ;
89104 setSelectedRoom ( { label : room ?. label , value : room ?. value } ) ;
90105 fetchNodes ( spaceId || '' , roomId ) ;
91- fetchContexts ( spaceId || '' , roomId ) ;
106+ fetchContexts ( spaceId || '' , roomId , after , before ) ;
92107 }
93- } , [ roomId , rooms , fetchContexts , fetchNodes , spaceId ] ) ;
108+ } , [ roomId , rooms , fetchContexts , fetchNodes , spaceId , after , before ] ) ;
94109
95110 React . useEffect ( ( ) => {
96111 // eslint-disable-line
@@ -115,8 +130,6 @@ const QueryEditor: React.FC<Props> = ({ datasource, query, onChange, onRunQuery
115130 filteredNodes . push ( { label : currentNode ?. name , value : currentNode ?. id } ) ;
116131 } ) ;
117132 }
118-
119- fetchDimensions ( { spaceId, roomId, contextId, nodeIDs : filteredNodes . map ( ( n : any ) => n . value ) } ) ;
120133 }
121134 } , [ contextId ] ) ; // eslint-disable-line
122135
@@ -171,7 +184,7 @@ const QueryEditor: React.FC<Props> = ({ datasource, query, onChange, onRunQuery
171184 setSelectedMethod ( Methods [ 0 ] ) ;
172185 setSelectedAggregations ( Aggreagations [ 0 ] ) ;
173186
174- fetchContexts ( selectedSpace ?. value || '' , v . value || '' ) ;
187+ fetchContexts ( selectedSpace ?. value || '' , v . value || '' , after , before ) ;
175188 fetchNodes ( selectedSpace ?. value || '' , v . value || '' ) ;
176189 onChange ( { ...query , spaceId : spaceId , roomId : v . value } ) ;
177190 onRunQuery ( ) ;
@@ -188,7 +201,6 @@ const QueryEditor: React.FC<Props> = ({ datasource, query, onChange, onRunQuery
188201 setSelectedMethod ( Methods [ 0 ] ) ;
189202 setSelectedAggregations ( Aggreagations [ 0 ] ) ;
190203
191- fetchDimensions ( { spaceId, roomId, contextId : v . value , nodeIDs : selectedNodes ?. map ( ( n : any ) => n . value ) || [ ] } ) ;
192204 onChange ( { ...query , contextId : v . value } ) ;
193205 onRunQuery ( ) ;
194206 } ;
@@ -204,7 +216,6 @@ const QueryEditor: React.FC<Props> = ({ datasource, query, onChange, onRunQuery
204216 setSelectedMethod ( Methods [ 0 ] ) ;
205217 setSelectedAggregations ( Aggreagations [ 0 ] ) ;
206218
207- fetchDimensions ( { spaceId, roomId, contextId, nodeIDs : data } ) ;
208219 setSelectedNodes ( data ) ;
209220 onChange ( { ...query , spaceId, roomId, contextId, nodes : data } as MyQuery ) ;
210221 onRunQuery ( ) ;
@@ -225,13 +236,13 @@ const QueryEditor: React.FC<Props> = ({ datasource, query, onChange, onRunQuery
225236
226237 const onFilterByChange = ( v : SelectableValue < string > ) => {
227238 setSelectedFilter ( v ) ;
239+ setSelectedFilterValue ( { } ) ;
228240
229241 if ( v . value === 'No filter' ) {
230- setSelectedFilterValue ( { } ) ;
231242 onChange ( { ...query , filterBy : undefined , filterValue : undefined } ) ;
232243 onRunQuery ( ) ;
233244 } else {
234- setFilterByValues ( filters [ v ?. value || '' ] . map ( ( v ) => ( { label : v , value : v } ) ) ) ;
245+ setFilterByValues ( filters [ v ?. value || '' ] . map ( ( v : string ) => ( { label : v , value : v } ) ) ) ;
235246 }
236247 } ;
237248
0 commit comments