@unbrained/pm-web 2026.8.7 → 2026.8.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/app.d.ts +16 -0
- package/dist/app.js +16 -0
- package/dist/app.js.map +1 -1
- package/dist/auth.d.ts +5 -0
- package/dist/auth.js.map +1 -1
- package/dist/board.d.ts +53 -0
- package/dist/board.js +48 -0
- package/dist/board.js.map +1 -1
- package/dist/crypto.d.ts +23 -0
- package/dist/crypto.js +32 -0
- package/dist/crypto.js.map +1 -1
- package/dist/db.d.ts +19 -0
- package/dist/db.js +19 -0
- package/dist/db.js.map +1 -1
- package/dist/ical.d.ts +72 -0
- package/dist/ical.js +73 -0
- package/dist/ical.js.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.js +52 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.d.ts +8 -0
- package/dist/middleware/auth.js.map +1 -1
- package/dist/oidc.d.ts +87 -0
- package/dist/oidc.js +113 -0
- package/dist/oidc.js.map +1 -1
- package/dist/routes/admin.js +15 -0
- package/dist/routes/admin.js.map +1 -1
- package/dist/routes/github.js +13 -0
- package/dist/routes/github.js.map +1 -1
- package/dist/routes/oidc.d.ts +10 -0
- package/dist/routes/oidc.js +51 -0
- package/dist/routes/oidc.js.map +1 -1
- package/dist/routes/pm.js +132 -1
- package/dist/routes/pm.js.map +1 -1
- package/dist/routes/sharing.js +8 -0
- package/dist/routes/sharing.js.map +1 -1
- package/dist/services/mutation-event-watcher.js +13 -0
- package/dist/services/mutation-event-watcher.js.map +1 -1
- package/dist/services/pm-runner.d.ts +82 -0
- package/dist/services/pm-runner.js +121 -0
- package/dist/services/pm-runner.js.map +1 -1
- package/dist/services/project-watcher.d.ts +22 -0
- package/dist/services/project-watcher.js +51 -0
- package/dist/services/project-watcher.js.map +1 -1
- package/dist/services/realtime-bus.d.ts +46 -0
- package/dist/services/realtime-bus.js +59 -0
- package/dist/services/realtime-bus.js.map +1 -1
- package/dist/services/sse.d.ts +134 -0
- package/dist/services/sse.js +145 -0
- package/dist/services/sse.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +5 -3
- package/public/src/app.js +44 -1
- package/public/src/app.js.map +1 -1
- package/public/src/app.ts +44 -1
- package/public/src/components/modals.js +11 -0
- package/public/src/components/modals.js.map +1 -1
- package/public/src/components/modals.ts +11 -0
- package/public/src/components/toast.js +2 -0
- package/public/src/components/toast.js.map +1 -1
- package/public/src/components/toast.ts +2 -0
- package/public/src/constants.js +21 -4
- package/public/src/constants.js.map +1 -1
- package/public/src/constants.ts +21 -4
- package/public/src/filters.js +10 -7
- package/public/src/filters.js.map +1 -1
- package/public/src/filters.ts +10 -7
- package/public/src/i18n.js +11 -1
- package/public/src/i18n.js.map +1 -1
- package/public/src/i18n.ts +13 -1
- package/public/src/state.js +3 -0
- package/public/src/state.js.map +1 -1
- package/public/src/state.ts +3 -0
- package/public/src/sw.ts +71 -7
- package/public/src/theme.js +13 -1
- package/public/src/theme.js.map +1 -1
- package/public/src/theme.ts +15 -1
- package/public/src/types.ts +2 -0
- package/public/src/utils.js +26 -1
- package/public/src/utils.js.map +1 -1
- package/public/src/utils.ts +26 -1
- package/public/src/views/activity.js +1 -0
- package/public/src/views/activity.js.map +1 -1
- package/public/src/views/activity.ts +1 -0
- package/public/src/views/admin.js +134 -0
- package/public/src/views/admin.js.map +1 -1
- package/public/src/views/admin.ts +134 -0
- package/public/src/views/auth.js +31 -0
- package/public/src/views/auth.js.map +1 -1
- package/public/src/views/auth.ts +31 -0
- package/public/src/views/calendar.js +3 -0
- package/public/src/views/calendar.js.map +1 -1
- package/public/src/views/calendar.ts +3 -0
- package/public/src/views/comments-audit.js +1 -0
- package/public/src/views/comments-audit.js.map +1 -1
- package/public/src/views/comments-audit.ts +1 -0
- package/public/src/views/config.js +67 -0
- package/public/src/views/config.js.map +1 -1
- package/public/src/views/config.ts +67 -0
- package/public/src/views/context.js +2 -0
- package/public/src/views/context.js.map +1 -1
- package/public/src/views/context.ts +2 -0
- package/public/src/views/create.js +3 -0
- package/public/src/views/create.js.map +1 -1
- package/public/src/views/create.ts +3 -0
- package/public/src/views/dedupe.js +1 -0
- package/public/src/views/dedupe.js.map +1 -1
- package/public/src/views/dedupe.ts +1 -0
- package/public/src/views/export.js +6 -0
- package/public/src/views/export.js.map +1 -1
- package/public/src/views/export.ts +6 -0
- package/public/src/views/github.js +58 -0
- package/public/src/views/github.js.map +1 -1
- package/public/src/views/github.ts +58 -0
- package/public/src/views/graph-canvas.js +18 -0
- package/public/src/views/graph-canvas.js.map +1 -1
- package/public/src/views/graph-canvas.ts +20 -0
- package/public/src/views/graph.js +41 -0
- package/public/src/views/graph.js.map +1 -1
- package/public/src/views/graph.ts +42 -1
- package/public/src/views/groups.js +45 -0
- package/public/src/views/groups.js.map +1 -1
- package/public/src/views/groups.ts +45 -0
- package/public/src/views/guide.js +3 -0
- package/public/src/views/guide.js.map +1 -1
- package/public/src/views/guide.ts +3 -0
- package/public/src/views/health.js +3 -0
- package/public/src/views/health.js.map +1 -1
- package/public/src/views/health.ts +3 -0
- package/public/src/views/items.js +196 -6
- package/public/src/views/items.js.map +1 -1
- package/public/src/views/items.ts +196 -6
- package/public/src/views/normalize.js +2 -0
- package/public/src/views/normalize.js.map +1 -1
- package/public/src/views/normalize.ts +2 -0
- package/public/src/views/packages.js +41 -0
- package/public/src/views/packages.js.map +1 -1
- package/public/src/views/packages.ts +41 -0
- package/public/src/views/plan-execution.js +6 -0
- package/public/src/views/plan-execution.js.map +1 -1
- package/public/src/views/plan-execution.ts +8 -0
- package/public/src/views/plan.js +145 -0
- package/public/src/views/plan.js.map +1 -1
- package/public/src/views/plan.ts +146 -1
- package/public/src/views/projects.js +60 -0
- package/public/src/views/projects.js.map +1 -1
- package/public/src/views/projects.ts +60 -0
- package/public/src/views/router.js +43 -0
- package/public/src/views/router.js.map +1 -1
- package/public/src/views/router.ts +43 -0
- package/public/src/views/search.js +5 -0
- package/public/src/views/search.js.map +1 -1
- package/public/src/views/search.ts +5 -0
- package/public/src/views/settings.js +36 -0
- package/public/src/views/settings.js.map +1 -1
- package/public/src/views/settings.ts +36 -0
- package/public/src/views/shared.js +1 -0
- package/public/src/views/shared.js.map +1 -1
- package/public/src/views/shared.ts +1 -0
- package/public/src/views/sharing.js +32 -0
- package/public/src/views/sharing.js.map +1 -1
- package/public/src/views/sharing.ts +32 -0
- package/public/src/views/stats.js +1 -0
- package/public/src/views/stats.js.map +1 -1
- package/public/src/views/stats.ts +1 -0
- package/public/src/views/templates.js +4 -0
- package/public/src/views/templates.js.map +1 -1
- package/public/src/views/templates.ts +4 -0
- package/public/src/views/validate.js +1 -0
- package/public/src/views/validate.js.map +1 -1
- package/public/src/views/validate.ts +1 -0
- package/public/sw.js +60 -5
package/public/src/theme.ts
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
// preference) is "auto", matching the data-theme="auto" attribute in the HTML
|
|
9
9
|
// shell so there is no flash of the wrong theme on load.
|
|
10
10
|
|
|
11
|
+
/** The user-selectable theme modes: an explicit `dark` or `light`, or `auto`
|
|
12
|
+
* which follows the OS `prefers-color-scheme` setting. */
|
|
11
13
|
export type Theme = 'dark' | 'light' | 'auto';
|
|
12
14
|
|
|
13
15
|
const STORAGE_KEY = 'pm-web-theme';
|
|
@@ -26,6 +28,9 @@ const LABEL: Record<Theme, string> = {
|
|
|
26
28
|
dark: 'Theme: dark',
|
|
27
29
|
};
|
|
28
30
|
|
|
31
|
+
/** Read the persisted theme choice from localStorage, defaulting to `auto`
|
|
32
|
+
* when no preference is stored or when localStorage is unavailable (e.g.
|
|
33
|
+
* private browsing). */
|
|
29
34
|
export function getStoredTheme(): Theme {
|
|
30
35
|
try {
|
|
31
36
|
const v = localStorage.getItem(STORAGE_KEY);
|
|
@@ -34,6 +39,9 @@ export function getStoredTheme(): Theme {
|
|
|
34
39
|
return 'auto';
|
|
35
40
|
}
|
|
36
41
|
|
|
42
|
+
/** Apply a theme to the page: set `data-theme` on `<html>`, update the toggle
|
|
43
|
+
* button's glyph/title, and sync the `<meta name="theme-color">` tag so the
|
|
44
|
+
* mobile browser chrome matches the chosen palette. */
|
|
37
45
|
export function applyTheme(theme: Theme): void {
|
|
38
46
|
document.documentElement.setAttribute('data-theme', theme);
|
|
39
47
|
const btn = document.getElementById('theme-toggle');
|
|
@@ -54,18 +62,24 @@ export function applyTheme(theme: Theme): void {
|
|
|
54
62
|
}
|
|
55
63
|
}
|
|
56
64
|
|
|
65
|
+
/** Persist a theme choice to localStorage and immediately apply it to the
|
|
66
|
+
* document. */
|
|
57
67
|
export function setTheme(theme: Theme): void {
|
|
58
68
|
try { localStorage.setItem(STORAGE_KEY, theme); } catch { /* ignore */ }
|
|
59
69
|
applyTheme(theme);
|
|
60
70
|
}
|
|
61
71
|
|
|
72
|
+
/** Advance to the next theme in the auto → light → dark order (wrapping
|
|
73
|
+
* around) and persist plus apply the new selection. */
|
|
62
74
|
export function cycleTheme(): void {
|
|
63
75
|
const current = getStoredTheme();
|
|
64
76
|
const next = ORDER[(ORDER.indexOf(current) + 1) % ORDER.length];
|
|
65
77
|
setTheme(next);
|
|
66
78
|
}
|
|
67
79
|
|
|
68
|
-
|
|
80
|
+
/** Apply the persisted (or default) theme early to avoid a flash of the wrong
|
|
81
|
+
* palette, then register a listener so `auto` mode tracks live OS theme
|
|
82
|
+
* changes. */
|
|
69
83
|
export function initTheme(): void {
|
|
70
84
|
applyTheme(getStoredTheme());
|
|
71
85
|
// When in auto mode, react to live OS theme changes.
|
package/public/src/types.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// TYPES
|
|
3
3
|
// ═══════════════════════════════════════════════════════════════
|
|
4
4
|
|
|
5
|
+
/** The signed-in application user, as returned by the auth/session endpoints. */
|
|
5
6
|
export interface User {
|
|
6
7
|
id: string;
|
|
7
8
|
email: string;
|
|
@@ -255,6 +256,7 @@ export interface AdminGroup {
|
|
|
255
256
|
|
|
256
257
|
export type ToastType = 'info' | 'success' | 'error';
|
|
257
258
|
|
|
259
|
+
/** Union of every navigation view key the SPA router can display. */
|
|
258
260
|
export type ViewName =
|
|
259
261
|
| 'projects' | 'items' | 'create' | 'activity' | 'search'
|
|
260
262
|
| 'stats' | 'calendar' | 'context' | 'graph' | 'sharing' | 'groups'
|
package/public/src/utils.js
CHANGED
|
@@ -2,23 +2,41 @@
|
|
|
2
2
|
// UTILITIES
|
|
3
3
|
// ═══════════════════════════════════════════════════════════════
|
|
4
4
|
import { PRIORITY_LABELS, TYPE_ICONS } from './constants.js';
|
|
5
|
+
/** Escape `&`, `<`, `>` and `"` so a value can be inserted into HTML text or a
|
|
6
|
+
* double-quoted attribute. Falsy input yields an empty string.
|
|
7
|
+
*
|
|
8
|
+
* NOT sufficient for a JavaScript context. It does not escape `'`, and even if
|
|
9
|
+
* it did, the browser HTML-decodes an attribute value before the JS parser sees
|
|
10
|
+
* it, so an entity cannot keep a quote from terminating a string literal. A
|
|
11
|
+
* value interpolated into an inline handler — `onclick="fn('${escHtml(x)}')"` —
|
|
12
|
+
* is therefore still injectable. Pass such values through a `data-*` attribute
|
|
13
|
+
* and bind with `addEventListener` instead. */
|
|
5
14
|
export function escHtml(s) {
|
|
6
15
|
if (!s)
|
|
7
16
|
return '';
|
|
8
17
|
return String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
9
18
|
}
|
|
19
|
+
/** Build a colored status-badge span for an item status, mapping the
|
|
20
|
+
* `in_progress` code to "In Progress" and CSS-classifying the rest by slug. */
|
|
10
21
|
export function statusBadge(s) {
|
|
11
22
|
const labels = { in_progress: 'In Progress' };
|
|
12
23
|
const status = String(s || 'unknown');
|
|
13
24
|
const classSuffix = status.toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^-+|-+$/g, '') || 'unknown';
|
|
14
25
|
return `<span class="status-badge status-${classSuffix}">${escHtml(labels[status] || status)}</span>`;
|
|
15
26
|
}
|
|
27
|
+
/** Render a priority indicator span (P0–P4) whose color class and tooltip
|
|
28
|
+
* label come from the PRIORITY_LABELS lookup table. */
|
|
16
29
|
export function priorityDot(p) {
|
|
17
30
|
return `<span class="priority-dot priority-${p}" title="P${p}: ${PRIORITY_LABELS[p] || ''}"></span>`;
|
|
18
31
|
}
|
|
32
|
+
/** Render an item-type glyph span using the TYPE_ICONS map, falling back to
|
|
33
|
+
* the middle-dot character when the type has no assigned icon. */
|
|
19
34
|
export function typeIcon(t) {
|
|
20
|
-
return `<span class="item-type-icon" title="${t}">${TYPE_ICONS[t] || '·'}</span>`;
|
|
35
|
+
return `<span class="item-type-icon" title="${escHtml(t)}">${TYPE_ICONS[t] || '·'}</span>`;
|
|
21
36
|
}
|
|
37
|
+
/** Format a timestamp as a short relative phrase ("just now", "5m ago",
|
|
38
|
+
* "3h ago", "2d ago") or, past a week, a localized calendar date. Falsy or
|
|
39
|
+
* unparseable input returns an empty string. */
|
|
22
40
|
export function relTime(ts) {
|
|
23
41
|
if (!ts)
|
|
24
42
|
return '';
|
|
@@ -35,11 +53,16 @@ export function relTime(ts) {
|
|
|
35
53
|
return `${Math.floor(s / 86400)}d ago`;
|
|
36
54
|
return d.toLocaleDateString();
|
|
37
55
|
}
|
|
56
|
+
/** Format a timestamp as a US-style short date (e.g. "Jan 5, 2026"). Falsy
|
|
57
|
+
* input returns an empty string. */
|
|
38
58
|
export function fmtDate(ts) {
|
|
39
59
|
if (!ts)
|
|
40
60
|
return '';
|
|
41
61
|
return new Date(ts).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
|
|
42
62
|
}
|
|
63
|
+
/** Toggle a button's disabled state and, when `text` is supplied, update the
|
|
64
|
+
* button label — replacing the first inner span when present, otherwise the
|
|
65
|
+
* whole text content. */
|
|
43
66
|
export function setLoading(btn, yes, text) {
|
|
44
67
|
btn.disabled = yes;
|
|
45
68
|
if (text) {
|
|
@@ -50,9 +73,11 @@ export function setLoading(btn, yes, text) {
|
|
|
50
73
|
btn.textContent = text;
|
|
51
74
|
}
|
|
52
75
|
}
|
|
76
|
+
/** Build an HTML string of `n` placeholder skeleton rows for loading states. */
|
|
53
77
|
export function skeletonRows(n = 5) {
|
|
54
78
|
return Array.from({ length: n }, () => '<div class="skeleton skeleton-row"></div>').join('');
|
|
55
79
|
}
|
|
80
|
+
/** Build an HTML string of `n` placeholder skeleton cards for loading states. */
|
|
56
81
|
export function skeletonCards(n = 3) {
|
|
57
82
|
return Array.from({ length: n }, () => '<div class="skeleton skeleton-card"></div>').join('');
|
|
58
83
|
}
|
package/public/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,YAAY;AACZ,kEAAkE;AAClE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,UAAU,OAAO,CAAC,CAA4B;IAClD,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAC,QAAQ,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,MAAM,MAAM,GAA2B,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;IAC5G,OAAO,oCAAoC,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,sCAAsC,CAAC,aAAa,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,IAAE,EAAE,WAAW,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,OAAO,uCAAuC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAE,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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"}
|
package/public/src/utils.ts
CHANGED
|
@@ -3,11 +3,22 @@
|
|
|
3
3
|
// ═══════════════════════════════════════════════════════════════
|
|
4
4
|
import { PRIORITY_LABELS, TYPE_ICONS } from './constants.js';
|
|
5
5
|
|
|
6
|
+
/** Escape `&`, `<`, `>` and `"` so a value can be inserted into HTML text or a
|
|
7
|
+
* double-quoted attribute. Falsy input yields an empty string.
|
|
8
|
+
*
|
|
9
|
+
* NOT sufficient for a JavaScript context. It does not escape `'`, and even if
|
|
10
|
+
* it did, the browser HTML-decodes an attribute value before the JS parser sees
|
|
11
|
+
* it, so an entity cannot keep a quote from terminating a string literal. A
|
|
12
|
+
* value interpolated into an inline handler — `onclick="fn('${escHtml(x)}')"` —
|
|
13
|
+
* is therefore still injectable. Pass such values through a `data-*` attribute
|
|
14
|
+
* and bind with `addEventListener` instead. */
|
|
6
15
|
export function escHtml(s: string | undefined | null): string {
|
|
7
16
|
if (!s) return '';
|
|
8
17
|
return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
|
|
9
18
|
}
|
|
10
19
|
|
|
20
|
+
/** Build a colored status-badge span for an item status, mapping the
|
|
21
|
+
* `in_progress` code to "In Progress" and CSS-classifying the rest by slug. */
|
|
11
22
|
export function statusBadge(s: string): string {
|
|
12
23
|
const labels: Record<string, string> = { in_progress: 'In Progress' };
|
|
13
24
|
const status = String(s || 'unknown');
|
|
@@ -15,14 +26,21 @@ export function statusBadge(s: string): string {
|
|
|
15
26
|
return `<span class="status-badge status-${classSuffix}">${escHtml(labels[status] || status)}</span>`;
|
|
16
27
|
}
|
|
17
28
|
|
|
29
|
+
/** Render a priority indicator span (P0–P4) whose color class and tooltip
|
|
30
|
+
* label come from the PRIORITY_LABELS lookup table. */
|
|
18
31
|
export function priorityDot(p: number): string {
|
|
19
32
|
return `<span class="priority-dot priority-${p}" title="P${p}: ${PRIORITY_LABELS[p]||''}"></span>`;
|
|
20
33
|
}
|
|
21
34
|
|
|
35
|
+
/** Render an item-type glyph span using the TYPE_ICONS map, falling back to
|
|
36
|
+
* the middle-dot character when the type has no assigned icon. */
|
|
22
37
|
export function typeIcon(t: string): string {
|
|
23
|
-
return `<span class="item-type-icon" title="${t}">${TYPE_ICONS[t]||'·'}</span>`;
|
|
38
|
+
return `<span class="item-type-icon" title="${escHtml(t)}">${TYPE_ICONS[t]||'·'}</span>`;
|
|
24
39
|
}
|
|
25
40
|
|
|
41
|
+
/** Format a timestamp as a short relative phrase ("just now", "5m ago",
|
|
42
|
+
* "3h ago", "2d ago") or, past a week, a localized calendar date. Falsy or
|
|
43
|
+
* unparseable input returns an empty string. */
|
|
26
44
|
export function relTime(ts: string | undefined | null): string {
|
|
27
45
|
if (!ts) return '';
|
|
28
46
|
const d = new Date(ts);
|
|
@@ -35,11 +53,16 @@ export function relTime(ts: string | undefined | null): string {
|
|
|
35
53
|
return d.toLocaleDateString();
|
|
36
54
|
}
|
|
37
55
|
|
|
56
|
+
/** Format a timestamp as a US-style short date (e.g. "Jan 5, 2026"). Falsy
|
|
57
|
+
* input returns an empty string. */
|
|
38
58
|
export function fmtDate(ts: string | undefined | null): string {
|
|
39
59
|
if (!ts) return '';
|
|
40
60
|
return new Date(ts).toLocaleDateString('en-US', { year:'numeric', month:'short', day:'numeric' });
|
|
41
61
|
}
|
|
42
62
|
|
|
63
|
+
/** Toggle a button's disabled state and, when `text` is supplied, update the
|
|
64
|
+
* button label — replacing the first inner span when present, otherwise the
|
|
65
|
+
* whole text content. */
|
|
43
66
|
export function setLoading(btn: HTMLButtonElement, yes: boolean, text?: string): void {
|
|
44
67
|
btn.disabled = yes;
|
|
45
68
|
if (text) {
|
|
@@ -49,10 +72,12 @@ export function setLoading(btn: HTMLButtonElement, yes: boolean, text?: string):
|
|
|
49
72
|
}
|
|
50
73
|
}
|
|
51
74
|
|
|
75
|
+
/** Build an HTML string of `n` placeholder skeleton rows for loading states. */
|
|
52
76
|
export function skeletonRows(n = 5): string {
|
|
53
77
|
return Array.from({length: n}, () => '<div class="skeleton skeleton-row"></div>').join('');
|
|
54
78
|
}
|
|
55
79
|
|
|
80
|
+
/** Build an HTML string of `n` placeholder skeleton cards for loading states. */
|
|
56
81
|
export function skeletonCards(n = 3): string {
|
|
57
82
|
return Array.from({length: n}, () => '<div class="skeleton skeleton-card"></div>').join('');
|
|
58
83
|
}
|
|
@@ -5,6 +5,7 @@ import { state } from '../state.js';
|
|
|
5
5
|
import { api } from '../api.js';
|
|
6
6
|
import { escHtml, relTime } from '../utils.js';
|
|
7
7
|
import { TYPE_ICONS } from '../constants.js';
|
|
8
|
+
/** Renders the activity feed for the current project, listing recent changes with their type icon, a description or fallback, and a relative timestamp. */
|
|
8
9
|
export async function renderActivityView() {
|
|
9
10
|
const el = document.getElementById('content-activity');
|
|
10
11
|
if (!el)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.js","sourceRoot":"","sources":["activity.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gBAAgB;AAChB,kEAAkE;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE;QAAE,OAAO;IAChB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAAC,EAAE,CAAC,SAAS,GAAG,wFAAwF,CAAC;QAAC,OAAO;IAAC,CAAC;IAC/I,EAAE,CAAC,SAAS,GAAG;;gGAE+E,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;;;iJAGe,CAAC;IAEhJ,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAmB,KAAK,EAAC,aAAa,KAAK,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAC5G,MAAM,KAAK,GAAoB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,GAAG,yHAAyH,CAAC;YAC7I,OAAO;QACT,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,CAAA;;qCAED,UAAU,CAAC,CAAC,CAAC,IAAI,IAAE,EAAE,CAAC,IAAE,GAAG;;uCAEzB,OAAO,CAAC,CAAC,CAAC,OAAO,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,MAAM,IAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;uCACxD,OAAO,CAAC,CAAC,CAAC,SAAS,IAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA,CAAC,CAAA,+CAA+C,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAA,CAAC,CAAA,EAAE;;aAE7I,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAAC,OAAM,GAAY,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,MAAM;YAAE,MAAM,CAAC,SAAS,GAAG,iEAAiE,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;IAC1K,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["activity.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gBAAgB;AAChB,kEAAkE;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,2JAA2J;AAC3J,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE;QAAE,OAAO;IAChB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAAC,EAAE,CAAC,SAAS,GAAG,wFAAwF,CAAC;QAAC,OAAO;IAAC,CAAC;IAC/I,EAAE,CAAC,SAAS,GAAG;;gGAE+E,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;;;iJAGe,CAAC;IAEhJ,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAmB,KAAK,EAAC,aAAa,KAAK,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAC5G,MAAM,KAAK,GAAoB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,GAAG,yHAAyH,CAAC;YAC7I,OAAO;QACT,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,CAAA;;qCAED,UAAU,CAAC,CAAC,CAAC,IAAI,IAAE,EAAE,CAAC,IAAE,GAAG;;uCAEzB,OAAO,CAAC,CAAC,CAAC,OAAO,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,MAAM,IAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;uCACxD,OAAO,CAAC,CAAC,CAAC,SAAS,IAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA,CAAC,CAAA,+CAA+C,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAA,CAAC,CAAA,EAAE;;aAE7I,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAAC,OAAM,GAAY,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,MAAM;YAAE,MAAM,CAAC,SAAS,GAAG,iEAAiE,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;IAC1K,CAAC;AACH,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { escHtml, relTime } from '../utils.js';
|
|
|
7
7
|
import { TYPE_ICONS } from '../constants.js';
|
|
8
8
|
import type { ActivityEntry, ActivityResponse } from '../api-types.js';
|
|
9
9
|
|
|
10
|
+
/** Renders the activity feed for the current project, listing recent changes with their type icon, a description or fallback, and a relative timestamp. */
|
|
10
11
|
export async function renderActivityView(): Promise<void> {
|
|
11
12
|
const el = document.getElementById('content-activity');
|
|
12
13
|
if (!el) return;
|
|
@@ -6,6 +6,12 @@ import { confirmDialog, createModal, showModal, hideModal } from '../components/
|
|
|
6
6
|
function getAuditActor(entry) {
|
|
7
7
|
return entry.actor_name || entry.actor_email || entry.userId || entry.userEmail || '—';
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Maps raw audit-log API entries into the AuditEntry shape used by the admin
|
|
11
|
+
* view, copying only the fields the UI consumes and dropping the rest.
|
|
12
|
+
* @param entries - Raw entries returned by GET /admin/audit.
|
|
13
|
+
* @returns Normalized audit entries for rendering.
|
|
14
|
+
*/
|
|
9
15
|
function normalizeAuditEntries(entries) {
|
|
10
16
|
return entries.map((entry) => ({
|
|
11
17
|
id: entry.id,
|
|
@@ -16,6 +22,13 @@ function normalizeAuditEntries(entries) {
|
|
|
16
22
|
created_at: entry.created_at,
|
|
17
23
|
}));
|
|
18
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolves a human-readable description for one audit entry, preferring the
|
|
27
|
+
* explicit description, then "{action} by {userId}", then the bare action,
|
|
28
|
+
* falling back to an em-dash when nothing is available.
|
|
29
|
+
* @param entry - The audit entry to describe.
|
|
30
|
+
* @returns The best available description string.
|
|
31
|
+
*/
|
|
19
32
|
function getAuditDescription(entry) {
|
|
20
33
|
if (entry.description)
|
|
21
34
|
return entry.description;
|
|
@@ -34,6 +47,13 @@ let auditFilter = '';
|
|
|
34
47
|
let currentPage = 1;
|
|
35
48
|
const PAGE_SIZE = 20;
|
|
36
49
|
let adminAuditTotal = 0;
|
|
50
|
+
/**
|
|
51
|
+
* Loads one page of audit-log entries from the admin API into module state
|
|
52
|
+
* (a no-op unless the current user is an admin). Computes the offset from the
|
|
53
|
+
* page number, normalizes the returned entries, and records the total count
|
|
54
|
+
* and current page.
|
|
55
|
+
* @param page - 1-based page index; clamped to a minimum of 1.
|
|
56
|
+
*/
|
|
37
57
|
async function loadAuditData(page = 1) {
|
|
38
58
|
if (!state.user?.is_admin)
|
|
39
59
|
return;
|
|
@@ -48,6 +68,14 @@ function paginate(items, page) {
|
|
|
48
68
|
const start = (page - 1) * PAGE_SIZE;
|
|
49
69
|
return items.slice(start, start + PAGE_SIZE);
|
|
50
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Builds the HTML for the prev/next pagination controls for a result set,
|
|
73
|
+
* showing the current page out of the total and the item count. Returns an
|
|
74
|
+
* empty string when there is only a single page so callers render nothing.
|
|
75
|
+
* @param totalItems - Total number of items being paginated.
|
|
76
|
+
* @param currentPg - The page currently in view.
|
|
77
|
+
* @returns Pagination markup, or an empty string for a single page.
|
|
78
|
+
*/
|
|
51
79
|
function renderPagination(totalItems, currentPg, hook) {
|
|
52
80
|
const totalPages = Math.max(1, Math.ceil(totalItems / PAGE_SIZE));
|
|
53
81
|
if (totalPages <= 1)
|
|
@@ -61,6 +89,13 @@ function renderPagination(totalItems, currentPg, hook) {
|
|
|
61
89
|
</div>
|
|
62
90
|
</div>`;
|
|
63
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Renders one admin user as an HTML table row, showing the display name and
|
|
94
|
+
* email, an admin/user role pill, GitHub connection status, the creation
|
|
95
|
+
* date, and buttons to toggle the admin role and delete the user.
|
|
96
|
+
* @param user - The user record to render.
|
|
97
|
+
* @returns A `<tr>` markup string.
|
|
98
|
+
*/
|
|
64
99
|
function renderUserRow(user) {
|
|
65
100
|
return `
|
|
66
101
|
<tr>
|
|
@@ -83,6 +118,13 @@ function renderUserRow(user) {
|
|
|
83
118
|
</td>
|
|
84
119
|
</tr>`;
|
|
85
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Renders one admin project as an HTML table row, showing the name, slug and
|
|
123
|
+
* prefix, the owner, the linked GitHub repo (or "Not linked"), sync status,
|
|
124
|
+
* the creation date, and a delete button.
|
|
125
|
+
* @param project - The project record to render.
|
|
126
|
+
* @returns A `<tr>` markup string.
|
|
127
|
+
*/
|
|
86
128
|
function renderProjectRow(project) {
|
|
87
129
|
const repo = project.github_owner && project.github_repo ? `${project.github_owner}/${project.github_repo}` : 'Not linked';
|
|
88
130
|
return `
|
|
@@ -102,6 +144,13 @@ function renderProjectRow(project) {
|
|
|
102
144
|
</td>
|
|
103
145
|
</tr>`;
|
|
104
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Renders one audit-log entry as an HTML table row, showing the resolved
|
|
149
|
+
* actor, an action pill, the target, a truncated details string, and a
|
|
150
|
+
* localized timestamp.
|
|
151
|
+
* @param entry - The audit entry to render.
|
|
152
|
+
* @returns A `<tr>` markup string.
|
|
153
|
+
*/
|
|
105
154
|
function renderAuditRow(entry) {
|
|
106
155
|
const actor = getAuditActor(entry);
|
|
107
156
|
const details = getAuditDescription(entry);
|
|
@@ -114,6 +163,12 @@ function renderAuditRow(entry) {
|
|
|
114
163
|
<td style="white-space:nowrap">${entry.created_at ? new Date(entry.created_at).toLocaleString() : entry.timestamp ? new Date(entry.timestamp).toLocaleString() : '—'}</td>
|
|
115
164
|
</tr>`;
|
|
116
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Renders one admin group as an HTML card, showing the group name, owner
|
|
168
|
+
* email and member count, an optional description, and a delete button.
|
|
169
|
+
* @param group - The group record to render.
|
|
170
|
+
* @returns A card markup string.
|
|
171
|
+
*/
|
|
117
172
|
function renderGroupCard(group) {
|
|
118
173
|
return `
|
|
119
174
|
<div class="admin-group-card">
|
|
@@ -125,6 +180,13 @@ function renderGroupCard(group) {
|
|
|
125
180
|
${group.description ? `<p>${escHtml(group.description)}</p>` : ''}
|
|
126
181
|
</div>`;
|
|
127
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Formats a duration given in seconds into a compact uptime string expressed
|
|
185
|
+
* in hours and minutes (e.g. "3h 12m"), or minutes only (e.g. "5m") when
|
|
186
|
+
* under an hour.
|
|
187
|
+
* @param seconds - Elapsed seconds to format.
|
|
188
|
+
* @returns The formatted uptime string.
|
|
189
|
+
*/
|
|
128
190
|
function formatUptime(seconds) {
|
|
129
191
|
const h = Math.floor(seconds / 3600);
|
|
130
192
|
const m = Math.floor((seconds % 3600) / 60);
|
|
@@ -132,6 +194,14 @@ function formatUptime(seconds) {
|
|
|
132
194
|
return `${h}h ${m}m`;
|
|
133
195
|
return `${m}m`;
|
|
134
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Renders the full admin view markup from the overview data, applying the
|
|
199
|
+
* current user/project/audit search filters and paging the active tab's list.
|
|
200
|
+
* Includes the header, stat cards, tab bar, and the section for the active
|
|
201
|
+
* tab (users, projects, groups, or audit).
|
|
202
|
+
* @param data - The admin overview (users, projects, groups, and stats).
|
|
203
|
+
* @returns The admin view HTML string.
|
|
204
|
+
*/
|
|
135
205
|
function renderAdmin(data) {
|
|
136
206
|
// Filter users
|
|
137
207
|
const filteredUsers = data.users.filter(u => !userFilter || u.email.toLowerCase().includes(userFilter.toLowerCase()) || (u.display_name || '').toLowerCase().includes(userFilter.toLowerCase()));
|
|
@@ -247,6 +317,12 @@ function renderAdmin(data) {
|
|
|
247
317
|
${renderPagination(adminAuditTotal, currentPage, 'audit')}`}
|
|
248
318
|
</section>` : ''}`;
|
|
249
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* Mounts the admin view into the #content-admin element. Shows an
|
|
322
|
+
* access-denied state for non-admins, otherwise a loading spinner while it
|
|
323
|
+
* fetches the overview (and the current audit page when on the audit tab) and
|
|
324
|
+
* renders it, surfacing fetch failures in an empty-state block.
|
|
325
|
+
*/
|
|
250
326
|
export async function renderAdminView() {
|
|
251
327
|
const el = document.getElementById('content-admin');
|
|
252
328
|
if (!el)
|
|
@@ -267,6 +343,12 @@ export async function renderAdminView() {
|
|
|
267
343
|
el.innerHTML = `<div class="empty-state"><div class="empty-state-text">Admin failed: ${escHtml(err instanceof Error ? err.message : String(err))}</div></div>`;
|
|
268
344
|
}
|
|
269
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* Toggles a user's admin flag via the admin API, shows a success or error
|
|
348
|
+
* toast, and re-renders the admin view.
|
|
349
|
+
* @param userId - The id of the user to update.
|
|
350
|
+
* @param isAdmin - The desired admin flag.
|
|
351
|
+
*/
|
|
270
352
|
export async function setAdminRole(userId, isAdmin) {
|
|
271
353
|
try {
|
|
272
354
|
await api('PATCH', `/admin/users/${encodeURIComponent(userId)}`, { isAdmin });
|
|
@@ -277,6 +359,12 @@ export async function setAdminRole(userId, isAdmin) {
|
|
|
277
359
|
toast(err instanceof Error ? err.message : String(err), 'error');
|
|
278
360
|
}
|
|
279
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* Switches the active admin tab and resets to the first page. For the audit
|
|
364
|
+
* tab it reloads the first audit page before re-rendering; for other tabs it
|
|
365
|
+
* re-renders from the cached overview.
|
|
366
|
+
* @param tab - The tab to activate.
|
|
367
|
+
*/
|
|
280
368
|
export function adminSwitchTab(tab) {
|
|
281
369
|
adminTab = tab;
|
|
282
370
|
currentPage = 1;
|
|
@@ -297,6 +385,11 @@ export function adminSwitchTab(tab) {
|
|
|
297
385
|
el.innerHTML = renderAdmin(adminData);
|
|
298
386
|
}
|
|
299
387
|
}
|
|
388
|
+
/**
|
|
389
|
+
* Updates the user search filter from the filter input, resets to the first
|
|
390
|
+
* page, and re-renders the cached admin view.
|
|
391
|
+
* @param filter - Case-insensitive substring matched against user fields.
|
|
392
|
+
*/
|
|
300
393
|
export function adminFilterUsers(filter) {
|
|
301
394
|
userFilter = filter;
|
|
302
395
|
currentPage = 1;
|
|
@@ -306,6 +399,11 @@ export function adminFilterUsers(filter) {
|
|
|
306
399
|
el.innerHTML = renderAdmin(adminData);
|
|
307
400
|
}
|
|
308
401
|
}
|
|
402
|
+
/**
|
|
403
|
+
* Updates the project search filter from the filter input, resets to the
|
|
404
|
+
* first page, and re-renders the cached admin view.
|
|
405
|
+
* @param filter - Case-insensitive substring matched against project fields.
|
|
406
|
+
*/
|
|
309
407
|
export function adminFilterProjects(filter) {
|
|
310
408
|
projectFilter = filter;
|
|
311
409
|
currentPage = 1;
|
|
@@ -315,6 +413,12 @@ export function adminFilterProjects(filter) {
|
|
|
315
413
|
el.innerHTML = renderAdmin(adminData);
|
|
316
414
|
}
|
|
317
415
|
}
|
|
416
|
+
/**
|
|
417
|
+
* Updates the audit-log search filter from the filter input, resets to the
|
|
418
|
+
* first page, and reloads the first audit page before re-rendering when the
|
|
419
|
+
* audit tab is active.
|
|
420
|
+
* @param filter - Case-insensitive substring matched against audit fields.
|
|
421
|
+
*/
|
|
318
422
|
export function adminFilterAudit(filter) {
|
|
319
423
|
auditFilter = filter;
|
|
320
424
|
currentPage = 1;
|
|
@@ -334,6 +438,13 @@ export function adminFilterAudit(filter) {
|
|
|
334
438
|
el.innerHTML = renderAdmin(adminData);
|
|
335
439
|
}
|
|
336
440
|
}
|
|
441
|
+
/**
|
|
442
|
+
* Navigates the active tab to the given page. Does nothing for negative pages
|
|
443
|
+
* or when no overview is cached. For the audit tab it loads the requested
|
|
444
|
+
* audit page; otherwise it clamps the page to the filtered total and
|
|
445
|
+
* re-renders.
|
|
446
|
+
* @param page - The 1-based page to navigate to.
|
|
447
|
+
*/
|
|
337
448
|
export async function adminSetPage(page) {
|
|
338
449
|
if (page < 1)
|
|
339
450
|
return;
|
|
@@ -357,6 +468,12 @@ export async function adminSetPage(page) {
|
|
|
357
468
|
if (el)
|
|
358
469
|
el.innerHTML = renderAdmin(adminData);
|
|
359
470
|
}
|
|
471
|
+
/**
|
|
472
|
+
* Prompts for confirmation, then deletes the user via the admin API, shows a
|
|
473
|
+
* toast, and re-renders the admin view.
|
|
474
|
+
* @param userId - The id of the user to delete.
|
|
475
|
+
* @param userName - Display name used in the confirmation prompt.
|
|
476
|
+
*/
|
|
360
477
|
export async function adminDeleteUser(userId, userName) {
|
|
361
478
|
confirmDialog(`Delete user "${userName}"?`, 'This action cannot be undone. The user will be permanently removed.', async () => {
|
|
362
479
|
try {
|
|
@@ -369,6 +486,12 @@ export async function adminDeleteUser(userId, userName) {
|
|
|
369
486
|
}
|
|
370
487
|
}, true);
|
|
371
488
|
}
|
|
489
|
+
/**
|
|
490
|
+
* Prompts for confirmation, then deletes the project and its items via the
|
|
491
|
+
* admin API, shows a toast, and re-renders the admin view.
|
|
492
|
+
* @param projectId - The id of the project to delete.
|
|
493
|
+
* @param projectName - Display name used in the confirmation prompt.
|
|
494
|
+
*/
|
|
372
495
|
export async function adminDeleteProject(projectId, projectName) {
|
|
373
496
|
confirmDialog(`Delete project "${projectName}"?`, 'This will permanently delete the project and all its items. This action cannot be undone.', async () => {
|
|
374
497
|
try {
|
|
@@ -381,6 +504,12 @@ export async function adminDeleteProject(projectId, projectName) {
|
|
|
381
504
|
}
|
|
382
505
|
}, true);
|
|
383
506
|
}
|
|
507
|
+
/**
|
|
508
|
+
* Prompts for confirmation, then deletes the group and its memberships via
|
|
509
|
+
* the admin API, shows a toast, and re-renders the admin view.
|
|
510
|
+
* @param groupId - The id of the group to delete.
|
|
511
|
+
* @param groupName - Display name used in the confirmation prompt.
|
|
512
|
+
*/
|
|
384
513
|
export async function adminDeleteGroup(groupId, groupName) {
|
|
385
514
|
confirmDialog(`Delete group "${groupName}"?`, 'This will permanently remove the group and all its memberships.', async () => {
|
|
386
515
|
try {
|
|
@@ -393,6 +522,11 @@ export async function adminDeleteGroup(groupId, groupName) {
|
|
|
393
522
|
}
|
|
394
523
|
}, true);
|
|
395
524
|
}
|
|
525
|
+
/**
|
|
526
|
+
* Opens a modal form to create a new group. On submit it validates that a name
|
|
527
|
+
* was entered, POSTs the group to the admin API, shows a toast, closes the
|
|
528
|
+
* modal, and re-renders the admin view.
|
|
529
|
+
*/
|
|
396
530
|
export function adminCreateGroup() {
|
|
397
531
|
const id = 'admin-create-group-' + Date.now();
|
|
398
532
|
createModal(id, 'Create Group', `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["admin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["admin.ts"],"names":[],"mappings":"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"}
|