Nested Object

So far we've just put the image information as properties on our NoteEditorSchema, but the id, file, and altText fields are really all just part of a single object: An image. So it would be better to represent this as a nested set of field properties under the NoteEditorSchema under image.
However, because forms don't support nested objects, we'll need to use a utility from Conform to help us out. Here's an example that resembles what you'll be doing:
// example inspired from the Conform docs
import {
	useForm,
	useFieldset,
	conform,
	type FieldConfig,
} from '@conform-to/react'

function Example() {
	const [form, fields] = useForm<Schema>({
		// ... config stuff including the schema
	})

	return (
		<form {...form.props}>
			<AddressFields config={fields.address} />
		</form>
	)
}

function AddressFields({ config }: { config: FieldConfig<Address> }) {
	const ref = useRef<HTMLFieldSetElement>(null)
	const fields = useFieldset(ref, config)
	return (
		<fieldset ref={ref}>
			<input {...conform.input(fields.street)} />
			<input {...conform.input(fields.zipcode)} />
			<input {...conform.input(fields.city)} />
			<input {...conform.input(fields.country)} />
		</fieldset>
	)
}
We'll also get our type by using Zod's inference utility:
const RocketSchema = z.object({
	// ...
})
type RocketType = z.infer<typeof RocketSchema>

function RocketFields({ config }: { config: FieldConfig<RocketType> }) {
	// ...
}
So, fundamentally, we want to make this change:
{
	title: string
	content: string
	imageId: string
	file: File
	altText: string
	image: {
		id: string
		file: File
		altText: string
	}
}
And we want that hooked up to our form. That should be enough to get you going!

Access Denied

You must login or register for the workshop to view and run the tests.

Check out this video to see how the test tab works.