Initial commit
This commit is contained in:
96
skrift-configurator/assets/js/configurator-utils.js
Normal file
96
skrift-configurator/assets/js/configurator-utils.js
Normal file
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* Gemeinsame Utility-Funktionen für Skrift Konfigurator
|
||||
*/
|
||||
|
||||
/**
|
||||
* Bereitet Platzhalter für einen bestimmten Index vor
|
||||
* Wird von PreviewManager und Backend-Integration verwendet
|
||||
*/
|
||||
export function preparePlaceholdersForIndex(state, index) {
|
||||
const placeholders = {};
|
||||
|
||||
// Prüfen ob strukturierte Empfängerdaten (klassische Adresse) im aktuellen Flow verwendet werden:
|
||||
// - Adressmodus muss 'classic' sein (bei 'free' gibt es keine Felder wie vorname, name etc.)
|
||||
// - UND: Direktversand ODER Kuvert mit Empfängeradresse
|
||||
const isClassicAddress = (state.addressMode || 'classic') === 'classic';
|
||||
const needsRecipientData = isClassicAddress && (
|
||||
state.answers?.shippingMode === 'direct' ||
|
||||
(state.answers?.envelope === true && state.answers?.envelopeMode === 'recipientData')
|
||||
);
|
||||
|
||||
// Empfänger-Feldnamen, die aus recipientRows kommen können
|
||||
const recipientFields = ['vorname', 'name', 'ort', 'strasse', 'hausnummer', 'plz', 'land'];
|
||||
|
||||
// Platzhalter aus placeholderValues extrahieren
|
||||
if (state.placeholderValues) {
|
||||
for (const [name, values] of Object.entries(state.placeholderValues)) {
|
||||
// Empfängerfelder nur überspringen wenn sie aus recipientRows kommen
|
||||
if (needsRecipientData && recipientFields.includes(name)) {
|
||||
continue;
|
||||
}
|
||||
if (Array.isArray(values) && values.length > index) {
|
||||
placeholders[name] = values[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Empfängerdaten aus recipientRows hinzufügen (nur wenn benötigt)
|
||||
if (needsRecipientData && Array.isArray(state.recipientRows) && state.recipientRows.length > index) {
|
||||
const recipient = state.recipientRows[index];
|
||||
placeholders['vorname'] = recipient.firstName || '';
|
||||
placeholders['name'] = recipient.lastName || '';
|
||||
placeholders['ort'] = recipient.city || '';
|
||||
placeholders['strasse'] = recipient.street || '';
|
||||
placeholders['hausnummer'] = recipient.houseNumber || '';
|
||||
placeholders['plz'] = recipient.zip || '';
|
||||
placeholders['land'] = recipient.country || '';
|
||||
}
|
||||
|
||||
return placeholders;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validiert Empfängerzeilen (gemeinsame Logik für klassische und freie Adressen)
|
||||
*/
|
||||
export function validateRecipientRows(state, requiredCount) {
|
||||
const addressMode = state.addressMode || 'classic';
|
||||
|
||||
if (addressMode === 'free') {
|
||||
// Freie Adresse: mindestens Zeile 1 muss ausgefüllt sein
|
||||
const rows = state.freeAddressRows || [];
|
||||
if (rows.length !== requiredCount) return false;
|
||||
|
||||
for (const r of rows) {
|
||||
if (!r) return false;
|
||||
if (!String(r.line1 || "").trim()) return false;
|
||||
}
|
||||
} else {
|
||||
// Klassische Adresse
|
||||
const rows = state.recipientRows || [];
|
||||
if (rows.length !== requiredCount) return false;
|
||||
|
||||
const required = [
|
||||
"firstName",
|
||||
"lastName",
|
||||
"street",
|
||||
"houseNumber",
|
||||
"zip",
|
||||
"city",
|
||||
"country",
|
||||
];
|
||||
|
||||
for (const r of rows) {
|
||||
if (!r) return false;
|
||||
for (const k of required) {
|
||||
if (!String(r[k] || "").trim()) return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
export default {
|
||||
preparePlaceholdersForIndex,
|
||||
validateRecipientRows,
|
||||
};
|
||||
Reference in New Issue
Block a user