@burdenoff/microfe-assethandler 2026.625.1 → 2026.625.2
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/dist/assethandler/pages/AiPredictionsPage.js +42 -41
- package/dist/assethandler/pages/AiPredictionsPage.js.map +1 -1
- package/dist/assethandler/pages/AnalyticsPage.js +538 -534
- package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +135 -125
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +90 -92
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCreatePage.js +131 -124
- package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetDetailPage.js +214 -185
- package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetEditPage.js +168 -156
- package/dist/assethandler/pages/AssetsAssetEditPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetListPage.js +207 -187
- package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js +82 -71
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js.map +1 -1
- package/dist/assethandler/pages/AuditTrailPage.js +93 -91
- package/dist/assethandler/pages/AuditTrailPage.js.map +1 -1
- package/dist/assethandler/pages/CmdbBrowserPage.js +32 -33
- package/dist/assethandler/pages/CmdbBrowserPage.js.map +1 -1
- package/dist/assethandler/pages/DashboardPage.js +157 -126
- package/dist/assethandler/pages/DashboardPage.js.map +1 -1
- package/dist/assethandler/pages/DigitalTwinPage.js +25 -26
- package/dist/assethandler/pages/DigitalTwinPage.js.map +1 -1
- package/dist/assethandler/pages/DiscoveryJobsPage.js +50 -50
- package/dist/assethandler/pages/DiscoveryJobsPage.js.map +1 -1
- package/dist/assethandler/pages/EsgDashboardPage.js +43 -42
- package/dist/assethandler/pages/EsgDashboardPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js +96 -82
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceFinanceHubPage.js +137 -103
- package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +77 -66
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/IotDevicesPage.js +34 -35
- package/dist/assethandler/pages/IotDevicesPage.js.map +1 -1
- package/dist/assethandler/pages/ItilChangeDetailPage.js +236 -199
- package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilChangeManagementPage.js +66 -64
- package/dist/assethandler/pages/ItilChangeManagementPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentDetailPage.js +237 -200
- package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentManagementPage.js +99 -97
- package/dist/assethandler/pages/ItilIncidentManagementPage.js.map +1 -1
- package/dist/assethandler/pages/ItilItilhubPage.js +166 -122
- package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemDetailPage.js +193 -156
- package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemManagementPage.js +63 -61
- package/dist/assethandler/pages/ItilProblemManagementPage.js.map +1 -1
- package/dist/assethandler/pages/KnowledgeBasePage.js +45 -43
- package/dist/assethandler/pages/KnowledgeBasePage.js.map +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +70 -68
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js.map +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +77 -62
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js +162 -151
- package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js +64 -57
- package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js +125 -108
- package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js +67 -61
- package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +203 -166
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsOperationsHubPage.js +125 -95
- package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +165 -151
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +83 -81
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
- package/dist/assethandler/pages/ProvenancePage.js +56 -53
- package/dist/assethandler/pages/ProvenancePage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportBuilderPage.js +80 -73
- package/dist/assethandler/pages/ReportsReportBuilderPage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportsDashboardPage.js +112 -77
- package/dist/assethandler/pages/ReportsReportsDashboardPage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportsListPage.js +119 -103
- package/dist/assethandler/pages/ReportsReportsListPage.js.map +1 -1
- package/dist/assethandler/pages/SamLicensesPage.js +32 -33
- package/dist/assethandler/pages/SamLicensesPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js +60 -52
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js +134 -117
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityScheduleBackupPage.js +63 -57
- package/dist/assethandler/pages/SecurityScheduleBackupPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +131 -117
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityHubPage.js +147 -113
- package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +235 -218
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionListPage.js +118 -116
- package/dist/assethandler/pages/TransactionsTransactionListPage.js.map +1 -1
- package/dist/assethandler/pages/UsersPage.js +108 -99
- package/dist/assethandler/pages/UsersPage.js.map +1 -1
- package/dist/assethandler/pages/UsersUserCreatePage.js +74 -67
- package/dist/assethandler/pages/UsersUserCreatePage.js.map +1 -1
- package/dist/assethandler/pages/UsersUserManagementHubPage.js +128 -93
- package/dist/assethandler/pages/UsersUserManagementHubPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js +211 -193
- package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js +88 -86
- package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowListPage.js +68 -60
- package/dist/assethandler/pages/WorkflowsWorkflowListPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js +71 -68
- package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,158 +1,184 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
2
|
import { CheckCircle as t, Clock as n, Download as r, FileText as i, Loader2 as a, Plus as o, XCircle as s } from "lucide-react";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { useNavigate as c } from "react-router-dom";
|
|
4
|
+
import { Badge as l, Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m, EmphasisPanel as h, GradientText as g, IllustratedEmptyState as _, NextSteps as v, PagePurpose as y } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
5
6
|
//#region src/assethandler/pages/ReportsReportsDashboardPage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { reports:
|
|
8
|
-
|
|
9
|
-
let
|
|
10
|
-
return /* @__PURE__ */
|
|
7
|
+
function S() {
|
|
8
|
+
let S = c(), { reports: C, reportExecutions: w } = e(), T = w.filter((e) => e.status === "completed"), E = w.filter((e) => e.status === "running");
|
|
9
|
+
w.filter((e) => e.status === "failed");
|
|
10
|
+
let D = C.filter((e) => e.schedule);
|
|
11
|
+
return /* @__PURE__ */ x("div", {
|
|
11
12
|
className: "space-y-6 p-6",
|
|
12
13
|
children: [
|
|
13
|
-
/* @__PURE__ */
|
|
14
|
+
/* @__PURE__ */ x("div", {
|
|
14
15
|
className: "flex items-center justify-between",
|
|
15
|
-
children: [/* @__PURE__ */
|
|
16
|
+
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h1", {
|
|
16
17
|
className: "text-2xl font-bold",
|
|
17
|
-
children: /* @__PURE__ */
|
|
18
|
-
}), /* @__PURE__ */
|
|
18
|
+
children: /* @__PURE__ */ b(g, { children: "Reports Dashboard" })
|
|
19
|
+
}), /* @__PURE__ */ b("p", {
|
|
19
20
|
className: "text-sm text-text-secondary",
|
|
20
21
|
children: "Overview of all reports and executions"
|
|
21
|
-
})] }), /* @__PURE__ */
|
|
22
|
+
})] }), /* @__PURE__ */ x(u, {
|
|
22
23
|
size: "sm",
|
|
23
|
-
children: [/* @__PURE__ */
|
|
24
|
+
children: [/* @__PURE__ */ b(o, { className: "mr-2 h-4 w-4" }), "New Report"]
|
|
24
25
|
})]
|
|
25
26
|
}),
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
+
/* @__PURE__ */ b(y, { children: "Your reporting home base — see every report you can run, what is scheduled, and the status of recent runs. Use it to launch a report, grab a finished export, or jump into the builder to create a new one, all from one place." }),
|
|
28
|
+
/* @__PURE__ */ b(v, {
|
|
29
|
+
storageKey: "assethandler-reports-dashboard",
|
|
30
|
+
steps: [
|
|
31
|
+
{
|
|
32
|
+
id: "build",
|
|
33
|
+
label: "Build a new report",
|
|
34
|
+
description: "Pick data, columns and filters in the report builder.",
|
|
35
|
+
onClick: () => S("/reports/report-builder")
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: "browse",
|
|
39
|
+
label: "Browse saved reports",
|
|
40
|
+
description: "Run or schedule a report you have already defined.",
|
|
41
|
+
onClick: () => S("/reports/reports-list")
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: "analytics",
|
|
45
|
+
label: "Explore analytics",
|
|
46
|
+
description: "See ready-made insights across the asset estate.",
|
|
47
|
+
onClick: () => S("/analytics")
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}),
|
|
51
|
+
/* @__PURE__ */ x("div", {
|
|
27
52
|
className: "grid gap-4 md:grid-cols-4",
|
|
28
53
|
children: [
|
|
29
|
-
/* @__PURE__ */ h
|
|
54
|
+
/* @__PURE__ */ x(h, { children: [/* @__PURE__ */ x("div", {
|
|
55
|
+
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
56
|
+
children: [/* @__PURE__ */ b(i, { className: "h-4 w-4" }), "Total Reports"]
|
|
57
|
+
}), /* @__PURE__ */ b("p", {
|
|
58
|
+
className: "text-2xl font-bold mt-1 tabular-nums",
|
|
59
|
+
children: C.length
|
|
60
|
+
})] }),
|
|
61
|
+
/* @__PURE__ */ b(d, { children: /* @__PURE__ */ x(f, {
|
|
30
62
|
className: "pt-4",
|
|
31
|
-
children: [/* @__PURE__ */
|
|
63
|
+
children: [/* @__PURE__ */ x("div", {
|
|
32
64
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
33
|
-
children: [/* @__PURE__ */
|
|
34
|
-
}), /* @__PURE__ */
|
|
65
|
+
children: [/* @__PURE__ */ b(n, { className: "h-4 w-4" }), "Scheduled"]
|
|
66
|
+
}), /* @__PURE__ */ b("p", {
|
|
35
67
|
className: "text-2xl font-bold mt-1",
|
|
36
|
-
children:
|
|
68
|
+
children: D.length
|
|
37
69
|
})]
|
|
38
70
|
}) }),
|
|
39
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ b(d, { children: /* @__PURE__ */ x(f, {
|
|
40
72
|
className: "pt-4",
|
|
41
|
-
children: [/* @__PURE__ */
|
|
73
|
+
children: [/* @__PURE__ */ x("div", {
|
|
42
74
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
43
|
-
children: [/* @__PURE__ */
|
|
44
|
-
}), /* @__PURE__ */
|
|
45
|
-
className: "text-2xl font-bold mt-1",
|
|
46
|
-
children: x.length
|
|
47
|
-
})]
|
|
48
|
-
}) }),
|
|
49
|
-
/* @__PURE__ */ h(u, { children: /* @__PURE__ */ g(d, {
|
|
50
|
-
className: "pt-4",
|
|
51
|
-
children: [/* @__PURE__ */ g("div", {
|
|
52
|
-
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
53
|
-
children: [/* @__PURE__ */ h(t, { className: "h-4 w-4" }), "Completed"]
|
|
54
|
-
}), /* @__PURE__ */ h("p", {
|
|
75
|
+
children: [/* @__PURE__ */ b(t, { className: "h-4 w-4" }), "Completed"]
|
|
76
|
+
}), /* @__PURE__ */ b("p", {
|
|
55
77
|
className: "text-2xl font-bold mt-1 text-status-success-text",
|
|
56
|
-
children:
|
|
78
|
+
children: T.length
|
|
57
79
|
})]
|
|
58
80
|
}) }),
|
|
59
|
-
/* @__PURE__ */
|
|
81
|
+
/* @__PURE__ */ b(d, { children: /* @__PURE__ */ x(f, {
|
|
60
82
|
className: "pt-4",
|
|
61
|
-
children: [/* @__PURE__ */
|
|
83
|
+
children: [/* @__PURE__ */ x("div", {
|
|
62
84
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
63
|
-
children: [/* @__PURE__ */
|
|
64
|
-
}), /* @__PURE__ */
|
|
85
|
+
children: [/* @__PURE__ */ b(a, { className: "h-4 w-4" }), "Running"]
|
|
86
|
+
}), /* @__PURE__ */ b("p", {
|
|
65
87
|
className: "text-2xl font-bold mt-1 text-status-info-text",
|
|
66
|
-
children:
|
|
88
|
+
children: E.length
|
|
67
89
|
})]
|
|
68
90
|
}) })
|
|
69
91
|
]
|
|
70
92
|
}),
|
|
71
|
-
/* @__PURE__ */
|
|
93
|
+
/* @__PURE__ */ x(d, { children: [/* @__PURE__ */ b(p, { children: /* @__PURE__ */ b(m, { children: "Recent Executions" }) }), /* @__PURE__ */ b(f, {
|
|
72
94
|
className: "p-0",
|
|
73
|
-
children: /* @__PURE__ */
|
|
95
|
+
children: w.length === 0 ? /* @__PURE__ */ b(_, {
|
|
96
|
+
illustration: "empty-data",
|
|
97
|
+
title: "No report runs yet",
|
|
98
|
+
description: "Run a report and its execution history will appear here, ready to download."
|
|
99
|
+
}) : /* @__PURE__ */ b("div", {
|
|
74
100
|
className: "overflow-x-auto",
|
|
75
|
-
children: /* @__PURE__ */
|
|
101
|
+
children: /* @__PURE__ */ x("table", {
|
|
76
102
|
className: "w-full text-sm",
|
|
77
|
-
children: [/* @__PURE__ */
|
|
103
|
+
children: [/* @__PURE__ */ b("thead", { children: /* @__PURE__ */ x("tr", {
|
|
78
104
|
className: "border-b bg-bg-sunken/50",
|
|
79
105
|
children: [
|
|
80
|
-
/* @__PURE__ */
|
|
106
|
+
/* @__PURE__ */ b("th", {
|
|
81
107
|
className: "text-left p-3 font-medium",
|
|
82
108
|
children: "Report"
|
|
83
109
|
}),
|
|
84
|
-
/* @__PURE__ */
|
|
110
|
+
/* @__PURE__ */ b("th", {
|
|
85
111
|
className: "text-left p-3 font-medium",
|
|
86
112
|
children: "Executed By"
|
|
87
113
|
}),
|
|
88
|
-
/* @__PURE__ */
|
|
114
|
+
/* @__PURE__ */ b("th", {
|
|
89
115
|
className: "text-left p-3 font-medium",
|
|
90
116
|
children: "Status"
|
|
91
117
|
}),
|
|
92
|
-
/* @__PURE__ */
|
|
118
|
+
/* @__PURE__ */ b("th", {
|
|
93
119
|
className: "text-left p-3 font-medium",
|
|
94
120
|
children: "Format"
|
|
95
121
|
}),
|
|
96
|
-
/* @__PURE__ */
|
|
122
|
+
/* @__PURE__ */ b("th", {
|
|
97
123
|
className: "text-left p-3 font-medium",
|
|
98
124
|
children: "Duration"
|
|
99
125
|
}),
|
|
100
|
-
/* @__PURE__ */
|
|
126
|
+
/* @__PURE__ */ b("th", {
|
|
101
127
|
className: "text-left p-3 font-medium",
|
|
102
128
|
children: "Time"
|
|
103
129
|
}),
|
|
104
|
-
/* @__PURE__ */
|
|
130
|
+
/* @__PURE__ */ b("th", { className: "p-3" })
|
|
105
131
|
]
|
|
106
|
-
}) }), /* @__PURE__ */
|
|
132
|
+
}) }), /* @__PURE__ */ b("tbody", { children: w.map((e) => /* @__PURE__ */ x("tr", {
|
|
107
133
|
className: "border-b hover:bg-bg-sunken/50",
|
|
108
134
|
children: [
|
|
109
|
-
/* @__PURE__ */
|
|
135
|
+
/* @__PURE__ */ b("td", {
|
|
110
136
|
className: "p-3 font-medium",
|
|
111
137
|
children: e.reportName
|
|
112
138
|
}),
|
|
113
|
-
/* @__PURE__ */
|
|
139
|
+
/* @__PURE__ */ b("td", {
|
|
114
140
|
className: "p-3 text-xs",
|
|
115
141
|
children: e.executedBy
|
|
116
142
|
}),
|
|
117
|
-
/* @__PURE__ */
|
|
143
|
+
/* @__PURE__ */ x("td", {
|
|
118
144
|
className: "p-3",
|
|
119
145
|
children: [
|
|
120
|
-
e.status === "completed" && /* @__PURE__ */
|
|
146
|
+
e.status === "completed" && /* @__PURE__ */ x(l, {
|
|
121
147
|
variant: "default",
|
|
122
|
-
children: [/* @__PURE__ */
|
|
148
|
+
children: [/* @__PURE__ */ b(t, { className: "mr-1 h-3 w-3" }), "Completed"]
|
|
123
149
|
}),
|
|
124
|
-
e.status === "running" && /* @__PURE__ */
|
|
150
|
+
e.status === "running" && /* @__PURE__ */ x(l, {
|
|
125
151
|
variant: "secondary",
|
|
126
|
-
children: [/* @__PURE__ */
|
|
152
|
+
children: [/* @__PURE__ */ b(a, { className: "mr-1 h-3 w-3 animate-spin" }), "Running"]
|
|
127
153
|
}),
|
|
128
|
-
e.status === "failed" && /* @__PURE__ */
|
|
154
|
+
e.status === "failed" && /* @__PURE__ */ x(l, {
|
|
129
155
|
variant: "destructive",
|
|
130
|
-
children: [/* @__PURE__ */
|
|
156
|
+
children: [/* @__PURE__ */ b(s, { className: "mr-1 h-3 w-3" }), "Failed"]
|
|
131
157
|
}),
|
|
132
|
-
e.status === "queued" && /* @__PURE__ */
|
|
158
|
+
e.status === "queued" && /* @__PURE__ */ b(l, {
|
|
133
159
|
variant: "outline",
|
|
134
160
|
children: "Queued"
|
|
135
161
|
})
|
|
136
162
|
]
|
|
137
163
|
}),
|
|
138
|
-
/* @__PURE__ */
|
|
164
|
+
/* @__PURE__ */ b("td", {
|
|
139
165
|
className: "p-3 text-xs",
|
|
140
166
|
children: e.format
|
|
141
167
|
}),
|
|
142
|
-
/* @__PURE__ */
|
|
168
|
+
/* @__PURE__ */ x("td", {
|
|
143
169
|
className: "p-3 text-xs",
|
|
144
170
|
children: [e.duration, "s"]
|
|
145
171
|
}),
|
|
146
|
-
/* @__PURE__ */
|
|
172
|
+
/* @__PURE__ */ b("td", {
|
|
147
173
|
className: "p-3 text-xs",
|
|
148
174
|
children: new Date(e.executedAt).toLocaleString()
|
|
149
175
|
}),
|
|
150
|
-
/* @__PURE__ */
|
|
176
|
+
/* @__PURE__ */ b("td", {
|
|
151
177
|
className: "p-3",
|
|
152
|
-
children: e.status === "completed" && /* @__PURE__ */
|
|
178
|
+
children: e.status === "completed" && /* @__PURE__ */ b(u, {
|
|
153
179
|
variant: "ghost",
|
|
154
180
|
size: "sm",
|
|
155
|
-
children: /* @__PURE__ */
|
|
181
|
+
children: /* @__PURE__ */ b(r, { className: "h-3 w-3" })
|
|
156
182
|
})
|
|
157
183
|
})
|
|
158
184
|
]
|
|
@@ -160,34 +186,43 @@ function _() {
|
|
|
160
186
|
})
|
|
161
187
|
})
|
|
162
188
|
})] }),
|
|
163
|
-
/* @__PURE__ */
|
|
189
|
+
/* @__PURE__ */ x(d, { children: [/* @__PURE__ */ b(p, { children: /* @__PURE__ */ b(m, { children: "Available Reports" }) }), /* @__PURE__ */ b(f, { children: C.length === 0 ? /* @__PURE__ */ b(_, {
|
|
190
|
+
illustration: "empty-files",
|
|
191
|
+
title: "No reports defined",
|
|
192
|
+
description: "Create your first report in the builder to make it available here.",
|
|
193
|
+
action: /* @__PURE__ */ x(u, {
|
|
194
|
+
size: "sm",
|
|
195
|
+
onClick: () => S("/reports/report-builder"),
|
|
196
|
+
children: [/* @__PURE__ */ b(o, { className: "mr-2 h-4 w-4" }), "New Report"]
|
|
197
|
+
})
|
|
198
|
+
}) : /* @__PURE__ */ b("div", {
|
|
164
199
|
className: "grid gap-3 md:grid-cols-2 lg:grid-cols-3",
|
|
165
|
-
children:
|
|
200
|
+
children: C.map((e) => /* @__PURE__ */ x("div", {
|
|
166
201
|
className: "rounded-lg border p-4 hover:shadow-sm transition-shadow cursor-pointer",
|
|
167
202
|
children: [
|
|
168
|
-
/* @__PURE__ */
|
|
203
|
+
/* @__PURE__ */ x("div", {
|
|
169
204
|
className: "flex items-center justify-between",
|
|
170
|
-
children: [/* @__PURE__ */
|
|
205
|
+
children: [/* @__PURE__ */ b(l, {
|
|
171
206
|
variant: "outline",
|
|
172
207
|
className: "text-xs",
|
|
173
208
|
children: e.type
|
|
174
|
-
}), /* @__PURE__ */
|
|
209
|
+
}), /* @__PURE__ */ b(l, {
|
|
175
210
|
variant: "secondary",
|
|
176
211
|
className: "text-xs",
|
|
177
212
|
children: e.category
|
|
178
213
|
})]
|
|
179
214
|
}),
|
|
180
|
-
/* @__PURE__ */
|
|
215
|
+
/* @__PURE__ */ b("h4", {
|
|
181
216
|
className: "font-medium mt-2",
|
|
182
217
|
children: e.name
|
|
183
218
|
}),
|
|
184
|
-
/* @__PURE__ */
|
|
219
|
+
/* @__PURE__ */ b("p", {
|
|
185
220
|
className: "text-xs text-text-secondary mt-1",
|
|
186
221
|
children: e.description
|
|
187
222
|
}),
|
|
188
|
-
/* @__PURE__ */
|
|
223
|
+
/* @__PURE__ */ x("div", {
|
|
189
224
|
className: "flex items-center gap-2 mt-2 text-xs text-text-secondary",
|
|
190
|
-
children: [e.schedule && /* @__PURE__ */
|
|
225
|
+
children: [e.schedule && /* @__PURE__ */ x("span", { children: ["Schedule: ", e.schedule] }), e.lastRun && /* @__PURE__ */ x("span", { children: ["· Last: ", new Date(e.lastRun).toLocaleDateString()] })]
|
|
191
226
|
})
|
|
192
227
|
]
|
|
193
228
|
}, e.id))
|
|
@@ -196,6 +231,6 @@ function _() {
|
|
|
196
231
|
});
|
|
197
232
|
}
|
|
198
233
|
//#endregion
|
|
199
|
-
export {
|
|
234
|
+
export { S as ReportsReportsDashboardPage };
|
|
200
235
|
|
|
201
236
|
//# sourceMappingURL=ReportsReportsDashboardPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportsReportsDashboardPage.js","names":[],"sources":["../../../src/assethandler/pages/ReportsReportsDashboardPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport {\n BarChart3,\n FileText,\n Clock,\n Download,\n Plus,\n CheckCircle,\n XCircle,\n Loader2,\n} from 'lucide-react';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function ReportsReportsDashboardPage() {\n const { reports, reportExecutions } = useAssetHandlerStore();\n\n const completed = reportExecutions.filter((e) => e.status === 'completed');\n const running = reportExecutions.filter((e) => e.status === 'running');\n const failed = reportExecutions.filter((e) => e.status === 'failed');\n const scheduled = reports.filter((r) => r.schedule);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">\n <GradientText>Reports Dashboard</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Overview of all reports and executions</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n New Report\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <FileText className=\"h-4 w-4\" />\n Total Reports\n </div>\n <p className=\"text-2xl font-bold mt-1\">{reports.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n Scheduled\n </div>\n <p className=\"text-2xl font-bold mt-1\">{scheduled.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <CheckCircle className=\"h-4 w-4\" />\n Completed\n </div>\n <p className=\"text-2xl font-bold mt-1 text-status-success-text\">{completed.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Loader2 className=\"h-4 w-4\" />\n Running\n </div>\n <p className=\"text-2xl font-bold mt-1 text-status-info-text\">{running.length}</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Recent Executions */}\n <Card>\n <CardHeader>\n <CardTitle>Recent Executions</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-bg-sunken/50\">\n <th className=\"text-left p-3 font-medium\">Report</th>\n <th className=\"text-left p-3 font-medium\">Executed By</th>\n <th className=\"text-left p-3 font-medium\">Status</th>\n <th className=\"text-left p-3 font-medium\">Format</th>\n <th className=\"text-left p-3 font-medium\">Duration</th>\n <th className=\"text-left p-3 font-medium\">Time</th>\n <th className=\"p-3\"></th>\n </tr>\n </thead>\n <tbody>\n {reportExecutions.map((exec) => (\n <tr key={exec.id} className=\"border-b hover:bg-bg-sunken/50\">\n <td className=\"p-3 font-medium\">{exec.reportName}</td>\n <td className=\"p-3 text-xs\">{exec.executedBy}</td>\n <td className=\"p-3\">\n {exec.status === 'completed' && (\n <Badge variant=\"default\">\n <CheckCircle className=\"mr-1 h-3 w-3\" />\n Completed\n </Badge>\n )}\n {exec.status === 'running' && (\n <Badge variant=\"secondary\">\n <Loader2 className=\"mr-1 h-3 w-3 animate-spin\" />\n Running\n </Badge>\n )}\n {exec.status === 'failed' && (\n <Badge variant=\"destructive\">\n <XCircle className=\"mr-1 h-3 w-3\" />\n Failed\n </Badge>\n )}\n {exec.status === 'queued' && <Badge variant=\"outline\">Queued</Badge>}\n </td>\n <td className=\"p-3 text-xs\">{exec.format}</td>\n <td className=\"p-3 text-xs\">{exec.duration}s</td>\n <td className=\"p-3 text-xs\">{new Date(exec.executedAt).toLocaleString()}</td>\n <td className=\"p-3\">\n {exec.status === 'completed' && (\n <Button variant=\"ghost\" size=\"sm\">\n <Download className=\"h-3 w-3\" />\n </Button>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n\n {/* Report Configs */}\n <Card>\n <CardHeader>\n <CardTitle>Available Reports</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 md:grid-cols-2 lg:grid-cols-3\">\n {reports.map((report) => (\n <div\n key={report.id}\n className=\"rounded-lg border p-4 hover:shadow-sm transition-shadow cursor-pointer\"\n >\n <div className=\"flex items-center justify-between\">\n <Badge variant=\"outline\" className=\"text-xs\">\n {report.type}\n </Badge>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {report.category}\n </Badge>\n </div>\n <h4 className=\"font-medium mt-2\">{report.name}</h4>\n <p className=\"text-xs text-text-secondary mt-1\">{report.description}</p>\n <div className=\"flex items-center gap-2 mt-2 text-xs text-text-secondary\">\n {report.schedule && <span>Schedule: {report.schedule}</span>}\n {report.lastRun && (\n <span>· Last: {new Date(report.lastRun).toLocaleDateString()}</span>\n )}\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReportsReportsDashboardPage.js","names":[],"sources":["../../../src/assethandler/pages/ReportsReportsDashboardPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n NextSteps,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport {\n FileText,\n Clock,\n Download,\n Plus,\n CheckCircle,\n XCircle,\n Loader2,\n} from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function ReportsReportsDashboardPage() {\n const navigate = useNavigate();\n const { reports, reportExecutions } = useAssetHandlerStore();\n\n const completed = reportExecutions.filter((e) => e.status === 'completed');\n const running = reportExecutions.filter((e) => e.status === 'running');\n const failed = reportExecutions.filter((e) => e.status === 'failed');\n const scheduled = reports.filter((r) => r.schedule);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">\n <GradientText>Reports Dashboard</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Overview of all reports and executions</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n New Report\n </Button>\n </div>\n\n <PagePurpose>\n Your reporting home base — see every report you can run, what is scheduled, and the status\n of recent runs. Use it to launch a report, grab a finished export, or jump into the builder\n to create a new one, all from one place.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-reports-dashboard\"\n steps={[\n {\n id: 'build',\n label: 'Build a new report',\n description: 'Pick data, columns and filters in the report builder.',\n onClick: () => navigate('/reports/report-builder'),\n },\n {\n id: 'browse',\n label: 'Browse saved reports',\n description: 'Run or schedule a report you have already defined.',\n onClick: () => navigate('/reports/reports-list'),\n },\n {\n id: 'analytics',\n label: 'Explore analytics',\n description: 'See ready-made insights across the asset estate.',\n onClick: () => navigate('/analytics'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <EmphasisPanel>\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <FileText className=\"h-4 w-4\" />\n Total Reports\n </div>\n <p className=\"text-2xl font-bold mt-1 tabular-nums\">{reports.length}</p>\n </EmphasisPanel>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n Scheduled\n </div>\n <p className=\"text-2xl font-bold mt-1\">{scheduled.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <CheckCircle className=\"h-4 w-4\" />\n Completed\n </div>\n <p className=\"text-2xl font-bold mt-1 text-status-success-text\">{completed.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Loader2 className=\"h-4 w-4\" />\n Running\n </div>\n <p className=\"text-2xl font-bold mt-1 text-status-info-text\">{running.length}</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Recent Executions */}\n <Card>\n <CardHeader>\n <CardTitle>Recent Executions</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n {reportExecutions.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No report runs yet\"\n description=\"Run a report and its execution history will appear here, ready to download.\"\n />\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-bg-sunken/50\">\n <th className=\"text-left p-3 font-medium\">Report</th>\n <th className=\"text-left p-3 font-medium\">Executed By</th>\n <th className=\"text-left p-3 font-medium\">Status</th>\n <th className=\"text-left p-3 font-medium\">Format</th>\n <th className=\"text-left p-3 font-medium\">Duration</th>\n <th className=\"text-left p-3 font-medium\">Time</th>\n <th className=\"p-3\"></th>\n </tr>\n </thead>\n <tbody>\n {reportExecutions.map((exec) => (\n <tr key={exec.id} className=\"border-b hover:bg-bg-sunken/50\">\n <td className=\"p-3 font-medium\">{exec.reportName}</td>\n <td className=\"p-3 text-xs\">{exec.executedBy}</td>\n <td className=\"p-3\">\n {exec.status === 'completed' && (\n <Badge variant=\"default\">\n <CheckCircle className=\"mr-1 h-3 w-3\" />\n Completed\n </Badge>\n )}\n {exec.status === 'running' && (\n <Badge variant=\"secondary\">\n <Loader2 className=\"mr-1 h-3 w-3 animate-spin\" />\n Running\n </Badge>\n )}\n {exec.status === 'failed' && (\n <Badge variant=\"destructive\">\n <XCircle className=\"mr-1 h-3 w-3\" />\n Failed\n </Badge>\n )}\n {exec.status === 'queued' && <Badge variant=\"outline\">Queued</Badge>}\n </td>\n <td className=\"p-3 text-xs\">{exec.format}</td>\n <td className=\"p-3 text-xs\">{exec.duration}s</td>\n <td className=\"p-3 text-xs\">{new Date(exec.executedAt).toLocaleString()}</td>\n <td className=\"p-3\">\n {exec.status === 'completed' && (\n <Button variant=\"ghost\" size=\"sm\">\n <Download className=\"h-3 w-3\" />\n </Button>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Report Configs */}\n <Card>\n <CardHeader>\n <CardTitle>Available Reports</CardTitle>\n </CardHeader>\n <CardContent>\n {reports.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No reports defined\"\n description=\"Create your first report in the builder to make it available here.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/reports/report-builder')}>\n <Plus className=\"mr-2 h-4 w-4\" />\n New Report\n </Button>\n }\n />\n ) : (\n <div className=\"grid gap-3 md:grid-cols-2 lg:grid-cols-3\">\n {reports.map((report) => (\n <div\n key={report.id}\n className=\"rounded-lg border p-4 hover:shadow-sm transition-shadow cursor-pointer\"\n >\n <div className=\"flex items-center justify-between\">\n <Badge variant=\"outline\" className=\"text-xs\">\n {report.type}\n </Badge>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {report.category}\n </Badge>\n </div>\n <h4 className=\"font-medium mt-2\">{report.name}</h4>\n <p className=\"text-xs text-text-secondary mt-1\">{report.description}</p>\n <div className=\"flex items-center gap-2 mt-2 text-xs text-text-secondary\">\n {report.schedule && <span>Schedule: {report.schedule}</span>}\n {report.lastRun && (\n <span>· Last: {new Date(report.lastRun).toLocaleDateString()}</span>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|