@kubit-ui-web/react-components
Version:
Kubit React Components is a customizable, accessible library of React web components, designed to enhance your application's user experience
66 lines • 2.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifyDate = exports.splitDate = void 0;
const verifyFormat_1 = require("./verifyFormat");
const monthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const checkLeapYear = (year) => {
if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) {
monthDays[1] = 29;
}
};
const splitDate = (date, format, today, isRange, dateSeparator) => {
const formatRegex = /[^\p{L}]+/gu;
const dateRegex = /[^\d]+/g;
const formattedDate = (0, verifyFormat_1.formatValueDate)(date, today, format);
// we want always this YYYY-MM-DD format
const formatToOrderDate = 'YYYY-MM-DD';
const correctOrder = formatToOrderDate.split('-');
const formatSplit = format.split(formatRegex);
let dateToCheck = '';
// Transform date into YYYY-MM-DD format
const orderDate = date => {
return correctOrder.map((element) => {
if (element.includes('Y')) {
return date[formatSplit.findIndex((x) => x.includes('Y'))];
}
else if (element.includes('M')) {
return date[formatSplit.findIndex((x) => x.includes('M'))];
}
else if (element.includes('D')) {
return date[formatSplit.findIndex((x) => x.includes('D'))];
}
});
};
if (formattedDate.length === format.length) {
const dateSplit = formattedDate.split(dateRegex);
dateToCheck = orderDate(dateSplit).join('-');
}
else if (isRange && date.length > format.length) {
const dateRangeSplit = date.split(dateRegex);
const firstDate = orderDate(dateRangeSplit.slice(0, 3));
const secondDate = orderDate(dateRangeSplit.slice(3, 7));
dateToCheck = `${firstDate.join('-')} ${dateSeparator} ${secondDate.join('-')}`;
}
return {
dateToCheck,
};
};
exports.splitDate = splitDate;
const verifyDate = (format, date, minDate, maxDate, dateSeparator, isRange, today = '') => {
const { dateToCheck } = (0, exports.splitDate)(date, format, today, isRange, dateSeparator);
const { hasError } = (0, verifyFormat_1.verifyFormat)(format, dateToCheck, minDate, maxDate, today, dateSeparator, isRange);
if (hasError) {
return false;
}
const dateString = dateToCheck.replace(/\D/g, '');
const year = Number(dateString.substring(0, 4));
const month = Number(dateString.substring(4, 6));
const day = Number(dateString.substring(6, 8));
checkLeapYear(year);
if (month < 1 || month > 12 || day < 1 || day > monthDays[month - 1]) {
return false;
}
return true;
};
exports.verifyDate = verifyDate;
//# sourceMappingURL=verifyDate.js.map