<%# Groups admin list: the same building blocks as the Users screen, around the shell, but backed by live Keto subject sets (admin-groups.ts). Filter/sort/page round-trip the URL. %><% const nav = include("partials/nav-tree", { nodes: chrome.nav }); const filters = include("partials/filter-bar", model.filterBar); const table = include("partials/data-table", model.table); const pager = include("partials/pagination", model.pagination); // Only offer "New group" to a groups:write holder — a groups:read one would get the 403 page. const actions = model.canWrite === false ? "" : '' + t("admin.groups.new") + ''; -%> <%- include("partials/shell", { actions, body: filters + table + pager, brand: chrome.brand, breadcrumbs: model.breadcrumbs, csrfToken: chrome.csrfToken, nav, theme: chrome.theme, title: model.title, user: chrome.user, }) %>