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

120 lines (109 loc) 3.08 kB
/** * Methods ** */ import { getIsNewValueType, getIsNumberTyped, getIsDeleteTyped, getDayEnd, convertYearToTwoDigit, getYearDetails, convertTwoDigitToYear, getIsEmptyYear } from "./index"; import { getKeyValue } from "../../utils/Common"; export function getChangedYear(values, event, focusOrders, keyActions, { yearInfo }) { const { keyCode, which } = event; let { year = '' } = values; const { day = '', month = '' } = values; let isChanged = false; //Year Two Digit case const { length: yearLength } = yearInfo; const oldYear = year; // For get Centuries if (yearLength === 2) { year = convertYearToTwoDigit(year).toString(); } let newDay = Number.parseInt(day) || 0; const newMonth = Number.parseInt(month) || 0; let newYear = Number.parseInt(year) || 0; const { focusOrder } = focusOrders; let newFocusOrder = focusOrder; const isNewType = getIsNewValueType(focusOrders, keyActions); const { startPoint, endPoint, currentYear } = getYearDetails(yearLength); if (keyCode === 38) { //up arrow if (newYear === endPoint) { isChanged = true; newYear = startPoint; } else if (getIsEmptyYear(newYear, yearLength)) { isChanged = true; newYear = currentYear; } else if (!getIsEmptyYear(newYear, yearLength)) { isChanged = true; newYear += 1; } } else if (keyCode === 40) { //down arrow if (newYear === startPoint) { isChanged = true; newYear = endPoint; } else if (getIsEmptyYear(newYear, yearLength)) { isChanged = true; newYear = currentYear; } else if (!getIsEmptyYear(newYear, yearLength)) { isChanged = true; newYear -= 1; } } else if (getIsNumberTyped(event)) { const keyString = getKeyValue(event); let newValue = isNewType ? keyString : year.toString() + keyString; const newValueString = newValue || ''; newValue = Number.parseInt(newValue); if (isNewType) { isChanged = true; newYear = newValue; } else { isChanged = true; if (newValue * 10 > endPoint) { newFocusOrder += 1; } if (newValue > endPoint) { // newYear = endPoint; newYear = currentYear; } else if (newValueString.length === yearLength && !newValue) { newFocusOrder += 1; newYear = startPoint; } else if (!newValue) { newYear = newValueString; } else if (newValue * 10 > endPoint && (endPoint < newValue || startPoint > newValue)) { newYear = currentYear; } else { newYear = newValue; } } } else if (getIsDeleteTyped(keyCode)) { isChanged = true; newYear = ''; } if (yearLength === 2) { newYear = convertTwoDigitToYear(newYear, oldYear); } const dayEnd = getDayEnd(newMonth, newYear); let dayChanged = false; if (newDay && newDay > dayEnd) { dayChanged = true; newDay = dayEnd; } return { day: dayChanged ? newDay : day, year: newYear, isChanged, focusOrder: newFocusOrder }; }