fix: Simplify data normalization in confirmation form HTML generator
Problem: - Function was trying to normalize already normalized data - Used undefined 'raw' variable after refactoring - Data structure mismatch causing form not to render Solution: 1. Removed redundant normalization logic: - Data is already normalized in StepClaimConfirmation component - Use caseObj directly from data.case - Only ensure base structures exist (user, project, offenders, meta, attachments) 2. Fixed undefined variable: - Changed raw.token to data.token - Removed unused normalization code 3. Simplified data flow: - Input: data.case (already normalized) - Output: caseJson with same structure - JavaScript in HTML uses injected.case directly Files: - frontend/src/components/form/generateConfirmationFormHTML.ts: Simplified normalization
This commit is contained in:
@@ -2,16 +2,18 @@
|
|||||||
// Основана на структуре из n8n Code node "Mini-app Подтверждение данных"
|
// Основана на структуре из n8n Code node "Mini-app Подтверждение данных"
|
||||||
|
|
||||||
export function generateConfirmationFormHTML(data: any): string {
|
export function generateConfirmationFormHTML(data: any): string {
|
||||||
// Нормализуем данные
|
// Данные уже нормализованы в компоненте, используем их напрямую
|
||||||
const raw = {
|
const caseObj = data.case || {};
|
||||||
propertyName: data.case || {},
|
|
||||||
session_token: data.session_token || '',
|
// Извлекаем SMS данные
|
||||||
|
const smsInputData = {
|
||||||
prefix: data.sms_meta?.prefix || '',
|
prefix: data.sms_meta?.prefix || '',
|
||||||
|
session_token: data.session_token || '',
|
||||||
telegram_id: data.telegram_id || '',
|
telegram_id: data.telegram_id || '',
|
||||||
claim_id: data.case?.meta?.claim_id || '',
|
claim_id: data.case?.meta?.claim_id || '',
|
||||||
unified_id: data.case?.meta?.unified_id || '',
|
unified_id: data.case?.meta?.unified_id || '',
|
||||||
user_id: data.case?.meta?.user_id || '',
|
user_id: data.case?.meta?.user_id || '',
|
||||||
token: data.token || '',
|
status: data.case?.meta?.status || '',
|
||||||
};
|
};
|
||||||
|
|
||||||
// Извлекаем SMS данные
|
// Извлекаем SMS данные
|
||||||
@@ -108,102 +110,19 @@ export function generateConfirmationFormHTML(data: any): string {
|
|||||||
ogrn: null,
|
ogrn: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Нормализация данных
|
// Данные уже нормализованы, используем их напрямую
|
||||||
function normalizeData(data: any): any {
|
// Убеждаемся, что есть базовые структуры
|
||||||
// Если данные приходят в новом формате (с propertyName)
|
if (!caseObj.offenders || !caseObj.offenders.length) {
|
||||||
if (data.propertyName && data.propertyName.applicant) {
|
|
||||||
const props = data.propertyName;
|
|
||||||
const applicant = props.applicant || {};
|
|
||||||
const caseData = props.case || {};
|
|
||||||
const contract = props.contract_or_service || {};
|
|
||||||
const offenders = props.offenders || [];
|
|
||||||
const claim = props.claim || {};
|
|
||||||
const meta = props.meta || {};
|
|
||||||
const attachments = props.attachments_names || [];
|
|
||||||
|
|
||||||
return {
|
|
||||||
user: {
|
|
||||||
firstname: applicant.first_name || null,
|
|
||||||
secondname: applicant.middle_name || null,
|
|
||||||
lastname: applicant.last_name || null,
|
|
||||||
mobile: applicant.phone || null,
|
|
||||||
email: applicant.email || null,
|
|
||||||
birthday: applicant.birth_date_fmt || applicant.birth_date || null,
|
|
||||||
birthplace: applicant.birth_place || null,
|
|
||||||
mailingstreet: applicant.address || null,
|
|
||||||
inn: applicant.inn || null,
|
|
||||||
tgid: null,
|
|
||||||
},
|
|
||||||
project: {
|
|
||||||
category: caseData.category || null,
|
|
||||||
direction: caseData.direction || null,
|
|
||||||
agrprice: normalizeMoney(contract.amount_paid_fmt || contract.amount_paid) || null,
|
|
||||||
subject: contract.subject || null,
|
|
||||||
agrdate: contract.agreement_date_fmt || contract.agreement_date || null,
|
|
||||||
startdate: contract.period_start_fmt || contract.period_start || null,
|
|
||||||
finishdate: contract.period_end_fmt || contract.period_end || null,
|
|
||||||
period_text: contract.period_text || null,
|
|
||||||
description: claim.description || null,
|
|
||||||
reason: claim.reason || caseData.category || null,
|
|
||||||
},
|
|
||||||
attachments: attachments,
|
|
||||||
offenders: offenders.map((o: any) => ({
|
|
||||||
accountname: o.name || null,
|
|
||||||
address: o.address || null,
|
|
||||||
email: o.email || null,
|
|
||||||
website: o.website || null,
|
|
||||||
phone: o.phone || null,
|
|
||||||
inn: o.inn || null,
|
|
||||||
ogrn: o.ogrn || null,
|
|
||||||
})),
|
|
||||||
meta: {
|
|
||||||
...meta,
|
|
||||||
session_token: data.session_token || meta.claim_id || null,
|
|
||||||
prefix: data.prefix || null,
|
|
||||||
telegram_id: data.telegram_id || null,
|
|
||||||
claim_id: data.claim_id || meta.claim_id || null,
|
|
||||||
unified_id: meta.unified_id || null,
|
|
||||||
user_id: meta.user_id || null,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Старый формат (обратная совместимость)
|
|
||||||
return {
|
|
||||||
user: Object.assign({}, baseUser, tryParseJSON(data.user) || data.user || {}),
|
|
||||||
project: Object.assign({}, baseProject, tryParseJSON(data.project) || data.project || {}),
|
|
||||||
offenders: Array.isArray(data.offenders)
|
|
||||||
? data.offenders.map((o: any) => Object.assign({}, baseOffender, o || {}))
|
|
||||||
: [],
|
|
||||||
meta: Object.assign({}, data.meta || {}),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Нормализуем данные
|
|
||||||
let dataCandidate = null;
|
|
||||||
if (raw.propertyName !== undefined) {
|
|
||||||
if (typeof raw.propertyName === 'object' && raw.propertyName !== null) {
|
|
||||||
dataCandidate = raw.propertyName;
|
|
||||||
} else if (typeof raw.propertyName === 'string') {
|
|
||||||
dataCandidate = tryParseJSON(raw.propertyName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!dataCandidate && raw.value !== undefined) dataCandidate = tryParseJSON(raw.value);
|
|
||||||
if (!dataCandidate && (raw.user || raw.project || raw.offenders || raw.meta))
|
|
||||||
dataCandidate = raw;
|
|
||||||
if (!dataCandidate && raw.data) dataCandidate = raw.data;
|
|
||||||
if (!dataCandidate && raw.output) dataCandidate = tryParseJSON(raw.output) || raw.output;
|
|
||||||
dataCandidate = dataCandidate || {};
|
|
||||||
|
|
||||||
const dataToNormalize = Array.isArray(dataCandidate) ? dataCandidate[0] : dataCandidate;
|
|
||||||
const caseObj = normalizeData({ propertyName: dataToNormalize, ...raw });
|
|
||||||
if (!caseObj.offenders.length) {
|
|
||||||
caseObj.offenders = [Object.assign({}, baseOffender)];
|
caseObj.offenders = [Object.assign({}, baseOffender)];
|
||||||
}
|
}
|
||||||
|
if (!caseObj.user) caseObj.user = Object.assign({}, baseUser, caseObj.user || {});
|
||||||
|
if (!caseObj.project) caseObj.project = Object.assign({}, baseProject, caseObj.project || {});
|
||||||
|
if (!caseObj.meta) caseObj.meta = {};
|
||||||
|
if (!caseObj.attachments) caseObj.attachments = [];
|
||||||
|
|
||||||
// Сервисные поля
|
// Сервисные поля
|
||||||
const sessionToken = String(safeGet(caseObj.meta?.session_token, raw.session_token, ''));
|
const sessionToken = String(safeGet(caseObj.meta?.session_token, data.session_token, ''));
|
||||||
const telegramId = String(safeGet(caseObj.user?.tgid, raw.telegram_id, ''));
|
const telegramId = String(safeGet(caseObj.user?.tgid, data.telegram_id, ''));
|
||||||
|
|
||||||
const smsMetaData = {
|
const smsMetaData = {
|
||||||
session_token: String(safeGet(smsInputData.session_token, sessionToken, '')),
|
session_token: String(safeGet(smsInputData.session_token, sessionToken, '')),
|
||||||
@@ -219,7 +138,7 @@ export function generateConfirmationFormHTML(data: any): string {
|
|||||||
case: caseObj,
|
case: caseObj,
|
||||||
session_token: sessionToken,
|
session_token: sessionToken,
|
||||||
telegram_id: telegramId,
|
telegram_id: telegramId,
|
||||||
token: raw.token || '',
|
token: data.token || '',
|
||||||
sms_meta: smsMetaData,
|
sms_meta: smsMetaData,
|
||||||
});
|
});
|
||||||
caseJson = caseJson.replace(/</g, '\\u003c');
|
caseJson = caseJson.replace(/</g, '\\u003c');
|
||||||
|
|||||||
Reference in New Issue
Block a user