import React from "react"; import { HttpError, IResourceComponentsProps, useTranslate } from "@refinedev/core"; import { Create, useForm } from "@refinedev/antd"; import { Button, Form, Input, Typography, InputNumber } from "antd"; import TextArea from "antd/es/input/TextArea"; import { IVendor, IVendorParsedExtras } from "./model"; import { EntityType, useGetFields } from "../../utils/queryFields"; import { ExtraFieldFormItem, StringifiedExtras } from "../../components/extraFields"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; dayjs.extend(utc); interface CreateOrCloneProps { mode: "create" | "clone"; } export const VendorCreate: React.FC = (props) => { const t = useTranslate(); const extraFields = useGetFields(EntityType.vendor); const { form, formProps, formLoading, onFinish, redirect } = useForm< IVendor, HttpError, IVendorParsedExtras, IVendorParsedExtras >(); if (!formProps.initialValues) { formProps.initialValues = {}; } const handleSubmit = async (redirectTo: "list" | "edit" | "create") => { const values = StringifiedExtras(await form.validateFields()); await onFinish(values); redirect(redirectTo, (values as IVendor).id); }; // Use useEffect to update the form's initialValues when the extra fields are loaded // This is necessary because the form is rendered before the extra fields are loaded React.useEffect(() => { extraFields.data?.forEach((field) => { if (formProps.initialValues && field.default_value) { const parsedValue = JSON.parse(field.default_value as string); form.setFieldsValue({ extra: { [field.key]: parsedValue } }); } }); }, [form, extraFields.data, formProps.initialValues]); return ( ( <> )} >