"use client"; import { useGetMachineSchema } from "@/api/default/default"; import { Check, Error } from "@mui/icons-material"; import { Box, Button, LinearProgress, List, ListItem, ListItemIcon, ListItemText, Paper, Typography, } from "@mui/material"; import { IChangeEvent, FormProps } from "@rjsf/core"; import { Form } from "@rjsf/mui"; import validator from "@rjsf/validator-ajv8"; import toast from "react-hot-toast"; import { JSONSchema7 } from "json-schema"; import { useMemo, useRef } from "react"; import { FormStepContentProps } from "./interfaces"; import { ErrorListProps, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, } from "@rjsf/utils"; interface PureCustomConfigProps extends FormStepContentProps { schema: JSONSchema7; initialValues: any; } export function CustomConfig(props: FormStepContentProps) { const { formHooks, handleNext } = props; const { data, isLoading, error } = useGetMachineSchema("mama"); const schema = useMemo(() => { if (!isLoading && !error?.message && data?.data) { return data?.data.schema; } return {}; }, [data, isLoading, error]); const initialValues = useMemo( () => Object.entries(schema?.properties || {}).reduce((acc, [key, value]) => { /*@ts-ignore*/ const init: any = value?.default; if (init) { return { ...acc, [key]: init, }; } return acc; }, {}), [schema], ); return isLoading ? ( ) : error?.message ? (
{error?.message}
) : ( ); } function ErrorList< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any, >({ errors, registry }: ErrorListProps) { const { translateString } = registry; return ( {translateString(TranslatableString.ErrorsLabel)} {errors.map((error, i: number) => { return ( ); })} ); } function PureCustomConfig(props: PureCustomConfigProps) { const { schema, initialValues, formHooks, handleNext } = props; const { setValue, watch } = formHooks; console.log({ schema }); const configData = watch("config") as IChangeEvent; console.log({ configData }); const setConfig = (data: IChangeEvent) => { console.log({ data }); setValue("config", data); }; const formRef = useRef(); const validate = () => { const isValid: boolean = formRef?.current?.validateForm(); console.log({ isValid }, formRef.current); if (!isValid) { formHooks.setError("config", { message: "invalid config", }); toast.error( "Configuration is invalid. Please check the highlighted fields for details.", ); } else { formHooks.clearErrors("config"); toast.success("Config seems valid"); } }; return (
(
), }, }} /> ); }