{"version":3,"file":"DateTimePicker.cjs","sources":["../../../../../src/components/DateTimePickers/DateTimePicker/DateTimePicker.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { autoUpdate, useFloating } from '@floating-ui/react';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { useOverlay } from '@react-aria/overlays';\nimport { FormEvent, ReactNode, useCallback, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport Calendar from 'react-calendar';\nimport { useMedia } from 'react-use';\n\nimport {\n  dateTimeFormat,\n  DateTime,\n  dateTime,\n  GrafanaTheme2,\n  isDateTime,\n  dateTimeForTimeZone,\n  getTimeZone,\n  TimeZone,\n} from '@grafana/data';\nimport { Components } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { getPositioningMiddleware } from '../../../utils/floating';\nimport { Button } from '../../Button/Button';\nimport { InlineField } from '../../Forms/InlineField';\nimport { Icon } from '../../Icon/Icon';\nimport { Input } from '../../Input/Input';\nimport { Stack } from '../../Layout/Stack/Stack';\nimport { getModalStyles } from '../../Modal/getModalStyles';\nimport { Portal } from '../../Portal/Portal';\nimport { TimeOfDayPicker, POPUP_CLASS_NAME } from '../TimeOfDayPicker';\nimport { getBodyStyles } from '../TimeRangePicker/CalendarBody';\nimport { isValid } from '../utils';\nimport { adjustDateForReactCalendar } from '../utils/adjustDateForReactCalendar';\n\nexport interface Props {\n  /** Input date for the component */\n  date?: DateTime;\n  /** Callback for returning the selected date */\n  onChange: (date?: DateTime) => void;\n  /** label for the input field */\n  label?: ReactNode;\n  /** Set the latest selectable date */\n  maxDate?: Date;\n  /** Set the minimum selectable date */\n  minDate?: Date;\n  /** Display seconds on the time picker */\n  showSeconds?: boolean;\n  /** Set the hours that can't be selected */\n  disabledHours?: () => number[];\n  /** Set the minutes that can't be selected */\n  disabledMinutes?: () => number[];\n  /** Set the seconds that can't be selected */\n  disabledSeconds?: () => number[];\n  /** Can input be cleared/have empty values */\n  clearable?: boolean;\n  /** Custom timezone for the date/time display */\n  timeZone?: TimeZone;\n}\n\n/**\n * A component for selecting a date *and* time.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/date-time-pickers-datetimepicker--docs\n */\nexport const DateTimePicker = ({\n  date,\n  maxDate,\n  minDate,\n  label,\n  onChange,\n  disabledHours,\n  disabledMinutes,\n  disabledSeconds,\n  timeZone,\n  showSeconds = true,\n  clearable = false,\n}: Props) => {\n  const [isOpen, setOpen] = useState(false);\n\n  const ref = useRef<HTMLDivElement>(null);\n  const { overlayProps, underlayProps } = useOverlay(\n    {\n      onClose: () => setOpen(false),\n      isDismissable: true,\n      isOpen,\n      shouldCloseOnInteractOutside: (element) => {\n        const popupElement = document.getElementsByClassName(POPUP_CLASS_NAME)[0];\n        return !(popupElement && popupElement.contains(element));\n      },\n    },\n    ref\n  );\n  const { dialogProps } = useDialog({}, ref);\n\n  const theme = useTheme2();\n  const { modalBackdrop } = useStyles2(getModalStyles);\n  const isFullscreen = useMedia(`(min-width: ${theme.breakpoints.values.lg}px)`);\n  const placement = 'bottom-start';\n  const styles = useStyles2(getStyles);\n\n  // the order of middleware is important!\n  // see https://floating-ui.com/docs/arrow#order\n  const middleware = getPositioningMiddleware(placement);\n\n  const { refs, floatingStyles } = useFloating({\n    open: isOpen,\n    placement,\n    onOpenChange: setOpen,\n    middleware,\n    whileElementsMounted: autoUpdate,\n    strategy: 'fixed',\n  });\n\n  const onApply = useCallback(\n    (date: DateTime) => {\n      setOpen(false);\n      onChange(date);\n    },\n    [onChange]\n  );\n\n  const onOpen = useCallback(\n    (event: FormEvent<HTMLElement>) => {\n      event.preventDefault();\n      setOpen(true);\n    },\n    [setOpen]\n  );\n\n  return (\n    <div data-testid=\"date-time-picker\" style={{ position: 'relative' }}>\n      <DateTimeInput\n        date={date}\n        onChange={onChange}\n        isFullscreen={isFullscreen}\n        onOpen={onOpen}\n        label={label}\n        ref={refs.setReference}\n        showSeconds={showSeconds}\n        clearable={clearable}\n        timeZone={timeZone}\n      />\n      {isOpen ? (\n        isFullscreen ? (\n          <Portal>\n            <FocusScope contain autoFocus restoreFocus>\n              <div ref={ref} {...overlayProps} {...dialogProps}>\n                <DateTimeCalendar\n                  date={date}\n                  onChange={onApply}\n                  isFullscreen={true}\n                  onClose={() => setOpen(false)}\n                  maxDate={maxDate}\n                  minDate={minDate}\n                  ref={refs.setFloating}\n                  style={floatingStyles}\n                  showSeconds={showSeconds}\n                  disabledHours={disabledHours}\n                  disabledMinutes={disabledMinutes}\n                  disabledSeconds={disabledSeconds}\n                  timeZone={timeZone}\n                />\n              </div>\n            </FocusScope>\n          </Portal>\n        ) : (\n          <Portal>\n            <div className={modalBackdrop} {...underlayProps} />\n            <FocusScope contain autoFocus restoreFocus>\n              <div ref={ref} {...overlayProps} {...dialogProps}>\n                <div className={styles.modal}>\n                  <DateTimeCalendar\n                    date={date}\n                    maxDate={maxDate}\n                    minDate={minDate}\n                    onChange={onApply}\n                    isFullscreen={false}\n                    onClose={() => setOpen(false)}\n                    showSeconds={showSeconds}\n                    disabledHours={disabledHours}\n                    disabledMinutes={disabledMinutes}\n                    disabledSeconds={disabledSeconds}\n                    timeZone={timeZone}\n                  />\n                </div>\n              </div>\n            </FocusScope>\n          </Portal>\n        )\n      ) : null}\n    </div>\n  );\n};\n\ninterface DateTimeCalendarProps extends Omit<Props, 'label' | 'clearable' | 'onChange'> {\n  onChange: (date: DateTime) => void;\n  onClose: () => void;\n  isFullscreen: boolean;\n  style?: React.CSSProperties;\n}\n\ntype InputProps = Pick<Props, 'onChange' | 'label' | 'date' | 'showSeconds' | 'clearable' | 'timeZone'> & {\n  isFullscreen: boolean;\n  onOpen: (event: FormEvent<HTMLElement>) => void;\n};\n\ntype InputState = {\n  value: string;\n  invalid: boolean;\n};\n\nconst DateTimeInput = React.forwardRef<HTMLInputElement, InputProps>(\n  ({ date, label, onChange, onOpen, timeZone, showSeconds = true, clearable = false }, ref) => {\n    const styles = useStyles2(getStyles);\n    const format = showSeconds ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm';\n    const [internalDate, setInternalDate] = useState<InputState>(() => {\n      return {\n        value: date ? dateTimeFormat(date, { timeZone }) : !clearable ? dateTimeFormat(dateTime(), { timeZone }) : '',\n        invalid: false,\n      };\n    });\n\n    useEffect(() => {\n      if (date) {\n        const formattedDate = dateTimeFormat(date, { format, timeZone });\n        setInternalDate({\n          invalid: !isValid(formattedDate),\n          value: isDateTime(date) ? formattedDate : date,\n        });\n      }\n    }, [date, format, timeZone]);\n\n    const onChangeDate = useCallback((event: FormEvent<HTMLInputElement>) => {\n      const isInvalid = !isValid(event.currentTarget.value);\n      setInternalDate({\n        value: event.currentTarget.value,\n        invalid: isInvalid,\n      });\n    }, []);\n\n    const onBlur = useCallback(() => {\n      if (!internalDate.invalid && internalDate.value) {\n        const date = dateTimeForTimeZone(getTimeZone({ timeZone }), internalDate.value);\n        onChange(date);\n      }\n    }, [internalDate, onChange, timeZone]);\n\n    const clearInternalDate = useCallback(() => {\n      setInternalDate({ value: '', invalid: false });\n      onChange();\n    }, [onChange]);\n\n    const icon = (\n      <Button\n        aria-label={t('grafana-ui.date-time-picker.calendar-icon-label', 'Time picker')}\n        icon=\"calendar-alt\"\n        variant=\"secondary\"\n        onClick={onOpen}\n      />\n    );\n    return (\n      <InlineField label={label} invalid={!!(internalDate.value && internalDate.invalid)} className={styles.field}>\n        <Input\n          onChange={onChangeDate}\n          addonAfter={icon}\n          value={internalDate.value}\n          onBlur={onBlur}\n          data-testid={Components.DateTimePicker.input}\n          placeholder={t('grafana-ui.date-time-picker.select-placeholder', 'Select date/time')}\n          ref={ref}\n          suffix={\n            clearable &&\n            internalDate.value && <Icon name=\"times\" className={styles.clearIcon} onClick={clearInternalDate} />\n          }\n        />\n      </InlineField>\n    );\n  }\n);\n\nDateTimeInput.displayName = 'DateTimeInput';\n\nconst DateTimeCalendar = React.forwardRef<HTMLDivElement, DateTimeCalendarProps>(\n  (\n    {\n      date,\n      onClose,\n      onChange,\n      isFullscreen,\n      maxDate,\n      minDate,\n      style,\n      showSeconds = true,\n      disabledHours,\n      disabledMinutes,\n      disabledSeconds,\n      timeZone,\n    },\n    ref\n  ) => {\n    const calendarStyles = useStyles2(getBodyStyles);\n    const styles = useStyles2(getStyles);\n\n    // need to keep these 2 separate in state since react-calendar doesn't support different timezones\n    const [timeOfDayDateTime, setTimeOfDayDateTime] = useState(() => {\n      if (date && date.isValid()) {\n        return dateTimeForTimeZone(getTimeZone({ timeZone }), date);\n      }\n\n      return dateTimeForTimeZone(getTimeZone({ timeZone }), new Date());\n    });\n    const [reactCalendarDate, setReactCalendarDate] = useState<Date>(() => {\n      if (date && date.isValid()) {\n        return adjustDateForReactCalendar(date.toDate(), getTimeZone({ timeZone }));\n      }\n\n      return adjustDateForReactCalendar(new Date(), getTimeZone({ timeZone }));\n    });\n\n    const onChangeDate = useCallback<NonNullable<React.ComponentProps<typeof Calendar>['onChange']>>((date) => {\n      if (date && !Array.isArray(date)) {\n        setReactCalendarDate(date);\n      }\n    }, []);\n\n    const onChangeTime = useCallback((date: DateTime) => {\n      setTimeOfDayDateTime(date);\n    }, []);\n\n    // here we need to stitch the 2 date objects back together\n    const handleApply = () => {\n      // we take the date that's set by TimeOfDayPicker\n      const newDate = dateTime(timeOfDayDateTime);\n\n      // and apply the date/month/year set by react-calendar\n      newDate.set('date', reactCalendarDate.getDate());\n      newDate.set('month', reactCalendarDate.getMonth());\n      newDate.set('year', reactCalendarDate.getFullYear());\n\n      onChange(newDate);\n    };\n\n    return (\n      <div className={cx(styles.container, { [styles.fullScreen]: isFullscreen })} style={style} ref={ref}>\n        <Calendar\n          next2Label={null}\n          prev2Label={null}\n          value={reactCalendarDate}\n          nextLabel={<Icon name=\"angle-right\" />}\n          nextAriaLabel={t('grafana-ui.date-time-picker.next-label', 'Next month')}\n          prevLabel={<Icon name=\"angle-left\" />}\n          prevAriaLabel={t('grafana-ui.date-time-picker.previous-label', 'Previous month')}\n          onChange={onChangeDate}\n          locale=\"en\"\n          className={calendarStyles.body}\n          tileClassName={calendarStyles.title}\n          maxDate={maxDate}\n          minDate={minDate}\n        />\n        <div className={styles.time}>\n          <TimeOfDayPicker\n            showSeconds={showSeconds}\n            onChange={onChangeTime}\n            value={timeOfDayDateTime}\n            disabledHours={disabledHours}\n            disabledMinutes={disabledMinutes}\n            disabledSeconds={disabledSeconds}\n          />\n        </div>\n        <Stack>\n          <Button type=\"button\" onClick={handleApply}>\n            <Trans i18nKey=\"grafana-ui.date-time-picker.apply\">Apply</Trans>\n          </Button>\n          <Button variant=\"secondary\" type=\"button\" onClick={onClose}>\n            <Trans i18nKey=\"grafana-ui.date-time-picker.cancel\">Cancel</Trans>\n          </Button>\n        </Stack>\n      </div>\n    );\n  }\n);\n\nDateTimeCalendar.displayName = 'DateTimeCalendar';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  container: css({\n    padding: theme.spacing(1),\n    border: `1px ${theme.colors.border.weak} solid`,\n    borderRadius: theme.shape.radius.default,\n    backgroundColor: theme.colors.background.primary,\n    zIndex: theme.zIndex.modal,\n  }),\n  fullScreen: css({\n    position: 'absolute',\n  }),\n  time: css({\n    marginBottom: theme.spacing(2),\n  }),\n  modal: css({\n    position: 'fixed',\n    top: '50%',\n    left: '50%',\n    transform: 'translate(-50%, -50%)',\n    zIndex: theme.zIndex.modal,\n    maxWidth: '280px',\n  }),\n  clearIcon: css({\n    cursor: 'pointer',\n  }),\n  field: css({\n    marginBottom: 0,\n    width: '100%',\n  }),\n});\n"],"names":["useState","useRef","useOverlay","POPUP_CLASS_NAME","useDialog","useTheme2","useStyles2","getModalStyles","useMedia","getPositioningMiddleware","useFloating","autoUpdate","useCallback","date","jsxs","jsx","Portal","FocusScope","React","dateTimeFormat","dateTime","useEffect","isValid","isDateTime","dateTimeForTimeZone","getTimeZone","Button","t","InlineField","Input","Components","Icon","getBodyStyles","adjustDateForReactCalendar","cx","Calendar","TimeOfDayPicker","Stack","Trans","css"],"mappings":"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"}