"use client"; import { FC, useEffect, useState } from "react"; import { useFormState } from "react-dom"; import { Grid } from "@mui/material"; import { useRouter } from "next/navigation"; import { Button, Dialog, TextField, Select, MultiValueField } from "ui"; import { generateCreateAction } from "../lib/actions"; import { FieldDescription } from "../lib/service"; import { serviceConfig } from "../config/config"; type CreateProps = { service: string; }; export const Create: FC = ({ service }) => { const { [service]: { entity, table, displayName, createFields }, } = serviceConfig; const fields = createFields.map((field: any) => { const copy = { ...field }; Object.keys(copy).forEach((key: any) => { if (typeof copy[key] === "function") { delete copy[key]; } }); return copy; }); const createAction = generateCreateAction({ entity, table, fields }); const initialState = { message: null, errors: {}, values: fields.reduce( (acc: Record, field: FieldDescription) => { acc[field.name] = field.defaultValue; return acc; }, {}, ), }; const [formState, formAction] = useFormState(createAction, initialState); const [liveFormState, setLiveFormState] = useState(formState); const updateFormState = (field: string, value: any) => { const newState = { ...liveFormState }; newState.values[field] = value; setLiveFormState(newState); }; const router = useRouter(); useEffect(() => { if (formState.success) { router.push(`/${entity}/${formState.values.id}`); } }, [formState.success, router, entity, formState.values.id]); return ( router.push(`/${entity}`)} buttons={