UNPKG

@grafana/ui

Version:
1 lines 10.7 kB
{"version":3,"file":"RefreshPicker.mjs","sources":["../../../../src/components/RefreshPicker/RefreshPicker.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { formatDuration } from 'date-fns';\nimport { PureComponent } from 'react';\n\nimport { SelectableValue, parseDuration } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { ButtonGroup } from '../Button/ButtonGroup';\nimport { ButtonSelect } from '../Dropdown/ButtonSelect';\nimport { ToolbarButton, ToolbarButtonVariant } from '../ToolbarButton/ToolbarButton';\n\n// Default intervals used in the refresh picker component\nexport const defaultIntervals = ['5s', '10s', '30s', '1m', '5m', '15m', '30m', '1h', '2h', '1d'];\n\nexport interface Props {\n intervals?: string[];\n onRefresh?: () => void;\n onIntervalChanged: (interval: string) => void;\n value?: string;\n tooltip?: string;\n isLoading?: boolean;\n isLive?: boolean;\n text?: string;\n noIntervalPicker?: boolean;\n showAutoInterval?: boolean;\n width?: string;\n primary?: boolean;\n isOnCanvas?: boolean;\n}\n\n/**\n * This component is used on dashboards to refresh visualizations.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/pickers-refreshpicker--docs\n */\nexport class RefreshPicker extends PureComponent<Props> {\n static offOption = {\n label: 'Off',\n value: '',\n ariaLabel: 'Turn off auto refresh',\n };\n static liveOption = {\n label: 'Live',\n value: 'LIVE',\n ariaLabel: 'Turn on live streaming',\n };\n static autoOption = {\n label: 'Auto',\n value: 'auto',\n ariaLabel: 'Select refresh from the query range',\n };\n\n static isLive = (refreshInterval?: string): boolean => refreshInterval === RefreshPicker.liveOption.value;\n\n constructor(props: Props) {\n super(props);\n }\n\n onChangeSelect = (item: SelectableValue<string>) => {\n const { onIntervalChanged } = this.props;\n if (onIntervalChanged && item.value != null) {\n onIntervalChanged(item.value);\n }\n };\n\n getVariant(): ToolbarButtonVariant {\n if (this.props.isLive) {\n return 'primary';\n }\n\n if (this.props.primary) {\n return 'primary';\n }\n\n return this.props.isOnCanvas ? 'canvas' : 'default';\n }\n\n render() {\n const { onRefresh, intervals, tooltip, value, text, isLoading, noIntervalPicker, width, showAutoInterval } =\n this.props;\n\n const currentValue = value || '';\n const variant = this.getVariant();\n const options = intervalsToOptions({ intervals, showAutoInterval });\n const option = options.find(({ value }) => value === currentValue);\n const translatedOffOption = translateOption(RefreshPicker.offOption.value);\n let selectedValue = option || translatedOffOption;\n\n if (selectedValue.label === translatedOffOption.label) {\n selectedValue = { value: '' };\n }\n\n const durationAriaLabel = selectedValue.ariaLabel;\n const ariaLabelDurationSelectedMessage = t(\n 'refresh-picker.aria-label.duration-selected',\n 'Choose refresh time interval with current interval {{durationAriaLabel}} selected',\n { durationAriaLabel }\n );\n const ariaLabelChooseIntervalMessage = t(\n 'refresh-picker.aria-label.choose-interval',\n 'Auto refresh turned off. Choose refresh time interval'\n );\n const ariaLabel = selectedValue.value === '' ? ariaLabelChooseIntervalMessage : ariaLabelDurationSelectedMessage;\n\n const tooltipIntervalSelected = t('refresh-picker.tooltip.interval-selected', 'Set auto refresh interval');\n const tooltipAutoRefreshOff = t('refresh-picker.tooltip.turned-off', 'Auto refresh off');\n const tooltipAutoRefresh = selectedValue.value === '' ? tooltipAutoRefreshOff : tooltipIntervalSelected;\n\n return (\n <ButtonGroup className=\"refresh-picker\">\n <ToolbarButton\n aria-label={text}\n tooltip={tooltip}\n onClick={onRefresh}\n variant={variant}\n icon={isLoading ? 'spinner' : 'sync'}\n style={width ? { width } : undefined}\n data-testid={selectors.components.RefreshPicker.runButtonV2}\n >\n {text}\n </ToolbarButton>\n {!noIntervalPicker && (\n <ButtonSelect\n className={css({\n borderTopLeftRadius: 'unset',\n borderBottomLeftRadius: 'unset',\n })}\n value={selectedValue}\n options={options}\n onChange={this.onChangeSelect}\n variant={variant}\n data-testid={selectors.components.RefreshPicker.intervalButtonV2}\n aria-label={ariaLabel}\n tooltip={tooltipAutoRefresh}\n />\n )}\n </ButtonGroup>\n );\n }\n}\n\nexport function translateOption(option: string) {\n switch (option) {\n case RefreshPicker.liveOption.value:\n return {\n label: t('refresh-picker.live-option.label', 'Live'),\n value: option,\n ariaLabel: t('refresh-picker.live-option.aria-label', 'Turn on live streaming'),\n };\n case RefreshPicker.offOption.value:\n return {\n label: t('refresh-picker.off-option.label', 'Off'),\n value: option,\n ariaLabel: t('refresh-picker.off-option.aria-label', 'Turn off auto refresh'),\n };\n case RefreshPicker.autoOption.value:\n return {\n label: t('refresh-picker.auto-option.label', RefreshPicker.autoOption.label),\n value: option,\n ariaLabel: t('refresh-picker.auto-option.aria-label', RefreshPicker.autoOption.ariaLabel),\n };\n }\n return {\n label: option,\n value: option,\n };\n}\n\nexport function intervalsToOptions({\n intervals = defaultIntervals,\n showAutoInterval = false,\n}: { intervals?: string[]; showAutoInterval?: boolean } = {}): Array<SelectableValue<string>> {\n const options: Array<SelectableValue<string>> = intervals.map((interval) => {\n const duration = parseDuration(interval);\n const ariaLabel = formatDuration(duration);\n\n return {\n label: interval,\n value: interval,\n ariaLabel: ariaLabel,\n };\n });\n\n if (showAutoInterval) {\n options.unshift(translateOption(RefreshPicker.autoOption.value));\n }\n options.unshift(translateOption(RefreshPicker.offOption.value));\n return options;\n}\n"],"names":["value"],"mappings":"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"}