11import React , { useState , useEffect , useCallback , useMemo } from 'react' ;
2- import { Select , AsyncSelect , Alert , InlineFieldRow , InlineField , Input , InlineSwitch } from '@grafana/ui' ;
2+ import { Select , AsyncSelect , Alert , InlineFieldRow , InlineField , InlineSwitch } from '@grafana/ui' ;
33import { SelectableValue } from '@grafana/data' ;
44import { SelectedProps } from '../types' ;
5- import { fetchDMSSpaces , fetchDMSViews , searchDMSInstances , fetchCogniteUnits , getTimeSeriesUnit , stringifyError } from '../cdf/client' ;
6- import { DMSSpace , DMSView , DMSInstance , DMSSearchRequest , CogniteUnit } from '../types/dms' ;
5+ import { searchDMSInstances , fetchCogniteUnits , getTimeSeriesUnit , stringifyError , fetchCogniteTimeSeriesViews } from '../cdf/client' ;
6+ import { DMSInstance , DMSSearchRequest , CogniteUnit , InvolvedView } from '../types/dms' ;
77import { CommonEditors , LabelEditor } from './commonEditors' ;
88import { Connector } from '../connector' ;
99
@@ -36,8 +36,7 @@ export const CogniteTimeSeriesSearchTab: React.FC<CogniteTimeSeriesSearchTabProp
3636 onQueryChange,
3737 connector,
3838} ) => {
39- const [ spaces , setSpaces ] = useState < SelectableValue [ ] > ( [ ] ) ;
40- const [ views , setViews ] = useState < SelectableValue [ ] > ( [ ] ) ;
39+ const [ viewOptions , setViewOptions ] = useState < Array < SelectableValue < InvolvedView > > > ( [ ] ) ;
4140 const [ loading , setLoading ] = useState ( false ) ;
4241 const [ error , setError ] = useState < string | null > ( null ) ;
4342 const [ units , setUnits ] = useState < CogniteUnit [ ] > ( [ ] ) ;
@@ -54,37 +53,19 @@ export const CogniteTimeSeriesSearchTab: React.FC<CogniteTimeSeriesSearchTabProp
5453 [ cogniteTimeSeries . instanceId ]
5554 ) ;
5655
57- const loadSpaces = useCallback ( async ( ) => {
56+ const loadViews = useCallback ( async ( ) => {
5857 try {
5958 setLoading ( true ) ;
60- const spacesData = await fetchDMSSpaces ( connector ) ;
61- const spaceOptions = spacesData . map ( ( space : DMSSpace ) => ( {
62- label : space . name || space . space ,
63- value : space . space ,
64- description : space . description ,
59+ const views = await fetchCogniteTimeSeriesViews ( connector ) ;
60+ const options = views . map ( ( view : InvolvedView ) => ( {
61+ label : ` ${ view . externalId } ( ${ view . space } ) ${ view . version } ` ,
62+ value : view ,
63+ description : `Space: ${ view . space } , Version: ${ view . version } ` ,
6564 } ) ) ;
66- setSpaces ( spaceOptions ) ;
65+ setViewOptions ( options ) ;
6766 setError ( null ) ;
6867 } catch ( err ) {
69- setError ( `Failed to load spaces: ${ stringifyError ( err ) } ` ) ;
70- } finally {
71- setLoading ( false ) ;
72- }
73- } , [ connector ] ) ;
74-
75- const loadViews = useCallback ( async ( space : string ) => {
76- try {
77- setLoading ( true ) ;
78- const viewsData = await fetchDMSViews ( connector , space ) ;
79- const viewOptions = viewsData . map ( ( view : DMSView ) => ( {
80- label : view . name || view . externalId ,
81- value : view . externalId ,
82- description : view . description ,
83- } ) ) ;
84- setViews ( viewOptions ) ;
85- setError ( null ) ;
86- } catch ( err ) {
87- setError ( `Failed to load views for space ${ space } : ${ stringifyError ( err ) } ` ) ;
68+ setError ( `Failed to load CogniteTimeSeries views: ${ stringifyError ( err ) } ` ) ;
8869 } finally {
8970 setLoading ( false ) ;
9071 }
@@ -135,14 +116,8 @@ export const CogniteTimeSeriesSearchTab: React.FC<CogniteTimeSeriesSearchTabProp
135116 } , [ connector , cogniteTimeSeries . space , cogniteTimeSeries . externalId , cogniteTimeSeries . version ] ) ;
136117
137118 useEffect ( ( ) => {
138- loadSpaces ( ) ;
139- } , [ loadSpaces ] ) ;
140-
141- useEffect ( ( ) => {
142- if ( cogniteTimeSeries . space ) {
143- loadViews ( cogniteTimeSeries . space ) ;
144- }
145- } , [ cogniteTimeSeries . space , loadViews ] ) ;
119+ loadViews ( ) ;
120+ } , [ loadViews ] ) ;
146121
147122 // Load available units
148123 useEffect ( ( ) => {
@@ -182,33 +157,15 @@ export const CogniteTimeSeriesSearchTab: React.FC<CogniteTimeSeriesSearchTabProp
182157 fetchUnit ( ) ;
183158 } , [ connector , instanceIdKey , cogniteTimeSeries . instanceId ] ) ;
184159
185- const handleSpaceChange = ( selectedSpace : SelectableValue | null ) => {
186- onQueryChange ( {
187- cogniteTimeSeries : {
188- ...cogniteTimeSeries ,
189- space : selectedSpace ?. value || '' ,
190- externalId : '' , // Reset external ID when space changes
191- instanceId : undefined , // Reset selected timeseries
192- } ,
193- } ) ;
194- } ;
195-
196- const handleVersionChange = ( event : React . ChangeEvent < HTMLInputElement > ) => {
197- onQueryChange ( {
198- cogniteTimeSeries : {
199- ...cogniteTimeSeries ,
200- version : event . target . value ,
201- instanceId : undefined , // Reset selected timeseries when version changes
202- } ,
203- } ) ;
204- } ;
205-
206- const handleExternalIdChange = ( selectedView : SelectableValue | null ) => {
160+ const handleViewChange = ( selectedOption : SelectableValue < InvolvedView > | null ) => {
161+ const view = selectedOption ?. value ;
207162 onQueryChange ( {
208163 cogniteTimeSeries : {
209164 ...cogniteTimeSeries ,
210- externalId : selectedView ?. value || '' ,
211- instanceId : undefined , // Reset selected timeseries
165+ space : view ?. space || '' ,
166+ externalId : view ?. externalId || '' ,
167+ version : view ?. version || '' ,
168+ instanceId : undefined , // Reset selected timeseries when view changes
212169 } ,
213170 } ) ;
214171 } ;
@@ -288,56 +245,36 @@ export const CogniteTimeSeriesSearchTab: React.FC<CogniteTimeSeriesSearchTabProp
288245
289246 const isUnitConversionEnabled = ! ! timeSeriesUnit && ! ! cogniteTimeSeries . instanceId ;
290247
248+ // Find the currently selected view option
249+ const selectedViewOption = useMemo ( ( ) => {
250+ if ( cogniteTimeSeries . space && cogniteTimeSeries . externalId && cogniteTimeSeries . version ) {
251+ return viewOptions . find (
252+ ( opt ) =>
253+ opt . value ?. space === cogniteTimeSeries . space &&
254+ opt . value ?. externalId === cogniteTimeSeries . externalId &&
255+ opt . value ?. version === cogniteTimeSeries . version
256+ ) ;
257+ }
258+ return null ;
259+ } , [ viewOptions , cogniteTimeSeries . space , cogniteTimeSeries . externalId , cogniteTimeSeries . version ] ) ;
260+
291261 return (
292262 < div >
293263 < div className = "gf-form-group" >
294- < InlineFieldRow >
295- < InlineField
296- label = "Space"
297- labelWidth = { 14 }
298- tooltip = "Select the space to search in"
299- >
300- < Select
301- options = { spaces }
302- value = { cogniteTimeSeries . space }
303- onChange = { handleSpaceChange }
304- placeholder = "Select space"
305- isClearable
306- isLoading = { loading }
307- width = { 20 }
308- />
309- </ InlineField >
310- </ InlineFieldRow >
311-
312- < InlineFieldRow >
313- < InlineField
314- label = "Version"
315- labelWidth = { 14 }
316- tooltip = "Version of the view"
317- >
318- < Input
319- value = { cogniteTimeSeries . version }
320- onChange = { handleVersionChange }
321- placeholder = "v1"
322- width = { 20 }
323- />
324- </ InlineField >
325- </ InlineFieldRow >
326-
327264 < InlineFieldRow >
328265 < InlineField
329266 label = "View"
330267 labelWidth = { 14 }
331- tooltip = "Select the view to search in"
268+ tooltip = "Select a CogniteTimeSeries view to search in"
332269 >
333270 < Select
334- options = { views }
335- value = { cogniteTimeSeries . externalId }
336- onChange = { handleExternalIdChange }
337- placeholder = "Select view"
271+ options = { viewOptions }
272+ value = { selectedViewOption }
273+ onChange = { handleViewChange }
274+ placeholder = "Select a CogniteTimeSeries view"
338275 isClearable
339276 isLoading = { loading }
340- width = { 20 }
277+ width = { 40 }
341278 />
342279 </ InlineField >
343280 </ InlineFieldRow >
@@ -349,7 +286,7 @@ export const CogniteTimeSeriesSearchTab: React.FC<CogniteTimeSeriesSearchTabProp
349286 tooltip = "Search for timeseries by name or description"
350287 >
351288 < AsyncSelect
352- key = { `${ cogniteTimeSeries . space } -${ cogniteTimeSeries . version } -${ cogniteTimeSeries . externalId } ` }
289+ key = { `${ cogniteTimeSeries . space } -${ cogniteTimeSeries . externalId } -${ cogniteTimeSeries . version } ` }
353290 loadOptions = { searchTimeseries }
354291 value = { getCurrentTimeseriesValue ( ) }
355292 onChange = { handleTimeseriesSelection }
0 commit comments