// src/stores/form-builder-store.ts
interface FormBuilderState {
// Schema state
schema: FormSchema;
selectedFieldId: string | null;
selectedPageId: string | null;
// Dirty tracking
isDirty: boolean;
lastSavedAt: Date | null;
// Actions
setSchema: (schema: FormSchema) => void;
addField: (pageId: string, field: FormElement) => void;
updateField: (fieldId: string, updates: Partial<FormElement>) => void;
removeField: (fieldId: string) => void;
moveField: (fieldId: string, newIndex: number) => void;
selectField: (fieldId: string | null) => void;
}
export const useFormBuilder = create<FormBuilderState>((set, get) => ({
schema: initialSchema,
selectedFieldId: null,
isDirty: false,
addField: (pageId, field) => {
set((state) => ({
schema: addFieldToPage(state.schema, pageId, field),
isDirty: true,
}));
},
updateField: (fieldId, updates) => {
set((state) => ({
schema: updateFieldInSchema(state.schema, fieldId, updates),
isDirty: true,
}));
},
// ...
}));