appclean 2.0.0 → 2.0.3
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/.github/workflows/npm-publish.yml +104 -0
- package/DEVELOPMENT.md +84 -0
- package/RELEASE_GUIDE.md +257 -0
- package/RELEASE_QUICK_START.md +176 -0
- package/assets/logo.svg +48 -32
- package/dist/index.js +1 -1
- package/dist/ui/client/api/client.d.ts.map +1 -1
- package/dist/ui/client/api/client.js +5 -1
- package/dist/ui/client/api/client.js.map +1 -1
- package/dist/ui/client/app.d.ts +1 -1
- package/dist/ui/client/app.d.ts.map +1 -1
- package/dist/ui/client/app.js +10 -6
- package/dist/ui/client/app.js.map +1 -1
- package/dist/ui/client/index.html +103 -46
- package/dist/ui/client/pages/appSearch.js +12 -1
- package/dist/ui/client/pages/appSearch.js.map +1 -1
- package/dist/ui/client/pages/dashboard.d.ts.map +1 -1
- package/dist/ui/client/pages/dashboard.js +26 -5
- package/dist/ui/client/pages/dashboard.js.map +1 -1
- package/dist/ui/client/state/appStore.d.ts.map +1 -1
- package/dist/ui/client/state/appStore.js +21 -12
- package/dist/ui/client/state/appStore.js.map +1 -1
- package/dist/ui/client/state/dashboardStore.d.ts.map +1 -1
- package/dist/ui/client/state/dashboardStore.js +9 -3
- package/dist/ui/client/state/dashboardStore.js.map +1 -1
- package/dist/ui/client/styles/animations.css +384 -2
- package/dist/ui/client/styles/base.css +347 -73
- package/dist/ui/client/styles/components.css +566 -189
- package/dist/ui/client/styles/layout.css +618 -1
- package/dist/ui/client/styles/responsive.css +388 -0
- package/dist/ui/client/styles/variables.css +163 -69
- package/dist/ui/guiServer.d.ts +3 -0
- package/dist/ui/guiServer.d.ts.map +1 -1
- package/dist/ui/guiServer.js +48 -1
- package/dist/ui/guiServer.js.map +1 -1
- package/dist/utils/upgrade.d.ts +2 -1
- package/dist/utils/upgrade.d.ts.map +1 -1
- package/dist/utils/upgrade.js +14 -1
- package/dist/utils/upgrade.js.map +1 -1
- package/package.json +1 -1
- package/scripts/publish-npm.sh +64 -0
- package/src/index.ts +1 -1
- package/src/ui/client/api/client.ts +6 -1
- package/src/ui/client/app.ts +15 -11
- package/src/ui/client/index.html +103 -46
- package/src/ui/client/pages/appSearch.ts +14 -1
- package/src/ui/client/pages/dashboard.ts +27 -5
- package/src/ui/client/state/appStore.ts +24 -12
- package/src/ui/client/state/dashboardStore.ts +13 -3
- package/src/ui/client/styles/animations.css +384 -2
- package/src/ui/client/styles/base.css +347 -73
- package/src/ui/client/styles/components.css +566 -189
- package/src/ui/client/styles/layout.css +618 -1
- package/src/ui/client/styles/responsive.css +388 -0
- package/src/ui/client/styles/variables.css +163 -69
- package/src/ui/guiServer.ts +67 -1
- package/src/utils/upgrade.ts +18 -1
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import { showMainMenu, showAppMenu, showHeader, showHelp, } from './ui/menu.js';
|
|
|
9
9
|
import { promptSearchQuery, promptSelectApp, promptConfirmRemoval, promptRemovalOptions, promptInstallMethodFilter, promptSortBy, displayAppDetails, promptFinalConfirmation, } from './ui/prompts.js';
|
|
10
10
|
import { Logger, formatBytes } from './utils/logger.js';
|
|
11
11
|
import { UpgradeManager } from './utils/upgrade.js';
|
|
12
|
-
const VERSION = '2.0.
|
|
12
|
+
const VERSION = '2.0.3';
|
|
13
13
|
async function interactiveMode() {
|
|
14
14
|
showHeader();
|
|
15
15
|
const detector = new Detector();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/api/client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAS;IAKlB,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAOjE,IAAI,CAAC,CAAC,GAAG,GAAG,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAeP,GAAG,CAAC,CAAC,GAAG,GAAG,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAeP,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;YAO5D,OAAO;YA+CP,aAAa;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/api/client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAS;IAKlB,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAOjE,IAAI,CAAC,CAAC,GAAG,GAAG,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAeP,GAAG,CAAC,CAAC,GAAG,GAAG,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAeP,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;YAO5D,OAAO;YA+CP,aAAa;YAsBb,kBAAkB;CAWjC;AAKD,qBAAa,QAAS,SAAQ,KAAK;IAGxB,MAAM,EAAE,MAAM;IACd,IAAI,CAAC,EAAE,GAAG;gBAFjB,OAAO,EAAE,MAAM,EACR,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,YAAA;CAKpB;AAGD,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
|
@@ -64,7 +64,11 @@ export class ApiClient {
|
|
|
64
64
|
async parseResponse(response) {
|
|
65
65
|
const contentType = response.headers.get('content-type');
|
|
66
66
|
if (contentType?.includes('application/json')) {
|
|
67
|
-
|
|
67
|
+
const json = await response.json();
|
|
68
|
+
if (json && typeof json === 'object' && 'data' in json && 'success' in json) {
|
|
69
|
+
return json.data;
|
|
70
|
+
}
|
|
71
|
+
return json;
|
|
68
72
|
}
|
|
69
73
|
if (contentType?.includes('text/')) {
|
|
70
74
|
return (await response.text());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/ui/client/api/client.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,SAAS;IAAtB;QACU,YAAO,GAAG,EAAE,CAAC;QACb,YAAO,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/ui/client/api/client.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/client/app.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ import { router } from './utils/router.js';
|
|
|
2
2
|
import { appStore } from './state/appStore.js';
|
|
3
3
|
import { dashboardStore } from './state/dashboardStore.js';
|
|
4
4
|
import { uiStore } from './state/uiStore.js';
|
|
5
|
-
export declare function initApp(): void
|
|
5
|
+
export declare function initApp(): Promise<void>;
|
|
6
6
|
export { appStore, dashboardStore, uiStore, router };
|
|
7
7
|
//# sourceMappingURL=app.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/ui/client/app.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAW7C,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/ui/client/app.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAW7C,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB7C;AAkFD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/ui/client/app.js
CHANGED
|
@@ -6,11 +6,11 @@ import { renderDashboard } from './pages/dashboard.js';
|
|
|
6
6
|
import { renderAppSearch } from './pages/appSearch.js';
|
|
7
7
|
import { renderAppDetails } from './pages/appDetails.js';
|
|
8
8
|
import { renderSettings } from './pages/settings.js';
|
|
9
|
-
export function initApp() {
|
|
9
|
+
export async function initApp() {
|
|
10
10
|
console.log('🧹 AppClean GUI v1.0.0 initializing...');
|
|
11
11
|
registerRoutes();
|
|
12
|
-
initializeStores();
|
|
13
12
|
setupUIListeners();
|
|
13
|
+
await initializeStores();
|
|
14
14
|
router.navigate('');
|
|
15
15
|
console.log('✓ AppClean GUI ready');
|
|
16
16
|
}
|
|
@@ -35,7 +35,9 @@ function registerRoutes() {
|
|
|
35
35
|
async function initializeStores() {
|
|
36
36
|
try {
|
|
37
37
|
await dashboardStore.loadStats();
|
|
38
|
-
|
|
38
|
+
appStore.loadApps().catch((error) => {
|
|
39
|
+
console.error('Failed to load apps:', error);
|
|
40
|
+
});
|
|
39
41
|
}
|
|
40
42
|
catch (error) {
|
|
41
43
|
console.error('Failed to initialize stores:', error);
|
|
@@ -47,7 +49,9 @@ function setupUIListeners() {
|
|
|
47
49
|
console.log('UI State changed:', state.currentView);
|
|
48
50
|
});
|
|
49
51
|
appStore.subscribe((state) => {
|
|
50
|
-
|
|
52
|
+
if (state && state.apps) {
|
|
53
|
+
console.log(`Apps loaded: ${state.apps.length}`);
|
|
54
|
+
}
|
|
51
55
|
});
|
|
52
56
|
dashboardStore.subscribe((state) => {
|
|
53
57
|
if (state.stats) {
|
|
@@ -63,9 +67,9 @@ function setupUIListeners() {
|
|
|
63
67
|
}
|
|
64
68
|
export { appStore, dashboardStore, uiStore, router };
|
|
65
69
|
if (document.readyState === 'loading') {
|
|
66
|
-
document.addEventListener('DOMContentLoaded', initApp);
|
|
70
|
+
document.addEventListener('DOMContentLoaded', () => initApp().catch(e => console.error('Init error:', e)));
|
|
67
71
|
}
|
|
68
72
|
else {
|
|
69
|
-
initApp();
|
|
73
|
+
initApp().catch(e => console.error('Init error:', e));
|
|
70
74
|
}
|
|
71
75
|
//# sourceMappingURL=app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/client/app.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,MAAM,UAAU,OAAO;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/client/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
|
6
6
|
<meta name="description" content="AppClean - Intelligently remove applications and all their hidden files">
|
|
7
7
|
<meta name="theme-color" content="#3b82f6">
|
|
8
|
+
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
9
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
8
10
|
<title>AppClean - Application Remover</title>
|
|
9
11
|
|
|
10
12
|
<!-- Styles -->
|
|
@@ -13,78 +15,130 @@
|
|
|
13
15
|
<link rel="stylesheet" href="/static/styles/layout.css">
|
|
14
16
|
<link rel="stylesheet" href="/static/styles/components.css">
|
|
15
17
|
<link rel="stylesheet" href="/static/styles/animations.css">
|
|
18
|
+
<link rel="stylesheet" href="/static/styles/responsive.css">
|
|
16
19
|
</head>
|
|
17
20
|
<body>
|
|
18
21
|
<!-- Root container for SPA -->
|
|
19
22
|
<div id="app" class="app-root">
|
|
20
|
-
<!--
|
|
21
|
-
<
|
|
22
|
-
<div class="container
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
<
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
23
|
+
<!-- Modern Navigation Header -->
|
|
24
|
+
<header class="app-header" id="app-header">
|
|
25
|
+
<div class="header-container">
|
|
26
|
+
<!-- Logo and Brand -->
|
|
27
|
+
<div class="header-brand">
|
|
28
|
+
<button class="sidebar-toggle" id="sidebar-toggle" aria-label="Toggle sidebar" aria-expanded="false">
|
|
29
|
+
<svg class="menu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
30
|
+
<line x1="3" y1="6" x2="21" y2="6"></line>
|
|
31
|
+
<line x1="3" y1="12" x2="21" y2="12"></line>
|
|
32
|
+
<line x1="3" y1="18" x2="21" y2="18"></line>
|
|
33
|
+
</svg>
|
|
34
|
+
</button>
|
|
35
|
+
<a href="#/" class="logo-link" aria-label="AppClean Home">
|
|
36
|
+
<img src="/static/assets/logo.svg" alt="AppClean Logo" class="logo-image">
|
|
37
|
+
<span class="logo-text">AppClean</span>
|
|
38
|
+
</a>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<!-- Header Actions -->
|
|
42
|
+
<div class="header-actions">
|
|
43
|
+
<button class="btn-icon theme-toggle" id="theme-toggle" aria-label="Toggle dark mode">
|
|
44
|
+
<svg class="icon-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
45
|
+
<circle cx="12" cy="12" r="5"></circle>
|
|
46
|
+
<line x1="12" y1="1" x2="12" y2="3"></line>
|
|
47
|
+
<line x1="12" y1="21" x2="12" y2="23"></line>
|
|
48
|
+
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
|
49
|
+
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
|
50
|
+
<line x1="1" y1="12" x2="3" y2="12"></line>
|
|
51
|
+
<line x1="21" y1="12" x2="23" y2="12"></line>
|
|
52
|
+
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
|
53
|
+
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
|
54
|
+
</svg>
|
|
55
|
+
<svg class="icon-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
56
|
+
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
|
57
|
+
</svg>
|
|
58
|
+
</button>
|
|
59
|
+
<div class="version-badge" id="version-badge">v2.0.2</div>
|
|
35
60
|
</div>
|
|
36
61
|
</div>
|
|
37
|
-
</
|
|
62
|
+
</header>
|
|
38
63
|
|
|
39
|
-
<!-- Main
|
|
40
|
-
<div class="app-layout
|
|
41
|
-
<!-- Sidebar -->
|
|
42
|
-
<aside class="sidebar" id="sidebar">
|
|
43
|
-
<
|
|
44
|
-
<
|
|
45
|
-
<a href="#/" class="nav-
|
|
46
|
-
<span class="nav-icon"
|
|
64
|
+
<!-- Main Layout Container -->
|
|
65
|
+
<div class="app-layout">
|
|
66
|
+
<!-- Sidebar Navigation -->
|
|
67
|
+
<aside class="sidebar" id="sidebar" aria-label="Navigation">
|
|
68
|
+
<nav class="sidebar-nav">
|
|
69
|
+
<div class="nav-items">
|
|
70
|
+
<a href="#/" class="nav-item active" data-view="dashboard" aria-current="page">
|
|
71
|
+
<span class="nav-icon">
|
|
72
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
73
|
+
<line x1="12" y1="2" x2="12" y2="22"></line>
|
|
74
|
+
<path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path>
|
|
75
|
+
</svg>
|
|
76
|
+
</span>
|
|
47
77
|
<span class="nav-label">Dashboard</span>
|
|
48
78
|
</a>
|
|
49
|
-
<a href="#/apps" class="nav-
|
|
50
|
-
<span class="nav-icon"
|
|
79
|
+
<a href="#/apps" class="nav-item" data-view="apps">
|
|
80
|
+
<span class="nav-icon">
|
|
81
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
82
|
+
<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>
|
|
83
|
+
<line x1="9" y1="9" x2="9" y2="9.01"></line>
|
|
84
|
+
<line x1="15" y1="9" x2="15" y2="9.01"></line>
|
|
85
|
+
<line x1="9" y1="15" x2="9" y2="15.01"></line>
|
|
86
|
+
<line x1="15" y1="15" x2="15" y2="15.01"></line>
|
|
87
|
+
</svg>
|
|
88
|
+
</span>
|
|
51
89
|
<span class="nav-label">Apps</span>
|
|
52
90
|
</a>
|
|
53
|
-
<a href="#/settings" class="nav-
|
|
54
|
-
<span class="nav-icon"
|
|
91
|
+
<a href="#/settings" class="nav-item" data-view="settings">
|
|
92
|
+
<span class="nav-icon">
|
|
93
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
94
|
+
<circle cx="12" cy="12" r="3"></circle>
|
|
95
|
+
<path d="M12 1v6m0 6v6M4.22 4.22l4.24 4.24m3.08 3.08l4.24 4.24M1 12h6m6 0h6M4.22 19.78l4.24-4.24m3.08-3.08l4.24-4.24M19.78 19.78l-4.24-4.24m-3.08-3.08l-4.24-4.24"></path>
|
|
96
|
+
</svg>
|
|
97
|
+
</span>
|
|
55
98
|
<span class="nav-label">Settings</span>
|
|
56
99
|
</a>
|
|
57
|
-
</
|
|
58
|
-
</
|
|
100
|
+
</div>
|
|
101
|
+
</nav>
|
|
102
|
+
|
|
103
|
+
<!-- Sidebar Footer -->
|
|
59
104
|
<div class="sidebar-footer">
|
|
60
|
-
<a href="https://github.com/praveenkay/AppClean" target="_blank" rel="noopener" class="sidebar-link">
|
|
61
|
-
<span class="nav-icon"
|
|
105
|
+
<a href="https://github.com/praveenkay/AppClean" target="_blank" rel="noopener noreferrer" class="nav-item sidebar-link" title="View on GitHub">
|
|
106
|
+
<span class="nav-icon">
|
|
107
|
+
<svg viewBox="0 0 24 24" fill="currentColor">
|
|
108
|
+
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v 3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
|
109
|
+
</svg>
|
|
110
|
+
</span>
|
|
62
111
|
<span class="nav-label">GitHub</span>
|
|
63
112
|
</a>
|
|
64
113
|
</div>
|
|
65
114
|
</aside>
|
|
66
115
|
|
|
67
|
-
<!-- Main
|
|
68
|
-
<main class="main-content" id="main-content">
|
|
69
|
-
<div class="
|
|
70
|
-
<!--
|
|
116
|
+
<!-- Main Content Area -->
|
|
117
|
+
<main class="main-content" id="main-content" role="main">
|
|
118
|
+
<div class="content-wrapper">
|
|
119
|
+
<!-- Page Container -->
|
|
71
120
|
<div id="page-container" class="page-container">
|
|
72
|
-
<!-- Loading
|
|
121
|
+
<!-- Loading State -->
|
|
73
122
|
<div class="loading-state" id="loading-state">
|
|
74
|
-
<div class="spinner
|
|
75
|
-
<p class="
|
|
123
|
+
<div class="spinner"></div>
|
|
124
|
+
<p class="loading-text">Loading AppClean...</p>
|
|
76
125
|
</div>
|
|
77
126
|
</div>
|
|
78
127
|
</div>
|
|
79
128
|
</main>
|
|
80
129
|
</div>
|
|
81
130
|
|
|
82
|
-
<!--
|
|
83
|
-
<div class="modal-
|
|
84
|
-
<div class="modal" id="modal" role="dialog" aria-labelledby="modal-title">
|
|
131
|
+
<!-- Modal Dialog -->
|
|
132
|
+
<div class="modal-overlay" id="modal-overlay" role="presentation">
|
|
133
|
+
<div class="modal-dialog" id="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
|
|
85
134
|
<div class="modal-header">
|
|
86
135
|
<h2 class="modal-title" id="modal-title">Dialog</h2>
|
|
87
|
-
<button class="modal-close" id="modal-close" aria-label="Close dialog"
|
|
136
|
+
<button class="modal-close" id="modal-close" aria-label="Close dialog">
|
|
137
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
138
|
+
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
139
|
+
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
140
|
+
</svg>
|
|
141
|
+
</button>
|
|
88
142
|
</div>
|
|
89
143
|
<div class="modal-body" id="modal-body">
|
|
90
144
|
<!-- Content will be rendered here -->
|
|
@@ -95,10 +149,13 @@
|
|
|
95
149
|
</div>
|
|
96
150
|
</div>
|
|
97
151
|
|
|
98
|
-
<!-- Notifications -->
|
|
99
|
-
<div class="notifications-container" id="notifications-container" role="region" aria-label="Notifications" aria-live="polite">
|
|
152
|
+
<!-- Toast Notifications -->
|
|
153
|
+
<div class="notifications-container" id="notifications-container" role="region" aria-label="Notifications" aria-live="polite" aria-atomic="true">
|
|
100
154
|
<!-- Notifications will be rendered here -->
|
|
101
155
|
</div>
|
|
156
|
+
|
|
157
|
+
<!-- Sidebar Overlay (Mobile) -->
|
|
158
|
+
<div class="sidebar-overlay" id="sidebar-overlay" aria-hidden="true"></div>
|
|
102
159
|
</div>
|
|
103
160
|
|
|
104
161
|
<!-- Scripts -->
|
|
@@ -21,6 +21,17 @@ export function renderAppSearch() {
|
|
|
21
21
|
}
|
|
22
22
|
function renderAppSearchContent(container) {
|
|
23
23
|
const state = appStore.getState();
|
|
24
|
+
if (!state || !state.apps) {
|
|
25
|
+
console.error('AppStore state is invalid:', state);
|
|
26
|
+
container.innerHTML = `
|
|
27
|
+
<div class="alert alert-danger">
|
|
28
|
+
<h3>Error Loading Apps</h3>
|
|
29
|
+
<p>Failed to load application state. Please refresh the page.</p>
|
|
30
|
+
<button class="btn btn-primary btn-sm mt-4" onclick="window.location.reload()">Reload</button>
|
|
31
|
+
</div>
|
|
32
|
+
`;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
24
35
|
container.innerHTML = `
|
|
25
36
|
<div class="app-search-page">
|
|
26
37
|
<!-- Header -->
|
|
@@ -62,7 +73,7 @@ function renderAppSearchContent(container) {
|
|
|
62
73
|
|
|
63
74
|
<!-- Apps Grid -->
|
|
64
75
|
<div class="apps-grid">
|
|
65
|
-
${state.apps.length > 0
|
|
76
|
+
${(state.apps && state.apps.length > 0)
|
|
66
77
|
? `
|
|
67
78
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
68
79
|
${state.apps.map((app) => renderAppCard(app)).join('')}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appSearch.js","sourceRoot":"","sources":["../../../../src/ui/client/pages/appSearch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAA+B,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAKzG,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5D,IAAI,CAAC,SAAS;QAAE,OAAO;IAGvB,SAAS,CAAC,SAAS,GAAG;;;;;GAKrB,CAAC;IAGF,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAC5B,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAGlC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrB,sBAAsB,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAKD,SAAS,sBAAsB,CAAC,SAAsB;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"appSearch.js","sourceRoot":"","sources":["../../../../src/ui/client/pages/appSearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/pages/dashboard.ts"],"names":[],"mappings":"AAWA,wBAAgB,eAAe,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/pages/dashboard.ts"],"names":[],"mappings":"AAWA,wBAAgB,eAAe,IAAI,IAAI,CAyDtC"}
|
|
@@ -13,10 +13,22 @@ export function renderDashboard() {
|
|
|
13
13
|
dashboardStore.refreshStats(true).then(() => {
|
|
14
14
|
const state = dashboardStore.getState();
|
|
15
15
|
const stats = state.stats;
|
|
16
|
+
const error = state.error;
|
|
17
|
+
if (error) {
|
|
18
|
+
container.innerHTML = `
|
|
19
|
+
<div class="alert alert-danger" style="margin: 20px;">
|
|
20
|
+
<h3 style="margin-top: 0;">⚠️ Error Loading Dashboard</h3>
|
|
21
|
+
<p>${escapeHtml(error)}</p>
|
|
22
|
+
<button class="btn btn-primary btn-sm" onclick="window.location.reload()">Retry</button>
|
|
23
|
+
</div>
|
|
24
|
+
`;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
16
27
|
if (!stats) {
|
|
17
28
|
container.innerHTML = `
|
|
18
|
-
<div class="alert alert-
|
|
19
|
-
<
|
|
29
|
+
<div class="alert alert-warning" style="margin: 20px;">
|
|
30
|
+
<h3 style="margin-top: 0;">⏳ Initializing</h3>
|
|
31
|
+
<p>Dashboard is loading. Please wait...</p>
|
|
20
32
|
</div>
|
|
21
33
|
`;
|
|
22
34
|
return;
|
|
@@ -27,11 +39,20 @@ export function renderDashboard() {
|
|
|
27
39
|
renderDashboardContent(container, newState.stats);
|
|
28
40
|
}
|
|
29
41
|
});
|
|
42
|
+
}).catch((error) => {
|
|
43
|
+
console.error('Dashboard error:', error);
|
|
44
|
+
container.innerHTML = `
|
|
45
|
+
<div class="alert alert-danger" style="margin: 20px;">
|
|
46
|
+
<h3 style="margin-top: 0;">❌ Failed to Load Dashboard</h3>
|
|
47
|
+
<p>An unexpected error occurred. Please check the console for details.</p>
|
|
48
|
+
<button class="btn btn-primary btn-sm" onclick="window.location.reload()">Reload Page</button>
|
|
49
|
+
</div>
|
|
50
|
+
`;
|
|
30
51
|
});
|
|
31
52
|
}
|
|
32
53
|
function renderDashboardContent(container, stats) {
|
|
33
54
|
container.innerHTML = `
|
|
34
|
-
<div class="dashboard-page">
|
|
55
|
+
<div class="dashboard-page fade-in">
|
|
35
56
|
<!-- Header -->
|
|
36
57
|
<div class="page-header mb-8">
|
|
37
58
|
<h1 class="text-3xl font-bold">📊 Dashboard</h1>
|
|
@@ -68,10 +89,10 @@ function renderDashboardContent(container, stats) {
|
|
|
68
89
|
</div>
|
|
69
90
|
<p class="text-sm text-muted">
|
|
70
91
|
${stats.diskUsagePercent < 80
|
|
71
|
-
? '
|
|
92
|
+
? '✅ Disk usage is healthy'
|
|
72
93
|
: stats.diskUsagePercent < 90
|
|
73
94
|
? '⚠️ Disk usage is getting high'
|
|
74
|
-
: '
|
|
95
|
+
: '🔴 Disk usage is critical'}
|
|
75
96
|
</p>
|
|
76
97
|
</div>
|
|
77
98
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../../src/ui/client/pages/dashboard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAkB,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAKxF,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5D,IAAI,CAAC,SAAS;QAAE,OAAO;IAGvB,SAAS,CAAC,SAAS,GAAG;;;;;GAKrB,CAAC;IAGF,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,SAAS,GAAG
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../../src/ui/client/pages/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appStore.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/state/appStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD,qBAAa,QAAS,SAAQ,KAAK,CAAC,aAAa,CAAC;;IAM1C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"appStore.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/state/appStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD,qBAAa,QAAS,SAAQ,KAAK,CAAC,aAAa,CAAC;;IAM1C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BzB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkChE,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnC,sBAAsB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAK7C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAKjD,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAKlC,cAAc,IAAI,IAAI;IAKhB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCnC,UAAU,IAAI,IAAI;CAGnB;AAGD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
|
|
@@ -23,17 +23,20 @@ export class AppStore extends Store {
|
|
|
23
23
|
const response = await fetch('/api/apps/list');
|
|
24
24
|
if (!response.ok)
|
|
25
25
|
throw new Error('Failed to load apps');
|
|
26
|
-
const
|
|
26
|
+
const json = await response.json();
|
|
27
|
+
const data = json.data || json;
|
|
27
28
|
this.setState({
|
|
28
|
-
apps: data.apps,
|
|
29
|
-
total: data.total,
|
|
30
|
-
page: data.page,
|
|
29
|
+
apps: data.apps || [],
|
|
30
|
+
total: data.total || 0,
|
|
31
|
+
page: data.page || 1,
|
|
31
32
|
isLoading: false,
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
catch (error) {
|
|
36
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
37
|
+
console.error('Failed to load apps:', errorMsg);
|
|
35
38
|
this.setState({
|
|
36
|
-
error:
|
|
39
|
+
error: errorMsg,
|
|
37
40
|
isLoading: false,
|
|
38
41
|
});
|
|
39
42
|
}
|
|
@@ -54,16 +57,19 @@ export class AppStore extends Store {
|
|
|
54
57
|
const response = await fetch(`/api/apps/search?${params}`);
|
|
55
58
|
if (!response.ok)
|
|
56
59
|
throw new Error('Failed to search apps');
|
|
57
|
-
const
|
|
60
|
+
const json = await response.json();
|
|
61
|
+
const data = json.data || json;
|
|
58
62
|
this.setState({
|
|
59
|
-
apps: data.apps,
|
|
60
|
-
total: data.count,
|
|
63
|
+
apps: data.apps || [],
|
|
64
|
+
total: data.count || 0,
|
|
61
65
|
isLoading: false,
|
|
62
66
|
});
|
|
63
67
|
}
|
|
64
68
|
catch (error) {
|
|
69
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
70
|
+
console.error('Failed to search apps:', errorMsg);
|
|
65
71
|
this.setState({
|
|
66
|
-
error:
|
|
72
|
+
error: errorMsg,
|
|
67
73
|
isLoading: false,
|
|
68
74
|
});
|
|
69
75
|
}
|
|
@@ -99,16 +105,19 @@ export class AppStore extends Store {
|
|
|
99
105
|
const response = await fetch(`/api/apps/search?${params}`);
|
|
100
106
|
if (!response.ok)
|
|
101
107
|
throw new Error('Failed to load more apps');
|
|
102
|
-
const
|
|
108
|
+
const json = await response.json();
|
|
109
|
+
const data = json.data || json;
|
|
103
110
|
this.setState({
|
|
104
|
-
apps: [...this.state.apps, ...data.apps],
|
|
111
|
+
apps: [...this.state.apps, ...(data.apps || [])],
|
|
105
112
|
page: nextPage,
|
|
106
113
|
isLoading: false,
|
|
107
114
|
});
|
|
108
115
|
}
|
|
109
116
|
catch (error) {
|
|
117
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
118
|
+
console.error('Failed to load next page:', errorMsg);
|
|
110
119
|
this.setState({
|
|
111
|
-
error:
|
|
120
|
+
error: errorMsg,
|
|
112
121
|
isLoading: false,
|
|
113
122
|
});
|
|
114
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appStore.js","sourceRoot":"","sources":["../../../../src/ui/client/state/appStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AA4B3C,MAAM,aAAa,GAAkB;IACnC,IAAI,EAAE,EAAE;IACR,aAAa,EAAE;QACb,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE,MAAM;KACf;IACD,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,OAAO,QAAS,SAAQ,KAAoB;IAChD;QACE,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;IAGD,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAEzD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"appStore.js","sourceRoot":"","sources":["../../../../src/ui/client/state/appStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboardStore.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/state/dashboardStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AASD,qBAAa,cAAe,SAAQ,KAAK,CAAC,mBAAmB,CAAC;;IAMtD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboardStore.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/state/dashboardStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AASD,qBAAa,cAAe,SAAQ,KAAK,CAAC,mBAAmB,CAAC;;IAMtD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B1B,YAAY,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAe7C,iBAAiB,IAAI,IAAI;IAezB,UAAU,IAAI,IAAI;CAGnB;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -14,8 +14,12 @@ export class DashboardStore extends Store {
|
|
|
14
14
|
try {
|
|
15
15
|
const response = await fetch('/api/dashboard/stats');
|
|
16
16
|
if (!response.ok)
|
|
17
|
-
throw new Error(
|
|
18
|
-
const
|
|
17
|
+
throw new Error(`Failed to load dashboard stats: ${response.status}`);
|
|
18
|
+
const data = await response.json();
|
|
19
|
+
const stats = data.data || data;
|
|
20
|
+
if (!stats) {
|
|
21
|
+
throw new Error('Invalid response format from server');
|
|
22
|
+
}
|
|
19
23
|
this.setState({
|
|
20
24
|
stats,
|
|
21
25
|
isLoading: false,
|
|
@@ -23,8 +27,10 @@ export class DashboardStore extends Store {
|
|
|
23
27
|
});
|
|
24
28
|
}
|
|
25
29
|
catch (error) {
|
|
30
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
31
|
+
console.error('Failed to load dashboard stats:', errorMsg);
|
|
26
32
|
this.setState({
|
|
27
|
-
error:
|
|
33
|
+
error: errorMsg,
|
|
28
34
|
isLoading: false,
|
|
29
35
|
});
|
|
30
36
|
}
|