Added URI validation functions and UI for correcting errors

Summary:
Some uris parsed from the device contain required parameters. Here we parse the uri and check if there is a required parameter on navigation. If there is we alert the user to correct the error.

In the next diff, I will strip away non-required parameters if they are present but not filled in.

Reviewed By: danielbuechele

Differential Revision: D16710944

fbshipit-source-id: ea32cfe60e2bb5e4f395caebf585ba1b220dcefe
This commit is contained in:
Benjamin Elo
2019-08-12 03:12:53 -07:00
committed by Facebook Github Bot
parent ce34c20506
commit 0d5850d723
8 changed files with 320 additions and 12 deletions

View File

@@ -0,0 +1,41 @@
/**
* Copyright 2018-present Facebook.
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
* @format
* @flow strict-local
*/
import {useEffect, useState} from 'react';
import {parameterIsNumberType} from '../util/uri';
const validateParameter = (value: string, parameter: string) => {
return (
value.length > 0 &&
(parameterIsNumberType(parameter) ? !isNaN(parseInt(value, 10)) : true)
);
};
export const useRequiredParameterFormValidator = (
requiredParameters: Array<string>,
) => {
const [values, setValuesArray] = useState<Array<string>>(
requiredParameters.map(() => ''),
);
const [isValid, setIsValid] = useState(false);
useEffect(() => {
if (requiredParameters.length != values.length) {
setValuesArray(requiredParameters.map(() => ''));
}
if (
values.every((value, idx) =>
validateParameter(value, requiredParameters[idx]),
)
) {
setIsValid(true);
} else {
setIsValid(false);
}
});
return [isValid, values, setValuesArray];
};