txend-react-native-ui-datepicker
Version:
Customizable multi-date range datetime picker for React Native
208 lines (203 loc) • 7.56 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.YEAR_PAGE_SIZE = exports.DATE_FORMAT = exports.CALENDAR_FORMAT = void 0;
exports.areDatesOnSameDay = areDatesOnSameDay;
exports.formatTime = formatTime;
exports.formatTimeWithAmPm = formatTimeWithAmPm;
exports.getDateMonth = exports.getDate = void 0;
exports.getDateWithOffset = getDateWithOffset;
exports.swapTime = exports.getYearRange = exports.getWeekdaysShort = exports.getWeekdaysMin = exports.getWeekdays = exports.getToday = exports.getParsedDate = exports.getMonths = exports.getMonthName = exports.getMonthDays = exports.getFormatedDate = exports.getFormated = exports.getDateYear = void 0;
exports.timeInNumber = timeInNumber;
var _dayjs = _interopRequireDefault(require("dayjs"));
var _moment = _interopRequireDefault(require("moment"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const CALENDAR_FORMAT = exports.CALENDAR_FORMAT = 'YYYY-MM-DD HH:mm';
const DATE_FORMAT = exports.DATE_FORMAT = 'YYYY-MM-DD';
const YEAR_PAGE_SIZE = exports.YEAR_PAGE_SIZE = 12;
const getMonths = () => _dayjs.default.months();
exports.getMonths = getMonths;
const getMonthName = month => _dayjs.default.months()[month];
exports.getMonthName = getMonthName;
const getWeekdays = () => _dayjs.default.weekdays();
exports.getWeekdays = getWeekdays;
const getWeekdaysShort = () => _dayjs.default.weekdaysShort();
exports.getWeekdaysShort = getWeekdaysShort;
const getWeekdaysMin = firstDayOfWeek => {
let days = _dayjs.default.weekdaysShort();
if (firstDayOfWeek > 0) {
days = [...days.slice(firstDayOfWeek, days.length), ...days.slice(0, firstDayOfWeek)];
}
return days;
};
exports.getWeekdaysMin = getWeekdaysMin;
function formatTimeWithAmPm(time) {
const formattedTime = (0, _dayjs.default)(time != null ? time : getFormated(new Date())).format('hh:mm');
const formattedHour = (0, _dayjs.default)(time ? time : getFormated(new Date())).format('HH');
const hour = parseInt(formattedHour, 10);
const period = hour >= 12 ? 'PM' : 'AM';
return {
formattedTime: formattedTime,
period: period
};
// if (hour >= 12) {
// return `${formattedTime} PM`;
// } else {
// return `${formattedTime} AM`;
// }
}
function formatTime(timestamp) {
const formattedTime = (0, _dayjs.default)(timestamp).format('hh:mm');
// const formattedHour = dayjs(timestamp).format('H');
// const hour = parseInt(formattedHour, 10);
// const period = hour >= 12 ? 'PM' : 'AM';
return formattedTime;
}
function timeInNumber(timeString) {
const parsedTime = (0, _dayjs.default)(timeString, {
format: 'hh:mm'
});
const hour = parsedTime.hour();
const minutes = parsedTime.minute();
return {
hour,
minutes
};
}
function getDateWithOffset(offset) {
const currentDate = new Date();
currentDate.setDate(currentDate.getDate() + offset);
return currentDate;
}
const swapTime = (newDateString, currentDateToday) => {
const newDate = (0, _moment.default)(newDateString);
const currentTime = (0, _moment.default)(currentDateToday, 'YYYY-MM-DD h:mm');
// Set the time from currentTime to newDate
newDate.set({
hour: currentTime.get('hour'),
minute: currentTime.get('minute'),
second: currentTime.get('second')
});
return newDate.format('YYYY-MM-DD h:mm');
};
exports.swapTime = swapTime;
const getFormated = date => (0, _dayjs.default)(date).format(CALENDAR_FORMAT);
exports.getFormated = getFormated;
const getDateMonth = date => (0, _dayjs.default)(date).month();
exports.getDateMonth = getDateMonth;
const getDateYear = date => (0, _dayjs.default)(date).year();
exports.getDateYear = getDateYear;
const getToday = () => (0, _dayjs.default)().format(DATE_FORMAT);
exports.getToday = getToday;
function areDatesOnSameDay(a, b) {
if (!a || !b) {
return false;
}
const date_a = (0, _dayjs.default)(a).format(DATE_FORMAT);
const date_b = (0, _dayjs.default)(b).format(DATE_FORMAT);
return date_a === date_b;
}
const getFormatedDate = (date, format) => (0, _dayjs.default)(date).format(format);
exports.getFormatedDate = getFormatedDate;
const getDate = date => (0, _dayjs.default)(date, CALENDAR_FORMAT);
exports.getDate = getDate;
const getYearRange = year => {
const endYear = YEAR_PAGE_SIZE * Math.ceil(year / YEAR_PAGE_SIZE);
let startYear = endYear === year ? endYear : endYear - YEAR_PAGE_SIZE;
if (startYear < 0) startYear = 0;
return Array.from({
length: YEAR_PAGE_SIZE
}, (_, i) => startYear + i);
};
/**
* Get detailed date object
*
* @param date Get detailed date object
*
* @returns parsed date object
*/
exports.getYearRange = getYearRange;
const getParsedDate = date => {
const parsedDate = (0, _dayjs.default)(date, {
format: 'YYYY-MM-DD HH:mm'
});
return {
year: (0, _dayjs.default)(date).year(),
month: (0, _dayjs.default)(date).month(),
hour: Number(parsedDate.format('hh')),
minute: (0, _dayjs.default)(date).minute()
};
};
/**
* Calculate month days array based on current date
*
* @param datetime - The current date that selected
* @param displayFullDays
* @param minimumDate - min selectable date
* @param maximumDate - max selectable date
* @param firstDayOfWeek - first day of week, number 0-6, 0 – Sunday, 6 – Saturday
*
* @returns days array based on current date
*/
exports.getParsedDate = getParsedDate;
const getMonthDays = (datetime = (0, _dayjs.default)(), displayFullDays, minimumDate, maximumDate, firstDayOfWeek) => {
const date = getDate(datetime);
const daysInMonth = date.daysInMonth();
const prevMonthDays = date.add(-1, 'month').daysInMonth();
const firstDay = date.date(1 - firstDayOfWeek);
const dayOfMonth = firstDay.day() % 7;
const prevDays = displayFullDays ? Array.from({
length: dayOfMonth
}, (_, i) => {
const day = i + (prevMonthDays - dayOfMonth + 1);
const thisDay = date.add(-1, 'month').date(day);
return generateDayObject(day, thisDay, minimumDate, maximumDate, false);
}) : Array(dayOfMonth).fill(null);
const monthDaysOffset = dayOfMonth + daysInMonth;
const nextMonthDays = displayFullDays ? monthDaysOffset > 35 ? 42 - monthDaysOffset : 35 - monthDaysOffset : 0;
const currentDays = Array.from({
length: daysInMonth
}, (_, i) => {
const day = i + 1;
const thisDay = date.date(day);
return generateDayObject(day, thisDay, minimumDate, maximumDate, true);
});
const nextDays = Array.from({
length: nextMonthDays
}, (_, i) => {
const day = i + 1;
const thisDay = date.add(1, 'month').date(day);
return generateDayObject(day, thisDay, minimumDate, maximumDate, false);
});
return [...prevDays, ...currentDays, ...nextDays];
};
/**
* Generate day object for displaying inside day cell
*
* @param day - number of day
* @param date - calculated date based on day, month, and year
* @param minDate - min selectable date
* @param maxDate - max selectable date
* @param isCurrentMonth - define the day is in the current month
*
* @returns days object based on current date
*/
exports.getMonthDays = getMonthDays;
const generateDayObject = (day, date, minDate, maxDate, isCurrentMonth) => {
let disabled = false;
if (minDate) {
disabled = date < getDate(minDate);
}
if (maxDate && !disabled) {
disabled = date > getDate(maxDate);
}
return {
text: day.toString(),
day: day,
date: getFormatedDate(date, DATE_FORMAT),
disabled,
isCurrentMonth
};
};
//# sourceMappingURL=utils.js.map
;