- Fix testapp/apps.py: import djarea_clients (file was never renamed) - Fix fetch.mjs: command is export_djarea_schema not export_mizan_schema - Fix harness package.json: dependency path to mizan-react after restructure - Add package.json for generator (openapi-typescript dependency) - Regenerate all example code with new protocol format: - generated.provider.tsx uses raw context responses + SSR hydration - generated.server.ts uses GET /ctx/global/ with response.ok check - generated.forms.ts, channels.ts, channels.hooks.tsx refreshed - Remove stale generated.django.tsx and generated.django.server.ts - Update imports: fixtures.tsx and main.tsx import from ./api (index) - Use MizanContext instead of deprecated DjangoContext in examples Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
227 lines
5.5 KiB
TypeScript
227 lines
5.5 KiB
TypeScript
'use client'
|
|
|
|
// AUTO-GENERATED by mizan - do not edit manually
|
|
// Regenerate with: npm run schemas
|
|
|
|
// Typed form hooks with Zod validation.
|
|
// Zod schemas are generated from Django form field definitions.
|
|
// Client-side validation matches Django constraints (required, max_length, email, etc.)
|
|
|
|
import { z } from 'zod'
|
|
import {
|
|
useDjangoFormCore,
|
|
useDjangoFormsetCore,
|
|
type DjangoFormState,
|
|
type DjangoFormsetState,
|
|
type FormOptions,
|
|
} from 'mizan'
|
|
|
|
// ============================================================================
|
|
// Zod Schemas
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Zod schema for login form
|
|
* Generated from Django form field definitions
|
|
*/
|
|
export const LoginSchema = z.object({
|
|
})
|
|
|
|
/**
|
|
* Zod schema for signup form
|
|
* Generated from Django form field definitions
|
|
*/
|
|
export const SignupSchema = z.object({
|
|
})
|
|
|
|
/**
|
|
* Zod schema for add_email form
|
|
* Generated from Django form field definitions
|
|
*/
|
|
export const AddEmailSchema = z.object({
|
|
})
|
|
|
|
/**
|
|
* Zod schema for contact form
|
|
* Generated from Django form field definitions
|
|
*/
|
|
export const ContactSchema = z.object({
|
|
name: z.string().max(100),
|
|
email: z.string().email('Invalid email address').max(320),
|
|
message: z.string(),
|
|
})
|
|
|
|
/**
|
|
* Zod schema for item form
|
|
* Generated from Django form field definitions
|
|
*/
|
|
export const ItemSchema = z.object({
|
|
label: z.string().max(50),
|
|
quantity: z.number().int().min(1),
|
|
})
|
|
|
|
// ============================================================================
|
|
// Form Data Types (inferred from Zod schemas)
|
|
// ============================================================================
|
|
|
|
/** Form data type for login, inferred from Zod schema */
|
|
export type LoginFormData = z.infer<typeof LoginSchema>
|
|
|
|
/** Form data type for signup, inferred from Zod schema */
|
|
export type SignupFormData = z.infer<typeof SignupSchema>
|
|
|
|
/** Form data type for add_email, inferred from Zod schema */
|
|
export type AddEmailFormData = z.infer<typeof AddEmailSchema>
|
|
|
|
/** Form data type for contact, inferred from Zod schema */
|
|
export type ContactFormData = z.infer<typeof ContactSchema>
|
|
|
|
/** Form data type for item, inferred from Zod schema */
|
|
export type ItemFormData = z.infer<typeof ItemSchema>
|
|
|
|
// ============================================================================
|
|
// Form Hooks
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Typed form hook for login
|
|
*
|
|
* Features:
|
|
* - Full TypeScript inference for form fields
|
|
* - Client-side Zod validation (instant feedback)
|
|
* - Server-side Django validation (authoritative)
|
|
*/
|
|
export function useLoginForm(
|
|
options?: FormOptions
|
|
): DjangoFormState<LoginFormData> {
|
|
return useDjangoFormCore<LoginFormData>({
|
|
name: 'login',
|
|
zodSchema: LoginSchema,
|
|
options,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Typed form hook for signup
|
|
*
|
|
* Features:
|
|
* - Full TypeScript inference for form fields
|
|
* - Client-side Zod validation (instant feedback)
|
|
* - Server-side Django validation (authoritative)
|
|
*/
|
|
export function useSignupForm(
|
|
options?: FormOptions
|
|
): DjangoFormState<SignupFormData> {
|
|
return useDjangoFormCore<SignupFormData>({
|
|
name: 'signup',
|
|
zodSchema: SignupSchema,
|
|
options,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Typed form hook for add_email
|
|
*
|
|
* Features:
|
|
* - Full TypeScript inference for form fields
|
|
* - Client-side Zod validation (instant feedback)
|
|
* - Server-side Django validation (authoritative)
|
|
*/
|
|
export function useAddEmailForm(
|
|
options?: FormOptions
|
|
): DjangoFormState<AddEmailFormData> {
|
|
return useDjangoFormCore<AddEmailFormData>({
|
|
name: 'add_email',
|
|
zodSchema: AddEmailSchema,
|
|
options,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Typed form hook for contact
|
|
*
|
|
* Features:
|
|
* - Full TypeScript inference for form fields
|
|
* - Client-side Zod validation (instant feedback)
|
|
* - Server-side Django validation (authoritative)
|
|
*/
|
|
export function useContactForm(
|
|
options?: FormOptions
|
|
): DjangoFormState<ContactFormData> {
|
|
return useDjangoFormCore<ContactFormData>({
|
|
name: 'contact',
|
|
zodSchema: ContactSchema,
|
|
options,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Typed form hook for item
|
|
*
|
|
* Features:
|
|
* - Full TypeScript inference for form fields
|
|
* - Client-side Zod validation (instant feedback)
|
|
* - Server-side Django validation (authoritative)
|
|
*/
|
|
export function useItemForm(
|
|
options?: FormOptions
|
|
): DjangoFormState<ItemFormData> {
|
|
return useDjangoFormCore<ItemFormData>({
|
|
name: 'item',
|
|
zodSchema: ItemSchema,
|
|
options,
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Typed formset hook for item
|
|
*/
|
|
export function useItemFormset(
|
|
initialCount?: number,
|
|
liveValidation?: boolean
|
|
): DjangoFormsetState<ItemFormData> {
|
|
return useDjangoFormsetCore<ItemFormData>({
|
|
name: 'item',
|
|
zodSchema: ItemSchema,
|
|
initialCount,
|
|
liveValidation,
|
|
})
|
|
}
|
|
|
|
// ============================================================================
|
|
// Form Registry
|
|
// ============================================================================
|
|
|
|
export const MIZAN_FORMS = {
|
|
login: {
|
|
name: 'login',
|
|
schema: LoginSchema,
|
|
hook: 'useLoginForm',
|
|
hasFormset: false,
|
|
},
|
|
signup: {
|
|
name: 'signup',
|
|
schema: SignupSchema,
|
|
hook: 'useSignupForm',
|
|
hasFormset: false,
|
|
},
|
|
addEmail: {
|
|
name: 'add_email',
|
|
schema: AddEmailSchema,
|
|
hook: 'useAddEmailForm',
|
|
hasFormset: false,
|
|
},
|
|
contact: {
|
|
name: 'contact',
|
|
schema: ContactSchema,
|
|
hook: 'useContactForm',
|
|
hasFormset: false,
|
|
},
|
|
item: {
|
|
name: 'item',
|
|
schema: ItemSchema,
|
|
hook: 'useItemForm',
|
|
hasFormset: true,
|
|
},
|
|
} as const
|