logsDateRange.ts55 lines · main
1import dayjs from 'dayjs'
2
3import { EXPLORER_DATEPICKER_HELPERS, getDefaultHelper } from './Logs.constants'
4import type { DatePickerValue } from './Logs.DatePickers'
5import type { DatetimeHelper } from './Logs.types'
6
7export interface ResolvedLogDateRange {
8 from: string
9 to: string
10}
11
12export interface ResolvedLogParams extends ResolvedLogDateRange {
13 sql: string
14}
15
16const findHelper = (value: DatePickerValue, helpers: DatetimeHelper[]) => {
17 if (!value.text) return undefined
18 return helpers.find((helper) => helper.text === value.text)
19}
20
21const ensureEnd = (candidate: string | undefined, now: dayjs.Dayjs) => {
22 if (candidate && candidate.length > 0) return candidate
23 return now.toISOString()
24}
25
26export const resolveLogDateRange = (
27 value: DatePickerValue,
28 helpers: DatetimeHelper[] = EXPLORER_DATEPICKER_HELPERS
29): ResolvedLogDateRange => {
30 const now = dayjs()
31 if (value.isHelper) {
32 const matchedHelper = findHelper(value, helpers) ?? getDefaultHelper(helpers)
33 const from = matchedHelper?.calcFrom() ?? value.from ?? ''
34 const to = ensureEnd(matchedHelper?.calcTo() ?? value.to, now)
35 return { from, to }
36 }
37
38 const defaultHelper = getDefaultHelper(helpers)
39 const from = value.from || defaultHelper.calcFrom()
40 const to = ensureEnd(value.to, now)
41 return { from, to }
42}
43
44export const buildLogQueryParams = (
45 value: DatePickerValue,
46 sql: string,
47 helpers: DatetimeHelper[] = EXPLORER_DATEPICKER_HELPERS
48): ResolvedLogParams => {
49 const range = resolveLogDateRange(value, helpers)
50 return {
51 sql,
52 from: range.from,
53 to: range.to,
54 }
55}