@@ -100,39 +100,55 @@ export class DataSource extends DataSourceWithBackend<HaystackQuery, HaystackDat
100100
101101 return response . data . reduce ( ( acc : MetricFindValue [ ] , frame : DataFrame ) => {
102102 // Default to the first field
103- let field = frame . fields [ 0 ] ;
103+ let column = frame . fields [ 0 ] ;
104104 if ( variableQuery . column !== undefined && variableQuery . column !== '' ) {
105105 // If a column was input, match the column name
106- field = frame . fields . find ( ( field : Field ) => field . name === variableQuery . column ) ?? field ;
106+ column = frame . fields . find ( ( field : Field ) => field . name === variableQuery . column ) ?? column ;
107107 } else if ( frame . fields . some ( ( field : Field ) => field . name === 'id' ) ) {
108108 // If there is an id column, use that
109- field = frame . fields . find ( ( field : Field ) => field . name === 'id' ) ?? field ;
109+ column = frame . fields . find ( ( field : Field ) => field . name === 'id' ) ?? column ;
110110 }
111111
112- let fieldVals = field . values . map ( ( value ) => {
113- switch ( field . type ) {
112+ // Default to the selected column
113+ let displayColumn = column ;
114+ if ( variableQuery . displayColumn !== undefined && variableQuery . displayColumn !== '' ) {
115+ // If a column was input, match the column name
116+ displayColumn =
117+ frame . fields . find ( ( field : Field ) => field . name === variableQuery . displayColumn ) ?? displayColumn ;
118+ }
119+
120+ let variableValues = column . values . map ( ( value , index ) => {
121+ let variableValue = value ;
122+ switch ( column . type ) {
114123 case FieldType . string :
115124 if ( value . startsWith ( '@' ) ) {
116125 // Detect ref using @ prefix, and adjust value to just the Ref
117126 const spaceIndex = value . indexOf ( ' ' ) ;
118127 if ( spaceIndex > - 1 ) {
119128 // Display name exists
120- const id = value . substring ( 0 , spaceIndex ) ;
121- const dis = value . substring ( spaceIndex + 2 , value . length - 1 ) ;
122- return { text : dis , value : id } ;
123- } else {
124- // Otherwise, just use id
125- return { text : value , value : value } ;
129+ variableValue = value . substring ( 0 , spaceIndex ) ;
126130 }
127- } else {
128- // Otherwise, just use the value directly
129- return { text : value , value : value } ;
130131 }
131- default :
132- return { text : value , value : value } ;
133132 }
133+
134+ let displayValue = displayColumn . values [ index ] ;
135+ let variableText = displayValue ;
136+ switch ( displayColumn . type ) {
137+ case FieldType . string :
138+ if ( displayValue . startsWith ( '@' ) ) {
139+ // Detect ref using @ prefix, and adjust value to just the Ref
140+ const spaceIndex = displayValue . indexOf ( ' ' ) ;
141+ if ( spaceIndex > - 1 ) {
142+ // Display name exists
143+ variableText = displayValue . substring ( spaceIndex + 2 , displayValue . length - 1 ) ;
144+ }
145+ }
146+ }
147+
148+ return { text : variableText , value : variableValue } ;
134149 } ) ;
135- return acc . concat ( fieldVals ) ;
150+
151+ return acc . concat ( variableValues ) ;
136152 } , [ ] ) ;
137153 }
138154
0 commit comments