UNPKG

txend-react-native-ui-datepicker

Version:

Customizable multi-date range datetime picker for React Native

210 lines (209 loc) 7.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _utils = require("./utils"); var _CalendarContext = _interopRequireDefault(require("./CalendarContext")); var _enums = require("./enums"); var _Calendar = _interopRequireDefault(require("./components/Calendar")); var _dayjs = _interopRequireDefault(require("dayjs")); var _localeData = _interopRequireDefault(require("dayjs/plugin/localeData")); var _relativeTime = _interopRequireDefault(require("dayjs/plugin/relativeTime")); var _localizedFormat = _interopRequireDefault(require("dayjs/plugin/localizedFormat")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } _dayjs.default.extend(_localeData.default); _dayjs.default.extend(_relativeTime.default); _dayjs.default.extend(_localizedFormat.default); const DateTimePicker = ({ value, mode = 'datetime', locale = 'en', minimumDate = null, maximumDate = null, firstDayOfWeek = 0, onValueChange = () => {}, displayFullDays = false, headerButtonsPosition = 'around', headerContainerStyle, footerTextContainerStyle, footerContainerStyle, footerTextStyle, headerTextContainerStyle, headerTextStyle, headerButtonStyle, headerButtonColor, headerButtonSize, dayContainerStyle, todayContainerStyle, todayTextStyle, monthContainerStyle, yearContainerStyle, weekDaysContainerStyle, weekDaysTextStyle, calendarTextStyle, selectedTextStyle, selectedItemColor, timePickerContainerStyle, timePickerTextStyle, buttonPrevIcon, buttonNextIcon }) => { _dayjs.default.locale(locale); const theme = { headerButtonsPosition, headerContainerStyle, headerTextContainerStyle, headerTextStyle, headerButtonStyle, headerButtonColor, headerButtonSize, footerTextContainerStyle, footerContainerStyle, footerTextStyle, dayContainerStyle, todayContainerStyle, todayTextStyle, monthContainerStyle, yearContainerStyle, weekDaysContainerStyle, weekDaysTextStyle, calendarTextStyle, selectedTextStyle, selectedItemColor, timePickerContainerStyle, timePickerTextStyle }; const [state, dispatch] = (0, _react.useReducer)((prevState, action) => { switch (action.type) { case _enums.CalendarActionKind.SET_CALENDAR_VIEW: return { ...prevState, calendarView: action.payload }; case _enums.CalendarActionKind.CHANGE_CURRENT_DATE: return { ...prevState, currentDate: action.payload }; case _enums.CalendarActionKind.CHANGE_CURRENT_YEAR: return { ...prevState, currentYear: action.payload }; case _enums.CalendarActionKind.CHANGE_SELECTED_DATE: return { ...prevState, selectedDate: action.payload }; case _enums.CalendarActionKind.CHANGE_SELECTED_DATE_TO: return { ...prevState, selectedDateTo: action.payload }; } }, { calendarView: mode === 'time' ? _enums.CalendarViews.time : _enums.CalendarViews.day, selectedDate: null, selectedDateTo: null, currentDate: value ? (0, _utils.getFormated)(value) : new Date(), currentYear: value ? (0, _utils.getDateYear)(value) : new Date().getFullYear() }); (0, _react.useEffect)(() => { dispatch({ type: _enums.CalendarActionKind.SET_CALENDAR_VIEW, payload: mode === 'time' ? _enums.CalendarViews.time : _enums.CalendarViews.day }); }, [mode]); const actions = { setCalendarView: view => dispatch({ type: _enums.CalendarActionKind.SET_CALENDAR_VIEW, payload: view }), onSelectDate: date => { dispatch({ type: _enums.CalendarActionKind.CHANGE_SELECTED_DATE, payload: date }); // eslint-disable-next-line no-lone-blocks { date != null && dispatch({ type: _enums.CalendarActionKind.CHANGE_CURRENT_DATE, payload: date }); } }, onSelectDateTo: (date, from) => { if (from != null) { onValueChange(from, date); } dispatch({ type: _enums.CalendarActionKind.CHANGE_SELECTED_DATE_TO, payload: date }); // eslint-disable-next-line no-lone-blocks { date != null && dispatch({ type: _enums.CalendarActionKind.CHANGE_CURRENT_DATE, payload: date }); } }, onSelectMonth: month => { const newDate = (0, _utils.getDate)(state.currentDate).month(month); dispatch({ type: _enums.CalendarActionKind.CHANGE_CURRENT_DATE, payload: (0, _utils.getFormated)(newDate) }); dispatch({ type: _enums.CalendarActionKind.SET_CALENDAR_VIEW, payload: _enums.CalendarViews.day }); }, onSelectYear: year => { const newDate = (0, _utils.getDate)(state.currentDate).year(year); dispatch({ type: _enums.CalendarActionKind.CHANGE_CURRENT_DATE, payload: (0, _utils.getFormated)(newDate) }); dispatch({ type: _enums.CalendarActionKind.SET_CALENDAR_VIEW, payload: _enums.CalendarViews.day }); }, onChangeMonth: month => { const newDate = (0, _utils.getDate)(state.currentDate).add(month, 'month'); dispatch({ type: _enums.CalendarActionKind.CHANGE_CURRENT_DATE, payload: (0, _utils.getFormated)(newDate) }); }, onChangeYear: year => { dispatch({ type: _enums.CalendarActionKind.CHANGE_CURRENT_YEAR, payload: year }); } }; return /*#__PURE__*/_react.default.createElement(_CalendarContext.default.Provider, { value: { ...state, ...actions, locale, mode, displayFullDays, minimumDate, maximumDate, firstDayOfWeek: firstDayOfWeek >= 0 && firstDayOfWeek <= 6 ? firstDayOfWeek : 0, theme } }, /*#__PURE__*/_react.default.createElement(_Calendar.default, { buttonPrevIcon: buttonPrevIcon, buttonNextIcon: buttonNextIcon })); }; var _default = exports.default = DateTimePicker; //# sourceMappingURL=DateTimePicker.js.map