UNPKG

@zohodesk/components

Version:

Dot UI is a customizable React component library built to deliver a clean, accessible, and developer-friendly UI experience. It offers a growing set of reusable components designed to align with modern design systems and streamline application development

627 lines (534 loc) • 19.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDateDetails = getDateDetails; exports.getDateFormatDetails = getDateFormatDetails; exports.getDateFormatSelection = getDateFormatSelection; exports.getDateText = getDateText; exports.getDateTimeString = getDateTimeString; exports.getIsValidDate = getIsValidDate; exports.getSelectedDate = getSelectedDate; var _datetimejs = _interopRequireDefault(require("@zohodesk/datetimejs")); var _index = require("./index"); var _Common = require("../../utils/Common"); var _common = require("../../utils/datetime/common"); var _constants = require("../constants"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } /* eslint-disable no-param-reassign */ /** * Libraries ** */ /** * Methods ** */ /** * Constants ** */ function getDateFormatString() { var dateFormatArr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var datePatternArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; return dateFormatArr.reduce(function (res, dateStr, index) { var patternStr = datePatternArr[index] || ''; res += dateStr + patternStr; return res; }, ''); } function getIsValidPattern() { var dateFormatArr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var datePatternArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var isValueInArray = function isValueInArray() { var possibleFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; return possibleFormat.some(function (str) { return dateFormatArr.indexOf(str) >= 0; }); }; var haveDay = isValueInArray(_constants.flags.day); var haveMonth = isValueInArray(_constants.flags.month); var haveYear = isValueInArray(_constants.flags.year); var isValidPattern = datePatternArr.length && datePatternArr.length <= 2 && datePatternArr.every(function (patternStr) { return _constants.supportedPatterns.indexOf(patternStr) >= 0; }); return haveDay && haveMonth && (haveYear || !haveYear) && isValidPattern; } function getDateFormatDetails() { var dateFormat = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var _ref = arguments.length > 1 ? arguments[1] : undefined, isHideCurrentYear = _ref.isHideCurrentYear, value = _ref.value, timeZone = _ref.timeZone, isDateTime = _ref.isDateTime; var dayInfo = {}; var monthInfo = {}; var yearInfo = {}; var dateFormatArr = []; var patternArr = []; var _getIsCurrentYear = (0, _index.getIsCurrentYear)({ value: value, timeZone: timeZone, isDateTime: isDateTime }), isCurrentYear = _getIsCurrentYear.isCurrentYear; var isHideYear = isHideCurrentYear ? isCurrentYear : false; function getDateFormat(dateFormat) { var token = /D{1,4}|M{1,4}|YY(?:YY)?|([HhmsA])\1?|[LloSZWN]|\[[^\]]*\]|'[^']*'/gi; dateFormatArr = []; patternArr = []; var newDateFormat = dateFormat.replace(token, function (match) { var dateFormatArrLen = dateFormatArr.length; if (match in _constants.flags) { dateFormatArr.push(match); var type = _constants.flags[match].type; if (type === 'day') { dayInfo = Object.assign({}, _constants.flags[match], { index: dateFormatArrLen }); } else if (type === 'month') { monthInfo = Object.assign({}, _constants.flags[match], { index: dateFormatArrLen }); } else if (type === 'year') { yearInfo = Object.assign({}, _constants.flags[match], { index: dateFormatArrLen }); } return _constants.patternSplitStr; } return match.slice(1, match.length - 1); }); patternArr = newDateFormat.split(_constants.patternSplitStr).reduce(function (res, patternStr) { if (patternStr) { res.push(patternStr); } return res; }, []); } getDateFormat(dateFormat); var isValidPattern = getIsValidPattern(dateFormatArr, patternArr); if (!isValidPattern) { getDateFormat(_constants.defaultFormat); } if (isHideYear) { var _removeYearPattern = (0, _index.removeYearPattern)(dateFormatArr, patternArr); dateFormatArr = _removeYearPattern.dateFormatArr; patternArr = _removeYearPattern.patternArr; } return { dateFormat: getDateFormatString(dateFormatArr, patternArr), dateFormatArr: dateFormatArr, patternArr: patternArr, dayInfo: dayInfo, monthInfo: monthInfo, yearInfo: yearInfo, isValidPattern: isValidPattern }; } function getDisplayFormatValue(dateVal, formatVal) { var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, _ref2$i18nShortMonths = _ref2.i18nShortMonths, i18nShortMonths = _ref2$i18nShortMonths === void 0 ? [] : _ref2$i18nShortMonths, _ref2$i18nMonths = _ref2.i18nMonths, i18nMonths = _ref2$i18nMonths === void 0 ? [] : _ref2$i18nMonths; var _ref3 = _constants.flags[formatVal] || {}, length = _ref3.length, type = _ref3.type; if (length === _constants.INCONSTANT) { if (dateVal && formatVal === 'MMM' && i18nShortMonths.length) { return i18nShortMonths[dateVal - 1]; } else if (dateVal && formatVal === 'MMMM' && i18nMonths.length) { return i18nMonths[dateVal - 1]; } return (0, _index.addZero)(dateVal, formatVal.length ? formatVal.length : 1); } else if (type === 'year' && length === 2) { return (0, _index.addZero)((0, _index.convertYearToTwoDigit)(dateVal), length); } return (0, _index.addZero)(dateVal, length); } function concatDate(values, dateFormatArr, patternArr, fillPlaceHolder) { var _ref4 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}, i18nShortMonths = _ref4.i18nShortMonths, i18nMonths = _ref4.i18nMonths; var dateString = dateFormatArr.reduce(function (res, formatVal, index) { var _ref5 = _constants.flags[formatVal] || {}, _ref5$type = _ref5.type, dateFormatVal = _ref5$type === void 0 ? '' : _ref5$type; var dateVal = values[dateFormatVal]; dateVal = !(0, _Common.getIsEmptyValue)(dateVal) ? getDisplayFormatValue(dateVal, formatVal, { i18nShortMonths: i18nShortMonths, i18nMonths: i18nMonths }) : fillPlaceHolder ? formatVal : ''; var patternVal = patternArr[index] || ''; res += dateVal + patternVal; return res; }, ''); return dateString; } function getDateTimeString() { var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var dateFormatDetails = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var isDateTime = arguments.length > 2 ? arguments[2] : undefined; var _ref6 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}, i18nShortMonths = _ref6.i18nShortMonths, i18nMonths = _ref6.i18nMonths, is24Hour = _ref6.is24Hour; var day = values.day, month = values.month, year = values.year, noon = values.noon; var hour = values.hour, minute = values.minute; var _dateFormatDetails$da = dateFormatDetails.dateFormatArr, dateFormatArr = _dateFormatDetails$da === void 0 ? [] : _dateFormatDetails$da, _dateFormatDetails$pa = dateFormatDetails.patternArr, patternArr = _dateFormatDetails$pa === void 0 ? [] : _dateFormatDetails$pa; var dateString = concatDate({ day: day, month: month, year: year }, dateFormatArr, patternArr, true, { i18nShortMonths: i18nShortMonths, i18nMonths: i18nMonths }); var timeString = ''; if (isDateTime) { hour = !(0, _Common.getIsEmptyValue)(hour) ? (0, _index.addZero)(hour, 2) : is24Hour ? 'HH' : 'hh'; minute = !(0, _Common.getIsEmptyValue)(minute) ? (0, _index.addZero)(minute, 2) : 'mm'; timeString = " ".concat(hour, ":").concat(minute, " ").concat(is24Hour ? '' : "".concat(noon || '--')); } return "".concat(dateString).concat(timeString); } function getDateText(value, isDateTime, timeZone) { if (value && !timeZone) { value = value.replace('Z', ''); } return value ? isDateTime ? timeZone ? _datetimejs["default"].toDate(_datetimejs["default"].tz.utcToTz(value, timeZone)) : new Date(value) : timeZone ? _datetimejs["default"].toDate(value) : new Date(value) : new Date(); } function getDateDetails(value, localValues, isDateTime, timeZone, _ref7) { var is24Hour = _ref7.is24Hour; var day = localValues.day, month = localValues.month, year = localValues.year, hour = localValues.hour, minute = localValues.minute, noon = localValues.noon; if (value) { var dateObj = getDateText(value, isDateTime, timeZone); var selectedDay = dateObj.getDate(); var selectedMonth = dateObj.getMonth(); var selectedYear = dateObj.getFullYear(); var newDay = day ? day : selectedDay; var newMonth = month ? month : selectedMonth + 1; var newYear = year ? year : selectedYear; if (isDateTime) { var selectedHour = dateObj.getHours(); var selectedMinute = dateObj.getMinutes(); var selectedNoon = selectedHour < 12 ? 'AM' : 'PM'; if (!is24Hour) { selectedHour = selectedHour === 0 ? 12 : selectedHour > 12 ? selectedHour - 12 : selectedHour; } var newHour = hour ? hour : selectedHour; var newMinute = minute ? minute : selectedMinute; var newNoon = noon ? noon : selectedNoon; return { day: newDay, month: newMonth, year: newYear, hour: newHour, minute: newMinute, noon: newNoon }; } return { day: newDay, month: newMonth, year: newYear }; } return localValues; } function getIsValidDate(values, isDateTime, _ref8) { var is24Hour = _ref8.is24Hour; var day = values.day, month = values.month, year = values.year, hour = values.hour, minute = values.minute, noon = values.noon; var isError = false; var message = ''; var valuesArr = isDateTime ? is24Hour ? [day, month, year, hour, minute] : [day, month, year, hour, minute, noon] : [day, month, year]; var haveNotAllValues = valuesArr.every(function (val, index) { if (index === 2) { //Year '00' to 0 var value = parseInt(val); return (0, _Common.getIsEmptyValue)(value); } return (0, _Common.getIsEmptyValue)(val); }); var haveAllValues = valuesArr.every(function (val, index) { if (index === 4) { //minute 0 support return !(0, _Common.getIsEmptyValue)(val); } else if (is24Hour && index === 3) { //hour 0 support return !(0, _Common.getIsEmptyValue)(val); } else if (index === 2) { //Year '00' to 0 return parseInt(val) ? true : false; } else if (val) { return true; } return false; }); if (haveAllValues) { var dayEnd = (0, _index.getDayEnd)(month, year); var _getMonthDetails = (0, _index.getMonthDetails)(), monthStart = _getMonthDetails.startPoint, monthEnd = _getMonthDetails.endPoint; var _getYearDetails = (0, _index.getYearDetails)(), yearStart = _getYearDetails.startPoint, yearEnd = _getYearDetails.endPoint; var _getDayDetails = (0, _index.getDayDetails)(), dayStart = _getDayDetails.startPoint; var _getHourDetails = (0, _index.getHourDetails)(is24Hour), hourStart = _getHourDetails.startPoint, hourEnd = _getHourDetails.endPoint; var _getMinuteDetails = (0, _index.getMinuteDetails)(), minuteStart = _getMinuteDetails.startPoint, minuteEnd = _getMinuteDetails.endPoint; var _getNoonDetails = (0, _index.getNoonDetails)(), noonAllowedValues = _getNoonDetails.allowedValues; if (dayEnd < day || dayStart > day) { isError = true; message = 'Wrong Day'; } else if (monthEnd < month || monthStart > month) { isError = true; message = 'Wrong Month'; } else if (yearEnd < year || yearStart > year) { isError = true; message = 'Wrong Year'; } else if (isDateTime && (hourEnd < hour || hourStart > hour)) { isError = true; message = 'Wrong Hour'; } else if (isDateTime && (minuteEnd < minute || minuteStart > minute)) { isError = true; message = 'Wrong Minute'; } else if (isDateTime && !is24Hour && noonAllowedValues.indexOf(noon) === -1) { isError = true; message = 'Wrong Noon'; } } else { isError = true; message = 'Empty value'; } return { isError: isError, message: message, isEmptyValError: haveNotAllValues }; } function getSelectedDate(values, props) { var month = values.month, hour = values.hour; var year = values.year, date = values.day, mins = values.minute, noon = values.noon; var min = props.min, max = props.max, timeZone = props.timeZone, isDateTime = props.isDateTime, is24Hour = props.is24Hour; if (!is24Hour) { if (parseInt(hour) === 12) { hour = noon === 'AM' ? 0 : 12; } if (noon === 'PM') { if (hour < 12) { hour = parseInt(hour) + 12; } } } month = parseInt(month) - 1; var minInMillis = min ? _datetimejs["default"].millis(min) : null, maxInMillis = max ? _datetimejs["default"].millis(max) : null; var selectedInMillis, selectedValue = ''; if (isDateTime) { if (timeZone) { selectedInMillis = _datetimejs["default"].tz.tzToUtc(Date.UTC(year, month, date, hour, mins), timeZone); } else { selectedInMillis = Date.UTC(year, month, date, hour, mins); } selectedValue = _datetimejs["default"].ISO(selectedInMillis); } else { selectedInMillis = Date.UTC(year, month, date); selectedValue = (0, _common.formatDate)(new Date(year, month, date), 'YYYY-MM-DD'); } var isError = false; var errorType = ''; if (minInMillis && minInMillis > selectedInMillis) { isError = true; errorType = 'MIN'; } else if (maxInMillis && maxInMillis < selectedInMillis) { isError = true; errorType = 'MAX'; } return { isError: isError, errorType: errorType, selectedValue: selectedValue }; } function getDateFormatLength(type, length) { var formatVal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; var _ref9 = arguments.length > 3 ? arguments[3] : undefined, i18nShortMonths = _ref9.i18nShortMonths, i18nMonths = _ref9.i18nMonths, selectedValue = _ref9.selectedValue, day = _ref9.day, month = _ref9.month, year = _ref9.year, hour = _ref9.hour, minute = _ref9.minute, noon = _ref9.noon, timeZone = _ref9.timeZone, isDateTime = _ref9.isDateTime, is24Hour = _ref9.is24Hour; var _getDateDetails = getDateDetails(selectedValue, { day: day, month: month, year: year, hour: hour, minute: minute, noon: noon }, isDateTime, timeZone, { is24Hour: is24Hour }), selectedMonth = _getDateDetails.month; if (length === _constants.INCONSTANT) { if (selectedMonth && formatVal === 'MMM' && i18nShortMonths.length) { return i18nShortMonths[selectedMonth - 1].length; } else if (selectedMonth && formatVal === 'MMMM' && i18nMonths.length) { return i18nMonths[selectedMonth - 1].length; } return formatVal.length ? formatVal.length : 1; } return length; } function getDateFormatSelection(dateFormatDetails, isDateTime) { var _ref10 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, i18nShortMonths = _ref10.i18nShortMonths, i18nMonths = _ref10.i18nMonths, selectedValue = _ref10.selectedValue, day = _ref10.day, month = _ref10.month, year = _ref10.year, hour = _ref10.hour, minute = _ref10.minute, noon = _ref10.noon, timeZone = _ref10.timeZone, is24Hour = _ref10.is24Hour; var _dateFormatDetails$da2 = dateFormatDetails.dateFormatArr, dateFormatArr = _dateFormatDetails$da2 === void 0 ? [] : _dateFormatDetails$da2, _dateFormatDetails$pa2 = dateFormatDetails.patternArr, patternArr = _dateFormatDetails$pa2 === void 0 ? [] : _dateFormatDetails$pa2; var focusedIndex = {}; var clickIndex = {}; var order = []; var tempLength = 0; function addResult(type, length) { var startIndex = tempLength; var endIndex = tempLength + length; var orderLen = order.length; focusedIndex["".concat(startIndex, "_").concat(endIndex)] = orderLen; for (var i = startIndex; i <= endIndex; i++) { clickIndex[i] = orderLen; } order.push({ type: type, index: [startIndex, endIndex] }); tempLength += length; } dateFormatArr.forEach(function (formatVal, index) { var _ref11 = _constants.flags[formatVal] || '', type = _ref11.type, length = _ref11.length; var patternVal = patternArr[index] || ''; var validLength = getDateFormatLength(type, length, formatVal, { i18nShortMonths: i18nShortMonths, i18nMonths: i18nMonths, selectedValue: selectedValue, day: day, month: month, year: year, hour: hour, minute: minute, noon: noon, isDateTime: isDateTime, timeZone: timeZone, is24Hour: is24Hour }); addResult(type, validLength); tempLength += patternVal.length; }); if (isDateTime) { //For space between date and time tempLength += 1; //hour addResult('hour', 2); //For : tempLength += 1; //minute addResult('minute', 2); //For space between time and noon tempLength += 1; //noon if (!is24Hour) { addResult('noon', 2); } } return { focusedIndex: focusedIndex, clickIndex: clickIndex, order: order }; } // export function getDateValues(date = '', dateFormatDetails = {}) { // const { dateFormatArr, patternArr, dayInfo, monthInfo, yearInfo } = // dateFormatDetails; // const newDate = date.split('').reduce((res, str) => { // if (patternArr.indexOf(str) >= 0) { // res += patternChangeStr; // } else { // res += str; // } // return res; // }, ''); // const dateArr = newDate.split(patternChangeStr); // const { index: dayIndex, length: dayLength } = dayInfo; // let day = dateArr[dayIndex]; // day = addZero(day, dayLength); // const { index: monthIndex, length: monthLength } = monthInfo; // let month = dateArr[monthIndex]; // month = addZero(month, monthLength); // const { index: yearIndex, length: yearLength } = yearInfo; // let year = dateArr[yearIndex]; // year = addZero(year, yearLength); // return { // day, // month, // year, // dateString: concatDate({ day, month, year }, dateFormatArr, patternArr) // }; // } // export function getDateTimeValues(value = '', dateFormatDetails = {}) { // const [date, time = '', noon = ''] = value.split(' '); // let [hour = '', minute = ''] = time.split(':'); // hour = addZero(hour, 2); // minute = addZero(minute, 2); // const { day, month, year, dateString } = getDateValues( // date, // dateFormatDetails // ); // const timeString = `${hour}:${minute}`; // return { // day, // month, // year, // hour, // minute, // noon, // dateString, // timeString // }; // }