Files
RoleForge/app/static/js/app.js
Sergey Antropoff b2d3b6b803 Профиль и аккаунт
- API и страницы профиля (редактирование, смена пароля, аватар), публичные карточки.
- Сайдбар: блок пользователя, пункт Users для admin/root, исправлен порядок
  инициализации (показ admin-only после initAuthSession, currentUser).
- GET /auth/me: ответ через ProfileMeResponse, исправлена валидация (is_founder bool).

Команды и роли
- Маршруты и UI команд; при редактировании роли: видимость Team, выбор команды
  в модалке, только команды с активным членством; API team_id в details/ update.
- GET /api/v1/teams?membership=active для списка «своих» команд.
- Форма роли: сегмент Team, панель выбора команды только при Team и не при
  с
2026-05-05 08:15:21 +03:00

92 lines
3.8 KiB
JavaScript

window.dashboard = window.dashboard || {};
window.addEventListener("unhandledrejection", async (event) => {
event.preventDefault();
await dashboard.showErrorModal(event.reason, "Unhandled error");
});
window.addEventListener("error", async (event) => {
if (!event || !event.error) return;
await dashboard.showErrorModal(event.error, "Application error");
});
dashboard.initTheme();
dashboard.initLogout();
/**
* Show Users / Admin accordion etc. only for admin|root. Must run after initAuthSession so the token
* and dashboard.currentUser are loaded (parallel initAdminOnlyMenu previously raced and left links hidden).
*/
async function applyAdminOnlySidebarNav() {
if (!dashboard.getAccessToken()) return;
try {
const me = dashboard.currentUser || (await dashboard.apiFetch("/auth/me"));
const role = String((me && me.role) || "").toLowerCase();
const show = role === "admin" || role === "root";
document.querySelectorAll(".menu-item-admin-only").forEach((el) => {
el.style.display = show ? "" : "none";
});
if (show) {
try {
dashboard.markActiveSidebar();
} catch (_e2) {
void _e2;
}
} else if (String(dashboard.page || "").startsWith("admin-")) {
window.location.href = "/";
}
} catch (_e) {
document.querySelectorAll(".menu-item-admin-only").forEach((el) => {
el.style.display = "none";
});
if (String(dashboard.page || "").startsWith("admin-")) {
window.location.href = "/";
}
}
}
void (async function bootstrapSessionAndSidebar() {
await dashboard.initAuthSession();
dashboard.initSidebarUserMenu();
await applyAdminOnlySidebarNav();
})();
if (dashboard.page === "audit-logs") dashboard.initAuditLogs();
if (dashboard.page === "users") dashboard.initUsersPage();
if (dashboard.page === "user-detail") dashboard.initUserDetailPage();
if (dashboard.page === "admin-options") dashboard.initAdminOptionsPage();
if (dashboard.page === "clusters") dashboard.initClusterList();
if (dashboard.page === "cluster-create") dashboard.initClusterCreate();
if (dashboard.page === "addon-install") dashboard.initAddonInstall();
if (dashboard.page === "cluster-detail") dashboard.initClusterDetail();
if (dashboard.page === "cluster-provisioning") dashboard.initClusterDetail();
if (dashboard.page === "cluster-rbac") dashboard.initClusterDetail();
if (dashboard.page === "cluster-access") dashboard.initClusterDetail();
if (dashboard.page === "cluster-ops") dashboard.initClusterDetail();
if (dashboard.page === "task-logs") dashboard.initTaskLogs();
if (dashboard.page === "tasks") dashboard.initTasksPage();
if (dashboard.page === "task-console") dashboard.initTaskConsole();
if (dashboard.page === "molecule") dashboard.initMolecule();
if (dashboard.page === "roles") dashboard.initRolesPage();
if (dashboard.page === "roles-create" || dashboard.page === "roles-view") dashboard.initRoleViewPage();
if (dashboard.page === "teams") dashboard.initTeamsPage();
if (dashboard.page === "team-detail") dashboard.initTeamDetailPage();
if (dashboard.page === "admin-config") dashboard.initAdminConfigPage();
if (dashboard.page === "admin-os-images") dashboard.initAdminOsImagesPage();
if (dashboard.page === "admin-yaml-lint-config") dashboard.initAdminYamlLintPage();
if (dashboard.page === "admin-json-lint-config") dashboard.initAdminJsonLintPage();
if (dashboard.page === "admin-categories") dashboard.initAdminCategoriesPage();
if (dashboard.page === "login") dashboard.initLogin();
if (dashboard.page === "register") dashboard.initRegister();
if (dashboard.page === "reset-password") dashboard.initResetPassword();
if (
dashboard.page === "profile" ||
dashboard.page === "profile-edit" ||
dashboard.page === "profile-avatar" ||
dashboard.page === "profile-password" ||
dashboard.page === "profile-user"
) {
dashboard.initProfilePages();
}
dashboard.initMenuAccordions();
dashboard.markActiveSidebar();