import isPropValid from '@emotion/is-prop-valid'; import {useTheme} from '@emotion/react'; import styled from '@emotion/styled'; import {FocusScope} from '@react-aria/focus'; import moment from 'moment'; import {DatePicker} from 'sentry/components/calendar'; import FormField from 'sentry/components/forms/formField'; import Input from 'sentry/components/input'; import {Overlay, PositionWrapper} from 'sentry/components/overlay'; import {IconCalendar} from 'sentry/icons'; import useOverlay from 'sentry/utils/useOverlay'; // XXX(epurkhiser): This is wrong, it should not be inheriting these props import {InputFieldProps, OnEvent} from './inputField'; interface DatePickerFieldProps extends Omit {} function handleChangeDate( onChange: OnEvent, onBlur: OnEvent, date: Date, close: Function ) { onChange(date); onBlur(date); // close dropdown menu close(); } export default function DatePickerField(props: DatePickerFieldProps) { const { isOpen, state: overlayState, triggerProps, overlayProps, } = useOverlay({position: 'bottom-start'}); const theme = useTheme(); return ( {({children: _children, onChange, onBlur, value, id, size, ...inputProps}) => { const dateObj = new Date(value); const inputValue = !isNaN(dateObj.getTime()) ? dateObj : new Date(); const dateString = moment(inputValue).format('LL'); return (
{isOpen && ( handleChangeDate(onChange, onBlur, date, overlayState.close) } /> )}
); }}
); } const InputWrapper = styled('div')` position: relative; `; const StyledInput = styled(Input)` text-align: left; padding-right: ${p => `calc( ${p.theme.formPadding[p.size ?? 'md'].paddingRight}px * 1.5 + ${p.theme.iconSizes.sm} )`}; &:focus:not(.focus-visible) { border-color: ${p => p.theme.border}; box-shadow: inset ${p => p.theme.dropShadowLight}; } `; const StyledOverlay = styled(Overlay)` .rdrMonthAndYearWrapper { height: 50px; padding-top: 0; } `; const StyledIconCalendar = styled(IconCalendar, { shouldForwardProp: prop => typeof prop === 'string' && isPropValid(prop), })<{inputSize?: InputFieldProps['size']}>` position: absolute; top: 50%; right: ${p => p.theme.formPadding[p.inputSize ?? 'md'].paddingRight}px; transform: translateY(-50%); `;