// params-render.js — общий рендер параметров операций // Используется: operations.js (ручной режим), scenario-form.js (редактор сценариев) // Зависимости: _esc() из utils.js, validateJson() из utils.js function renderParamRow(p, allInst) { const req = p.isRequired; const hasDfl = p.defaultValue !== null && p.defaultValue !== undefined && p.defaultValue !== ''; const labelCls = req ? (hasDfl ? 'req' : 'req-nodfl') : ''; const dfl = hasDfl ? p.defaultValue : (req ? '' : ''); const vl = p.valueList; const isMap = (p.dataType || '').startsWith('map'); let input; if (vl && Array.isArray(vl)) { input = ``; } else if (p.refSvcId) { const refInsts = allInst.filter(i => i.serviceId === p.refSvcId && i.explainedStatus !== 'deleted'); let opts = refInsts.map(i => ``).join(''); if (!dfl) opts = '' + opts; input = ``; } else if (p.dataType === 'boolean') { input = ``; } else if (p.dataDescriptor && isMap) { return renderMapFixedRow(p, dfl); } else { const dt = isMap ? 'map' : ''; input = ``; if (isMap) input += ``; } return `
${input}
`; } function renderMapFixedRow(p, dfl) { const dd = p.dataDescriptor; let subHtml = ''; let dflObj = {}; try { dflObj = JSON.parse(dfl || '{}'); } catch (e) { } Object.keys(dd).forEach(subKey => { const sub = dd[subKey]; const subDfl = dflObj[subKey] !== undefined ? dflObj[subKey] : (sub.defaultValue || ''); const subVl = sub.valueList; const subReq = sub.isRequired; const subNoDfl = subReq && !subDfl && subDfl !== 0 && subDfl !== false; const subLblCls = subNoDfl ? 'req-nodfl' : ''; let si; if (subVl && Array.isArray(subVl)) { si = ``; } else if (sub.dataType === 'boolean') { si = ``; } else { si = ``; } subHtml += `
${si}
`; }); return `
${subHtml}
`; } function collectParams(containerSelector) { containerSelector = containerSelector || '#params-form'; const pp = {}; const nested = {}; const container = document.querySelector(containerSelector); if (!container) return pp; container.querySelectorAll('[name^="p_"]').forEach(el => { let v = el.value; const dt = el.dataset.type || ''; if (dt === 'mapchild') { const name = el.name.replace('p_', ''); const dot = name.indexOf('.'); const parentKey = name.substring(0, dot); const subKey = name.substring(dot + 1); if (!nested[parentKey]) nested[parentKey] = {}; nested[parentKey][subKey] = v; return; } if (dt === 'array' || dt.startsWith('array')) v = JSON.stringify([v]); if (dt === 'map' || dt === 'map-fixed') v = v || '{}'; pp[el.name.replace('p_', '')] = v; }); for (const pk in nested) pp[pk] = JSON.stringify(nested[pk]); return pp; }