@burdenoff/microfe-assethandler 2026.703.2 → 2026.703.4
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/AssetHandlerRoot.js +18 -18
- package/dist/assethandler/hooks/useAssetHandlerNavigate.js +19 -0
- package/dist/assethandler/hooks/useAssetHandlerNavigate.js.map +1 -0
- package/dist/assethandler/pages/AiPredictionsPage.js +29 -29
- package/dist/assethandler/pages/AnalyticsPage.js +154 -154
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +48 -48
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +84 -84
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCreatePage.js +82 -82
- package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetDetailPage.js +104 -103
- package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetListPage.js +132 -132
- package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js +52 -52
- package/dist/assethandler/pages/CmdbBrowserPage.js +27 -27
- package/dist/assethandler/pages/DashboardPage.js +119 -119
- package/dist/assethandler/pages/DashboardPage.js.map +1 -1
- package/dist/assethandler/pages/DigitalTwinPage.js +22 -22
- package/dist/assethandler/pages/DiscoveryJobsPage.js +35 -35
- package/dist/assethandler/pages/EsgDashboardPage.js +32 -32
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js +57 -56
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceFinanceHubPage.js +98 -98
- package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +58 -57
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/IotDevicesPage.js +29 -29
- package/dist/assethandler/pages/ItilChangeDetailPage.js +76 -75
- package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilChangeManagementPage.js +49 -49
- package/dist/assethandler/pages/ItilIncidentDetailPage.js +63 -62
- package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentManagementPage.js +72 -72
- package/dist/assethandler/pages/ItilItilhubPage.js +112 -112
- package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemDetailPage.js +61 -60
- package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemManagementPage.js +46 -46
- package/dist/assethandler/pages/KnowledgeBasePage.js +28 -28
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +52 -52
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +29 -29
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +58 -57
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsOperationsHubPage.js +80 -80
- package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +49 -48
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +52 -52
- package/dist/assethandler/pages/ProvenancePage.js +36 -36
- package/dist/assethandler/pages/SamLicensesPage.js +27 -27
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js +39 -38
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js +50 -49
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +47 -46
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityHubPage.js +104 -104
- package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +74 -73
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionListPage.js +77 -77
- package/dist/assethandler/providers/AssetHandlerProvider.js +12 -12
- package/package.json +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { jsx as
|
|
2
|
+
import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
|
|
3
|
+
import { ArrowLeft as n, CheckCircle as r } from "lucide-react";
|
|
4
|
+
import { useParams as i } from "react-router-dom";
|
|
5
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
6
|
+
import { Badge as s, Button as c, Card as l, CardContent as u, CardHeader as d, CardTitle as f, EmphasisPanel as p, GradientText as m, IllustratedEmptyState as h, NextSteps as g, PagePurpose as _, Separator as v } from "@burdenoff/fe-libs/ui";
|
|
6
7
|
//#region src/assethandler/pages/ItilIncidentDetailPage.tsx
|
|
7
8
|
var y = {
|
|
8
9
|
critical: "destructive",
|
|
@@ -11,57 +12,57 @@ var y = {
|
|
|
11
12
|
low: "secondary"
|
|
12
13
|
};
|
|
13
14
|
function b() {
|
|
14
|
-
let b =
|
|
15
|
-
return C ? /* @__PURE__ */
|
|
15
|
+
let b = t(), { incidentId: x } = i(), { incidents: S } = e(), C = S.find((e) => e.id === x) ?? S[0];
|
|
16
|
+
return C ? /* @__PURE__ */ o("div", {
|
|
16
17
|
className: "space-y-6 p-6",
|
|
17
18
|
children: [
|
|
18
|
-
/* @__PURE__ */
|
|
19
|
+
/* @__PURE__ */ o("div", {
|
|
19
20
|
className: "flex items-center justify-between",
|
|
20
|
-
children: [/* @__PURE__ */
|
|
21
|
+
children: [/* @__PURE__ */ o("div", {
|
|
21
22
|
className: "flex items-center gap-4",
|
|
22
|
-
children: [/* @__PURE__ */
|
|
23
|
+
children: [/* @__PURE__ */ a(c, {
|
|
23
24
|
variant: "ghost",
|
|
24
25
|
size: "icon",
|
|
25
26
|
onClick: () => b("/itil/incident-management"),
|
|
26
|
-
children: /* @__PURE__ */
|
|
27
|
-
}), /* @__PURE__ */
|
|
27
|
+
children: /* @__PURE__ */ a(n, { className: "h-4 w-4" })
|
|
28
|
+
}), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ o("div", {
|
|
28
29
|
className: "flex items-center gap-3",
|
|
29
30
|
children: [
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
+
/* @__PURE__ */ a("h1", {
|
|
31
32
|
className: "text-2xl font-bold",
|
|
32
|
-
children: /* @__PURE__ */
|
|
33
|
+
children: /* @__PURE__ */ a(m, { children: C.id })
|
|
33
34
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
+
/* @__PURE__ */ a(s, {
|
|
35
36
|
variant: y[C.priority],
|
|
36
37
|
children: C.priority
|
|
37
38
|
}),
|
|
38
|
-
/* @__PURE__ */
|
|
39
|
+
/* @__PURE__ */ a(s, {
|
|
39
40
|
variant: "outline",
|
|
40
41
|
children: C.status.replace("_", " ")
|
|
41
42
|
}),
|
|
42
|
-
C.slaBreached && /* @__PURE__ */
|
|
43
|
+
C.slaBreached && /* @__PURE__ */ a(s, {
|
|
43
44
|
variant: "destructive",
|
|
44
45
|
children: "SLA Breached"
|
|
45
46
|
})
|
|
46
47
|
]
|
|
47
|
-
}), /* @__PURE__ */
|
|
48
|
+
}), /* @__PURE__ */ a("p", {
|
|
48
49
|
className: "text-sm text-text-secondary mt-1",
|
|
49
50
|
children: C.title
|
|
50
51
|
})] })]
|
|
51
|
-
}), /* @__PURE__ */
|
|
52
|
+
}), /* @__PURE__ */ o("div", {
|
|
52
53
|
className: "flex gap-2",
|
|
53
|
-
children: [/* @__PURE__ */
|
|
54
|
+
children: [/* @__PURE__ */ a(c, {
|
|
54
55
|
variant: "outline",
|
|
55
56
|
size: "sm",
|
|
56
57
|
children: "Escalate"
|
|
57
|
-
}), /* @__PURE__ */
|
|
58
|
+
}), /* @__PURE__ */ o(c, {
|
|
58
59
|
size: "sm",
|
|
59
|
-
children: [/* @__PURE__ */
|
|
60
|
+
children: [/* @__PURE__ */ a(r, { className: "mr-2 h-4 w-4" }), "Resolve"]
|
|
60
61
|
})]
|
|
61
62
|
})]
|
|
62
63
|
}),
|
|
63
|
-
/* @__PURE__ */ _
|
|
64
|
-
/* @__PURE__ */
|
|
64
|
+
/* @__PURE__ */ a(_, { children: "Everything about a single incident in one place — how severe it is, whether it is breaching SLA, and the trail of who is handling it. Use this page to investigate, resolve or escalate." }),
|
|
65
|
+
/* @__PURE__ */ a(g, {
|
|
65
66
|
storageKey: "assethandler-incident-detail",
|
|
66
67
|
steps: [
|
|
67
68
|
{
|
|
@@ -84,110 +85,110 @@ function b() {
|
|
|
84
85
|
}
|
|
85
86
|
]
|
|
86
87
|
}),
|
|
87
|
-
/* @__PURE__ */
|
|
88
|
+
/* @__PURE__ */ o("div", {
|
|
88
89
|
className: "grid gap-6 lg:grid-cols-3",
|
|
89
|
-
children: [/* @__PURE__ */
|
|
90
|
+
children: [/* @__PURE__ */ o(p, {
|
|
90
91
|
className: "lg:col-span-2",
|
|
91
|
-
children: [/* @__PURE__ */
|
|
92
|
+
children: [/* @__PURE__ */ a(d, {
|
|
92
93
|
className: "px-0 pt-0",
|
|
93
|
-
children: /* @__PURE__ */
|
|
94
|
-
}), /* @__PURE__ */
|
|
94
|
+
children: /* @__PURE__ */ a(f, { children: "Incident Details" })
|
|
95
|
+
}), /* @__PURE__ */ a(u, {
|
|
95
96
|
className: "space-y-4 px-0 pb-0",
|
|
96
|
-
children: /* @__PURE__ */
|
|
97
|
+
children: /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h4", {
|
|
97
98
|
className: "text-sm font-medium text-text-secondary",
|
|
98
99
|
children: "Description"
|
|
99
|
-
}), /* @__PURE__ */
|
|
100
|
+
}), /* @__PURE__ */ a("p", {
|
|
100
101
|
className: "text-sm mt-1",
|
|
101
102
|
children: C.description
|
|
102
103
|
})] })
|
|
103
104
|
})]
|
|
104
|
-
}), /* @__PURE__ */
|
|
105
|
+
}), /* @__PURE__ */ o("div", {
|
|
105
106
|
className: "space-y-4",
|
|
106
|
-
children: [/* @__PURE__ */
|
|
107
|
+
children: [/* @__PURE__ */ o(l, { children: [/* @__PURE__ */ a(d, { children: /* @__PURE__ */ a(f, {
|
|
107
108
|
className: "text-base",
|
|
108
109
|
children: "Properties"
|
|
109
|
-
}) }), /* @__PURE__ */
|
|
110
|
+
}) }), /* @__PURE__ */ a(u, { children: /* @__PURE__ */ o("dl", {
|
|
110
111
|
className: "space-y-3 text-sm",
|
|
111
112
|
children: [
|
|
112
|
-
/* @__PURE__ */
|
|
113
|
+
/* @__PURE__ */ o("div", {
|
|
113
114
|
className: "flex justify-between",
|
|
114
|
-
children: [/* @__PURE__ */
|
|
115
|
+
children: [/* @__PURE__ */ a("dt", {
|
|
115
116
|
className: "text-text-secondary",
|
|
116
117
|
children: "Category"
|
|
117
|
-
}), /* @__PURE__ */
|
|
118
|
+
}), /* @__PURE__ */ a("dd", {
|
|
118
119
|
className: "font-medium",
|
|
119
120
|
children: C.category
|
|
120
121
|
})]
|
|
121
122
|
}),
|
|
122
|
-
/* @__PURE__ */
|
|
123
|
+
/* @__PURE__ */ o("div", {
|
|
123
124
|
className: "flex justify-between",
|
|
124
|
-
children: [/* @__PURE__ */
|
|
125
|
+
children: [/* @__PURE__ */ a("dt", {
|
|
125
126
|
className: "text-text-secondary",
|
|
126
127
|
children: "Priority"
|
|
127
|
-
}), /* @__PURE__ */
|
|
128
|
+
}), /* @__PURE__ */ a("dd", { children: /* @__PURE__ */ a(s, {
|
|
128
129
|
variant: y[C.priority],
|
|
129
130
|
children: C.priority
|
|
130
131
|
}) })]
|
|
131
132
|
}),
|
|
132
|
-
/* @__PURE__ */
|
|
133
|
+
/* @__PURE__ */ o("div", {
|
|
133
134
|
className: "flex justify-between",
|
|
134
|
-
children: [/* @__PURE__ */
|
|
135
|
+
children: [/* @__PURE__ */ a("dt", {
|
|
135
136
|
className: "text-text-secondary",
|
|
136
137
|
children: "Status"
|
|
137
|
-
}), /* @__PURE__ */
|
|
138
|
+
}), /* @__PURE__ */ a("dd", { children: /* @__PURE__ */ a(s, {
|
|
138
139
|
variant: "outline",
|
|
139
140
|
children: C.status.replace("_", " ")
|
|
140
141
|
}) })]
|
|
141
142
|
}),
|
|
142
|
-
/* @__PURE__ */
|
|
143
|
-
/* @__PURE__ */
|
|
143
|
+
/* @__PURE__ */ a(v, {}),
|
|
144
|
+
/* @__PURE__ */ o("div", {
|
|
144
145
|
className: "flex justify-between",
|
|
145
|
-
children: [/* @__PURE__ */
|
|
146
|
+
children: [/* @__PURE__ */ a("dt", {
|
|
146
147
|
className: "text-text-secondary",
|
|
147
148
|
children: "Assigned To"
|
|
148
|
-
}), /* @__PURE__ */
|
|
149
|
+
}), /* @__PURE__ */ a("dd", {
|
|
149
150
|
className: "font-medium text-xs",
|
|
150
151
|
children: C.assignedTo || "Unassigned"
|
|
151
152
|
})]
|
|
152
153
|
}),
|
|
153
|
-
/* @__PURE__ */
|
|
154
|
+
/* @__PURE__ */ o("div", {
|
|
154
155
|
className: "flex justify-between",
|
|
155
|
-
children: [/* @__PURE__ */
|
|
156
|
+
children: [/* @__PURE__ */ a("dt", {
|
|
156
157
|
className: "text-text-secondary",
|
|
157
158
|
children: "Reported By"
|
|
158
|
-
}), /* @__PURE__ */
|
|
159
|
+
}), /* @__PURE__ */ a("dd", {
|
|
159
160
|
className: "text-xs",
|
|
160
161
|
children: C.reportedBy
|
|
161
162
|
})]
|
|
162
163
|
}),
|
|
163
|
-
/* @__PURE__ */
|
|
164
|
-
/* @__PURE__ */
|
|
164
|
+
/* @__PURE__ */ a(v, {}),
|
|
165
|
+
/* @__PURE__ */ o("div", {
|
|
165
166
|
className: "flex justify-between",
|
|
166
|
-
children: [/* @__PURE__ */
|
|
167
|
+
children: [/* @__PURE__ */ a("dt", {
|
|
167
168
|
className: "text-text-secondary",
|
|
168
169
|
children: "Created"
|
|
169
|
-
}), /* @__PURE__ */
|
|
170
|
+
}), /* @__PURE__ */ a("dd", {
|
|
170
171
|
className: "text-xs",
|
|
171
172
|
children: new Date(C.createdAt).toLocaleString()
|
|
172
173
|
})]
|
|
173
174
|
}),
|
|
174
|
-
C.resolvedAt && /* @__PURE__ */
|
|
175
|
+
C.resolvedAt && /* @__PURE__ */ o("div", {
|
|
175
176
|
className: "flex justify-between",
|
|
176
|
-
children: [/* @__PURE__ */
|
|
177
|
+
children: [/* @__PURE__ */ a("dt", {
|
|
177
178
|
className: "text-text-secondary",
|
|
178
179
|
children: "Resolved"
|
|
179
|
-
}), /* @__PURE__ */
|
|
180
|
+
}), /* @__PURE__ */ a("dd", {
|
|
180
181
|
className: "text-xs",
|
|
181
182
|
children: new Date(C.resolvedAt).toLocaleString()
|
|
182
183
|
})]
|
|
183
184
|
})
|
|
184
185
|
]
|
|
185
|
-
}) })] }), /* @__PURE__ */
|
|
186
|
+
}) })] }), /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ a(d, { children: /* @__PURE__ */ a(f, {
|
|
186
187
|
className: "text-base",
|
|
187
188
|
children: "SLA Status"
|
|
188
|
-
}) }), /* @__PURE__ */
|
|
189
|
+
}) }), /* @__PURE__ */ a(u, { children: /* @__PURE__ */ a("div", {
|
|
189
190
|
className: `p-3 rounded-lg text-center ${C.slaBreached ? "bg-status-error-bg-subtle text-status-error-text" : "bg-status-success-bg-subtle text-status-success-text"}`,
|
|
190
|
-
children: /* @__PURE__ */
|
|
191
|
+
children: /* @__PURE__ */ a("p", {
|
|
191
192
|
className: "text-lg font-bold",
|
|
192
193
|
children: C.slaBreached ? "BREACHED" : "WITHIN SLA"
|
|
193
194
|
})
|
|
@@ -195,13 +196,13 @@ function b() {
|
|
|
195
196
|
})]
|
|
196
197
|
})
|
|
197
198
|
]
|
|
198
|
-
}) : /* @__PURE__ */
|
|
199
|
+
}) : /* @__PURE__ */ a("div", {
|
|
199
200
|
className: "p-6",
|
|
200
|
-
children: /* @__PURE__ */
|
|
201
|
+
children: /* @__PURE__ */ a(h, {
|
|
201
202
|
illustration: "empty-search",
|
|
202
203
|
title: "Incident not found",
|
|
203
204
|
description: "This incident may have been resolved or removed. Head back to incident management to find it.",
|
|
204
|
-
action: /* @__PURE__ */
|
|
205
|
+
action: /* @__PURE__ */ a(c, {
|
|
205
206
|
size: "sm",
|
|
206
207
|
onClick: () => b("/itil/incident-management"),
|
|
207
208
|
children: "Back to incidents"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItilIncidentDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/ItilIncidentDetailPage.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 } 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 ItilIncidentDetailPage() {\n const navigate = useNavigate();\n const { incidentId } = useParams<{ incidentId: string }>();\n const { incidents } = useAssetHandlerStore();\n const incident = incidents.find((item) => item.id === incidentId) ?? incidents[0];\n\n if (!incident)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Incident not found\"\n description=\"This incident may have been resolved or removed. Head back to incident management to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/itil/incident-management')}>\n Back to incidents\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/incident-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>{incident.id}</GradientText>\n </h1>\n <Badge variant={priorityColors[incident.priority]}>{incident.priority}</Badge>\n <Badge variant=\"outline\">{incident.status.replace('_', ' ')}</Badge>\n {incident.slaBreached && <Badge variant=\"destructive\">SLA Breached</Badge>}\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{incident.title}</p>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n Escalate\n </Button>\n <Button size=\"sm\">\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n Resolve\n </Button>\n </div>\n </div>\n\n <PagePurpose>\n Everything about a single incident in one place — how severe it is, whether it is breaching\n SLA, and the trail of who is handling it. Use this page to investigate, resolve or escalate.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-incident-detail\"\n steps={[\n {\n id: 'resolve',\n label: 'Resolve this incident',\n description: 'Record the fix and close it out once service is restored.',\n done: incident.status === 'resolved' || incident.status === 'closed',\n },\n {\n id: 'assets',\n label: 'Inspect affected assets',\n description: 'Open the assets impacted by this incident.',\n onClick: () => navigate('/assets/asset-list'),\n },\n {\n id: 'problems',\n label: 'Open a problem record',\n description: 'If this keeps recurring, investigate the root cause.',\n onClick: () => navigate('/itil/problem-management'),\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>Incident 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\">{incident.description}</p>\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <div className=\"space-y-4\">\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\">{incident.category}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Priority</dt>\n <dd>\n <Badge variant={priorityColors[incident.priority]}>{incident.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\">{incident.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=\"font-medium text-xs\">{incident.assignedTo || 'Unassigned'}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Reported By</dt>\n <dd className=\"text-xs\">{incident.reportedBy}</dd>\n </div>\n <Separator />\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Created</dt>\n <dd className=\"text-xs\">{new Date(incident.createdAt).toLocaleString()}</dd>\n </div>\n {incident.resolvedAt && (\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Resolved</dt>\n <dd className=\"text-xs\">{new Date(incident.resolvedAt).toLocaleString()}</dd>\n </div>\n )}\n </dl>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">SLA Status</CardTitle>\n </CardHeader>\n <CardContent>\n <div\n className={`p-3 rounded-lg text-center ${incident.slaBreached ? 'bg-status-error-bg-subtle text-status-error-text' : 'bg-status-success-bg-subtle text-status-success-text'}`}\n >\n <p className=\"text-lg font-bold\">\n {incident.slaBreached ? 'BREACHED' : 'WITHIN SLA'}\n </p>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ItilIncidentDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/ItilIncidentDetailPage.tsx"],"sourcesContent":["import { useAssetHandlerNavigate } from '../hooks/useAssetHandlerNavigate';\nimport {\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 } 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 ItilIncidentDetailPage() {\n const navigate = useAssetHandlerNavigate();\n const { incidentId } = useParams<{ incidentId: string }>();\n const { incidents } = useAssetHandlerStore();\n const incident = incidents.find((item) => item.id === incidentId) ?? incidents[0];\n\n if (!incident)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Incident not found\"\n description=\"This incident may have been resolved or removed. Head back to incident management to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/itil/incident-management')}>\n Back to incidents\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/incident-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>{incident.id}</GradientText>\n </h1>\n <Badge variant={priorityColors[incident.priority]}>{incident.priority}</Badge>\n <Badge variant=\"outline\">{incident.status.replace('_', ' ')}</Badge>\n {incident.slaBreached && <Badge variant=\"destructive\">SLA Breached</Badge>}\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{incident.title}</p>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n Escalate\n </Button>\n <Button size=\"sm\">\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n Resolve\n </Button>\n </div>\n </div>\n\n <PagePurpose>\n Everything about a single incident in one place — how severe it is, whether it is breaching\n SLA, and the trail of who is handling it. Use this page to investigate, resolve or escalate.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-incident-detail\"\n steps={[\n {\n id: 'resolve',\n label: 'Resolve this incident',\n description: 'Record the fix and close it out once service is restored.',\n done: incident.status === 'resolved' || incident.status === 'closed',\n },\n {\n id: 'assets',\n label: 'Inspect affected assets',\n description: 'Open the assets impacted by this incident.',\n onClick: () => navigate('/assets/asset-list'),\n },\n {\n id: 'problems',\n label: 'Open a problem record',\n description: 'If this keeps recurring, investigate the root cause.',\n onClick: () => navigate('/itil/problem-management'),\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>Incident 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\">{incident.description}</p>\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <div className=\"space-y-4\">\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\">{incident.category}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Priority</dt>\n <dd>\n <Badge variant={priorityColors[incident.priority]}>{incident.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\">{incident.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=\"font-medium text-xs\">{incident.assignedTo || 'Unassigned'}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Reported By</dt>\n <dd className=\"text-xs\">{incident.reportedBy}</dd>\n </div>\n <Separator />\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Created</dt>\n <dd className=\"text-xs\">{new Date(incident.createdAt).toLocaleString()}</dd>\n </div>\n {incident.resolvedAt && (\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Resolved</dt>\n <dd className=\"text-xs\">{new Date(incident.resolvedAt).toLocaleString()}</dd>\n </div>\n )}\n </dl>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">SLA Status</CardTitle>\n </CardHeader>\n <CardContent>\n <div\n className={`p-3 rounded-lg text-center ${incident.slaBreached ? 'bg-status-error-bg-subtle text-status-error-text' : 'bg-status-success-bg-subtle text-status-success-text'}`}\n >\n <p className=\"text-lg font-bold\">\n {incident.slaBreached ? 'BREACHED' : 'WITHIN SLA'}\n </p>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
2
|
import { useMemo as t, useState as n } from "react";
|
|
3
3
|
import { Plus as r, Search as i } from "lucide-react";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
5
|
+
import { Badge as s, Button as c, Card as l, CardContent as u, EmphasisPanel as d, GradientText as f, IllustratedEmptyState as p, Input as m, PagePurpose as h, Select as g, SelectContent as _, SelectItem as v, SelectTrigger as y, SelectValue as b } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/assethandler/pages/ItilIncidentManagementPage.tsx
|
|
7
7
|
var x = {
|
|
8
8
|
critical: "destructive",
|
|
@@ -20,132 +20,132 @@ function S() {
|
|
|
20
20
|
T,
|
|
21
21
|
D
|
|
22
22
|
]);
|
|
23
|
-
return /* @__PURE__ */
|
|
23
|
+
return /* @__PURE__ */ o("div", {
|
|
24
24
|
className: "space-y-6 p-6",
|
|
25
25
|
children: [
|
|
26
|
-
/* @__PURE__ */
|
|
26
|
+
/* @__PURE__ */ o("div", {
|
|
27
27
|
className: "flex items-center justify-between",
|
|
28
|
-
children: [/* @__PURE__ */
|
|
28
|
+
children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
29
29
|
className: "text-2xl font-bold",
|
|
30
|
-
children: /* @__PURE__ */
|
|
31
|
-
}), /* @__PURE__ */
|
|
30
|
+
children: /* @__PURE__ */ a(f, { children: "Incident Management" })
|
|
31
|
+
}), /* @__PURE__ */ o("p", {
|
|
32
32
|
className: "text-sm text-text-secondary",
|
|
33
33
|
children: [S.length, " total incidents"]
|
|
34
|
-
})] }), /* @__PURE__ */
|
|
34
|
+
})] }), /* @__PURE__ */ o(c, {
|
|
35
35
|
size: "sm",
|
|
36
|
-
children: [/* @__PURE__ */
|
|
36
|
+
children: [/* @__PURE__ */ a(r, { className: "mr-2 h-4 w-4" }), "New Incident"]
|
|
37
37
|
})]
|
|
38
38
|
}),
|
|
39
|
-
/* @__PURE__ */
|
|
40
|
-
/* @__PURE__ */
|
|
39
|
+
/* @__PURE__ */ a(h, { children: "Track every service-disrupting incident from report to resolution. Filter by priority and status to focus on what hurts most, watch SLA timers, and make sure critical issues are assigned and moving — so outages get fixed fast and nothing breaches its commitment." }),
|
|
40
|
+
/* @__PURE__ */ o("div", {
|
|
41
41
|
className: "grid gap-4 md:grid-cols-4",
|
|
42
42
|
children: [
|
|
43
|
-
/* @__PURE__ */
|
|
43
|
+
/* @__PURE__ */ o(d, { children: [/* @__PURE__ */ a("p", {
|
|
44
44
|
className: "text-sm text-text-secondary",
|
|
45
45
|
children: "Critical"
|
|
46
|
-
}), /* @__PURE__ */
|
|
46
|
+
}), /* @__PURE__ */ a("p", {
|
|
47
47
|
className: "text-2xl font-bold tabular-nums text-status-error-text",
|
|
48
48
|
children: S.filter((e) => e.priority === "critical").length
|
|
49
49
|
})] }),
|
|
50
|
-
/* @__PURE__ */
|
|
50
|
+
/* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
|
|
51
51
|
className: "pt-4",
|
|
52
|
-
children: [/* @__PURE__ */
|
|
52
|
+
children: [/* @__PURE__ */ a("p", {
|
|
53
53
|
className: "text-sm text-text-secondary",
|
|
54
54
|
children: "High"
|
|
55
|
-
}), /* @__PURE__ */
|
|
55
|
+
}), /* @__PURE__ */ a("p", {
|
|
56
56
|
className: "text-2xl font-bold text-status-warning-text",
|
|
57
57
|
children: S.filter((e) => e.priority === "high").length
|
|
58
58
|
})]
|
|
59
59
|
}) }),
|
|
60
|
-
/* @__PURE__ */
|
|
60
|
+
/* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
|
|
61
61
|
className: "pt-4",
|
|
62
|
-
children: [/* @__PURE__ */
|
|
62
|
+
children: [/* @__PURE__ */ a("p", {
|
|
63
63
|
className: "text-sm text-text-secondary",
|
|
64
64
|
children: "In Progress"
|
|
65
|
-
}), /* @__PURE__ */
|
|
65
|
+
}), /* @__PURE__ */ a("p", {
|
|
66
66
|
className: "text-2xl font-bold tabular-nums",
|
|
67
67
|
children: S.filter((e) => e.status === "in_progress").length
|
|
68
68
|
})]
|
|
69
69
|
}) }),
|
|
70
|
-
/* @__PURE__ */
|
|
70
|
+
/* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
|
|
71
71
|
className: "pt-4",
|
|
72
|
-
children: [/* @__PURE__ */
|
|
72
|
+
children: [/* @__PURE__ */ a("p", {
|
|
73
73
|
className: "text-sm text-text-secondary",
|
|
74
74
|
children: "Resolved"
|
|
75
|
-
}), /* @__PURE__ */
|
|
75
|
+
}), /* @__PURE__ */ a("p", {
|
|
76
76
|
className: "text-2xl font-bold text-status-success-text",
|
|
77
77
|
children: S.filter((e) => e.status === "resolved").length
|
|
78
78
|
})]
|
|
79
79
|
}) })
|
|
80
80
|
]
|
|
81
81
|
}),
|
|
82
|
-
/* @__PURE__ */
|
|
82
|
+
/* @__PURE__ */ a(l, { children: /* @__PURE__ */ a(u, {
|
|
83
83
|
className: "pt-4",
|
|
84
|
-
children: /* @__PURE__ */
|
|
84
|
+
children: /* @__PURE__ */ o("div", {
|
|
85
85
|
className: "flex flex-col md:flex-row gap-3",
|
|
86
86
|
children: [
|
|
87
|
-
/* @__PURE__ */
|
|
87
|
+
/* @__PURE__ */ o("div", {
|
|
88
88
|
className: "relative flex-1",
|
|
89
|
-
children: [/* @__PURE__ */
|
|
89
|
+
children: [/* @__PURE__ */ a(i, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ a(m, {
|
|
90
90
|
placeholder: "Search incidents...",
|
|
91
91
|
value: C,
|
|
92
92
|
onChange: (e) => w(e.target.value),
|
|
93
93
|
className: "pl-9"
|
|
94
94
|
})]
|
|
95
95
|
}),
|
|
96
|
-
/* @__PURE__ */
|
|
96
|
+
/* @__PURE__ */ o(g, {
|
|
97
97
|
value: T,
|
|
98
98
|
onValueChange: E,
|
|
99
|
-
children: [/* @__PURE__ */ y
|
|
99
|
+
children: [/* @__PURE__ */ a(y, {
|
|
100
100
|
className: "w-[160px]",
|
|
101
|
-
children: /* @__PURE__ */
|
|
102
|
-
}), /* @__PURE__ */
|
|
103
|
-
/* @__PURE__ */
|
|
101
|
+
children: /* @__PURE__ */ a(b, { placeholder: "Status" })
|
|
102
|
+
}), /* @__PURE__ */ o(_, { children: [
|
|
103
|
+
/* @__PURE__ */ a(v, {
|
|
104
104
|
value: "all",
|
|
105
105
|
children: "All Statuses"
|
|
106
106
|
}),
|
|
107
|
-
/* @__PURE__ */
|
|
107
|
+
/* @__PURE__ */ a(v, {
|
|
108
108
|
value: "new",
|
|
109
109
|
children: "New"
|
|
110
110
|
}),
|
|
111
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ a(v, {
|
|
112
112
|
value: "in_progress",
|
|
113
113
|
children: "In Progress"
|
|
114
114
|
}),
|
|
115
|
-
/* @__PURE__ */
|
|
115
|
+
/* @__PURE__ */ a(v, {
|
|
116
116
|
value: "resolved",
|
|
117
117
|
children: "Resolved"
|
|
118
118
|
}),
|
|
119
|
-
/* @__PURE__ */
|
|
119
|
+
/* @__PURE__ */ a(v, {
|
|
120
120
|
value: "escalated",
|
|
121
121
|
children: "Escalated"
|
|
122
122
|
})
|
|
123
123
|
] })]
|
|
124
124
|
}),
|
|
125
|
-
/* @__PURE__ */
|
|
125
|
+
/* @__PURE__ */ o(g, {
|
|
126
126
|
value: D,
|
|
127
127
|
onValueChange: O,
|
|
128
|
-
children: [/* @__PURE__ */ y
|
|
128
|
+
children: [/* @__PURE__ */ a(y, {
|
|
129
129
|
className: "w-[140px]",
|
|
130
|
-
children: /* @__PURE__ */
|
|
131
|
-
}), /* @__PURE__ */
|
|
132
|
-
/* @__PURE__ */
|
|
130
|
+
children: /* @__PURE__ */ a(b, { placeholder: "Priority" })
|
|
131
|
+
}), /* @__PURE__ */ o(_, { children: [
|
|
132
|
+
/* @__PURE__ */ a(v, {
|
|
133
133
|
value: "all",
|
|
134
134
|
children: "All"
|
|
135
135
|
}),
|
|
136
|
-
/* @__PURE__ */
|
|
136
|
+
/* @__PURE__ */ a(v, {
|
|
137
137
|
value: "critical",
|
|
138
138
|
children: "Critical"
|
|
139
139
|
}),
|
|
140
|
-
/* @__PURE__ */
|
|
140
|
+
/* @__PURE__ */ a(v, {
|
|
141
141
|
value: "high",
|
|
142
142
|
children: "High"
|
|
143
143
|
}),
|
|
144
|
-
/* @__PURE__ */
|
|
144
|
+
/* @__PURE__ */ a(v, {
|
|
145
145
|
value: "medium",
|
|
146
146
|
children: "Medium"
|
|
147
147
|
}),
|
|
148
|
-
/* @__PURE__ */
|
|
148
|
+
/* @__PURE__ */ a(v, {
|
|
149
149
|
value: "low",
|
|
150
150
|
children: "Low"
|
|
151
151
|
})
|
|
@@ -154,101 +154,101 @@ function S() {
|
|
|
154
154
|
]
|
|
155
155
|
})
|
|
156
156
|
}) }),
|
|
157
|
-
k.length === 0 ? /* @__PURE__ */
|
|
157
|
+
k.length === 0 ? /* @__PURE__ */ a(p, {
|
|
158
158
|
illustration: C || T !== "all" || D !== "all" ? "empty-search" : "empty-notifications",
|
|
159
159
|
title: "No incidents to show",
|
|
160
160
|
description: C || T !== "all" || D !== "all" ? "No incidents match your filters — try clearing them." : "When incidents are reported they will be listed here for triage."
|
|
161
|
-
}) : /* @__PURE__ */
|
|
161
|
+
}) : /* @__PURE__ */ a(l, { children: /* @__PURE__ */ a(u, {
|
|
162
162
|
className: "p-0",
|
|
163
|
-
children: /* @__PURE__ */
|
|
163
|
+
children: /* @__PURE__ */ a("div", {
|
|
164
164
|
className: "overflow-x-auto",
|
|
165
|
-
children: /* @__PURE__ */
|
|
165
|
+
children: /* @__PURE__ */ o("table", {
|
|
166
166
|
className: "w-full text-sm",
|
|
167
|
-
children: [/* @__PURE__ */
|
|
167
|
+
children: [/* @__PURE__ */ a("thead", { children: /* @__PURE__ */ o("tr", {
|
|
168
168
|
className: "border-b bg-bg-sunken/50",
|
|
169
169
|
children: [
|
|
170
|
-
/* @__PURE__ */
|
|
170
|
+
/* @__PURE__ */ a("th", {
|
|
171
171
|
className: "text-left p-3 font-medium",
|
|
172
172
|
children: "ID"
|
|
173
173
|
}),
|
|
174
|
-
/* @__PURE__ */
|
|
174
|
+
/* @__PURE__ */ a("th", {
|
|
175
175
|
className: "text-left p-3 font-medium",
|
|
176
176
|
children: "Title"
|
|
177
177
|
}),
|
|
178
|
-
/* @__PURE__ */
|
|
178
|
+
/* @__PURE__ */ a("th", {
|
|
179
179
|
className: "text-left p-3 font-medium",
|
|
180
180
|
children: "Category"
|
|
181
181
|
}),
|
|
182
|
-
/* @__PURE__ */
|
|
182
|
+
/* @__PURE__ */ a("th", {
|
|
183
183
|
className: "text-left p-3 font-medium",
|
|
184
184
|
children: "Priority"
|
|
185
185
|
}),
|
|
186
|
-
/* @__PURE__ */
|
|
186
|
+
/* @__PURE__ */ a("th", {
|
|
187
187
|
className: "text-left p-3 font-medium",
|
|
188
188
|
children: "Status"
|
|
189
189
|
}),
|
|
190
|
-
/* @__PURE__ */
|
|
190
|
+
/* @__PURE__ */ a("th", {
|
|
191
191
|
className: "text-left p-3 font-medium",
|
|
192
192
|
children: "Assigned To"
|
|
193
193
|
}),
|
|
194
|
-
/* @__PURE__ */
|
|
194
|
+
/* @__PURE__ */ a("th", {
|
|
195
195
|
className: "text-left p-3 font-medium",
|
|
196
196
|
children: "Reported"
|
|
197
197
|
}),
|
|
198
|
-
/* @__PURE__ */
|
|
198
|
+
/* @__PURE__ */ a("th", {
|
|
199
199
|
className: "text-left p-3 font-medium",
|
|
200
200
|
children: "SLA"
|
|
201
201
|
})
|
|
202
202
|
]
|
|
203
|
-
}) }), /* @__PURE__ */
|
|
203
|
+
}) }), /* @__PURE__ */ a("tbody", { children: k.map((e) => /* @__PURE__ */ o("tr", {
|
|
204
204
|
className: "border-b hover:bg-bg-sunken/50 cursor-pointer",
|
|
205
205
|
children: [
|
|
206
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ a("td", {
|
|
207
207
|
className: "p-3 font-mono text-xs",
|
|
208
208
|
children: e.id
|
|
209
209
|
}),
|
|
210
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ o("td", {
|
|
211
211
|
className: "p-3",
|
|
212
|
-
children: [/* @__PURE__ */
|
|
212
|
+
children: [/* @__PURE__ */ a("p", {
|
|
213
213
|
className: "font-medium",
|
|
214
214
|
children: e.title
|
|
215
|
-
}), /* @__PURE__ */
|
|
215
|
+
}), /* @__PURE__ */ a("p", {
|
|
216
216
|
className: "text-xs text-text-secondary truncate max-w-xs",
|
|
217
217
|
children: e.description
|
|
218
218
|
})]
|
|
219
219
|
}),
|
|
220
|
-
/* @__PURE__ */
|
|
220
|
+
/* @__PURE__ */ a("td", {
|
|
221
221
|
className: "p-3 text-xs",
|
|
222
222
|
children: e.category
|
|
223
223
|
}),
|
|
224
|
-
/* @__PURE__ */
|
|
224
|
+
/* @__PURE__ */ a("td", {
|
|
225
225
|
className: "p-3",
|
|
226
|
-
children: /* @__PURE__ */
|
|
226
|
+
children: /* @__PURE__ */ a(s, {
|
|
227
227
|
variant: x[e.priority],
|
|
228
228
|
children: e.priority
|
|
229
229
|
})
|
|
230
230
|
}),
|
|
231
|
-
/* @__PURE__ */
|
|
231
|
+
/* @__PURE__ */ a("td", {
|
|
232
232
|
className: "p-3",
|
|
233
|
-
children: /* @__PURE__ */
|
|
233
|
+
children: /* @__PURE__ */ a(s, {
|
|
234
234
|
variant: "outline",
|
|
235
235
|
children: e.status.replace("_", " ")
|
|
236
236
|
})
|
|
237
237
|
}),
|
|
238
|
-
/* @__PURE__ */
|
|
238
|
+
/* @__PURE__ */ a("td", {
|
|
239
239
|
className: "p-3 text-xs",
|
|
240
240
|
children: e.assignedTo || "Unassigned"
|
|
241
241
|
}),
|
|
242
|
-
/* @__PURE__ */
|
|
242
|
+
/* @__PURE__ */ a("td", {
|
|
243
243
|
className: "p-3 text-xs",
|
|
244
244
|
children: new Date(e.createdAt).toLocaleDateString()
|
|
245
245
|
}),
|
|
246
|
-
/* @__PURE__ */
|
|
246
|
+
/* @__PURE__ */ a("td", {
|
|
247
247
|
className: "p-3",
|
|
248
|
-
children: e.slaBreached ? /* @__PURE__ */
|
|
248
|
+
children: e.slaBreached ? /* @__PURE__ */ a(s, {
|
|
249
249
|
variant: "destructive",
|
|
250
250
|
children: "Breached"
|
|
251
|
-
}) : /* @__PURE__ */
|
|
251
|
+
}) : /* @__PURE__ */ a(s, {
|
|
252
252
|
variant: "secondary",
|
|
253
253
|
children: "OK"
|
|
254
254
|
})
|