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

@@ -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;