diff --git a/crates/miroir-proxy/admin-ui/dist/app.js b/crates/miroir-proxy/admin-ui/dist/app.js index f4aa7fb..0dffebb 100644 --- a/crates/miroir-proxy/admin-ui/dist/app.js +++ b/crates/miroir-proxy/admin-ui/dist/app.js @@ -1569,31 +1569,104 @@ }); } - function previewSettingsChanges() { + async function previewSettingsChanges() { + const indexUid = state.currentSettingsIndex; const editor = document.getElementById('settingsEditor'); const newSettings = JSON.parse(editor.value); - const currentJson = document.getElementById('currentSettingsJson').textContent; - const currentSettings = JSON.parse(currentJson || '{}'); - // Compute fingerprint of new settings - const newFingerprint = computeFingerprint(newSettings); - document.getElementById('newFingerprint').textContent = newFingerprint; + try { + // Call the 2PC preview endpoint + const preview = await fetchAPI(`/indexes/${indexUid}/settings`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(newSettings) + }); - // Compute diff - const diffSummary = document.getElementById('diffSummary'); - const diff = computeDiff(currentSettings, newSettings); + // Display fingerprint info + document.getElementById('newFingerprint').textContent = preview.proposedFingerprint || 'N/A'; + const currentFingerprint = preview.currentFingerprint || 'N/A'; + document.getElementById('currentFingerprint').textContent = currentFingerprint; - if (diff.length === 0) { - diffSummary.innerHTML = '

No changes detected.

'; - } else { - diffSummary.innerHTML = diff.map(line => - `
${escapeHtml(line.text)}
` - ).join(''); + // Display version info + const versionInfo = document.getElementById('settingsVersionInfo'); + if (versionInfo) { + versionInfo.innerHTML = ` +
Current Version: ${preview.currentVersion}
+
Expected Version: ${preview.expectedVersion}
+ `; + } + + // Display node targets + const nodeTargetsInfo = document.getElementById('nodeTargetsInfo'); + if (nodeTargetsInfo) { + nodeTargetsInfo.innerHTML = ` +
Target Nodes: ${preview.nodeCount}
+
+ ${preview.nodeTargets.map(n => `${escapeHtml(n.id || n.address)}`).join('')} +
+ `; + } + + // Display 2PC flow info + const flowInfo = document.getElementById('twoPhaseFlowInfo'); + if (flowInfo && preview.twoPhaseFlow) { + const flow = preview.twoPhaseFlow; + flowInfo.innerHTML = ` +
+ Phase 1: ${escapeHtml(flow.phase1.name)} +
${escapeHtml(flow.phase1.description)}
+
+
+ Phase 2: ${escapeHtml(flow.phase2.name)} +
${escapeHtml(flow.phase2.description)}
+
Expected Fingerprint: ${escapeHtml(flow.phase2.expectedFingerprint || '').substring(0, 16)}...
+
+
+ Phase 3: ${escapeHtml(flow.phase3.name)} +
${escapeHtml(flow.phase3.description)}
+
New Version: ${flow.phase3.newVersion}
+
+ `; + } + + // Display diff summary + const diffSummary = document.getElementById('diffSummary'); + const diff = preview.diff || []; + + if (diff.length === 0) { + diffSummary.innerHTML = '

No changes detected.

'; + } else { + diffSummary.innerHTML = diff.map(change => { + let text = ''; + let className = ''; + + switch (change.type) { + case 'added': + text = `+ ${change.key}: ${JSON.stringify(change.value)}`; + className = 'added'; + break; + case 'removed': + text = `- ${change.key}: ${JSON.stringify(change.oldValue)}`; + className = 'removed'; + break; + case 'modified': + text = `~ ${change.key}: ${JSON.stringify(change.old)} → ${JSON.stringify(change.new)}`; + className = 'modified'; + break; + } + + return `
${escapeHtml(text)}
`; + }).join(''); + } + + document.getElementById('settingsDiff').style.display = 'block'; + document.getElementById('settingsPreviewBtn').style.display = 'none'; + document.getElementById('settingsApplyBtn').style.display = 'inline-flex'; + + } catch (error) { + console.error('Failed to preview settings:', error); + alert('Failed to preview settings. Please try again.'); } - - document.getElementById('settingsDiff').style.display = 'block'; - document.getElementById('settingsPreviewBtn').style.display = 'none'; - document.getElementById('settingsApplyBtn').style.display = 'inline-flex'; } async function applySettingsChanges() { diff --git a/crates/miroir-proxy/admin-ui/dist/index.html b/crates/miroir-proxy/admin-ui/dist/index.html index 8ab4764..b1dd59a 100644 --- a/crates/miroir-proxy/admin-ui/dist/index.html +++ b/crates/miroir-proxy/admin-ui/dist/index.html @@ -204,8 +204,14 @@

2PC Preview — What Will Change

- New Fingerprint: + Current Fingerprint:
+
+ Proposed Fingerprint: +
+
+
+