{"version":3,"file":"TimeRangeContent.cjs","sources":["../../../../../src/components/DateTimePickers/TimeRangePicker/TimeRangeContent.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { FormEvent, useCallback, useEffect, useId, useState } from 'react';\nimport * as React from 'react';\n\nimport {\n  DateTime,\n  dateTimeFormat,\n  dateTimeParse,\n  GrafanaTheme2,\n  isDateTime,\n  rangeUtil,\n  RawTimeRange,\n  TimeRange,\n  TimeZone,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { Button } from '../../Button/Button';\nimport { Field } from '../../Forms/Field';\nimport { Icon } from '../../Icon/Icon';\nimport { Input } from '../../Input/Input';\nimport { Tooltip } from '../../Tooltip/Tooltip';\nimport { WeekStart } from '../WeekStartPicker';\nimport { commonFormat } from '../commonFormat';\nimport { isValid } from '../utils';\n\nimport TimePickerCalendar from './TimePickerCalendar';\n\ninterface Props {\n  isFullscreen: boolean;\n  value: TimeRange;\n  onApply: (range: TimeRange) => void;\n  timeZone?: TimeZone;\n  fiscalYearStartMonth?: number;\n  roundup?: boolean;\n  isReversed?: boolean;\n  onError?: (error?: string) => void;\n  weekStart?: WeekStart;\n}\n\ninterface InputState {\n  value: string;\n  invalid: boolean;\n  errorMessage: string;\n}\n\nconst ERROR_MESSAGES = {\n  default: () => t('time-picker.range-content.default-error', 'Please enter a past date or \"{{now}}\"', { now: 'now' }),\n  range: () => t('time-picker.range-content.range-error', '\"From\" can\\'t be after \"To\"'),\n};\n\nexport const TimeRangeContent = (props: Props) => {\n  const {\n    value,\n    isFullscreen = false,\n    timeZone,\n    onApply: onApplyFromProps,\n    isReversed,\n    fiscalYearStartMonth,\n    onError,\n    weekStart,\n  } = props;\n  const [fromValue, toValue] = valueToState(value.raw.from, value.raw.to, timeZone);\n  const style = useStyles2(getStyles);\n\n  const [from, setFrom] = useState<InputState>(fromValue);\n  const [to, setTo] = useState<InputState>(toValue);\n  const [isOpen, setOpen] = useState(false);\n\n  const fromFieldId = useId();\n  const toFieldId = useId();\n\n  // Synchronize internal state with external value\n  useEffect(() => {\n    const [fromValue, toValue] = valueToState(value.raw.from, value.raw.to, timeZone);\n    setFrom(fromValue);\n    setTo(toValue);\n  }, [value.raw.from, value.raw.to, timeZone]);\n\n  const onOpen = useCallback(\n    (event: FormEvent<HTMLElement>) => {\n      event.preventDefault();\n      setOpen(true);\n    },\n    [setOpen]\n  );\n\n  const onApply = useCallback(() => {\n    if (to.invalid || from.invalid) {\n      return;\n    }\n\n    const raw: RawTimeRange = { from: from.value, to: to.value };\n    const timeRange = rangeUtil.convertRawToRange(raw, timeZone, fiscalYearStartMonth, commonFormat);\n\n    onApplyFromProps(timeRange);\n  }, [from.invalid, from.value, onApplyFromProps, timeZone, to.invalid, to.value, fiscalYearStartMonth]);\n\n  const onChange = useCallback(\n    (from: DateTime | string, to: DateTime | string) => {\n      const [fromValue, toValue] = valueToState(from, to, timeZone);\n      setFrom(fromValue);\n      setTo(toValue);\n    },\n    [timeZone]\n  );\n\n  const submitOnEnter = (event: React.KeyboardEvent<HTMLInputElement>) => {\n    if (event.key === 'Enter') {\n      onApply();\n    }\n  };\n\n  const onCopy = () => {\n    const rawSource: RawTimeRange = value.raw;\n    const clipboardPayload = rangeUtil.formatRawTimeRange(rawSource);\n    navigator.clipboard.writeText(JSON.stringify(clipboardPayload));\n  };\n\n  const onPaste = async () => {\n    const raw = await navigator.clipboard.readText();\n    let range;\n\n    try {\n      range = JSON.parse(raw);\n    } catch (error) {\n      if (onError) {\n        onError(raw);\n      }\n      return;\n    }\n\n    const [fromValue, toValue] = valueToState(range.from, range.to, timeZone);\n    setFrom(fromValue);\n    setTo(toValue);\n  };\n\n  const fiscalYear = rangeUtil.convertRawToRange({ from: 'now/fy', to: 'now/fy' }, timeZone, fiscalYearStartMonth);\n\n  const fyTooltip = (\n    <div className={style.tooltip}>\n      {rangeUtil.isFiscal(value) ? (\n        <Tooltip\n          content={t('time-picker.range-content.fiscal-year', 'Fiscal year: {{from}} - {{to}}', {\n            from: fiscalYear.from.format('MMM-DD'),\n            to: fiscalYear.to.format('MMM-DD'),\n          })}\n        >\n          <Icon name=\"info-circle\" />\n        </Tooltip>\n      ) : null}\n    </div>\n  );\n\n  const icon = (\n    <Button\n      aria-label={t('time-picker.range-content.open-input-calendar', 'Open calendar')}\n      data-testid={selectors.components.TimePicker.calendar.openButton}\n      icon=\"calendar-alt\"\n      variant=\"secondary\"\n      type=\"button\"\n      onClick={onOpen}\n    />\n  );\n\n  return (\n    <div>\n      <div className={style.fieldContainer}>\n        <Field\n          label={t('time-picker.range-content.from-input', 'From')}\n          invalid={from.invalid}\n          error={from.errorMessage}\n        >\n          <Input\n            id={fromFieldId}\n            onClick={(event) => event.stopPropagation()}\n            onChange={(event) => onChange(event.currentTarget.value, to.value)}\n            addonAfter={icon}\n            onKeyDown={submitOnEnter}\n            data-testid={selectors.components.TimePicker.fromField}\n            value={from.value}\n          />\n        </Field>\n        {fyTooltip}\n      </div>\n      <div className={style.fieldContainer}>\n        <Field label={t('time-picker.range-content.to-input', 'To')} invalid={to.invalid} error={to.errorMessage}>\n          <Input\n            id={toFieldId}\n            onClick={(event) => event.stopPropagation()}\n            onChange={(event) => onChange(from.value, event.currentTarget.value)}\n            addonAfter={icon}\n            onKeyDown={submitOnEnter}\n            data-testid={selectors.components.TimePicker.toField}\n            value={to.value}\n          />\n        </Field>\n        {fyTooltip}\n      </div>\n      <div className={style.buttonsContainer}>\n        <Button\n          data-testid={selectors.components.TimePicker.copyTimeRange}\n          icon=\"copy\"\n          variant=\"secondary\"\n          tooltip={t('time-picker.copy-paste.tooltip-copy', 'Copy time range to clipboard')}\n          type=\"button\"\n          onClick={onCopy}\n        />\n        <Button\n          data-testid={selectors.components.TimePicker.pasteTimeRange}\n          icon=\"clipboard-alt\"\n          variant=\"secondary\"\n          tooltip={t('time-picker.copy-paste.tooltip-paste', 'Paste time range')}\n          type=\"button\"\n          onClick={onPaste}\n        />\n        <Button data-testid={selectors.components.TimePicker.applyTimeRange} type=\"button\" onClick={onApply}>\n          <Trans i18nKey=\"time-picker.range-content.apply-button\">Apply time range</Trans>\n        </Button>\n      </div>\n\n      <TimePickerCalendar\n        isFullscreen={isFullscreen}\n        isOpen={isOpen}\n        from={dateTimeParse(from.value, { timeZone })}\n        to={dateTimeParse(to.value, { timeZone })}\n        onApply={onApply}\n        onClose={() => setOpen(false)}\n        onChange={onChange}\n        timeZone={timeZone}\n        isReversed={isReversed}\n        weekStart={weekStart}\n      />\n    </div>\n  );\n};\n\nfunction isRangeInvalid(from: string, to: string, timezone?: string): boolean {\n  const raw: RawTimeRange = { from, to };\n  const timeRange = rangeUtil.convertRawToRange(raw, timezone, undefined, commonFormat);\n  const valid = timeRange.from.isSame(timeRange.to) || timeRange.from.isBefore(timeRange.to);\n\n  return !valid;\n}\n\nfunction valueToState(\n  rawFrom: DateTime | string,\n  rawTo: DateTime | string,\n  timeZone?: TimeZone\n): [InputState, InputState] {\n  const fromValue = valueAsString(rawFrom, timeZone);\n  const toValue = valueAsString(rawTo, timeZone);\n  const fromInvalid = !isValid(fromValue, false, timeZone);\n  const toInvalid = !isValid(toValue, true, timeZone);\n  // If \"To\" is invalid, we should not check the range anyways\n  const rangeInvalid = isRangeInvalid(fromValue, toValue, timeZone) && !toInvalid;\n\n  return [\n    {\n      value: fromValue,\n      invalid: fromInvalid || rangeInvalid,\n      errorMessage: rangeInvalid && !fromInvalid ? ERROR_MESSAGES.range() : ERROR_MESSAGES.default(),\n    },\n    { value: toValue, invalid: toInvalid, errorMessage: ERROR_MESSAGES.default() },\n  ];\n}\n\nfunction valueAsString(value: DateTime | string, timeZone?: TimeZone): string {\n  if (isDateTime(value)) {\n    return dateTimeFormat(value, { timeZone, format: commonFormat });\n  }\n\n  if (value.endsWith('Z')) {\n    const dt = dateTimeParse(value);\n    return dateTimeFormat(dt, { timeZone, format: commonFormat });\n  }\n\n  return value;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n  return {\n    fieldContainer: css({\n      display: 'flex',\n    }),\n    buttonsContainer: css({\n      display: 'flex',\n      gap: theme.spacing(0.5),\n      marginTop: theme.spacing(1),\n    }),\n    tooltip: css({\n      paddingLeft: theme.spacing(1),\n      paddingTop: theme.spacing(3),\n    }),\n  };\n}\n"],"names":["t","useStyles2","useState","useId","useEffect","fromValue","toValue","useCallback","rangeUtil","commonFormat","from","to","jsx","Tooltip","Icon","Button","selectors","jsxs","Field","Input","Trans","TimePickerCalendar","dateTimeParse","isValid","isDateTime","dateTimeFormat","css"],"mappings":"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"}