export const DynamicForm = { name: 'DynamicForm', props: { formData: { type: Object, required: true, validator: (formData) => { return formData && formData.title && formData.fields && (Array.isArray(formData.fields) || typeof formData.fields === 'object'); } }, formValues: { type: Object, default: () => ({}) }, isSubmitting: { type: Boolean, default: false }, readOnly: { type: Boolean, default: false }, hideActions: { type: Boolean, default: false } }, emits: ['submit', 'cancel', 'update:formValues'], data() { return { localFormValues: { ...this.formValues } }; }, watch: { formValues: { handler(newValues) { this.localFormValues = { ...newValues }; }, deep: true }, localFormValues: { handler(newValues) { this.$emit('update:formValues', newValues); }, deep: true } }, methods: { handleSubmit() { // Basic validation const missingFields = []; if (Array.isArray(this.formData.fields)) { // Valideer array-gebaseerde velden this.formData.fields.forEach(field => { const fieldId = field.id || field.name; if (field.required) { const value = this.localFormValues[fieldId]; if (value === undefined || value === null || (typeof value === 'string' && !value.trim()) || (Array.isArray(value) && value.length === 0)) { missingFields.push(field.name); } } }); } else { // Valideer object-gebaseerde velden Object.entries(this.formData.fields).forEach(([fieldId, field]) => { if (field.required) { const value = this.localFormValues[fieldId]; if (value === undefined || value === null || (typeof value === 'string' && !value.trim()) || (Array.isArray(value) && value.length === 0)) { missingFields.push(field.name); } } }); }; if (missingFields.length > 0) { const fieldNames = missingFields.join(', '); alert(`De volgende velden zijn verplicht: ${fieldNames}`); return; } this.$emit('submit', this.localFormValues); }, handleCancel() { this.$emit('cancel'); }, updateFieldValue(fieldId, value) { this.localFormValues[fieldId] = value; } }, template: `