This commit is contained in:
2026-01-13 00:05:49 +01:00
parent 47327a12e0
commit 4f271a8560
7 changed files with 94 additions and 51 deletions

View File

@@ -21,7 +21,6 @@ let configExampleBtn;
let configExampleDialog;
let bridgeSetupDialog;
let openBridgeSetupBtn;
let adminLoadBridgeBtn;
let closeBridgeSetupBtn;
export function initBridgeSetupPage() {
@@ -40,7 +39,6 @@ export function initBridgeSetupPage() {
modeInputs = Array.from(form.querySelectorAll('input[name="db_mode"]'));
bridgeSetupDialog = document.getElementById('bridgeSetupDialog');
openBridgeSetupBtn = document.getElementById('btn-open-bridge-setup');
adminLoadBridgeBtn = document.getElementById('btn-admin-load-bridge');
closeBridgeSetupBtn = document.getElementById('btn-close-bridge-setup');
form.addEventListener('submit', submitBridgeSetup);
@@ -59,12 +57,6 @@ export function initBridgeSetupPage() {
closeBridgeSetupBtn?.addEventListener('click', () => {
if (bridgeSetupDialog?.open) bridgeSetupDialog.close();
});
adminLoadBridgeBtn?.addEventListener('click', (ev) => {
if (bridgeSetupDialog?.showModal && !bridgeSetupDialog.open) {
bridgeSetupDialog.showModal();
}
loadTablesFromBridge(ev, { preserveSelection: state.selectedTables.length > 0 });
});
modeInputs.forEach(input => {
input.addEventListener('change', () => applyModeVisibility(input.value));
});

View File

@@ -40,6 +40,7 @@ let adminTablesAllSelect;
let adminTablesSelectedSelect;
let adminTablesAddBtn;
let adminTablesRemoveBtn;
let adminLoadBridgeBtn;
ensureConsoleCapture();
@@ -69,6 +70,7 @@ export function initAccountPage() {
adminTablesSelectedSelect = document.getElementById('adminBridgeTablesSelected');
adminTablesAddBtn = document.getElementById('adminBridgeTablesAdd');
adminTablesRemoveBtn = document.getElementById('adminBridgeTablesRemove');
adminLoadBridgeBtn = document.getElementById('btn-admin-load-bridge');
document.getElementById('btn-user-add')?.addEventListener('click', () => openUserForm());
document.getElementById('userFormCancel')?.addEventListener('click', () => closeUserForm());
@@ -112,6 +114,9 @@ export function initAccountPage() {
adminTablesRemoveBtn?.addEventListener('click', () => {
removeAdminTables(getSelectedOptions(adminTablesSelectedSelect));
});
adminLoadBridgeBtn?.addEventListener('click', () => {
refreshBridgeTablesFromEndpoint();
});
window.addEventListener('bridge-setup-updated', (ev) => {
const setup = ev?.detail || {};
@@ -413,6 +418,32 @@ function addAdminTables(list) {
updateAdminTableSelects(whitelist, merged);
}
async function refreshBridgeTablesFromEndpoint() {
if (state.loading) return;
state.loading = true;
try {
const res = await apiAction('account.bridge.test', { method: 'POST', data: {} });
if (!res?.ok) throw new Error(res?.error || 'Bridge konnte nicht abgefragt werden');
const fetched = normalizeTableList(res.tables || []);
if (!fetched.length) {
toast('Keine Tabellen vom Bridge-Endpunkt erhalten', false);
return;
}
const selected = normalizeTableList(state.settings.bridge_tables || []);
const selectedSet = new Set(selected);
const nextSelected = fetched.filter(name => selectedSet.has(name));
state.settings.bridge_setup = state.settings.bridge_setup || {};
state.settings.bridge_setup.tables = fetched;
state.settings.bridge_tables = nextSelected;
updateAdminTableSelects(fetched, nextSelected);
toast('Tabellen aktualisiert', true);
} catch (err) {
toast(err.message || 'Bridge konnte nicht geprüft werden', false);
} finally {
state.loading = false;
}
}
function removeAdminTables(list) {
const whitelist = normalizeTableList(state.settings.bridge_setup?.tables || []);
if (!whitelist.length) return;