{"version":3,"file":"TimePickerContent.cjs","sources":["../../../../../src/components/DateTimePickers/TimeRangePicker/TimePickerContent.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { memo, useMemo, useState } from 'react';\n\nimport { GrafanaTheme2, isDateTime, rangeUtil, RawTimeRange, TimeOption, TimeRange, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { getFocusStyles } from '../../../themes/mixins';\nimport { FilterInput } from '../../FilterInput/FilterInput';\nimport { Icon } from '../../Icon/Icon';\nimport { TextLink } from '../../Link/TextLink';\nimport { WeekStart } from '../WeekStartPicker';\n\nimport { TimePickerFooter } from './TimePickerFooter';\nimport { TimePickerTitle } from './TimePickerTitle';\nimport { TimeRangeContent } from './TimeRangeContent';\nimport { TimeRangeList } from './TimeRangeList';\nimport { mapOptionToTimeRange, mapRangeToTimeOption } from './mapper';\n\ninterface Props {\n  value: TimeRange;\n  onChange: (timeRange: TimeRange) => void;\n  onChangeTimeZone: (timeZone: TimeZone) => void;\n  onChangeFiscalYearStartMonth?: (month: number) => void;\n  onError?: (error?: string) => void;\n  timeZone?: TimeZone;\n  fiscalYearStartMonth?: number;\n  quickOptions?: TimeOption[];\n  history?: TimeRange[];\n  showHistory?: boolean;\n  className?: string;\n  hideTimeZone?: boolean;\n  /** Reverse the order of relative and absolute range pickers. Used to left align the picker in forms */\n  isReversed?: boolean;\n  hideQuickRanges?: boolean;\n  widthOverride?: number;\n  weekStart?: WeekStart;\n}\n\nexport interface PropsWithScreenSize extends Props {\n  isFullscreen: boolean;\n}\n\ninterface FormProps extends Omit<Props, 'history'> {\n  historyOptions?: TimeOption[];\n}\n\nexport const TimePickerContentWithScreenSize = (props: PropsWithScreenSize) => {\n  const {\n    quickOptions = [],\n    isReversed,\n    isFullscreen,\n    hideQuickRanges,\n    timeZone,\n    fiscalYearStartMonth,\n    value,\n    onChange,\n    history,\n    showHistory,\n    className,\n    hideTimeZone,\n    onChangeTimeZone,\n    onChangeFiscalYearStartMonth,\n  } = props;\n  const isHistoryEmpty = !history?.length;\n  const isContainerTall =\n    (isFullscreen && showHistory) || (!isFullscreen && ((showHistory && !isHistoryEmpty) || !hideQuickRanges));\n  const styles = useStyles2(getStyles, isReversed, hideQuickRanges, isContainerTall, isFullscreen);\n  const historyOptions = mapToHistoryOptions(history, timeZone);\n  const timeOption = useTimeOption(value.raw, quickOptions);\n  const [searchTerm, setSearchQuery] = useState('');\n\n  const filteredQuickOptions = quickOptions.filter((o) => o.display.toLowerCase().includes(searchTerm.toLowerCase()));\n\n  const onChangeTimeOption = (timeOption: TimeOption) => {\n    return onChange(mapOptionToTimeRange(timeOption));\n  };\n\n  return (\n    <div id=\"TimePickerContent\" className={cx(styles.container, className)}>\n      <div className={styles.body}>\n        {(!isFullscreen || !hideQuickRanges) && (\n          <div className={styles.rightSide}>\n            <div className={styles.timeRangeFilter}>\n              <FilterInput\n                width={0}\n                value={searchTerm}\n                onChange={setSearchQuery}\n                placeholder={t('time-picker.content.filter-placeholder', 'Search quick ranges')}\n              />\n            </div>\n            <div className={styles.scrollContent}>\n              {!isFullscreen && <NarrowScreenForm {...props} historyOptions={historyOptions} />}\n              {!hideQuickRanges && (\n                <TimeRangeList options={filteredQuickOptions} onChange={onChangeTimeOption} value={timeOption} />\n              )}\n            </div>\n          </div>\n        )}\n        {isFullscreen && (\n          <div className={styles.leftSide}>\n            <FullScreenForm {...props} historyOptions={historyOptions} />\n          </div>\n        )}\n      </div>\n      {!hideTimeZone && isFullscreen && (\n        <TimePickerFooter\n          timeZone={timeZone}\n          fiscalYearStartMonth={fiscalYearStartMonth}\n          onChangeTimeZone={onChangeTimeZone}\n          onChangeFiscalYearStartMonth={onChangeFiscalYearStartMonth}\n        />\n      )}\n    </div>\n  );\n};\n\nexport const TimePickerContent = (props: Props) => {\n  const { widthOverride } = props;\n  const theme = useTheme2();\n  const isFullscreen = (widthOverride || window.innerWidth) >= theme.breakpoints.values.lg;\n  return <TimePickerContentWithScreenSize {...props} isFullscreen={isFullscreen} />;\n};\n\nconst NarrowScreenForm = (props: FormProps) => {\n  const { value, hideQuickRanges, onChange, timeZone, historyOptions = [], showHistory, onError, weekStart } = props;\n  const styles = useStyles2(getNarrowScreenStyles);\n  const isAbsolute = isDateTime(value.raw.from) || isDateTime(value.raw.to);\n  const [collapsedFlag, setCollapsedFlag] = useState(!isAbsolute);\n  const collapsed = hideQuickRanges ? false : collapsedFlag;\n\n  const onChangeTimeOption = (timeOption: TimeOption) => {\n    return onChange(mapOptionToTimeRange(timeOption, timeZone));\n  };\n\n  return (\n    <fieldset>\n      <div className={styles.header}>\n        <button\n          type={'button'}\n          className={styles.expandButton}\n          onClick={() => {\n            if (!hideQuickRanges) {\n              setCollapsedFlag(!collapsed);\n            }\n          }}\n          data-testid={selectors.components.TimePicker.absoluteTimeRangeTitle}\n          aria-expanded={!collapsed}\n          aria-controls=\"expanded-timerange\"\n        >\n          <TimePickerTitle>\n            <Trans i18nKey=\"time-picker.absolute.title\">Absolute time range</Trans>\n          </TimePickerTitle>\n          {!hideQuickRanges && <Icon name={!collapsed ? 'angle-up' : 'angle-down'} />}\n        </button>\n      </div>\n      {!collapsed && (\n        <div className={styles.body} id=\"expanded-timerange\">\n          <div className={styles.form}>\n            <TimeRangeContent\n              value={value}\n              onApply={onChange}\n              timeZone={timeZone}\n              isFullscreen={false}\n              onError={onError}\n              weekStart={weekStart}\n            />\n          </div>\n          {showHistory && (\n            <TimeRangeList\n              title={t('time-picker.absolute.recent-title', 'Recently used absolute ranges')}\n              options={historyOptions}\n              onChange={onChangeTimeOption}\n              placeholderEmpty={null}\n            />\n          )}\n        </div>\n      )}\n    </fieldset>\n  );\n};\n\nconst FullScreenForm = (props: FormProps) => {\n  const { onChange, value, timeZone, fiscalYearStartMonth, isReversed, historyOptions, onError, weekStart } = props;\n  const styles = useStyles2(getFullScreenStyles, props.hideQuickRanges);\n  const onChangeTimeOption = (timeOption: TimeOption) => {\n    return onChange(mapOptionToTimeRange(timeOption, timeZone));\n  };\n\n  return (\n    <>\n      <div className={styles.container}>\n        <div className={styles.title} data-testid={selectors.components.TimePicker.absoluteTimeRangeTitle}>\n          <TimePickerTitle>\n            <Trans i18nKey=\"time-picker.absolute.title\">Absolute time range</Trans>\n          </TimePickerTitle>\n        </div>\n        <TimeRangeContent\n          value={value}\n          timeZone={timeZone}\n          fiscalYearStartMonth={fiscalYearStartMonth}\n          onApply={onChange}\n          isFullscreen={true}\n          isReversed={isReversed}\n          onError={onError}\n          weekStart={weekStart}\n        />\n      </div>\n      {props.showHistory && (\n        <div className={styles.recent}>\n          <TimeRangeList\n            title={t('time-picker.absolute.recent-title', 'Recently used absolute ranges')}\n            options={historyOptions || []}\n            onChange={onChangeTimeOption}\n            placeholderEmpty={<EmptyRecentList />}\n          />\n        </div>\n      )}\n    </>\n  );\n};\n\nconst EmptyRecentList = memo(() => {\n  const styles = useStyles2(getEmptyListStyles);\n  const emptyRecentListText = t(\n    'time-picker.content.empty-recent-list-info',\n    \"It looks like you haven't used this time picker before. As soon as you enter some time intervals, recently used intervals will appear here.\"\n  );\n\n  return (\n    <div className={styles.container}>\n      <div>\n        <span>{emptyRecentListText}</span>\n      </div>\n      <Trans i18nKey=\"time-picker.content.empty-recent-list-docs\">\n        <div>\n          <TextLink href=\"https://grafana.com/docs/grafana/latest/dashboards/time-range-controls\" external>\n            Read the documentation\n          </TextLink>\n          <span> to find out more about how to enter custom time ranges.</span>\n        </div>\n      </Trans>\n    </div>\n  );\n});\n\nfunction mapToHistoryOptions(ranges?: TimeRange[], timeZone?: TimeZone): TimeOption[] {\n  if (!Array.isArray(ranges) || ranges.length === 0) {\n    return [];\n  }\n\n  return ranges.map((range) => mapRangeToTimeOption(range, timeZone));\n}\n\nEmptyRecentList.displayName = 'EmptyRecentList';\n\nconst useTimeOption = (raw: RawTimeRange, quickOptions: TimeOption[]): TimeOption | undefined => {\n  return useMemo(() => {\n    if (!rangeUtil.isRelativeTimeRange(raw)) {\n      return;\n    }\n    return quickOptions.find((option) => {\n      return option.from === raw.from && option.to === raw.to;\n    });\n  }, [raw, quickOptions]);\n};\n\nconst getStyles = (\n  theme: GrafanaTheme2,\n  isReversed?: boolean,\n  hideQuickRanges?: boolean,\n  isContainerTall?: boolean,\n  isFullscreen?: boolean\n) => ({\n  container: css({\n    background: theme.colors.background.elevated,\n    boxShadow: theme.shadows.z3,\n    width: `${isFullscreen ? '546px' : '262px'}`,\n    borderRadius: theme.shape.radius.default,\n    border: `1px solid ${theme.colors.border.weak}`,\n    [`${isReversed ? 'left' : 'right'}`]: 0,\n    display: 'flex',\n    flexDirection: 'column',\n  }),\n  body: css({\n    display: 'flex',\n    flexDirection: 'row-reverse',\n    height: `${isContainerTall ? '381px' : '217px'}`,\n    maxHeight: '100vh',\n  }),\n  leftSide: css({\n    display: 'flex',\n    flexDirection: 'column',\n    borderRight: `${isReversed ? 'none' : `1px solid ${theme.colors.border.weak}`}`,\n    width: `${!hideQuickRanges ? '60%' : '100%'}`,\n    overflow: 'auto',\n    scrollbarWidth: 'thin',\n    order: isReversed ? 1 : 0,\n  }),\n  rightSide: css({\n    width: `${isFullscreen ? '40%' : '100%'}; !important`,\n    borderRight: isReversed ? `1px solid ${theme.colors.border.weak}` : 'none',\n    display: 'flex',\n    flexDirection: 'column',\n  }),\n  timeRangeFilter: css({\n    padding: theme.spacing(1),\n  }),\n  spacing: css({\n    marginTop: '16px',\n  }),\n  scrollContent: css({\n    overflowY: 'auto',\n    scrollbarWidth: 'thin',\n  }),\n});\n\nconst getNarrowScreenStyles = (theme: GrafanaTheme2) => ({\n  header: css({\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    alignItems: 'center',\n    borderBottom: `1px solid ${theme.colors.border.weak}`,\n    padding: '7px 9px 7px 9px',\n  }),\n  expandButton: css({\n    backgroundColor: 'transparent',\n    border: 'none',\n    display: 'flex',\n    width: '100%',\n\n    '&:focus-visible': getFocusStyles(theme),\n  }),\n  body: css({\n    borderBottom: `1px solid ${theme.colors.border.weak}`,\n  }),\n  form: css({\n    padding: '7px 9px 7px 9px',\n  }),\n});\n\nconst getFullScreenStyles = (theme: GrafanaTheme2, hideQuickRanges?: boolean) => ({\n  container: css({\n    paddingTop: '9px',\n    paddingLeft: '11px',\n    paddingRight: !hideQuickRanges ? '20%' : '11px',\n  }),\n  title: css({\n    marginBottom: '11px',\n  }),\n  recent: css({\n    flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column',\n    justifyContent: 'flex-end',\n    paddingTop: theme.spacing(1),\n  }),\n});\n\nconst getEmptyListStyles = (theme: GrafanaTheme2) => ({\n  container: css({\n    padding: '12px',\n    margin: '12px',\n\n    'a, span': {\n      fontSize: '13px',\n    },\n  }),\n});\n"],"names":["useStyles2","useState","timeOption","mapOptionToTimeRange","jsxs","cx","jsx","FilterInput","t","TimeRangeList","TimePickerFooter","useTheme2","isDateTime","selectors","TimePickerTitle","Trans","Icon","TimeRangeContent","Fragment","memo","TextLink","mapRangeToTimeOption","useMemo","rangeUtil","css","getFocusStyles"],"mappings":"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"}