- Adapting TRAICIE_SELECTION_SPECIALIST to retrieve prefered contact times using a form iso free text
- Improvement of DynamicForm en FormField to handle boolean values.
This commit is contained in:
@@ -155,10 +155,19 @@ export default {
|
||||
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);
|
||||
// Voor boolean velden is false een geldige waarde
|
||||
if (field.type === 'boolean') {
|
||||
// Boolean velden zijn altijd geldig als ze een boolean waarde hebben
|
||||
if (typeof value !== 'boolean') {
|
||||
missingFields.push(field.name);
|
||||
}
|
||||
} else {
|
||||
// Bestaande validatie voor andere veldtypen
|
||||
if (value === undefined || value === null ||
|
||||
(typeof value === 'string' && !value.trim()) ||
|
||||
(Array.isArray(value) && value.length === 0)) {
|
||||
missingFields.push(field.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -167,10 +176,19 @@ export default {
|
||||
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);
|
||||
// Voor boolean velden is false een geldige waarde
|
||||
if (field.type === 'boolean') {
|
||||
// Boolean velden zijn altijd geldig als ze een boolean waarde hebben
|
||||
if (typeof value !== 'boolean') {
|
||||
missingFields.push(field.name);
|
||||
}
|
||||
} else {
|
||||
// Bestaande validatie voor andere veldtypen
|
||||
if (value === undefined || value === null ||
|
||||
(typeof value === 'string' && !value.trim()) ||
|
||||
(Array.isArray(value) && value.length === 0)) {
|
||||
missingFields.push(field.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -185,10 +203,23 @@ export default {
|
||||
// Gebruik een vlag om recursieve updates te voorkomen
|
||||
if (JSON.stringify(newValues) !== JSON.stringify(this.localFormValues)) {
|
||||
this.localFormValues = JSON.parse(JSON.stringify(newValues));
|
||||
// Proactief alle boolean velden corrigeren na externe wijziging
|
||||
this.$nextTick(() => {
|
||||
this.initializeBooleanFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
deep: true
|
||||
},
|
||||
formData: {
|
||||
handler() {
|
||||
// Herinitialiseer boolean velden wanneer form structuur verandert
|
||||
this.$nextTick(() => {
|
||||
this.initializeBooleanFields();
|
||||
});
|
||||
},
|
||||
deep: true
|
||||
},
|
||||
localFormValues: {
|
||||
handler(newValues) {
|
||||
// Gebruik een vlag om recursieve updates te voorkomen
|
||||
@@ -202,53 +233,132 @@ export default {
|
||||
created() {
|
||||
// Icon loading is now handled automatically by useIconManager composable
|
||||
},
|
||||
mounted() {
|
||||
// Proactief alle boolean velden initialiseren bij het laden
|
||||
this.initializeBooleanFields();
|
||||
},
|
||||
methods: {
|
||||
// Proactieve initialisatie van alle boolean velden
|
||||
initializeBooleanFields() {
|
||||
const updatedValues = { ...this.localFormValues };
|
||||
let hasChanges = false;
|
||||
|
||||
// Behandel alle boolean velden in het formulier
|
||||
const fields = Array.isArray(this.formData.fields)
|
||||
? this.formData.fields
|
||||
: Object.entries(this.formData.fields).map(([id, field]) => ({ ...field, id }));
|
||||
|
||||
fields.forEach(field => {
|
||||
const fieldId = field.id || field.name;
|
||||
if (field.type === 'boolean') {
|
||||
const currentValue = updatedValues[fieldId];
|
||||
// Initialiseer als de waarde undefined, null, of een lege string is
|
||||
if (currentValue === undefined || currentValue === null || currentValue === '') {
|
||||
updatedValues[fieldId] = field.default === true ? true : false;
|
||||
hasChanges = true;
|
||||
} else if (typeof currentValue !== 'boolean') {
|
||||
// Converteer andere waarden naar boolean
|
||||
updatedValues[fieldId] = Boolean(currentValue);
|
||||
hasChanges = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Update alleen als er wijzigingen zijn
|
||||
if (hasChanges) {
|
||||
this.localFormValues = updatedValues;
|
||||
}
|
||||
},
|
||||
|
||||
updateFieldValue(fieldId, value) {
|
||||
// Zoek het veld om het type te bepalen
|
||||
let field = null;
|
||||
if (Array.isArray(this.formData.fields)) {
|
||||
field = this.formData.fields.find(f => (f.id || f.name) === fieldId);
|
||||
} else {
|
||||
field = this.formData.fields[fieldId];
|
||||
}
|
||||
|
||||
// Type conversie voor boolean velden
|
||||
let processedValue = value;
|
||||
if (field && field.type === 'boolean') {
|
||||
processedValue = Boolean(value);
|
||||
}
|
||||
|
||||
// Update lokale waarde
|
||||
this.localFormValues = {
|
||||
...this.localFormValues,
|
||||
[fieldId]: value
|
||||
[fieldId]: processedValue
|
||||
};
|
||||
|
||||
// Na elke field update, controleer alle boolean velden
|
||||
this.$nextTick(() => {
|
||||
this.initializeBooleanFields();
|
||||
});
|
||||
},
|
||||
|
||||
handleSubmit() {
|
||||
// Basic validation
|
||||
const missingFields = [];
|
||||
// Eerst proactief alle boolean velden corrigeren
|
||||
this.initializeBooleanFields();
|
||||
|
||||
// Wacht tot updates zijn verwerkt, dan valideer en submit
|
||||
this.$nextTick(() => {
|
||||
// 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);
|
||||
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];
|
||||
// Voor boolean velden is false een geldige waarde
|
||||
if (field.type === 'boolean') {
|
||||
// Boolean velden zijn altijd geldig als ze een boolean waarde hebben
|
||||
if (typeof value !== 'boolean') {
|
||||
missingFields.push(field.name);
|
||||
}
|
||||
} else {
|
||||
// Bestaande validatie voor andere veldtypen
|
||||
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);
|
||||
});
|
||||
} else {
|
||||
// Valideer object-gebaseerde velden
|
||||
Object.entries(this.formData.fields).forEach(([fieldId, field]) => {
|
||||
if (field.required) {
|
||||
const value = this.localFormValues[fieldId];
|
||||
// Voor boolean velden is false een geldige waarde
|
||||
if (field.type === 'boolean') {
|
||||
// Boolean velden zijn altijd geldig als ze een boolean waarde hebben
|
||||
if (typeof value !== 'boolean') {
|
||||
missingFields.push(field.name);
|
||||
}
|
||||
} else {
|
||||
// Bestaande validatie voor andere veldtypen
|
||||
if (value === undefined || value === null ||
|
||||
(typeof value === 'string' && !value.trim()) ||
|
||||
(Array.isArray(value) && value.length === 0)) {
|
||||
missingFields.push(field.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (missingFields.length > 0) {
|
||||
alert(`De volgende velden zijn verplicht: ${missingFields.join(', ')}`);
|
||||
return;
|
||||
}
|
||||
if (missingFields.length > 0) {
|
||||
alert(`De volgende velden zijn verplicht: ${missingFields.join(', ')}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Emit submit event
|
||||
this.$emit('submit', this.localFormValues);
|
||||
// Emit submit event
|
||||
this.$emit('submit', this.localFormValues);
|
||||
});
|
||||
},
|
||||
|
||||
handleCancel() {
|
||||
@@ -277,7 +387,7 @@ export default {
|
||||
|
||||
// Format different field types
|
||||
if (field.type === 'boolean') {
|
||||
return value ? 'Ja' : 'Nee';
|
||||
return value ? true : false;
|
||||
} else if (field.type === 'enum' && !value && field.default) {
|
||||
return field.default;
|
||||
}
|
||||
|
||||
@@ -199,9 +199,18 @@ export default {
|
||||
return this.modelValue;
|
||||
},
|
||||
set(value) {
|
||||
// Type conversie voor boolean velden
|
||||
let processedValue = value;
|
||||
if (this.field.type === 'boolean') {
|
||||
// Converteer alle mogelijke waarden naar echte boolean
|
||||
console.log('FormField Boolean Value: ', value);
|
||||
processedValue = Boolean(value);
|
||||
console.log('FormField Boolean Processed Value: ', processedValue);
|
||||
}
|
||||
|
||||
// Voorkom emit als de waarde niet is veranderd
|
||||
if (JSON.stringify(value) !== JSON.stringify(this.modelValue)) {
|
||||
this.$emit('update:modelValue', value);
|
||||
if (JSON.stringify(processedValue) !== JSON.stringify(this.modelValue)) {
|
||||
this.$emit('update:modelValue', processedValue);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user