Dateien
VG-Environment/src/data-maintenance/data-maintenance.js
T

120 Zeilen
3.8 KiB
JavaScript

"use strict";
const gvlReferenceMaintenanceStatus = document.getElementById(
"gvl-reference-maintenance-status"
);
const gvlReferenceProtectedRevisions = document.getElementById(
"gvl-reference-protected-revisions"
);
const gvlReferenceMaintenanceMessage = document.getElementById(
"gvl-reference-maintenance-message"
);
const purgeGvlReferenceDataButton = document.getElementById(
"purge-gvl-reference-data-button"
);
document.addEventListener("DOMContentLoaded", async () => {
purgeGvlReferenceDataButton.addEventListener("click", async () => {
await purgeUnlockedEvidenceRecords();
});
await renderGvlReferenceMaintenanceStatus();
});
async function renderGvlReferenceMaintenanceStatus() {
try {
const result = await browser.runtime.sendMessage({
type: "list_gvl_snapshots"
});
if (!result?.success) {
throw new Error(result?.error ?? "list_gvl_snapshots_failed");
}
renderGvlReferenceSnapshotStatus(result.gvlSnapshots ?? []);
} catch (error) {
renderGvlReferenceStatus("–", true, "Status nicht verfügbar.");
renderProtectedRevisions([]);
console.warn("VG-Observe GVL maintenance status failed", error);
}
}
function renderGvlReferenceSnapshotStatus(snapshots) {
if (!snapshots.length) {
renderGvlReferenceStatus("–", true, "Keine GVL-Revisionen.");
renderProtectedRevisions([]);
return;
}
const protectedRevisions = snapshots
.filter((snapshot) => snapshot.workspaceDeleteProtected === true)
.map((snapshot) => snapshot.vendorListVersion)
.filter((vendorListVersion) => vendorListVersion !== null)
.filter((vendorListVersion) => vendorListVersion !== undefined);
const allRevisionsDeleteAllowed = snapshots.every((snapshot) => {
return snapshot.workspaceDeleteAllowed === true;
});
if (allRevisionsDeleteAllowed) {
renderGvlReferenceStatus("🔓", false, "GVL-Revisionen löschbar.");
} else if (protectedRevisions.length) {
renderGvlReferenceStatus("🔒", true, "GVL-Revisionen geschützt.");
} else {
renderGvlReferenceStatus("–", true, "Status nicht verfügbar.");
}
renderProtectedRevisions(protectedRevisions);
}
function renderGvlReferenceStatus(statusSymbol, buttonDisabled, message) {
gvlReferenceMaintenanceStatus.textContent = statusSymbol;
purgeGvlReferenceDataButton.disabled = buttonDisabled;
gvlReferenceMaintenanceMessage.textContent = message;
}
async function purgeUnlockedEvidenceRecords() {
if (
!confirm(
"Ungesperrte Evidence-Daten mit bestehender Schutzlogik bereinigen?"
)
) {
return;
}
purgeGvlReferenceDataButton.disabled = true;
gvlReferenceMaintenanceMessage.textContent = "Bereinigung läuft...";
try {
const result = await browser.runtime.sendMessage({
type: "purge_unlocked_evidence_records"
});
if (!result?.success) {
throw new Error(result?.error ?? "purge_unlocked_evidence_records_failed");
}
await renderGvlReferenceMaintenanceStatus();
gvlReferenceMaintenanceMessage.textContent = buildPurgeSuccessMessage(result);
} catch (error) {
await renderGvlReferenceMaintenanceStatus();
gvlReferenceMaintenanceMessage.textContent = "Bereinigung fehlgeschlagen.";
console.warn("VG-Observe protected purge failed", error);
}
}
function buildPurgeSuccessMessage(result) {
if (Number.isFinite(result.deletedCount)) {
return `Bereinigung abgeschlossen: ${result.deletedCount} Records.`;
}
return "Bereinigung abgeschlossen.";
}
function renderProtectedRevisions(vendorListVersions) {
gvlReferenceProtectedRevisions.hidden = vendorListVersions.length === 0;
gvlReferenceProtectedRevisions.textContent = vendorListVersions.length
? `Geschützt: ${vendorListVersions
.map((vendorListVersion) => String(vendorListVersion))
.join(", ")}`
: "";
}