Potion/web/src/hooks/validation.ts
Hayden Hargreaves ce6d748731 (FIX): Validation and dirty checks have been implemented.
Review this, but it looks right.
2025-12-25 21:44:52 -07:00

68 lines
2.2 KiB
TypeScript

import type { CreateRecipeFormDirtyEntries, CreateRecipeFormEntries } from "../pages/Create";
import { isRecipeMeal, type RecipeIngredient, type RecipeInstruction } from "../types/recipe";
export interface CreateRecipeFormValues {
title: string;
description: string;
prepTime: string;
cookTime: string;
servingSize: string;
category: string;
difficulty: string;
ingredients: RecipeIngredient[];
instructions: RecipeInstruction[];
}
export function validateCreateRecipeForm(values: CreateRecipeFormValues, dirty: CreateRecipeFormDirtyEntries): CreateRecipeFormEntries {
return {
title: dirty.title
? values.title.length >= 1 && values.title.length <= 128
: true,
description: dirty.description
? values.description.length >= 1 && values.description.length <= 1000
: true,
prepTime: dirty.prepTime
? values.prepTime !== "" &&
Number(values.prepTime) >= 0 &&
Number(values.prepTime) <= 300
: true,
cookTime: dirty.cookTime
? values.cookTime !== "" &&
Number(values.cookTime) >= 0 &&
Number(values.cookTime) <= 300
: true,
servingSize: dirty.servingSize
? values.servingSize !== "" &&
Number(values.servingSize) >= 1 &&
Number(values.servingSize) <= 16
: true,
category: dirty.category
? values.category !== "" && isRecipeMeal(values.category)
: true,
difficulty: dirty.difficulty
? values.difficulty !== "" &&
Number(values.difficulty) >= 1 &&
Number(values.difficulty) <= 5
: true,
ingredients: values.ingredients.map(ingredient => {
if (!dirty.ingredients[ingredient.Id]) {
return { id: ingredient.Id, valid: true };
}
let valid = true;
if (ingredient.Name.trim() === "") valid = false;
if (ingredient.Unit === "") valid = false;
if (ingredient.Amount <= 0) valid = false;
return { id: ingredient.Id, valid };
}),
instructions: values.instructions.map(instruction => {
if (!dirty.instructions[instruction.Id]) {
return { id: instruction.Id, valid: true }
}
return {
id: instruction.Id,
valid: instruction.Content.trim() !== ""
}
}),
}
}