import { typeboxResolver } from "@hookform/resolvers/typebox"; import { type Static, objectCleanEmpty } from "core/utils"; import { type TAppDataEntityFields, entitiesSchema } from "data/data-schema"; import { mergeWith } from "lodash-es"; import { useRef } from "react"; import { useForm } from "react-hook-form"; import { MantineSelect } from "ui/components/form/hook-form-mantine/MantineSelect"; import { useEvent } from "ui/hooks/use-event"; import { EntityFieldsForm, type EntityFieldsFormRef, } from "ui/routes/data/forms/entity.fields.form"; import { ModalBody, ModalFooter, type TCreateModalSchema, useStepContext } from "./CreateModal"; import { useBkndData } from "ui/client/schema/data/use-bknd-data"; const schema = entitiesSchema; type Schema = Static; export function StepEntityFields() { const { nextStep, stepBack, state, setState } = useStepContext(); const { config } = useBkndData(); const entity = state.entities?.create?.[0]!; const defaultFields = { id: { type: "primary", name: "id" } } as const; const ref = useRef(null); const initial = objectCleanEmpty( mergeWith(entity, { fields: defaultFields, config: { sort_field: "id", sort_dir: "asc", }, }), ); const { control, formState: { isValid, errors }, getValues, handleSubmit, watch, setValue, } = useForm({ mode: "onTouched", resolver: typeboxResolver(schema), defaultValues: initial as NonNullable, }); const values = watch(); const updateListener = useEvent((data: TAppDataEntityFields) => { setValue("fields", data as any); }); function handleNext() { if (isValid && ref.current?.isValid()) { setState((prev) => { const entity = prev.entities?.create?.[0]; if (!entity) return prev; return { ...prev, entities: { create: [getValues() as any], }, }; }); console.log("valid"); nextStep("create")(); } else { console.warn("not valid", ref.current?.getErrors()); } } return (

Add fields to {entity.name}:

How should it be sorted by default?

name.length > 0)} placeholder="Select field" name="config.sort_field" allowDeselect={false} control={control} />
{Object.entries(errors).map(([key, value]) => (

{key}: {(value as any).message}

))}
); }