Skip to content

Commit 39e2cec

Browse files
authored
feat: use DurationLiteral or DateTimeLiteral depending on the type of timeRange (#5463)
1 parent 5f905af commit 39e2cec

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

src/variables/selectors/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,14 @@ export const getAllVariables = (
140140
export const getAllVariablesForZoomRequery = (
141141
state: AppState,
142142
domain: number[],
143+
timeRangeType: string,
143144
contextID?: string
144145
): Variable[] => {
145146
const vars = getUserVariableNames(state, contextID || currentContext(state))
146147
.concat([TIME_RANGE_START, TIME_RANGE_STOP])
147148
.map(variableID => {
148149
if (domain?.length) {
149-
return getVariableForZoomRequery(variableID, domain)
150+
return getVariableForZoomRequery(variableID, domain, timeRangeType)
150151
}
151152
return getVariable(state, variableID)
152153
})

src/variables/utils/getWindowVars.ts

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020

2121
// Types
2222
import {VariableAssignment, Package} from 'src/types/ast'
23-
import {RemoteDataState, TimeRange, Variable} from 'src/types'
23+
import {DurationLiteral, RemoteDataState, TimeRange, Variable} from 'src/types'
2424
import {SELECTABLE_TIME_RANGES} from 'src/shared/constants/timeRanges'
2525

2626
const DESIRED_POINTS_PER_GRAPH = 360
@@ -202,7 +202,8 @@ export const getWindowPeriodVariableFromVariables = (
202202

203203
export const getVariableForZoomRequery = (
204204
variableID: string,
205-
domain: number[]
205+
domain: number[],
206+
timeRangeType: string
206207
): Variable => {
207208
const variable: Variable = {
208209
orgID: '',
@@ -220,7 +221,18 @@ export const getVariableForZoomRequery = (
220221
const stopTime = new Date(domain?.[1] ?? '')
221222
switch (variableID) {
222223
case TIME_RANGE_START:
223-
variable.arguments.values = [startTime.toISOString()]
224+
if (timeRangeType === 'custom') {
225+
variable.arguments.values = [startTime.toISOString()]
226+
} else {
227+
variable.arguments.values = [
228+
[
229+
{
230+
magnitude: Date.now() - startTime.getTime(),
231+
unit: 'ms',
232+
},
233+
],
234+
]
235+
}
224236
return variable
225237

226238
case TIME_RANGE_STOP:
@@ -245,7 +257,11 @@ export const normalizeWindowPeriodForZoomRequery = (
245257
domain: Array<number>,
246258
column: NumericColumnData | string[]
247259
): number => {
248-
if (windowPeriod || !timeRange || !column) {
260+
if (
261+
!timeRange ||
262+
!column ||
263+
(windowPeriod && Math.abs(windowPeriod) !== Infinity)
264+
) {
249265
if (windowPeriod < 0) {
250266
return FALLBACK_WINDOW_PERIOD
251267
}
@@ -304,15 +320,23 @@ export const normalizeWindowPeriodVariableForZoomRequery = (
304320
variableAssignment: VariableAssignment[],
305321
windowPeriod: number
306322
): VariableAssignment[] => {
307-
if (Array.isArray(variableAssignment) && variableAssignment.length) {
308-
return variableAssignment
309-
}
310-
311323
const assignedWindowPeriod = Math.max(
312324
Math.min(Math.round(windowPeriod), FALLBACK_WINDOW_PERIOD),
313325
MINIMUM_WINDOW_PERIOD
314326
)
315327

328+
const init = (variableAssignment?.[0]?.init
329+
? variableAssignment?.[0]?.init
330+
: {
331+
values: [{magnitude: assignedWindowPeriod, unit: 'ms'}],
332+
type: 'DurationLiteral',
333+
}) as DurationLiteral
334+
335+
const magnitude = init?.values?.[0]?.magnitude
336+
if (magnitude && Math.abs(magnitude) !== Infinity) {
337+
return variableAssignment
338+
}
339+
316340
return [
317341
{
318342
type: 'VariableAssignment',

src/visualization/utils/useVisDomainSettings.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@ import {isEqual} from 'lodash'
77
// API
88
import {runQuery, RunQueryResult} from 'src/shared/apis/query'
99

10+
// Selectors
11+
import {getOrg} from 'src/organizations/selectors'
12+
import {getStartTime, getEndTime} from 'src/timeMachine/selectors/index'
13+
import {getAllVariablesForZoomRequery} from 'src/variables/selectors'
14+
1015
// Utils
1116
import {useOneWayState} from 'src/shared/utils/useOneWayState'
1217
import {extent} from 'src/shared/utils/vis'
13-
import {getStartTime, getEndTime} from 'src/timeMachine/selectors/index'
14-
import {getOrg} from 'src/organizations/selectors'
15-
import {getAllVariablesForZoomRequery} from 'src/variables/selectors'
1618
import {buildUsedVarsOption} from 'src/variables/utils/buildVarsOption'
1719
import {event} from 'src/cloud/utils/reporting'
18-
1920
import {
2021
getWindowPeriodFromVariables,
2122
getWindowVarsFromVariables,
@@ -26,6 +27,7 @@ import {
2627
// Types
2728
import {AppState, InternalFromFluxResult, TimeRange} from 'src/types'
2829
import {RemoteDataState} from '@influxdata/clockface'
30+
2931
/*
3032
This hook helps map the domain setting stored for line graph to the
3133
appropriate settings on a @influxdata/giraffe `Config` object.
@@ -167,6 +169,7 @@ export const useZoomRequeryXDomainSettings = (args: ZoomRequeryArgs) => {
167169
timeRange = null,
168170
} = args
169171

172+
const {type: timeRangeType} = timeRange ? timeRange : {type: 'duration'}
170173
const [selectedTimeRange, setSelectedTimeRange] = useState(timeRange)
171174
const initialDomain = useMemo(() => {
172175
if (storedDomain) {
@@ -197,7 +200,7 @@ export const useZoomRequeryXDomainSettings = (args: ZoomRequeryArgs) => {
197200
const [domain, setDomain] = useState(initialDomain)
198201

199202
const getAllVariablesWithTimeDomain = (state: AppState) =>
200-
getAllVariablesForZoomRequery(state, timeRange ? domain : [])
203+
getAllVariablesForZoomRequery(state, timeRange ? domain : [], timeRangeType)
201204
const orgId = useSelector(getOrg)?.id
202205
const variables = useSelector(getAllVariablesWithTimeDomain)
203206

@@ -297,6 +300,7 @@ export const useZoomRequeryYDomainSettings = (args: ZoomRequeryArgs) => {
297300
timeRange = null,
298301
} = args
299302

303+
const {type: timeRangeType} = timeRange ? timeRange : {type: 'duration'}
300304
const [selectedTimeRange, setSelectedTimeRange] = useState(timeRange)
301305
const initialDomain = useMemo(() => {
302306
if (
@@ -332,7 +336,7 @@ export const useZoomRequeryYDomainSettings = (args: ZoomRequeryArgs) => {
332336
const [domain, setDomain] = useState(initialDomain)
333337

334338
const getAllVariablesWithTimeDomain = (state: AppState) =>
335-
getAllVariablesForZoomRequery(state, timeRange ? domain : [])
339+
getAllVariablesForZoomRequery(state, timeRange ? domain : [], timeRangeType)
336340
const orgId = useSelector(getOrg)?.id
337341
const variables = useSelector(getAllVariablesWithTimeDomain)
338342

0 commit comments

Comments
 (0)