logsDateRange.ts55 lines · main
| 1 | import dayjs from 'dayjs' |
| 2 | |
| 3 | import { EXPLORER_DATEPICKER_HELPERS, getDefaultHelper } from './Logs.constants' |
| 4 | import type { DatePickerValue } from './Logs.DatePickers' |
| 5 | import type { DatetimeHelper } from './Logs.types' |
| 6 | |
| 7 | export interface ResolvedLogDateRange { |
| 8 | from: string |
| 9 | to: string |
| 10 | } |
| 11 | |
| 12 | export interface ResolvedLogParams extends ResolvedLogDateRange { |
| 13 | sql: string |
| 14 | } |
| 15 | |
| 16 | const findHelper = (value: DatePickerValue, helpers: DatetimeHelper[]) => { |
| 17 | if (!value.text) return undefined |
| 18 | return helpers.find((helper) => helper.text === value.text) |
| 19 | } |
| 20 | |
| 21 | const ensureEnd = (candidate: string | undefined, now: dayjs.Dayjs) => { |
| 22 | if (candidate && candidate.length > 0) return candidate |
| 23 | return now.toISOString() |
| 24 | } |
| 25 | |
| 26 | export 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 | |
| 44 | export 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 | } |