UNPKG

react-base-guide

Version:

react ui components

54 lines 3.79 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const dateformat_1 = __importDefault(require("dateformat")); const input_1 = __importDefault(require("../input")); const dropdown_menu_1 = __importDefault(require("../dropdown-menu")); const DatepickerRoot_1 = __importDefault(require("./DatepickerRoot")); const day_of_weeks_1 = __importDefault(require("./day-of-weeks")); const selectors_1 = __importDefault(require("./selectors")); const days_1 = __importDefault(require("./days")); const config_1 = __importDefault(require("./config")); const setDay = ({ day, month, year, setOpen, onChange }) => { let value = new Date(year, month - 1, day); onChange(value); setOpen(false); }; const displayDate = (value, month, year) => { let result = new Date(value); result.setFullYear(year, month); return result; }; const onBlur = (e, setOpen, containerRef) => { if (!e.relatedTarget || !containerRef.current.contains(e.relatedTarget)) { setOpen(false); } }; const Datepicker = (props, ref) => { const value = props.value || new Date(); const [open, setOpen] = (0, react_1.useState)(false); const [year, setYear] = (0, react_1.useState)(+(0, dateformat_1.default)(value, "yyyy")); const [month, setMonth] = (0, react_1.useState)(+(0, dateformat_1.default)(value, "m")); const date = displayDate(value, month - 1, year); const format = props.config || config_1.default; const containerRef = (0, react_1.useRef)(null); return ((0, jsx_runtime_1.jsxs)(DatepickerRoot_1.default, Object.assign({ ref: containerRef, tabIndex: props.tabIndex || 0, "$styled": props.styled, onBlur: e => onBlur(e, setOpen, containerRef) }, { children: [(0, jsx_runtime_1.jsx)(input_1.default, { ref: ref, className: props.className, label: props.label, placeholder: props.placeholder, value: props.value ? (0, dateformat_1.default)(props.value, format.input) : "", id: props.id, name: props.name, disabled: props.disabled, readOnly: true, autoComplete: props.autoComplete, autoFocus: props.autoFocus, onClick: () => setOpen(true), onMouseUp: props.onMouseUp, onMouseDown: props.onMouseDown, onKeyUp: props.onKeyUp, onKeyDown: props.onKeyDown, onKeyPress: props.onKeyPress, clear: props.clear, onClear: (e) => { props.onClear && props.onClear(e); props.onChange(null); }, error: props.error, warning: props.warning, success: props.success, message: props.message, styled: { display: "block", width: "100%" } }), open && (0, jsx_runtime_1.jsxs)(dropdown_menu_1.default, Object.assign({ open: open, menuWidth: props.menuWidth || "270px", menuHeight: props.menuHeight, right: props.right, up: props.up }, { children: [(0, jsx_runtime_1.jsx)(selectors_1.default, { month: month, months: format.months, setMonth: m => setMonth(m), year: year, setYear: y => setYear(y), min: props.min || 1970, max: props.max || new Date().getFullYear() }), (0, jsx_runtime_1.jsx)(day_of_weeks_1.default, { days: format.daysOfWeek }), (0, jsx_runtime_1.jsx)(days_1.default, { value: props.value, date: date, setDay: (day) => setDay({ day, month, year, setOpen, onChange: props.onChange, }) })] }))] }))); }; exports.default = (0, react_1.forwardRef)(Datepicker); //# sourceMappingURL=index.js.map