logsDateRange.ts 1.6 KB

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