fix(882): fixes negative number submission for employees input (#1130)

* fix(882): fixes negative number submission for employees input

* formatting

* fix linting
This commit is contained in:
Srikar Samudrala
2023-08-10 10:55:57 +05:30
committed by GitHub
parent 510c466271
commit 4717f4cb90
5 changed files with 202 additions and 1 deletions

View File

@ -0,0 +1,64 @@
export function canBeCastAsPositiveIntegerOrNull(
probablePositiveNumberOrNull: string | undefined | number | null,
): probablePositiveNumberOrNull is number | null {
if (probablePositiveNumberOrNull === undefined) {
return false;
}
if (typeof probablePositiveNumberOrNull === 'number') {
return (
Number.isInteger(probablePositiveNumberOrNull) &&
Math.sign(probablePositiveNumberOrNull) === 1
);
}
if (probablePositiveNumberOrNull === null) {
return true;
}
if (probablePositiveNumberOrNull === '') {
return true;
}
if (typeof probablePositiveNumberOrNull === 'string') {
const stringAsNumber = +probablePositiveNumberOrNull;
if (isNaN(stringAsNumber)) {
return false;
}
if (Number.isInteger(stringAsNumber) && Math.sign(stringAsNumber) === 1) {
return true;
}
}
return false;
}
export function castAsPositiveIntegerOrNull(
probablePositiveNumberOrNull: string | undefined | number | null,
): number | null {
if (
canBeCastAsPositiveIntegerOrNull(probablePositiveNumberOrNull) === false
) {
throw new Error('Cannot cast to positive number or null');
}
if (probablePositiveNumberOrNull === null) {
return null;
}
if (probablePositiveNumberOrNull === '') {
return null;
}
if (typeof probablePositiveNumberOrNull === 'number') {
return probablePositiveNumberOrNull;
}
if (typeof probablePositiveNumberOrNull === 'string') {
return +probablePositiveNumberOrNull;
}
return null;
}