import { MeasurementCategory } from "@/components/Measurements/models/Category"; import { useAddMeasurementCategoryQuery, useEditMeasurementCategoryQuery } from "@/components/Measurements/queries"; import { Button, Stack, TextField } from "@mui/material"; import { Form, Formik } from "formik"; import React from 'react'; import { useTranslation } from "react-i18next"; import * as yup from 'yup'; interface CategoryFormProps { category?: MeasurementCategory, closeFn?: () => void, } export const CategoryForm = ({ category, closeFn }: CategoryFormProps) => { const [t] = useTranslation(); const useAddCategoryQuery = useAddMeasurementCategoryQuery(); const useEditCategoryQuery = useEditMeasurementCategoryQuery(category?.id || ''); // Match the backend column limits. We do NOT enforce a minimum length: // many users have legitimate 1-2 char names (e.g. CJK abbreviations // like 体重 / 体脂), and the backend allows them. const validationSchema = yup.object({ name: yup .string() .required(t('forms.fieldRequired')) .max(100, t('forms.maxLength', { chars: '100' })), unit: yup .string() .required(t('forms.fieldRequired')) .max(30, t('forms.maxLength', { chars: '30' })) }); return ( { // Edit existing weight entry if (category) { useEditCategoryQuery.mutate({ ...values, id: category.id }); } else { useAddCategoryQuery.mutate(values); } // if closeFn is defined, close the modal (this form does not have to // be displayed in a modal) if (closeFn) { closeFn(); } }} > {formik => (
)}
); };