Skip to content

Commit

Permalink
fix: hierarchy of variables is back (#17609)
Browse files Browse the repository at this point in the history
  • Loading branch information
drdelambre authored Apr 3, 2020
1 parent 6e4cf7f commit d2aefbd
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 7 deletions.
3 changes: 2 additions & 1 deletion ui/src/dashboards/actions/thunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,8 @@ export const getDashboard = (dashboardID: string) => async (
throw new Error(resp.data.message)
}

dispatch(hydrateVariables())
const skipCache = true
dispatch(hydrateVariables(skipCache))

const normDash = normalize<Dashboard, DashboardEntities, string>(
resp.data,
Expand Down
2 changes: 1 addition & 1 deletion ui/src/external/monaco.flux.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ export class LSPServer {
// drift between the parser and the internal representation
const variables = getAllVariables(state, contextID)
.map(v => asAssignment(v))
.filter(v => !(v.init.type === 'StringLiteral' && !v.init.value))
.filter(v => !!v)

const file = buildVarsOption(variables)

Expand Down
3 changes: 3 additions & 0 deletions ui/src/timeMachine/actions/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {runStatusesQuery} from 'src/alerting/utils/statusEvents'

// Actions
import {notify} from 'src/shared/actions/notifications'
import {hydrateVariables} from 'src/variables/actions/thunks'

// Constants
import {rateLimitReached, resultTooLarge} from 'src/shared/copy/notifications'
Expand Down Expand Up @@ -115,6 +116,8 @@ export const executeQueries = () => async (dispatch, getState: GetState) => {
try {
dispatch(setQueryResults(RemoteDataState.Loading, [], null))

await dispatch(hydrateVariables())

//TODO: replace with activeContext selector
const contextID =
activeTimeMachine.contextID || state.timeMachines.activeTimeMachineID
Expand Down
19 changes: 17 additions & 2 deletions ui/src/types/variables.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import {Variable as GenVariable, Label} from 'src/client'
import {VariableProperties as GenVariableProperties} from 'src/client'
import {
QueryVariableProperties as GenQueryVariableProperties,
ConstantVariableProperties as GenConstantVariableProperties,
MapVariableProperties as GenMapVariableProperties,
} from 'src/client'

import {
VariableArgumentType,
VariableMapObject,
QueryArguments,
MapArguments,
CSVArguments,
Expand All @@ -16,9 +21,19 @@ export interface SystemVariableProperties {
type?: 'system'
values?: any
}
export interface QueryVariableProperties
extends Omit<GenQueryVariableProperties, 'values'> {
values?: {
query?: string
language?: string
results?: string[] | VariableMapObject
}
}
export type VariableProperties =
| SystemVariableProperties
| GenVariableProperties
| QueryVariableProperties
| GenConstantVariableProperties
| GenMapVariableProperties

export interface Variable
extends Omit<Omit<GenVariable, 'labels'>, 'arguments'> {
Expand Down
4 changes: 2 additions & 2 deletions ui/src/variables/actions/thunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ export const getVariables = () => async (
}
}

export const hydrateVariables = () => async (
export const hydrateVariables = (skipCache?: boolean) => async (
dispatch: Dispatch<Action>,
getState: GetState
) => {
Expand All @@ -107,7 +107,7 @@ export const hydrateVariables = () => async (
const vals = await hydrateVars(vars, getAllVariablesFromState(state), {
orgID: org.id,
url: state.links.query.self,
skipCache: true,
skipCache,
}).promise

vars
Expand Down
8 changes: 8 additions & 0 deletions ui/src/variables/selectors/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,11 @@ export const getVariable = (
if (!vari.selected) {
if (vari.arguments.type === 'map') {
vari.selected = [Object.keys(vari.arguments.values)[0]]
} else if (
vari.arguments.type === 'query' &&
vari.arguments.values.results
) {
vari.selected = [vari.arguments.values.results[0]]
} else {
vari.selected = [vari.arguments.values[0]]
}
Expand Down Expand Up @@ -252,6 +257,9 @@ export const asAssignment = (variable: Variable): VariableAssignment => {
}

if (variable.arguments.type === 'query') {
if (!variable.selected || !variable.selected[0]) {
return null
}
out.init = {
type: 'StringLiteral',
value: variable.selected[0],
Expand Down
2 changes: 1 addition & 1 deletion ui/src/variables/utils/buildVarsOption.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export const buildVarsOption = (variables: VariableAssignment[]): File => ({
},
init: {
type: 'ObjectExpression',
properties: variables.map(assignmentToProperty),
properties: variables.filter(v => !!v).map(assignmentToProperty),
},
},
},
Expand Down
7 changes: 7 additions & 0 deletions ui/src/variables/utils/hydrateVars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,14 @@ export const hydrateVars = (
node.status === RemoteDataState.Loading

try {
// TODO: remove the concept of node.values, just use node.variable
node.values = await hydrateVarsHelper(node, options)
if (node.variable.arguments.type === 'query') {
node.variable.arguments.values.results = node.values.values
} else {
node.variable.arguments.values = node.values.values
}
node.variable.selected = node.values.selected
node.status = RemoteDataState.Done

return Promise.all(node.parents.filter(readyToResolve).map(resolve))
Expand Down

0 comments on commit d2aefbd

Please sign in to comment.