@grafana/ui
Version:
Grafana Components Library
1 lines • 11.8 kB
Source Map (JSON)
{"version":3,"file":"TimeOfDayPicker.mjs","sources":["../../../../src/components/DateTimePickers/TimeOfDayPicker.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { Moment } from 'moment';\nimport RcPicker, { PickerProps } from 'rc-picker';\nimport generateConfig from 'rc-picker/lib/generate/moment';\nimport locale from 'rc-picker/lib/locale/en_US';\n\nimport { dateTime, DateTime, dateTimeAsMoment, GrafanaTheme2, isDateTimeInput } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\nimport { inputSizes } from '../Forms/commonStyles';\nimport { FormInputSize } from '../Forms/types';\nimport { Icon } from '../Icon/Icon';\nimport 'rc-picker/assets/index.css';\n\ninterface BaseProps {\n onChange: (value: DateTime) => void | ((value?: DateTime) => void);\n value?: DateTime;\n showHour?: boolean;\n showSeconds?: boolean;\n minuteStep?: PickerProps['minuteStep'];\n size?: FormInputSize;\n disabled?: boolean;\n disabledHours?: () => number[];\n disabledMinutes?: () => number[];\n disabledSeconds?: () => number[];\n placeholder?: string;\n allowEmpty?: boolean;\n}\n\ninterface AllowEmptyProps extends BaseProps {\n allowEmpty: true;\n onChange: (value?: DateTime) => void;\n}\n\ninterface NoAllowEmptyProps extends BaseProps {\n allowEmpty?: false;\n onChange: (value: DateTime) => void;\n}\n\nexport type Props = AllowEmptyProps | NoAllowEmptyProps;\n\nexport const POPUP_CLASS_NAME = 'time-of-day-picker-panel';\n\nexport const TimeOfDayPicker = ({\n minuteStep = 1,\n showHour = true,\n showSeconds = false,\n value,\n size = 'auto',\n disabled,\n disabledHours,\n disabledMinutes,\n disabledSeconds,\n placeholder,\n // note: we can't destructure allowEmpty/onChange here\n // in order to discriminate the types properly later in the onChange handler\n ...restProps\n}: Props) => {\n const styles = useStyles2(getStyles);\n const allowClear = restProps.allowEmpty ?? false;\n\n return (\n <RcPicker<Moment>\n generateConfig={generateConfig}\n locale={locale}\n allowClear={\n allowClear && {\n clearIcon: <Icon name=\"times\" className={styles.clearIcon} />,\n }\n }\n className={cx(inputSizes()[size], styles.input)}\n classNames={{\n popup: cx(styles.picker, POPUP_CLASS_NAME),\n }}\n defaultValue={restProps.allowEmpty ? undefined : dateTimeAsMoment()}\n disabled={disabled}\n disabledTime={() => ({\n disabledHours,\n disabledMinutes,\n disabledSeconds,\n })}\n format={generateFormat(showHour, showSeconds)}\n minuteStep={minuteStep}\n onChange={(value) => {\n if (isDateTimeInput(value)) {\n if (restProps.allowEmpty) {\n return restProps.onChange(value ? dateTime(value) : undefined);\n } else {\n return restProps.onChange(dateTime(value));\n }\n }\n }}\n picker=\"time\"\n placeholder={placeholder}\n showNow={false}\n needConfirm={false}\n suffixIcon={<Caret wrapperStyle={styles.caretWrapper} />}\n value={value ? dateTimeAsMoment(value) : value}\n />\n );\n};\n\nfunction generateFormat(showHour = true, showSeconds = false) {\n const maybeHour = showHour ? 'HH:' : '';\n const maybeSecond = showSeconds ? ':ss' : '';\n return maybeHour + 'mm' + maybeSecond;\n}\n\ninterface CaretProps {\n wrapperStyle?: string;\n}\n\nconst Caret = ({ wrapperStyle = '' }: CaretProps) => {\n return (\n <div className={wrapperStyle}>\n <Icon name=\"angle-down\" />\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const bgColor = theme.components.input.background;\n const optionBgHover = theme.colors.action.hover;\n const borderRadius = theme.shape.radius.default;\n const borderColor = theme.components.input.borderColor;\n\n return {\n caretWrapper: css({\n position: 'relative',\n top: '50%',\n transform: 'translateY(-50%)',\n display: 'inline-block',\n color: theme.colors.text.secondary,\n }),\n clearIcon: css({\n color: theme.colors.text.secondary,\n\n '&:hover': {\n color: theme.colors.text.maxContrast,\n },\n }),\n picker: css({\n '&.rc-picker-dropdown': {\n boxShadow: 'none',\n zIndex: theme.zIndex.portal,\n },\n '.rc-picker-time-panel-column': {\n fontSize: theme.typography.htmlFontSize,\n backgroundColor: bgColor,\n color: theme.colors.text.secondary,\n padding: 'unset',\n overflowY: 'auto',\n scrollbarWidth: 'thin',\n width: theme.spacing(8),\n li: {\n paddingRight: theme.spacing(2),\n width: 'auto',\n '&.rc-picker-time-panel-cell-selected': {\n backgroundColor: 'inherit',\n border: `1px solid ${theme.colors.action.selectedBorder}`,\n borderRadius,\n color: theme.colors.text.primary,\n },\n\n '&:hover': {\n background: optionBgHover,\n color: theme.colors.text.primary,\n },\n\n '&.rc-picker-time-panel-cell-disabled': {\n color: theme.colors.action.disabledText,\n },\n },\n\n '.rc-picker-time-panel-cell-inner': {\n color: 'inherit',\n },\n\n '&:not(:last-of-type)': {\n borderRight: `1px solid ${borderColor}`,\n },\n },\n\n '.rc-picker-panel': {\n boxShadow: theme.shadows.z3,\n backgroundColor: bgColor,\n borderColor,\n borderRadius,\n overflow: 'hidden',\n },\n }),\n input: css({\n '&.rc-picker-focused': {\n border: 'none',\n\n '.rc-picker-input': getFocusStyles(theme),\n },\n\n '&.rc-picker-disabled': {\n '.rc-picker-input': {\n backgroundColor: theme.colors.action.disabledBackground,\n color: theme.colors.action.disabledText,\n border: `1px solid ${theme.colors.action.disabledBackground}`,\n '&:focus': {\n boxShadow: 'none',\n },\n },\n },\n\n '.rc-picker-input': {\n backgroundColor: bgColor,\n borderRadius,\n borderColor,\n borderStyle: 'solid',\n borderWidth: '1px',\n color: theme.colors.text.primary,\n height: theme.spacing(4),\n padding: theme.spacing(0, 1),\n\n input: {\n color: 'unset',\n backgroundColor: 'unset',\n '&:focus': {\n outline: 'none',\n },\n\n '&::placeholder': {\n color: theme.colors.text.disabled,\n },\n },\n },\n\n '.rc-picker-clear': {\n alignItems: 'center',\n display: 'flex',\n insetInlineEnd: 'unset',\n position: 'relative',\n },\n }),\n };\n};\n"],"names":["value"],"mappings":"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"}