@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
JavaScript
/** * 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
};
}