#11: Fix ID input.
Some checks reported errors
continuous-integration/drone/pr Build encountered an error
continuous-integration/drone/push Build is failing

This commit is contained in:
Manuel Friedli 2025-01-11 01:11:46 +01:00
parent 9b52470f6b
commit 0dc5c28060
Signed by: manuel
GPG key ID: 41D08ABA75634DA1
3 changed files with 67 additions and 7 deletions

View file

@ -10,6 +10,7 @@ import {
import styles from "./input-form.module.css";
import "./input-form.css";
import {State} from "@/app/state/state.ts";
import ValidatingInputBigIntField from "@/app/validating-input-bigint-field.tsx";
export default function InputForm({state, dispatch}: {
state: State,
@ -17,7 +18,7 @@ export default function InputForm({state, dispatch}: {
}) {
const [width, setWidth] = useState(10);
const [height, setHeight] = useState(10);
const [id, setId] = useState<number>();
const [id, setId] = useState<bigint>();
const [algorithm, setAlgorithm] = useState('wilson');
const handleSubmit = (e: FormEvent) => {
@ -54,15 +55,14 @@ export default function InputForm({state, dispatch}: {
value: numberValue
};
};
const validateIdInput: ValidatorFunction<string, number> = value => {
const validateIdInput: ValidatorFunction<string, bigint> = value => {
if ("" === value) {
return {
valid: true
};
}
const numberValue = Number(value);
// FIXME doesn't handle strings with characters correctly (e.g. "asdf" yields an empty value, due to "type=number").
if (isNaN(numberValue) || Math.floor(numberValue) !== numberValue) {
const numberValue = BigInt(value);
if (numberValue.toString() !== value.trim()) {
return {
valid: false,
message: "Must be empty or an integer"
@ -96,7 +96,7 @@ export default function InputForm({state, dispatch}: {
disabled={state.loading}
onChange={setHeight}
/>
<ValidatingInputNumberField id={"id"}
<ValidatingInputBigIntField id={"id"}
label={"ID (optional)"}
value={id}
validatorFn={validateIdInput}