backk-frontend-utils
Advanced tools
Comparing version 1.0.104 to 1.0.105
@@ -46,5 +46,11 @@ import 'reflect-metadata'; | ||
export { default as AcceptFileTypes } from './decorators/typeproperty/AcceptFileTypes'; | ||
export { default as IsInPast } from './decorators/typeproperty/IsInPast'; | ||
export { default as IsInFuture } from './decorators/typeproperty/IsInFuture'; | ||
export { default as IsTimestampBetween } from './decorators/typeproperty/IsTimestampBetween'; | ||
export { default as IsInPast } from './decorators/typeproperty/datetime/IsInPast'; | ||
export { default as IsInFuture } from './decorators/typeproperty/datetime/IsInFuture'; | ||
export { default as IsDateBetween } from './decorators/typeproperty/datetime/IsDateBetween'; | ||
export { default as IsDateBetweenRelative } from './decorators/typeproperty/datetime/IsDateBetweenRelative'; | ||
export { default as IsTimeBetween } from './decorators/typeproperty/datetime/IsTimeBetween'; | ||
export { default as IsTimestampBetween } from './decorators/typeproperty/datetime/IsTimestampBetween'; | ||
export { default as IsTimestampBetweenRelative } from './decorators/typeproperty/datetime/IsTimestampBetweenRelative'; | ||
export { default as IsYearAndMonthBetween } from './decorators/typeproperty/datetime/IsYearAndMonthBetween'; | ||
export { default as IsYearAndMonthBetweenRelative } from './decorators/typeproperty/datetime/IsYearAndMonthBetweenRelative'; | ||
export { default as Captcha } from './types/Captcha'; | ||
@@ -51,0 +57,0 @@ export { default as Version } from './types/Version'; |
@@ -41,5 +41,11 @@ import 'reflect-metadata'; | ||
export { default as AcceptFileTypes } from './decorators/typeproperty/AcceptFileTypes'; | ||
export { default as IsInPast } from './decorators/typeproperty/IsInPast'; | ||
export { default as IsInFuture } from './decorators/typeproperty/IsInFuture'; | ||
export { default as IsTimestampBetween } from './decorators/typeproperty/IsTimestampBetween'; | ||
export { default as IsInPast } from './decorators/typeproperty/datetime/IsInPast'; | ||
export { default as IsInFuture } from './decorators/typeproperty/datetime/IsInFuture'; | ||
export { default as IsDateBetween } from './decorators/typeproperty/datetime/IsDateBetween'; | ||
export { default as IsDateBetweenRelative } from './decorators/typeproperty/datetime/IsDateBetweenRelative'; | ||
export { default as IsTimeBetween } from './decorators/typeproperty/datetime/IsTimeBetween'; | ||
export { default as IsTimestampBetween } from './decorators/typeproperty/datetime/IsTimestampBetween'; | ||
export { default as IsTimestampBetweenRelative } from './decorators/typeproperty/datetime/IsTimestampBetweenRelative'; | ||
export { default as IsYearAndMonthBetween } from './decorators/typeproperty/datetime/IsYearAndMonthBetween'; | ||
export { default as IsYearAndMonthBetweenRelative } from './decorators/typeproperty/datetime/IsYearAndMonthBetweenRelative'; | ||
export { default as Captcha } from './types/Captcha'; | ||
@@ -46,0 +52,0 @@ export { default as Version } from './types/Version'; |
import { getMetadataStorage } from 'cv-pksilen'; | ||
import { findValidationMetadata, getValidationMetadataConstraints, hasValidationMetadata, } from '../utils/getInputType'; | ||
import dayjs from 'dayjs'; | ||
import isLeapYear from 'dayjs/plugin/isLeapYear'; | ||
dayjs.extend(isLeapYear); | ||
const minValues = { | ||
year: 1970, | ||
month: 0, | ||
date: 1, | ||
hour: 0, | ||
minute: 0, | ||
}; | ||
const maxValues = { | ||
year: 9999, | ||
month: 11, | ||
hour: 23, | ||
minute: 59, | ||
}; | ||
function getMaxDate(timestamp) { | ||
switch (timestamp.month()) { | ||
case 0: | ||
case 2: | ||
case 4: | ||
case 6: | ||
case 7: | ||
case 9: | ||
case 11: | ||
return 31; | ||
case 3: | ||
case 5: | ||
case 8: | ||
case 10: | ||
return 30; | ||
case 1: | ||
if (timestamp.isLeapYear()) { | ||
return 29; | ||
} | ||
return 28; | ||
default: | ||
throw new Error('Invalid month'); | ||
} | ||
} | ||
export default function getInputValidationProps(ArgumentClass, propertyName) { | ||
@@ -114,48 +75,84 @@ const inputValidationProps = {}; | ||
else if (hasValidationMetadata(validationMetadatas, 'isDate')) { | ||
if (hasValidationMetadata(validationMetadatas, 'isTimestampBetween')) { | ||
const uiPropertiesMetadata = findValidationMetadata(validationMetadatas, 'uiProperties'); | ||
let uiConstraints; | ||
if (uiPropertiesMetadata) { | ||
uiConstraints = getValidationMetadataConstraints(uiPropertiesMetadata); | ||
const uiPropertiesMetadata = findValidationMetadata(validationMetadatas, 'uiProperties'); | ||
let uiConstraints; | ||
if (uiPropertiesMetadata) { | ||
uiConstraints = getValidationMetadataConstraints(uiPropertiesMetadata); | ||
} | ||
const isDateBetweenValidationMetadata = findValidationMetadata(validationMetadatas, 'isDateBetween'); | ||
const isDateBetweenRelativeValidationMetadata = findValidationMetadata(validationMetadatas, 'isDateBetweenRelative'); | ||
const isTimeValidationMetadata = findValidationMetadata(validationMetadatas, 'isTimeBetween'); | ||
const isInFutureValidationMetadata = findValidationMetadata(validationMetadatas, 'isInFuture'); | ||
const isInPastValidationMetadata = findValidationMetadata(validationMetadatas, 'isInPast'); | ||
const isTimeBetweenValidationMetadata = findValidationMetadata(validationMetadatas, 'isTimeBetween'); | ||
const isTimestampBetweenValidationMetadata = findValidationMetadata(validationMetadatas, 'isTimestampBetween'); | ||
const isTimestampBetweenRelativeValidationMetadata = findValidationMetadata(validationMetadatas, 'isTimestampBetweenRelative'); | ||
const isYearAndMonthBetweenValidationMetadata = findValidationMetadata(validationMetadatas, 'isYearAndMonthBetween'); | ||
const isYearAndMonthBetweenRelativeValidationMetadata = findValidationMetadata(validationMetadatas, 'isYearAndMonthBetweenRelative'); | ||
if (uiConstraints === null || uiConstraints === void 0 ? void 0 : uiConstraints[0].isMonthAndYearOnly) { | ||
if (isInPastValidationMetadata) { | ||
inputValidationProps.max = dayjs().format('YYYY-MM'); | ||
} | ||
let startTimestamp = dayjs(); | ||
let endTimestamp = dayjs(); | ||
const modifiedUnits = []; | ||
validationMetadatas | ||
.filter((validationMetadata) => validationMetadata.name === 'isTimestampBetween') | ||
.forEach((validationMetadata) => { | ||
const [unit, startValue, endValue] = getValidationMetadataConstraints(validationMetadata); | ||
if (unit === 'isoDayOfWeek') { | ||
return; | ||
} | ||
startTimestamp = startTimestamp.set(unit, startValue); | ||
endTimestamp = endTimestamp.set(unit, endValue); | ||
modifiedUnits.push(unit); | ||
}); | ||
['year', 'month', 'date', 'hour', 'minute'].forEach((unit) => { | ||
if (!modifiedUnits.includes(unit)) { | ||
startTimestamp = startTimestamp.set(unit, minValues[unit]); | ||
endTimestamp = endTimestamp.set(unit, unit === 'date' ? getMaxDate(endTimestamp) : maxValues[unit]); | ||
} | ||
}); | ||
if (modifiedUnits.length > 0) { | ||
if (uiConstraints === null || uiConstraints === void 0 ? void 0 : uiConstraints[0].isMonthAndYearOnly) { | ||
inputValidationProps.min = startTimestamp.format('YYYY-MM'); | ||
inputValidationProps.max = endTimestamp.format('YYYY-MM'); | ||
} | ||
else if (uiConstraints === null || uiConstraints === void 0 ? void 0 : uiConstraints[0].isDateOnly) { | ||
inputValidationProps.min = startTimestamp.format('YYYY-MM-DD'); | ||
inputValidationProps.max = endTimestamp.format('YYYY-MM-DD'); | ||
} | ||
else if (uiConstraints === null || uiConstraints === void 0 ? void 0 : uiConstraints[0].isTimeOnly) { | ||
inputValidationProps.min = startTimestamp.format('HH:mm'); | ||
inputValidationProps.max = endTimestamp.format('HH:mm'); | ||
} | ||
else { | ||
inputValidationProps.min = | ||
startTimestamp.format('YYYY-MM-DD') + 'T' + startTimestamp.format('HH:mm'); | ||
inputValidationProps.max = endTimestamp.format('YYYY-MM-DD') + 'T' + endTimestamp.format('HH:mm'); | ||
} | ||
else if (isInFutureValidationMetadata) { | ||
inputValidationProps.min = dayjs().format('YYYY-MM'); | ||
} | ||
else if (isYearAndMonthBetweenValidationMetadata) { | ||
inputValidationProps.min = isYearAndMonthBetweenValidationMetadata.constraints[1]; | ||
inputValidationProps.max = isYearAndMonthBetweenValidationMetadata.constraints[2]; | ||
} | ||
else if (isYearAndMonthBetweenRelativeValidationMetadata) { | ||
const [, startValueSubtractAmount, startValueSubtractUnit, endValueAddAmount, endValueAddUnit] = isYearAndMonthBetweenRelativeValidationMetadata.constraints; | ||
const startDate = dayjs() | ||
.subtract(startValueSubtractAmount, startValueSubtractUnit) | ||
.format('YYYY-MM'); | ||
const endDate = dayjs().add(endValueAddAmount, endValueAddUnit).format('YYYY-MM'); | ||
inputValidationProps.min = startDate; | ||
inputValidationProps.max = endDate; | ||
} | ||
} | ||
else if (uiConstraints === null || uiConstraints === void 0 ? void 0 : uiConstraints[0].isDateOnly) { | ||
if (isInPastValidationMetadata) { | ||
inputValidationProps.max = dayjs().subtract(1, 'date').format('YYYY-MM-DD'); | ||
} | ||
else if (isInFutureValidationMetadata) { | ||
inputValidationProps.min = dayjs().add(1, 'date').format('YYYY-MM'); | ||
} | ||
else if (isDateBetweenValidationMetadata) { | ||
inputValidationProps.min = isDateBetweenValidationMetadata.constraints[1]; | ||
inputValidationProps.max = isDateBetweenValidationMetadata.constraints[2]; | ||
} | ||
else if (isDateBetweenRelativeValidationMetadata) { | ||
const [, startValueSubtractAmount, startValueSubtractUnit, endValueAddAmount, endValueAddUnit] = isDateBetweenRelativeValidationMetadata.constraints; | ||
const startDate = dayjs() | ||
.subtract(startValueSubtractAmount, startValueSubtractUnit) | ||
.format('YYYY-MM-DD'); | ||
const endDate = dayjs().add(endValueAddAmount, endValueAddUnit).format('YYYY-MM-DD'); | ||
inputValidationProps.min = startDate; | ||
inputValidationProps.max = endDate; | ||
} | ||
} | ||
else if (uiConstraints === null || uiConstraints === void 0 ? void 0 : uiConstraints[0].isTimeOnly) { | ||
if (isTimeValidationMetadata) { | ||
inputValidationProps.min = isTimeValidationMetadata.constraints[1]; | ||
inputValidationProps.max = isTimeValidationMetadata.constraints[2]; | ||
} | ||
} | ||
else { | ||
if (isInPastValidationMetadata) { | ||
inputValidationProps.max = dayjs(); | ||
} | ||
else if (isInFutureValidationMetadata) { | ||
inputValidationProps.min = dayjs(); | ||
} | ||
else if (isTimestampBetweenValidationMetadata) { | ||
inputValidationProps.min = isTimestampBetweenValidationMetadata.constraints[1]; | ||
inputValidationProps.max = isTimestampBetweenValidationMetadata.constraints[2]; | ||
} | ||
else if (isTimestampBetweenRelativeValidationMetadata) { | ||
const [, startValueSubtractAmount, startValueSubtractUnit, endValueAddAmount, endValueAddUnit] = isTimestampBetweenRelativeValidationMetadata.constraints; | ||
const startDate = dayjs().subtract(startValueSubtractAmount, startValueSubtractUnit); | ||
const endDate = dayjs().add(endValueAddAmount, endValueAddUnit); | ||
inputValidationProps.min = startDate; | ||
inputValidationProps.max = endDate; | ||
} | ||
} | ||
} | ||
@@ -162,0 +159,0 @@ return inputValidationProps; |
{ | ||
"name": "backk-frontend-utils", | ||
"version": "1.0.104", | ||
"version": "1.0.105", | ||
"description": "Web frontend utils for Backk microservices", | ||
@@ -53,2 +53,3 @@ "author": { | ||
"@types/crypto-js": "4.0.2", | ||
"@types/jest": "27.0.3", | ||
"@types/lodash": "4.14.176", | ||
@@ -65,2 +66,3 @@ "@types/react": "17.0.34", | ||
"react": "17.0.2", | ||
"ts-jest": "27.0.7", | ||
"typescript": "4.4.4" | ||
@@ -67,0 +69,0 @@ }, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
348527
331
3465
15