Skip to main content

Custom field

import { AutoForm, AutoField, ErrorsField, SubmitField } from 'uniforms-antd';
import { ZodBridge } from 'uniforms-bridge-zod';
import { z } from 'zod';
import { DisplayIf } from './DisplayIf';

const userSchema = z.object({
  username: z.string(),
  firstName: z.string().optional(),
  lastName: z.string().optional(),
  password: z.string(),
});

type Model = z.infer<typeof userSchema>;

const schema = new ZodBridge({ schema: userSchema });

export default function App() {
  return (
    <AutoForm
      schema={schema}
      onSubmit={model => window.alert(JSON.stringify(model))}
    >
      <AutoField name="username" />

      <AutoField name="firstName" />
      <DisplayIf<Model> condition={context => !!context.model.firstName}>
        <AutoField name="lastName" />
      </DisplayIf>

      <AutoField name="password" type="password" />

      <ErrorsField />
      <SubmitField />
    </AutoForm>
  );
}