diff --git a/packages/grafana-ui/src/components/DateTimePickers/DateTimePicker/DateTimePicker.tsx b/packages/grafana-ui/src/components/DateTimePickers/DateTimePicker/DateTimePicker.tsx index b94b60fa7f4d1..ee1958e255b16 100644 --- a/packages/grafana-ui/src/components/DateTimePickers/DateTimePicker/DateTimePicker.tsx +++ b/packages/grafana-ui/src/components/DateTimePickers/DateTimePicker/DateTimePicker.tsx @@ -1,6 +1,7 @@ import { css, cx } from '@emotion/css'; +import { TimePickerProps } from 'rc-time-picker'; import React, { FC, FormEvent, ReactNode, useCallback, useEffect, useState } from 'react'; -import Calendar from 'react-calendar'; +import Calendar, { CalendarProps } from 'react-calendar'; import { useMedia } from 'react-use'; import { dateTimeFormat, DateTime, dateTime, GrafanaTheme2, isDateTime } from '@grafana/data'; @@ -21,11 +22,14 @@ export interface Props { label?: ReactNode; /** Set the latest selectable date */ maxDate?: Date; + // @PERCONA + calendarProps?: CalendarProps; + timepickerProps?: TimePickerProps; } const stopPropagation = (event: React.MouseEvent) => event.stopPropagation(); -export const DateTimePicker: FC = ({ date, maxDate, label, onChange }) => { +export const DateTimePicker: FC = ({ date, maxDate, label, onChange, calendarProps, timepickerProps }) => { const [isOpen, setOpen] = useState(false); const theme = useTheme2(); @@ -61,13 +65,22 @@ export const DateTimePicker: FC = ({ date, maxDate, label, onChange }) => isFullscreen={true} onClose={() => setOpen(false)} maxDate={maxDate} + calendarProps={calendarProps} + timepickerProps={timepickerProps} /> ) : ( setOpen(false)}>
- setOpen(false)} /> + setOpen(false)} + calendarProps={calendarProps} + timepickerProps={timepickerProps} + />
@@ -84,6 +97,9 @@ interface DateTimeCalendarProps { onClose: () => void; isFullscreen: boolean; maxDate?: Date; + // @PERCONA + calendarProps?: CalendarProps; + timepickerProps?: TimePickerProps; } interface InputProps { @@ -161,7 +177,15 @@ const DateTimeInput: FC = ({ date, label, onChange, isFullscreen, on ); }; -const DateTimeCalendar: FC = ({ date, onClose, onChange, isFullscreen, maxDate }) => { +const DateTimeCalendar: FC = ({ + date, + onClose, + onChange, + isFullscreen, + maxDate, + calendarProps, + timepickerProps, +}) => { const calendarStyles = useStyles2(getBodyStyles); const styles = useStyles2(getStyles); const [internalDate, setInternalDate] = useState(() => { @@ -190,6 +214,12 @@ const DateTimeCalendar: FC = ({ date, onClose, onChange, setInternalDate(date.toDate()); }, []); + useEffect(() => { + if (date?.isValid()) { + setInternalDate(date.toDate()); + } + }, [date]); + return (
= ({ date, onClose, onChange, className={calendarStyles.body} tileClassName={calendarStyles.title} maxDate={maxDate} + {...calendarProps} />
- +