import styled from '@emotion/styled'; import { forwardRef, useState } from 'react'; import EditableCellWrapper from './EditableCellWrapper'; import DatePicker from '../form/DatePicker'; import { CalendarContainer } from 'react-datepicker'; import { modalBackground } from '../../layout/styles/themes'; export type EditableDateProps = { value: Date; changeHandler: (date: Date) => void; editModeHorizontalAlign?: 'left' | 'right'; }; const StyledContainer = styled.div` display: flex; align-items: center; `; export type StyledCalendarContainerProps = { editModeHorizontalAlign?: 'left' | 'right'; }; const StyledCalendarContainer = styled.div` position: absolute; border: 1px solid ${(props) => props.theme.primaryBorder}; border-radius: 8px; width: 280px; box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.09); z-index: 1; left: -10px; ${modalBackground}; `; function EditableDate({ value, changeHandler, editModeHorizontalAlign, }: EditableDateProps) { const [inputValue, setInputValue] = useState(value); const [isEditMode, setIsEditMode] = useState(false); type DivProps = React.HTMLProps; const DateDisplay = forwardRef( ({ value, onClick }, ref) => (
{value && new Intl.DateTimeFormat(undefined, { month: 'short', day: 'numeric', year: 'numeric', }).format(new Date(value as string))}
), ); interface DatePickerContainerProps { className?: string; children: React.ReactNode; } const DatePickerContainer = ({ className, children, }: DatePickerContainerProps) => { return (
{children}
); }; return ( setIsEditMode(false)} onInsideClick={() => setIsEditMode(true)} editModeHorizontalAlign={editModeHorizontalAlign} editModeContent={ { changeHandler(date); setInputValue(date); }} customInput={} customContainer={DatePickerContainer} /> } nonEditModeContent={
{inputValue && new Intl.DateTimeFormat(undefined, { month: 'short', day: 'numeric', year: 'numeric', }).format(inputValue)}
} >
); } export default EditableDate;