- 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:
Josako
2025-07-24 14:43:08 +02:00
parent fc3cae1986
commit 8a85b4540f
6 changed files with 684 additions and 70 deletions

View File

@@ -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;
}