import "pickerjs/dist/picker.min.css"; import Picker from "pickerjs"; import React, { forwardRef, useImperativeHandle, useState } from "react"; import styled from "styled-components"; export type DatePickerHandler = { init: () => void; getValue: () => Date; }; export const DatePicker = forwardRef((props: any, ref: any) => { const [pickerInstance, setPickerInstance] = useState<Picker | null>(null); // mount effect wont work on model, need to call this after onAfterOpen event useImperativeHandle(ref, () => ({ init: () => { const ele = document.querySelector( ".js-inline-picker" ) as HTMLElement | null; if (!ele) return; setPickerInstance( new Picker(ele, { inline: true, rows: 2, }) ); }, getValue: () => { if (!pickerInstance) return ""; return pickerInstance.getDate(); }, })); return ( <Wrapper> <div className="js-inline-picker" /> </Wrapper> ); }); const Wrapper = styled.div` & .picker { font-size: 12px; } & .picker-dialog { border: 0; } & .picker-cell:before { background-image: unset; } & .picker-cell:after { background-image: unset; } & .picker-picked { color: unset; border-top: #12b188 1px solid; border-bottom: #12b188 1px solid; } & .picker-cell { padding: 0 4px; } & .picker-item { padding: 3px 0px; } & .picker-cell + .picker-cell { border: 0; } `;