@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,177 +1,214 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
2
|
import { ArrowLeft as t, CheckCircle as n, Link2 as r } from "lucide-react";
|
|
3
|
-
import {
|
|
4
|
-
import { Badge as
|
|
5
|
-
import { Fragment as
|
|
3
|
+
import { useNavigate as i, useParams as a } from "react-router-dom";
|
|
4
|
+
import { Badge as o, Button as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d, EmphasisPanel as f, GradientText as p, IllustratedEmptyState as m, NextSteps as h, PagePurpose as g, Separator as _ } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
6
6
|
//#region src/assethandler/pages/ItilProblemDetailPage.tsx
|
|
7
|
-
var
|
|
7
|
+
var x = {
|
|
8
8
|
critical: "destructive",
|
|
9
9
|
high: "destructive",
|
|
10
10
|
medium: "default",
|
|
11
11
|
low: "secondary"
|
|
12
12
|
};
|
|
13
|
-
function
|
|
14
|
-
let { problemId:
|
|
15
|
-
return
|
|
13
|
+
function S() {
|
|
14
|
+
let S = i(), { problemId: C } = a(), { problems: w } = e(), T = w.find((e) => e.id === C) ?? w[0];
|
|
15
|
+
return T ? /* @__PURE__ */ b("div", {
|
|
16
16
|
className: "space-y-6 p-6",
|
|
17
|
-
children: [
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
children: [
|
|
18
|
+
/* @__PURE__ */ b("div", {
|
|
19
|
+
className: "flex items-center justify-between",
|
|
20
|
+
children: [/* @__PURE__ */ b("div", {
|
|
21
|
+
className: "flex items-center gap-4",
|
|
22
|
+
children: [/* @__PURE__ */ y(s, {
|
|
23
|
+
variant: "ghost",
|
|
24
|
+
size: "icon",
|
|
25
|
+
onClick: () => S("/itil/problem-management"),
|
|
26
|
+
children: /* @__PURE__ */ y(t, { className: "h-4 w-4" })
|
|
27
|
+
}), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ b("div", {
|
|
28
|
+
className: "flex items-center gap-3",
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ y("h1", {
|
|
31
|
+
className: "text-2xl font-bold",
|
|
32
|
+
children: /* @__PURE__ */ y(p, { children: T.id })
|
|
33
|
+
}),
|
|
34
|
+
/* @__PURE__ */ y(o, {
|
|
35
|
+
variant: x[T.priority],
|
|
36
|
+
children: T.priority
|
|
37
|
+
}),
|
|
38
|
+
/* @__PURE__ */ y(o, {
|
|
39
|
+
variant: "outline",
|
|
40
|
+
children: T.status.replace("_", " ")
|
|
41
|
+
})
|
|
42
|
+
]
|
|
43
|
+
}), /* @__PURE__ */ y("p", {
|
|
44
|
+
className: "text-sm text-text-secondary mt-1",
|
|
45
|
+
children: T.title
|
|
46
|
+
})] })]
|
|
47
|
+
}), /* @__PURE__ */ b(s, {
|
|
48
|
+
size: "sm",
|
|
49
|
+
children: [/* @__PURE__ */ y(n, { className: "mr-2 h-4 w-4" }), "Resolve"]
|
|
50
|
+
})]
|
|
51
|
+
}),
|
|
52
|
+
/* @__PURE__ */ y(g, { children: "Investigate the underlying cause behind a cluster of incidents. Capture the root cause and any workaround, link the incidents this problem explains, and drive it to a permanent fix — so the same issue stops coming back." }),
|
|
53
|
+
/* @__PURE__ */ y(h, {
|
|
54
|
+
storageKey: "assethandler-problem-detail",
|
|
55
|
+
steps: [
|
|
56
|
+
{
|
|
57
|
+
id: "resolve",
|
|
58
|
+
label: "Record a root cause and resolve",
|
|
59
|
+
description: "Document the permanent fix once identified.",
|
|
60
|
+
done: T.status === "resolved" || T.status === "closed"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: "incidents",
|
|
64
|
+
label: "Review related incidents",
|
|
65
|
+
description: "See the incidents this problem is responsible for.",
|
|
66
|
+
onClick: () => S("/itil/incident-management")
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: "kb",
|
|
70
|
+
label: "Write a knowledge article",
|
|
71
|
+
description: "Capture the workaround so others can reuse it.",
|
|
72
|
+
onClick: () => S("/advanced/knowledge-base")
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}),
|
|
76
|
+
/* @__PURE__ */ b("div", {
|
|
77
|
+
className: "grid gap-6 lg:grid-cols-3",
|
|
78
|
+
children: [/* @__PURE__ */ b(f, {
|
|
79
|
+
className: "lg:col-span-2",
|
|
80
|
+
children: [/* @__PURE__ */ y(u, {
|
|
81
|
+
className: "px-0 pt-0",
|
|
82
|
+
children: /* @__PURE__ */ y(d, { children: "Problem Details" })
|
|
83
|
+
}), /* @__PURE__ */ b(l, {
|
|
84
|
+
className: "space-y-4 px-0 pb-0",
|
|
85
|
+
children: [
|
|
86
|
+
/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h4", {
|
|
87
|
+
className: "text-sm font-medium text-text-secondary",
|
|
88
|
+
children: "Description"
|
|
89
|
+
}), /* @__PURE__ */ y("p", {
|
|
90
|
+
className: "text-sm mt-1",
|
|
91
|
+
children: T.description
|
|
92
|
+
})] }),
|
|
93
|
+
T.rootCause && /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(_, {}), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h4", {
|
|
94
|
+
className: "text-sm font-medium text-text-secondary",
|
|
95
|
+
children: "Root Cause"
|
|
96
|
+
}), /* @__PURE__ */ y("p", {
|
|
97
|
+
className: "text-sm mt-1",
|
|
98
|
+
children: T.rootCause
|
|
99
|
+
})] })] }),
|
|
100
|
+
T.workaround && /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(_, {}), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h4", {
|
|
101
|
+
className: "text-sm font-medium text-text-secondary",
|
|
102
|
+
children: "Workaround"
|
|
103
|
+
}), /* @__PURE__ */ y("p", {
|
|
104
|
+
className: "text-sm mt-1",
|
|
105
|
+
children: T.workaround
|
|
106
|
+
})] })] }),
|
|
107
|
+
/* @__PURE__ */ y(_, {}),
|
|
108
|
+
/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ b("h4", {
|
|
109
|
+
className: "text-sm font-medium text-text-secondary mb-2 flex items-center gap-2",
|
|
110
|
+
children: [
|
|
111
|
+
/* @__PURE__ */ y(r, { className: "h-4 w-4" }),
|
|
112
|
+
"Related Incidents (",
|
|
113
|
+
T.relatedIncidents.length,
|
|
114
|
+
")"
|
|
115
|
+
]
|
|
116
|
+
}), /* @__PURE__ */ y("div", {
|
|
117
|
+
className: "flex flex-wrap gap-2",
|
|
118
|
+
children: T.relatedIncidents.map((e) => /* @__PURE__ */ y(o, {
|
|
119
|
+
variant: "secondary",
|
|
120
|
+
className: "font-mono",
|
|
121
|
+
children: e
|
|
122
|
+
}, e))
|
|
123
|
+
})] })
|
|
124
|
+
]
|
|
125
|
+
})]
|
|
126
|
+
}), /* @__PURE__ */ b(c, { children: [/* @__PURE__ */ y(u, { children: /* @__PURE__ */ y(d, {
|
|
127
|
+
className: "text-base",
|
|
128
|
+
children: "Properties"
|
|
129
|
+
}) }), /* @__PURE__ */ y(l, { children: /* @__PURE__ */ b("dl", {
|
|
130
|
+
className: "space-y-3 text-sm",
|
|
27
131
|
children: [
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
-
className: "
|
|
30
|
-
children: /* @__PURE__ */
|
|
132
|
+
/* @__PURE__ */ b("div", {
|
|
133
|
+
className: "flex justify-between",
|
|
134
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
135
|
+
className: "text-text-secondary",
|
|
136
|
+
children: "Category"
|
|
137
|
+
}), /* @__PURE__ */ y("dd", {
|
|
138
|
+
className: "font-medium",
|
|
139
|
+
children: T.category
|
|
140
|
+
})]
|
|
141
|
+
}),
|
|
142
|
+
/* @__PURE__ */ b("div", {
|
|
143
|
+
className: "flex justify-between",
|
|
144
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
145
|
+
className: "text-text-secondary",
|
|
146
|
+
children: "Priority"
|
|
147
|
+
}), /* @__PURE__ */ y("dd", { children: /* @__PURE__ */ y(o, {
|
|
148
|
+
variant: x[T.priority],
|
|
149
|
+
children: T.priority
|
|
150
|
+
}) })]
|
|
31
151
|
}),
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
-
|
|
34
|
-
children: y
|
|
152
|
+
/* @__PURE__ */ b("div", {
|
|
153
|
+
className: "flex justify-between",
|
|
154
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
155
|
+
className: "text-text-secondary",
|
|
156
|
+
children: "Status"
|
|
157
|
+
}), /* @__PURE__ */ y("dd", { children: /* @__PURE__ */ y(o, {
|
|
158
|
+
variant: "outline",
|
|
159
|
+
children: T.status.replace("_", " ")
|
|
160
|
+
}) })]
|
|
35
161
|
}),
|
|
36
|
-
/* @__PURE__ */
|
|
37
|
-
|
|
38
|
-
|
|
162
|
+
/* @__PURE__ */ y(_, {}),
|
|
163
|
+
/* @__PURE__ */ b("div", {
|
|
164
|
+
className: "flex justify-between",
|
|
165
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
166
|
+
className: "text-text-secondary",
|
|
167
|
+
children: "Assigned To"
|
|
168
|
+
}), /* @__PURE__ */ y("dd", {
|
|
169
|
+
className: "text-xs",
|
|
170
|
+
children: T.assignedTo
|
|
171
|
+
})]
|
|
172
|
+
}),
|
|
173
|
+
/* @__PURE__ */ b("div", {
|
|
174
|
+
className: "flex justify-between",
|
|
175
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
176
|
+
className: "text-text-secondary",
|
|
177
|
+
children: "Created"
|
|
178
|
+
}), /* @__PURE__ */ y("dd", {
|
|
179
|
+
className: "text-xs",
|
|
180
|
+
children: new Date(T.createdAt).toLocaleDateString()
|
|
181
|
+
})]
|
|
182
|
+
}),
|
|
183
|
+
/* @__PURE__ */ b("div", {
|
|
184
|
+
className: "flex justify-between",
|
|
185
|
+
children: [/* @__PURE__ */ y("dt", {
|
|
186
|
+
className: "text-text-secondary",
|
|
187
|
+
children: "Updated"
|
|
188
|
+
}), /* @__PURE__ */ y("dd", {
|
|
189
|
+
className: "text-xs",
|
|
190
|
+
children: new Date(T.updatedAt).toLocaleDateString()
|
|
191
|
+
})]
|
|
39
192
|
})
|
|
40
193
|
]
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}), /* @__PURE__ */ h(o, {
|
|
46
|
-
size: "sm",
|
|
47
|
-
children: [/* @__PURE__ */ m(n, { className: "mr-2 h-4 w-4" }), "Resolve"]
|
|
48
|
-
})]
|
|
49
|
-
}), /* @__PURE__ */ h("div", {
|
|
50
|
-
className: "grid gap-6 lg:grid-cols-3",
|
|
51
|
-
children: [/* @__PURE__ */ h(s, {
|
|
52
|
-
className: "lg:col-span-2",
|
|
53
|
-
children: [/* @__PURE__ */ m(l, { children: /* @__PURE__ */ m(u, { children: "Problem Details" }) }), /* @__PURE__ */ h(c, {
|
|
54
|
-
className: "space-y-4",
|
|
55
|
-
children: [
|
|
56
|
-
/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h4", {
|
|
57
|
-
className: "text-sm font-medium text-text-secondary",
|
|
58
|
-
children: "Description"
|
|
59
|
-
}), /* @__PURE__ */ m("p", {
|
|
60
|
-
className: "text-sm mt-1",
|
|
61
|
-
children: y.description
|
|
62
|
-
})] }),
|
|
63
|
-
y.rootCause && /* @__PURE__ */ h(p, { children: [/* @__PURE__ */ m(f, {}), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h4", {
|
|
64
|
-
className: "text-sm font-medium text-text-secondary",
|
|
65
|
-
children: "Root Cause"
|
|
66
|
-
}), /* @__PURE__ */ m("p", {
|
|
67
|
-
className: "text-sm mt-1",
|
|
68
|
-
children: y.rootCause
|
|
69
|
-
})] })] }),
|
|
70
|
-
y.workaround && /* @__PURE__ */ h(p, { children: [/* @__PURE__ */ m(f, {}), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h4", {
|
|
71
|
-
className: "text-sm font-medium text-text-secondary",
|
|
72
|
-
children: "Workaround"
|
|
73
|
-
}), /* @__PURE__ */ m("p", {
|
|
74
|
-
className: "text-sm mt-1",
|
|
75
|
-
children: y.workaround
|
|
76
|
-
})] })] }),
|
|
77
|
-
/* @__PURE__ */ m(f, {}),
|
|
78
|
-
/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("h4", {
|
|
79
|
-
className: "text-sm font-medium text-text-secondary mb-2 flex items-center gap-2",
|
|
80
|
-
children: [
|
|
81
|
-
/* @__PURE__ */ m(r, { className: "h-4 w-4" }),
|
|
82
|
-
"Related Incidents (",
|
|
83
|
-
y.relatedIncidents.length,
|
|
84
|
-
")"
|
|
85
|
-
]
|
|
86
|
-
}), /* @__PURE__ */ m("div", {
|
|
87
|
-
className: "flex flex-wrap gap-2",
|
|
88
|
-
children: y.relatedIncidents.map((e) => /* @__PURE__ */ m(a, {
|
|
89
|
-
variant: "secondary",
|
|
90
|
-
className: "font-mono",
|
|
91
|
-
children: e
|
|
92
|
-
}, e))
|
|
93
|
-
})] })
|
|
94
|
-
]
|
|
95
|
-
})]
|
|
96
|
-
}), /* @__PURE__ */ h(s, { children: [/* @__PURE__ */ m(l, { children: /* @__PURE__ */ m(u, {
|
|
97
|
-
className: "text-base",
|
|
98
|
-
children: "Properties"
|
|
99
|
-
}) }), /* @__PURE__ */ m(c, { children: /* @__PURE__ */ h("dl", {
|
|
100
|
-
className: "space-y-3 text-sm",
|
|
101
|
-
children: [
|
|
102
|
-
/* @__PURE__ */ h("div", {
|
|
103
|
-
className: "flex justify-between",
|
|
104
|
-
children: [/* @__PURE__ */ m("dt", {
|
|
105
|
-
className: "text-text-secondary",
|
|
106
|
-
children: "Category"
|
|
107
|
-
}), /* @__PURE__ */ m("dd", {
|
|
108
|
-
className: "font-medium",
|
|
109
|
-
children: y.category
|
|
110
|
-
})]
|
|
111
|
-
}),
|
|
112
|
-
/* @__PURE__ */ h("div", {
|
|
113
|
-
className: "flex justify-between",
|
|
114
|
-
children: [/* @__PURE__ */ m("dt", {
|
|
115
|
-
className: "text-text-secondary",
|
|
116
|
-
children: "Priority"
|
|
117
|
-
}), /* @__PURE__ */ m("dd", { children: /* @__PURE__ */ m(a, {
|
|
118
|
-
variant: g[y.priority],
|
|
119
|
-
children: y.priority
|
|
120
|
-
}) })]
|
|
121
|
-
}),
|
|
122
|
-
/* @__PURE__ */ h("div", {
|
|
123
|
-
className: "flex justify-between",
|
|
124
|
-
children: [/* @__PURE__ */ m("dt", {
|
|
125
|
-
className: "text-text-secondary",
|
|
126
|
-
children: "Status"
|
|
127
|
-
}), /* @__PURE__ */ m("dd", { children: /* @__PURE__ */ m(a, {
|
|
128
|
-
variant: "outline",
|
|
129
|
-
children: y.status.replace("_", " ")
|
|
130
|
-
}) })]
|
|
131
|
-
}),
|
|
132
|
-
/* @__PURE__ */ m(f, {}),
|
|
133
|
-
/* @__PURE__ */ h("div", {
|
|
134
|
-
className: "flex justify-between",
|
|
135
|
-
children: [/* @__PURE__ */ m("dt", {
|
|
136
|
-
className: "text-text-secondary",
|
|
137
|
-
children: "Assigned To"
|
|
138
|
-
}), /* @__PURE__ */ m("dd", {
|
|
139
|
-
className: "text-xs",
|
|
140
|
-
children: y.assignedTo
|
|
141
|
-
})]
|
|
142
|
-
}),
|
|
143
|
-
/* @__PURE__ */ h("div", {
|
|
144
|
-
className: "flex justify-between",
|
|
145
|
-
children: [/* @__PURE__ */ m("dt", {
|
|
146
|
-
className: "text-text-secondary",
|
|
147
|
-
children: "Created"
|
|
148
|
-
}), /* @__PURE__ */ m("dd", {
|
|
149
|
-
className: "text-xs",
|
|
150
|
-
children: new Date(y.createdAt).toLocaleDateString()
|
|
151
|
-
})]
|
|
152
|
-
}),
|
|
153
|
-
/* @__PURE__ */ h("div", {
|
|
154
|
-
className: "flex justify-between",
|
|
155
|
-
children: [/* @__PURE__ */ m("dt", {
|
|
156
|
-
className: "text-text-secondary",
|
|
157
|
-
children: "Updated"
|
|
158
|
-
}), /* @__PURE__ */ m("dd", {
|
|
159
|
-
className: "text-xs",
|
|
160
|
-
children: new Date(y.updatedAt).toLocaleDateString()
|
|
161
|
-
})]
|
|
162
|
-
})
|
|
163
|
-
]
|
|
164
|
-
}) })] })]
|
|
165
|
-
})]
|
|
166
|
-
}) : /* @__PURE__ */ m("div", {
|
|
194
|
+
}) })] })]
|
|
195
|
+
})
|
|
196
|
+
]
|
|
197
|
+
}) : /* @__PURE__ */ y("div", {
|
|
167
198
|
className: "p-6",
|
|
168
|
-
children: /* @__PURE__ */ m
|
|
169
|
-
|
|
170
|
-
|
|
199
|
+
children: /* @__PURE__ */ y(m, {
|
|
200
|
+
illustration: "empty-search",
|
|
201
|
+
title: "Problem not found",
|
|
202
|
+
description: "This problem record may have been resolved or removed. Return to problem management to find it.",
|
|
203
|
+
action: /* @__PURE__ */ y(s, {
|
|
204
|
+
size: "sm",
|
|
205
|
+
onClick: () => S("/itil/problem-management"),
|
|
206
|
+
children: "Back to problems"
|
|
207
|
+
})
|
|
171
208
|
})
|
|
172
209
|
});
|
|
173
210
|
}
|
|
174
211
|
//#endregion
|
|
175
|
-
export {
|
|
212
|
+
export { S as ItilProblemDetailPage };
|
|
176
213
|
|
|
177
214
|
//# sourceMappingURL=ItilProblemDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItilProblemDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/ItilProblemDetailPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Separator,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, CheckCircle, Link2, Search } from 'lucide-react';\nimport { useParams } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nconst priorityColors: Record<string, 'destructive' | 'default' | 'secondary' | 'outline'> = {\n critical: 'destructive',\n high: 'destructive',\n medium: 'default',\n low: 'secondary',\n};\n\nexport function ItilProblemDetailPage() {\n const { problemId } = useParams<{ problemId: string }>();\n const { problems } = useAssetHandlerStore();\n const problem = problems.find((item) => item.id === problemId) ?? problems[0];\n\n if (!problem)\n return (\n <div className=\"p-6\">\n <p className=\"text-text-secondary\">Problem not found.</p>\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\">\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold\">\n <GradientText>{problem.id}</GradientText>\n </h1>\n <Badge variant={priorityColors[problem.priority]}>{problem.priority}</Badge>\n <Badge variant=\"outline\">{problem.status.replace('_', ' ')}</Badge>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{problem.title}</p>\n </div>\n </div>\n <Button size=\"sm\">\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n Resolve\n </Button>\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <Card className=\"lg:col-span-2\">\n <CardHeader>\n <CardTitle>Problem Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary\">Description</h4>\n <p className=\"text-sm mt-1\">{problem.description}</p>\n </div>\n {problem.rootCause && (\n <>\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary\">Root Cause</h4>\n <p className=\"text-sm mt-1\">{problem.rootCause}</p>\n </div>\n </>\n )}\n {problem.workaround && (\n <>\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary\">Workaround</h4>\n <p className=\"text-sm mt-1\">{problem.workaround}</p>\n </div>\n </>\n )}\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary mb-2 flex items-center gap-2\">\n <Link2 className=\"h-4 w-4\" />\n Related Incidents ({problem.relatedIncidents.length})\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n {problem.relatedIncidents.map((id) => (\n <Badge key={id} variant=\"secondary\" className=\"font-mono\">\n {id}\n </Badge>\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Properties</CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Category</dt>\n <dd className=\"font-medium\">{problem.category}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Priority</dt>\n <dd>\n <Badge variant={priorityColors[problem.priority]}>{problem.priority}</Badge>\n </dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Status</dt>\n <dd>\n <Badge variant=\"outline\">{problem.status.replace('_', ' ')}</Badge>\n </dd>\n </div>\n <Separator />\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Assigned To</dt>\n <dd className=\"text-xs\">{problem.assignedTo}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Created</dt>\n <dd className=\"text-xs\">{new Date(problem.createdAt).toLocaleDateString()}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Updated</dt>\n <dd className=\"text-xs\">{new Date(problem.updatedAt).toLocaleDateString()}</dd>\n </div>\n </dl>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ItilProblemDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/ItilProblemDetailPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Separator,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n NextSteps,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, CheckCircle, Link2 } from 'lucide-react';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nconst priorityColors: Record<string, 'destructive' | 'default' | 'secondary' | 'outline'> = {\n critical: 'destructive',\n high: 'destructive',\n medium: 'default',\n low: 'secondary',\n};\n\nexport function ItilProblemDetailPage() {\n const navigate = useNavigate();\n const { problemId } = useParams<{ problemId: string }>();\n const { problems } = useAssetHandlerStore();\n const problem = problems.find((item) => item.id === problemId) ?? problems[0];\n\n if (!problem)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Problem not found\"\n description=\"This problem record may have been resolved or removed. Return to problem management to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/itil/problem-management')}>\n Back to problems\n </Button>\n }\n />\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/itil/problem-management')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold\">\n <GradientText>{problem.id}</GradientText>\n </h1>\n <Badge variant={priorityColors[problem.priority]}>{problem.priority}</Badge>\n <Badge variant=\"outline\">{problem.status.replace('_', ' ')}</Badge>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{problem.title}</p>\n </div>\n </div>\n <Button size=\"sm\">\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n Resolve\n </Button>\n </div>\n\n <PagePurpose>\n Investigate the underlying cause behind a cluster of incidents. Capture the root cause and\n any workaround, link the incidents this problem explains, and drive it to a permanent fix —\n so the same issue stops coming back.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-problem-detail\"\n steps={[\n {\n id: 'resolve',\n label: 'Record a root cause and resolve',\n description: 'Document the permanent fix once identified.',\n done: problem.status === 'resolved' || problem.status === 'closed',\n },\n {\n id: 'incidents',\n label: 'Review related incidents',\n description: 'See the incidents this problem is responsible for.',\n onClick: () => navigate('/itil/incident-management'),\n },\n {\n id: 'kb',\n label: 'Write a knowledge article',\n description: 'Capture the workaround so others can reuse it.',\n onClick: () => navigate('/advanced/knowledge-base'),\n },\n ]}\n />\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <EmphasisPanel className=\"lg:col-span-2\">\n <CardHeader className=\"px-0 pt-0\">\n <CardTitle>Problem Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4 px-0 pb-0\">\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary\">Description</h4>\n <p className=\"text-sm mt-1\">{problem.description}</p>\n </div>\n {problem.rootCause && (\n <>\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary\">Root Cause</h4>\n <p className=\"text-sm mt-1\">{problem.rootCause}</p>\n </div>\n </>\n )}\n {problem.workaround && (\n <>\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary\">Workaround</h4>\n <p className=\"text-sm mt-1\">{problem.workaround}</p>\n </div>\n </>\n )}\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary mb-2 flex items-center gap-2\">\n <Link2 className=\"h-4 w-4\" />\n Related Incidents ({problem.relatedIncidents.length})\n </h4>\n <div className=\"flex flex-wrap gap-2\">\n {problem.relatedIncidents.map((id) => (\n <Badge key={id} variant=\"secondary\" className=\"font-mono\">\n {id}\n </Badge>\n ))}\n </div>\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Properties</CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Category</dt>\n <dd className=\"font-medium\">{problem.category}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Priority</dt>\n <dd>\n <Badge variant={priorityColors[problem.priority]}>{problem.priority}</Badge>\n </dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Status</dt>\n <dd>\n <Badge variant=\"outline\">{problem.status.replace('_', ' ')}</Badge>\n </dd>\n </div>\n <Separator />\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Assigned To</dt>\n <dd className=\"text-xs\">{problem.assignedTo}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Created</dt>\n <dd className=\"text-xs\">{new Date(problem.createdAt).toLocaleDateString()}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Updated</dt>\n <dd className=\"text-xs\">{new Date(problem.updatedAt).toLocaleDateString()}</dd>\n </div>\n </dl>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,155 +1,157 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
2
|
import { Plus as t } from "lucide-react";
|
|
3
|
-
import { Badge as n, Button as r, Card as i, CardContent as a,
|
|
4
|
-
import { jsx as
|
|
3
|
+
import { Badge as n, Button as r, Card as i, CardContent as a, EmphasisPanel as o, GradientText as s, IllustratedEmptyState as c, PagePurpose as l } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
5
5
|
//#region src/assethandler/pages/ItilProblemManagementPage.tsx
|
|
6
|
-
var
|
|
6
|
+
var f = {
|
|
7
7
|
critical: "destructive",
|
|
8
8
|
high: "destructive",
|
|
9
9
|
medium: "default",
|
|
10
10
|
low: "secondary"
|
|
11
11
|
};
|
|
12
|
-
function
|
|
13
|
-
let { problems:
|
|
14
|
-
return /* @__PURE__ */
|
|
12
|
+
function p() {
|
|
13
|
+
let { problems: p } = e();
|
|
14
|
+
return /* @__PURE__ */ d("div", {
|
|
15
15
|
className: "space-y-6 p-6",
|
|
16
16
|
children: [
|
|
17
|
-
/* @__PURE__ */
|
|
17
|
+
/* @__PURE__ */ d("div", {
|
|
18
18
|
className: "flex items-center justify-between",
|
|
19
|
-
children: [/* @__PURE__ */
|
|
19
|
+
children: [/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
|
|
20
20
|
className: "text-2xl font-bold",
|
|
21
|
-
children: /* @__PURE__ */ s
|
|
22
|
-
}), /* @__PURE__ */
|
|
21
|
+
children: /* @__PURE__ */ u(s, { children: "Problem Management" })
|
|
22
|
+
}), /* @__PURE__ */ d("p", {
|
|
23
23
|
className: "text-sm text-text-secondary",
|
|
24
|
-
children: [
|
|
25
|
-
})] }), /* @__PURE__ */
|
|
24
|
+
children: [p.length, " problems tracked"]
|
|
25
|
+
})] }), /* @__PURE__ */ d(r, {
|
|
26
26
|
size: "sm",
|
|
27
|
-
children: [/* @__PURE__ */
|
|
27
|
+
children: [/* @__PURE__ */ u(t, { className: "mr-2 h-4 w-4" }), "New Problem"]
|
|
28
28
|
})]
|
|
29
29
|
}),
|
|
30
|
-
/* @__PURE__ */
|
|
30
|
+
/* @__PURE__ */ u(l, { children: "Get to the root cause of recurring incidents instead of firefighting the same issue twice. Track problems through investigation to a known error and a permanent fix, link the incidents they explain, and stop repeat outages at the source." }),
|
|
31
|
+
/* @__PURE__ */ d("div", {
|
|
31
32
|
className: "grid gap-4 md:grid-cols-4",
|
|
32
33
|
children: [
|
|
33
|
-
/* @__PURE__ */
|
|
34
|
+
/* @__PURE__ */ d(o, { children: [/* @__PURE__ */ u("p", {
|
|
35
|
+
className: "text-sm text-text-secondary",
|
|
36
|
+
children: "Open"
|
|
37
|
+
}), /* @__PURE__ */ u("p", {
|
|
38
|
+
className: "text-2xl font-bold tabular-nums",
|
|
39
|
+
children: p.filter((e) => e.status === "open").length
|
|
40
|
+
})] }),
|
|
41
|
+
/* @__PURE__ */ u(i, { children: /* @__PURE__ */ d(a, {
|
|
34
42
|
className: "pt-4",
|
|
35
|
-
children: [/* @__PURE__ */
|
|
36
|
-
className: "text-sm text-text-secondary",
|
|
37
|
-
children: "Open"
|
|
38
|
-
}), /* @__PURE__ */ s("p", {
|
|
39
|
-
className: "text-2xl font-bold tabular-nums",
|
|
40
|
-
children: u.filter((e) => e.status === "open").length
|
|
41
|
-
})]
|
|
42
|
-
}) }),
|
|
43
|
-
/* @__PURE__ */ s(i, { children: /* @__PURE__ */ c(a, {
|
|
44
|
-
className: "pt-4",
|
|
45
|
-
children: [/* @__PURE__ */ s("p", {
|
|
43
|
+
children: [/* @__PURE__ */ u("p", {
|
|
46
44
|
className: "text-sm text-text-secondary",
|
|
47
45
|
children: "Investigating"
|
|
48
|
-
}), /* @__PURE__ */
|
|
46
|
+
}), /* @__PURE__ */ u("p", {
|
|
49
47
|
className: "text-2xl font-bold text-status-info-text",
|
|
50
|
-
children:
|
|
48
|
+
children: p.filter((e) => e.status === "investigating").length
|
|
51
49
|
})]
|
|
52
50
|
}) }),
|
|
53
|
-
/* @__PURE__ */
|
|
51
|
+
/* @__PURE__ */ u(i, { children: /* @__PURE__ */ d(a, {
|
|
54
52
|
className: "pt-4",
|
|
55
|
-
children: [/* @__PURE__ */
|
|
53
|
+
children: [/* @__PURE__ */ u("p", {
|
|
56
54
|
className: "text-sm text-text-secondary",
|
|
57
55
|
children: "Known Error"
|
|
58
|
-
}), /* @__PURE__ */
|
|
56
|
+
}), /* @__PURE__ */ u("p", {
|
|
59
57
|
className: "text-2xl font-bold text-status-warning-text",
|
|
60
|
-
children:
|
|
58
|
+
children: p.filter((e) => e.status === "known_error").length
|
|
61
59
|
})]
|
|
62
60
|
}) }),
|
|
63
|
-
/* @__PURE__ */
|
|
61
|
+
/* @__PURE__ */ u(i, { children: /* @__PURE__ */ d(a, {
|
|
64
62
|
className: "pt-4",
|
|
65
|
-
children: [/* @__PURE__ */
|
|
63
|
+
children: [/* @__PURE__ */ u("p", {
|
|
66
64
|
className: "text-sm text-text-secondary",
|
|
67
65
|
children: "Resolved"
|
|
68
|
-
}), /* @__PURE__ */
|
|
66
|
+
}), /* @__PURE__ */ u("p", {
|
|
69
67
|
className: "text-2xl font-bold text-status-success-text",
|
|
70
|
-
children:
|
|
68
|
+
children: p.filter((e) => e.status === "resolved" || e.status === "closed").length
|
|
71
69
|
})]
|
|
72
70
|
}) })
|
|
73
71
|
]
|
|
74
72
|
}),
|
|
75
|
-
|
|
73
|
+
p.length === 0 ? /* @__PURE__ */ u(c, {
|
|
74
|
+
illustration: "empty-search",
|
|
75
|
+
title: "No problems tracked",
|
|
76
|
+
description: "Open a problem record to investigate the root cause behind recurring incidents."
|
|
77
|
+
}) : /* @__PURE__ */ u(i, { children: /* @__PURE__ */ u(a, {
|
|
76
78
|
className: "p-0",
|
|
77
|
-
children: /* @__PURE__ */
|
|
79
|
+
children: /* @__PURE__ */ u("div", {
|
|
78
80
|
className: "overflow-x-auto",
|
|
79
|
-
children: /* @__PURE__ */
|
|
81
|
+
children: /* @__PURE__ */ d("table", {
|
|
80
82
|
className: "w-full text-sm",
|
|
81
|
-
children: [/* @__PURE__ */
|
|
83
|
+
children: [/* @__PURE__ */ u("thead", { children: /* @__PURE__ */ d("tr", {
|
|
82
84
|
className: "border-b bg-bg-sunken/50",
|
|
83
85
|
children: [
|
|
84
|
-
/* @__PURE__ */
|
|
86
|
+
/* @__PURE__ */ u("th", {
|
|
85
87
|
className: "text-left p-3 font-medium",
|
|
86
88
|
children: "ID"
|
|
87
89
|
}),
|
|
88
|
-
/* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ u("th", {
|
|
89
91
|
className: "text-left p-3 font-medium",
|
|
90
92
|
children: "Title"
|
|
91
93
|
}),
|
|
92
|
-
/* @__PURE__ */
|
|
94
|
+
/* @__PURE__ */ u("th", {
|
|
93
95
|
className: "text-left p-3 font-medium",
|
|
94
96
|
children: "Category"
|
|
95
97
|
}),
|
|
96
|
-
/* @__PURE__ */
|
|
98
|
+
/* @__PURE__ */ u("th", {
|
|
97
99
|
className: "text-left p-3 font-medium",
|
|
98
100
|
children: "Priority"
|
|
99
101
|
}),
|
|
100
|
-
/* @__PURE__ */
|
|
102
|
+
/* @__PURE__ */ u("th", {
|
|
101
103
|
className: "text-left p-3 font-medium",
|
|
102
104
|
children: "Status"
|
|
103
105
|
}),
|
|
104
|
-
/* @__PURE__ */
|
|
106
|
+
/* @__PURE__ */ u("th", {
|
|
105
107
|
className: "text-left p-3 font-medium",
|
|
106
108
|
children: "Related Incidents"
|
|
107
109
|
}),
|
|
108
|
-
/* @__PURE__ */
|
|
110
|
+
/* @__PURE__ */ u("th", {
|
|
109
111
|
className: "text-left p-3 font-medium",
|
|
110
112
|
children: "Assigned To"
|
|
111
113
|
})
|
|
112
114
|
]
|
|
113
|
-
}) }), /* @__PURE__ */
|
|
115
|
+
}) }), /* @__PURE__ */ u("tbody", { children: p.map((e) => /* @__PURE__ */ d("tr", {
|
|
114
116
|
className: "border-b hover:bg-bg-sunken/50 cursor-pointer",
|
|
115
117
|
children: [
|
|
116
|
-
/* @__PURE__ */
|
|
118
|
+
/* @__PURE__ */ u("td", {
|
|
117
119
|
className: "p-3 font-mono text-xs",
|
|
118
120
|
children: e.id
|
|
119
121
|
}),
|
|
120
|
-
/* @__PURE__ */
|
|
122
|
+
/* @__PURE__ */ d("td", {
|
|
121
123
|
className: "p-3",
|
|
122
|
-
children: [/* @__PURE__ */
|
|
124
|
+
children: [/* @__PURE__ */ u("p", {
|
|
123
125
|
className: "font-medium",
|
|
124
126
|
children: e.title
|
|
125
|
-
}), /* @__PURE__ */
|
|
127
|
+
}), /* @__PURE__ */ u("p", {
|
|
126
128
|
className: "text-xs text-text-secondary truncate max-w-xs",
|
|
127
129
|
children: e.description
|
|
128
130
|
})]
|
|
129
131
|
}),
|
|
130
|
-
/* @__PURE__ */
|
|
132
|
+
/* @__PURE__ */ u("td", {
|
|
131
133
|
className: "p-3 text-xs",
|
|
132
134
|
children: e.category
|
|
133
135
|
}),
|
|
134
|
-
/* @__PURE__ */
|
|
136
|
+
/* @__PURE__ */ u("td", {
|
|
135
137
|
className: "p-3",
|
|
136
|
-
children: /* @__PURE__ */
|
|
137
|
-
variant:
|
|
138
|
+
children: /* @__PURE__ */ u(n, {
|
|
139
|
+
variant: f[e.priority],
|
|
138
140
|
children: e.priority
|
|
139
141
|
})
|
|
140
142
|
}),
|
|
141
|
-
/* @__PURE__ */
|
|
143
|
+
/* @__PURE__ */ u("td", {
|
|
142
144
|
className: "p-3",
|
|
143
|
-
children: /* @__PURE__ */
|
|
145
|
+
children: /* @__PURE__ */ u(n, {
|
|
144
146
|
variant: "outline",
|
|
145
147
|
children: e.status.replace("_", " ")
|
|
146
148
|
})
|
|
147
149
|
}),
|
|
148
|
-
/* @__PURE__ */
|
|
150
|
+
/* @__PURE__ */ u("td", {
|
|
149
151
|
className: "p-3 text-xs",
|
|
150
152
|
children: e.relatedIncidents.join(", ")
|
|
151
153
|
}),
|
|
152
|
-
/* @__PURE__ */
|
|
154
|
+
/* @__PURE__ */ u("td", {
|
|
153
155
|
className: "p-3 text-xs",
|
|
154
156
|
children: e.assignedTo
|
|
155
157
|
})
|
|
@@ -162,6 +164,6 @@ function u() {
|
|
|
162
164
|
});
|
|
163
165
|
}
|
|
164
166
|
//#endregion
|
|
165
|
-
export {
|
|
167
|
+
export { p as ItilProblemManagementPage };
|
|
166
168
|
|
|
167
169
|
//# sourceMappingURL=ItilProblemManagementPage.js.map
|