@burdenoff/microfe-assethandler 2026.713.2 → 2026.714.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/components/AttachmentsPanel.d.ts.map +1 -1
- package/dist/assethandler/components/AttachmentsPanel.js.map +1 -1
- package/dist/assethandler/hooks/useCopy.d.ts +28 -0
- package/dist/assethandler/hooks/useCopy.d.ts.map +1 -0
- package/dist/assethandler/hooks/useCopy.js +33 -0
- package/dist/assethandler/hooks/useCopy.js.map +1 -0
- package/dist/assethandler/index.d.ts +1 -1
- package/dist/assethandler/index.d.ts.map +1 -1
- package/dist/assethandler/pages/AnalyticsPage.d.ts.map +1 -1
- package/dist/assethandler/pages/AnalyticsPage.js +259 -258
- package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.d.ts.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +1 -2
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetDetailPage.d.ts.map +1 -1
- package/dist/assethandler/pages/AssetsAssetDetailPage.js +376 -365
- package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetListPage.d.ts.map +1 -1
- package/dist/assethandler/pages/AssetsAssetListPage.js +47 -48
- package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
- package/dist/assethandler/pages/DashboardPage.d.ts.map +1 -1
- package/dist/assethandler/pages/DashboardPage.js +236 -236
- package/dist/assethandler/pages/DashboardPage.js.map +1 -1
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.d.ts.map +1 -1
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +126 -125
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionListPage.js +127 -127
- package/dist/assethandler/pages/TransactionsTransactionListPage.js.map +1 -1
- package/dist/assethandler/store/assethandlerStore.d.ts.map +1 -1
- package/dist/assethandler/store/assethandlerStore.js.map +1 -1
- package/dist/assethandler/types/index.d.ts +20 -0
- package/dist/assethandler/types/index.d.ts.map +1 -1
- package/dist/types/assistant.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
2
|
import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
|
|
3
|
-
import {
|
|
3
|
+
import { useCopy as n } from "../hooks/useCopy.js";
|
|
4
4
|
import { cn as r } from "../utils/cn.js";
|
|
5
5
|
import { formatCompact as i, formatCurrencyCompact as a, seriesColor as o } from "../components/charts/chartTheme.js";
|
|
6
6
|
import { TrendChart as s } from "../components/charts/TrendChart.js";
|
|
@@ -10,32 +10,31 @@ import { StatTile as u } from "../components/StatTile.js";
|
|
|
10
10
|
import { ChartCard as d } from "../components/ChartCard.js";
|
|
11
11
|
import "../components/index.js";
|
|
12
12
|
import { useMemo as f, useState as p } from "react";
|
|
13
|
-
import { Activity as m, AlertTriangle as h, ArrowRight as
|
|
14
|
-
import { Fragment as
|
|
15
|
-
import { AuroraBackground as
|
|
16
|
-
import { useI18n as oe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
13
|
+
import { Activity as m, AlertTriangle as h, ArrowRight as ee, Box as g, CalendarClock as te, CheckCircle as ne, ClipboardList as _, Clock as re, Receipt as v, Wrench as y } from "lucide-react";
|
|
14
|
+
import { Fragment as ie, jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
15
|
+
import { AuroraBackground as S, CTAOverflowMenu as ae, GlassCard as C, GradientText as oe, IllustratedEmptyState as w, NextSteps as se, PagePurpose as ce } from "@burdenoff/fe-libs/ui";
|
|
17
16
|
//#region src/assethandler/pages/DashboardPage.tsx
|
|
18
|
-
function
|
|
17
|
+
function T(e) {
|
|
19
18
|
return `${e.getFullYear()}-${String(e.getMonth() + 1).padStart(2, "0")}`;
|
|
20
19
|
}
|
|
21
|
-
function
|
|
20
|
+
function E(e) {
|
|
22
21
|
let [t, n] = e.split("-").map(Number);
|
|
23
22
|
return new Date(t, n - 1, 1).toLocaleString(void 0, { month: "short" });
|
|
24
23
|
}
|
|
25
|
-
function
|
|
24
|
+
function D(e) {
|
|
26
25
|
if (!e) return null;
|
|
27
26
|
let t = new Date(e);
|
|
28
27
|
return Number.isNaN(t.getTime()) ? null : t;
|
|
29
28
|
}
|
|
30
|
-
function
|
|
29
|
+
function O(e) {
|
|
31
30
|
return e.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
|
|
32
31
|
}
|
|
33
|
-
function
|
|
32
|
+
function k(e, t, n, r = 8, i = 6) {
|
|
34
33
|
let a = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
|
|
35
34
|
for (let r of e) {
|
|
36
|
-
let e =
|
|
35
|
+
let e = D(t(r));
|
|
37
36
|
if (!e) continue;
|
|
38
|
-
let i =
|
|
37
|
+
let i = T(e), o = n(r) || "other";
|
|
39
38
|
a.has(i) || a.set(i, /* @__PURE__ */ new Map());
|
|
40
39
|
let c = a.get(i);
|
|
41
40
|
c.set(o, (c.get(o) ?? 0) + 1), s.set(o, (s.get(o) ?? 0) + 1);
|
|
@@ -45,14 +44,14 @@ function M(e, t, n, r = 8, i = 6) {
|
|
|
45
44
|
series: []
|
|
46
45
|
};
|
|
47
46
|
let c = [...s.entries()].sort((e, t) => t[1] - e[1]).map(([e]) => e), l = c.slice(0, i), u = c.length > i, d = new Set(l), f = [...a.keys()].sort().slice(-r).map((e) => {
|
|
48
|
-
let t = { month:
|
|
47
|
+
let t = { month: E(e) };
|
|
49
48
|
for (let e of l) t[e] = 0;
|
|
50
49
|
u && (t.other = 0);
|
|
51
50
|
for (let [n, r] of a.get(e)) d.has(n) ? t[n] = (t[n] ?? 0) + r : u && (t.other = (t.other ?? 0) + r);
|
|
52
51
|
return t;
|
|
53
52
|
}), p = l.map((e, t) => ({
|
|
54
53
|
key: e,
|
|
55
|
-
label:
|
|
54
|
+
label: O(e),
|
|
56
55
|
color: o(t)
|
|
57
56
|
}));
|
|
58
57
|
return u && p.push({
|
|
@@ -64,8 +63,8 @@ function M(e, t, n, r = 8, i = 6) {
|
|
|
64
63
|
series: p
|
|
65
64
|
};
|
|
66
65
|
}
|
|
67
|
-
function
|
|
68
|
-
let t =
|
|
66
|
+
function A(e) {
|
|
67
|
+
let t = D(e);
|
|
69
68
|
if (!t) return "";
|
|
70
69
|
let n = Date.now() - t.getTime(), r = Math.round(n / 6e4);
|
|
71
70
|
if (r < 1) return "just now";
|
|
@@ -77,71 +76,71 @@ function N(e) {
|
|
|
77
76
|
let o = Math.round(a / 30);
|
|
78
77
|
return o < 12 ? `${o}mo ago` : `${Math.round(o / 12)}y ago`;
|
|
79
78
|
}
|
|
80
|
-
var
|
|
79
|
+
var j = {
|
|
81
80
|
success: "bg-status-success-bg-subtle text-status-success-text",
|
|
82
81
|
warning: "bg-status-warning-bg-subtle text-status-warning-text",
|
|
83
82
|
error: "bg-status-error-bg-subtle text-status-error-text",
|
|
84
83
|
info: "bg-status-info-bg-subtle text-status-info-text",
|
|
85
84
|
neutral: "bg-bg-sunken text-text-secondary"
|
|
86
85
|
};
|
|
87
|
-
function
|
|
88
|
-
return /* @__PURE__ */
|
|
89
|
-
className: r("inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium capitalize whitespace-nowrap",
|
|
86
|
+
function M({ tone: e, children: t }) {
|
|
87
|
+
return /* @__PURE__ */ b("span", {
|
|
88
|
+
className: r("inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium capitalize whitespace-nowrap", j[e]),
|
|
90
89
|
children: t
|
|
91
90
|
});
|
|
92
91
|
}
|
|
93
|
-
var
|
|
94
|
-
function
|
|
95
|
-
let
|
|
92
|
+
var N = (e) => e === "critical" ? "error" : e === "high" ? "warning" : e === "medium" ? "info" : "neutral", P = (e) => e === "completed" ? "success" : e === "in_progress" ? "info" : "warning";
|
|
93
|
+
function F() {
|
|
94
|
+
let o = n(), j = t(), { hydrated: F, overview: I, assets: L, incidents: R, maintenanceRecords: z, changeRequests: B, workOrders: V, transactions: H } = e(), [U, W] = p("status"), G = R.filter((e) => e.status !== "resolved" && e.status !== "closed"), le = R.filter((e) => e.priority === "critical" && e.status !== "resolved" && e.status !== "closed"), ue = z.filter((e) => e.status === "scheduled" || e.status === "in_progress"), K = V.filter((e) => e.status !== "completed" && e.status !== "cancelled"), de = B.filter((e) => e.status === "approved" || e.status === "submitted"), q = f(() => {
|
|
96
95
|
let e = /* @__PURE__ */ new Map();
|
|
97
|
-
for (let t of
|
|
98
|
-
let n =
|
|
96
|
+
for (let t of L) {
|
|
97
|
+
let n = D(t.createdAt);
|
|
99
98
|
if (!n) continue;
|
|
100
|
-
let r =
|
|
99
|
+
let r = T(n);
|
|
101
100
|
e.set(r, (e.get(r) ?? 0) + 1);
|
|
102
101
|
}
|
|
103
102
|
return [...e.keys()].sort().reduce((t, n) => {
|
|
104
103
|
let r = t.length ? t[t.length - 1] : 0;
|
|
105
104
|
return t.push(r + (e.get(n) ?? 0)), t;
|
|
106
105
|
}, []);
|
|
107
|
-
}, [
|
|
106
|
+
}, [L]), J = [
|
|
108
107
|
{
|
|
109
|
-
label:
|
|
110
|
-
value:
|
|
111
|
-
icon:
|
|
112
|
-
spark:
|
|
108
|
+
label: o("assethandler.dashboard.metrics.totalAssets", "Total {{assets}}"),
|
|
109
|
+
value: I?.totalAssets ?? L.length,
|
|
110
|
+
icon: g,
|
|
111
|
+
spark: q.length > 1 ? q : void 0,
|
|
113
112
|
hero: !0
|
|
114
113
|
},
|
|
115
114
|
{
|
|
116
|
-
label:
|
|
117
|
-
value:
|
|
115
|
+
label: o("assethandler.dashboard.metrics.openIncidents", "Open Incidents"),
|
|
116
|
+
value: I?.openIncidents ?? G.length,
|
|
118
117
|
icon: h
|
|
119
118
|
},
|
|
120
119
|
{
|
|
121
|
-
label:
|
|
122
|
-
value:
|
|
123
|
-
icon:
|
|
120
|
+
label: o("assethandler.dashboard.metrics.openWorkOrders", "Open Work Orders"),
|
|
121
|
+
value: I?.openWorkOrders ?? K.length,
|
|
122
|
+
icon: _
|
|
124
123
|
},
|
|
125
124
|
{
|
|
126
|
-
label:
|
|
127
|
-
value:
|
|
128
|
-
icon:
|
|
125
|
+
label: o("assethandler.dashboard.metrics.transactions", "Transactions"),
|
|
126
|
+
value: I?.totalTransactions ?? H.length,
|
|
127
|
+
icon: v
|
|
129
128
|
}
|
|
130
129
|
], Y = f(() => {
|
|
131
|
-
let e =
|
|
130
|
+
let e = L.reduce((e, t) => {
|
|
132
131
|
let n = t.category || "uncategorized";
|
|
133
132
|
return e[n] = (e[n] ?? 0) + 1, e;
|
|
134
133
|
}, {});
|
|
135
134
|
return Object.entries(e).sort((e, t) => t[1] - e[1]).map(([e, t]) => ({
|
|
136
|
-
name:
|
|
135
|
+
name: O(e),
|
|
137
136
|
value: t
|
|
138
137
|
}));
|
|
139
|
-
}, [
|
|
138
|
+
}, [L]), X = f(() => k(L, (e) => e.createdAt, (e) => U === "status" ? e.status : e.category, 8, 6), [L, U]), Z = f(() => {
|
|
140
139
|
let e = /* @__PURE__ */ new Map();
|
|
141
|
-
for (let t of
|
|
142
|
-
let n =
|
|
140
|
+
for (let t of H) {
|
|
141
|
+
let n = D(t.date);
|
|
143
142
|
if (!n) continue;
|
|
144
|
-
let r =
|
|
143
|
+
let r = T(n);
|
|
145
144
|
e.set(r, (e.get(r) ?? 0) + t.amount);
|
|
146
145
|
}
|
|
147
146
|
let t = [...e.keys()].sort(), n = t.reduce((t, n) => {
|
|
@@ -149,21 +148,21 @@ function R() {
|
|
|
149
148
|
return t.push(r + (e.get(n) ?? 0)), t;
|
|
150
149
|
}, []);
|
|
151
150
|
return t.map((e, t) => ({
|
|
152
|
-
month:
|
|
151
|
+
month: E(e),
|
|
153
152
|
value: Math.round(n[t])
|
|
154
153
|
}));
|
|
155
|
-
}, [
|
|
154
|
+
}, [H]), fe = H[0]?.currency ?? "USD", Q = f(() => {
|
|
156
155
|
let e = [];
|
|
157
|
-
for (let t of
|
|
156
|
+
for (let t of L) e.push({
|
|
158
157
|
id: `asset-${t.id}`,
|
|
159
|
-
icon:
|
|
158
|
+
icon: g,
|
|
160
159
|
title: t.name,
|
|
161
|
-
meta: "
|
|
160
|
+
meta: o("assethandler.dashboard.activity.assetRegistered", "{{asset}} registered"),
|
|
162
161
|
at: t.createdAt,
|
|
163
162
|
tone: t.status === "active" ? "success" : t.status === "maintenance" ? "warning" : "neutral",
|
|
164
163
|
statusLabel: t.status.replace(/_/g, " ")
|
|
165
164
|
});
|
|
166
|
-
for (let t of
|
|
165
|
+
for (let t of R) e.push({
|
|
167
166
|
id: `inc-${t.id}`,
|
|
168
167
|
icon: h,
|
|
169
168
|
title: t.title,
|
|
@@ -172,20 +171,20 @@ function R() {
|
|
|
172
171
|
tone: t.status === "resolved" || t.status === "closed" ? "success" : t.priority === "critical" || t.priority === "high" ? "error" : "warning",
|
|
173
172
|
statusLabel: t.status.replace(/_/g, " ")
|
|
174
173
|
});
|
|
175
|
-
for (let t of
|
|
174
|
+
for (let t of V) e.push({
|
|
176
175
|
id: `wo-${t.id}`,
|
|
177
|
-
icon:
|
|
176
|
+
icon: _,
|
|
178
177
|
title: t.title,
|
|
179
178
|
meta: `Work order · ${t.type}`,
|
|
180
179
|
at: t.createdAt,
|
|
181
180
|
tone: t.status === "completed" ? "success" : t.status === "in_progress" ? "info" : t.status === "cancelled" ? "neutral" : "warning",
|
|
182
181
|
statusLabel: t.status.replace(/_/g, " ")
|
|
183
182
|
});
|
|
184
|
-
for (let t of
|
|
183
|
+
for (let t of z) {
|
|
185
184
|
let n = t.completedDate ?? t.scheduledDate;
|
|
186
185
|
n && e.push({
|
|
187
186
|
id: `mnt-${t.id}`,
|
|
188
|
-
icon:
|
|
187
|
+
icon: y,
|
|
189
188
|
title: t.title,
|
|
190
189
|
meta: "Maintenance",
|
|
191
190
|
at: n,
|
|
@@ -193,131 +192,132 @@ function R() {
|
|
|
193
192
|
statusLabel: t.status.replace(/_/g, " ")
|
|
194
193
|
});
|
|
195
194
|
}
|
|
196
|
-
return e.filter((e) =>
|
|
195
|
+
return e.filter((e) => D(e.at)).sort((e, t) => t.at.localeCompare(e.at)).slice(0, 7);
|
|
197
196
|
}, [
|
|
198
|
-
|
|
197
|
+
L,
|
|
198
|
+
R,
|
|
199
199
|
V,
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
]), $ = [...
|
|
203
|
-
return /* @__PURE__ */
|
|
200
|
+
z,
|
|
201
|
+
o
|
|
202
|
+
]), $ = [...z].filter((e) => e.status !== "completed" && e.status !== "cancelled").sort((e, t) => (e.scheduledDate ?? "").localeCompare(t.scheduledDate ?? "")).slice(0, 8);
|
|
203
|
+
return /* @__PURE__ */ x("div", {
|
|
204
204
|
className: "space-y-6 p-4 sm:p-6",
|
|
205
205
|
children: [
|
|
206
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ x("div", {
|
|
207
207
|
className: "relative overflow-hidden rounded-xl border border-border-seam bg-gloss-card p-5 sm:p-6",
|
|
208
|
-
children: [/* @__PURE__ */
|
|
208
|
+
children: [/* @__PURE__ */ b(S, { intensity: "subtle" }), /* @__PURE__ */ x("div", {
|
|
209
209
|
className: "relative flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
210
|
-
children: [/* @__PURE__ */
|
|
210
|
+
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h1", {
|
|
211
211
|
className: "text-2xl font-bold sm:text-3xl",
|
|
212
|
-
children: /* @__PURE__ */
|
|
213
|
-
}), /* @__PURE__ */
|
|
212
|
+
children: /* @__PURE__ */ b(oe, { children: o("assethandler.dashboard.title", "Dashboard") })
|
|
213
|
+
}), /* @__PURE__ */ b("p", {
|
|
214
214
|
className: "text-sm text-text-secondary mt-1",
|
|
215
|
-
children:
|
|
216
|
-
})] }), /* @__PURE__ */
|
|
215
|
+
children: o("assethandler.dashboard.description", "Overview of your IT asset portfolio and operations")
|
|
216
|
+
})] }), /* @__PURE__ */ b(ae, {
|
|
217
217
|
primary: {
|
|
218
|
-
label:
|
|
219
|
-
onSelect: () =>
|
|
218
|
+
label: o("assethandler.dashboard.actions.addAsset", "Add {{asset}}"),
|
|
219
|
+
onSelect: () => j("/assets/asset-create")
|
|
220
220
|
},
|
|
221
221
|
actions: [{
|
|
222
|
-
label:
|
|
223
|
-
onSelect: () =>
|
|
222
|
+
label: o("assethandler.dashboard.actions.viewAnalytics", "View Analytics"),
|
|
223
|
+
onSelect: () => j("/analytics")
|
|
224
224
|
}]
|
|
225
225
|
})]
|
|
226
226
|
})]
|
|
227
227
|
}),
|
|
228
|
-
/* @__PURE__ */
|
|
229
|
-
/* @__PURE__ */
|
|
228
|
+
/* @__PURE__ */ b(ce, { children: o("assethandler.dashboard.purpose", "Your command center for the whole {{assetLower}} estate — see what needs attention (open incidents, due maintenance, critical alerts) and recent activity at a glance, then jump straight to the area that needs you. Start here every day to know where to act.") }),
|
|
229
|
+
/* @__PURE__ */ b("div", {
|
|
230
230
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
|
|
231
|
-
children:
|
|
231
|
+
children: J.map((e) => /* @__PURE__ */ b(u, {
|
|
232
232
|
label: e.label,
|
|
233
|
-
value:
|
|
233
|
+
value: F ? e.value : "—",
|
|
234
234
|
format: i,
|
|
235
235
|
icon: e.icon,
|
|
236
236
|
spark: e.spark,
|
|
237
237
|
hero: e.hero
|
|
238
238
|
}, e.label))
|
|
239
239
|
}),
|
|
240
|
-
/* @__PURE__ */
|
|
240
|
+
/* @__PURE__ */ x("div", {
|
|
241
241
|
className: "grid gap-6 lg:grid-cols-3",
|
|
242
|
-
children: [/* @__PURE__ */
|
|
242
|
+
children: [/* @__PURE__ */ b(d, {
|
|
243
243
|
className: "lg:col-span-2",
|
|
244
|
-
title:
|
|
245
|
-
subtitle:
|
|
246
|
-
icon:
|
|
247
|
-
actions: /* @__PURE__ */
|
|
244
|
+
title: o("assethandler.dashboard.assetsChart.title", "{{assets}} over time"),
|
|
245
|
+
subtitle: o("assethandler.dashboard.assetsChart.subtitle", "{{assets}} added each month, from real registration dates"),
|
|
246
|
+
icon: g,
|
|
247
|
+
actions: /* @__PURE__ */ b("div", {
|
|
248
248
|
className: "inline-flex rounded-lg bg-bg-sunken p-0.5",
|
|
249
|
-
children: ["status", "category"].map((e) => /* @__PURE__ */
|
|
249
|
+
children: ["status", "category"].map((e) => /* @__PURE__ */ b("button", {
|
|
250
250
|
type: "button",
|
|
251
|
-
onClick: () =>
|
|
252
|
-
className: r("rounded-md px-3 py-1 text-xs font-medium transition-colors",
|
|
251
|
+
onClick: () => W(e),
|
|
252
|
+
className: r("rounded-md px-3 py-1 text-xs font-medium transition-colors", U === e ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"),
|
|
253
253
|
children: e === "status" ? "By status" : "By category"
|
|
254
254
|
}, e))
|
|
255
255
|
}),
|
|
256
|
-
children: X.rows.length === 0 ? /* @__PURE__ */
|
|
256
|
+
children: X.rows.length === 0 ? /* @__PURE__ */ b(w, {
|
|
257
257
|
illustration: "empty-data",
|
|
258
|
-
title:
|
|
259
|
-
description:
|
|
260
|
-
}) : /* @__PURE__ */
|
|
258
|
+
title: o("assethandler.dashboard.assetsChart.empty.title", "No history yet"),
|
|
259
|
+
description: o("assethandler.dashboard.assetsChart.empty.description", "Register {{assetsLower}} and their monthly trend will appear here.")
|
|
260
|
+
}) : /* @__PURE__ */ b(c, {
|
|
261
261
|
data: X.rows,
|
|
262
262
|
xKey: "month",
|
|
263
263
|
series: X.series,
|
|
264
264
|
stacked: !0,
|
|
265
265
|
height: 280,
|
|
266
|
-
ariaLabel: "
|
|
266
|
+
ariaLabel: o("assethandler.dashboard.assetsChart.aria", "{{assets}} added per month")
|
|
267
267
|
})
|
|
268
|
-
}), /* @__PURE__ */ C
|
|
268
|
+
}), /* @__PURE__ */ b(C, {
|
|
269
269
|
treatment: "insight",
|
|
270
270
|
className: "border-border-seam",
|
|
271
|
-
children: /* @__PURE__ */
|
|
271
|
+
children: /* @__PURE__ */ x("div", {
|
|
272
272
|
className: "flex flex-col gap-4 p-5",
|
|
273
|
-
children: [/* @__PURE__ */
|
|
273
|
+
children: [/* @__PURE__ */ x("div", {
|
|
274
274
|
className: "flex items-center justify-between",
|
|
275
|
-
children: [/* @__PURE__ */
|
|
275
|
+
children: [/* @__PURE__ */ x("h3", {
|
|
276
276
|
className: "flex items-center gap-2 text-base font-semibold text-text-primary",
|
|
277
|
-
children: [/* @__PURE__ */
|
|
278
|
-
}), /* @__PURE__ */
|
|
277
|
+
children: [/* @__PURE__ */ b(m, { className: "h-4 w-4 text-text-secondary" }), o("assethandler.dashboard.activity.title", "Recent activity")]
|
|
278
|
+
}), /* @__PURE__ */ x("button", {
|
|
279
279
|
type: "button",
|
|
280
|
-
onClick: () =>
|
|
280
|
+
onClick: () => j("/analytics"),
|
|
281
281
|
className: "inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",
|
|
282
|
-
children: [
|
|
282
|
+
children: [o("assethandler.dashboard.activity.viewAll", "View all"), /* @__PURE__ */ b(ee, { className: "h-3 w-3" })]
|
|
283
283
|
})]
|
|
284
|
-
}), Q.length === 0 ? /* @__PURE__ */
|
|
284
|
+
}), Q.length === 0 ? /* @__PURE__ */ b("p", {
|
|
285
285
|
className: "py-6 text-center text-sm text-text-secondary",
|
|
286
|
-
children:
|
|
287
|
-
}) : /* @__PURE__ */
|
|
286
|
+
children: o("assethandler.dashboard.activity.empty", "Activity across your estate will show up here.")
|
|
287
|
+
}) : /* @__PURE__ */ b("ul", {
|
|
288
288
|
className: "space-y-1",
|
|
289
289
|
children: Q.map((e) => {
|
|
290
290
|
let t = e.icon;
|
|
291
|
-
return /* @__PURE__ */
|
|
291
|
+
return /* @__PURE__ */ x("li", {
|
|
292
292
|
className: "flex items-start gap-3 rounded-lg px-2 py-2 hover:bg-bg-sunken/60",
|
|
293
|
-
children: [/* @__PURE__ */
|
|
293
|
+
children: [/* @__PURE__ */ b("span", {
|
|
294
294
|
className: "mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
|
|
295
|
-
children: /* @__PURE__ */
|
|
296
|
-
}), /* @__PURE__ */
|
|
295
|
+
children: /* @__PURE__ */ b(t, { className: "h-4 w-4" })
|
|
296
|
+
}), /* @__PURE__ */ x("div", {
|
|
297
297
|
className: "min-w-0 flex-1",
|
|
298
|
-
children: [/* @__PURE__ */
|
|
298
|
+
children: [/* @__PURE__ */ x("div", {
|
|
299
299
|
className: "flex items-center justify-between gap-2",
|
|
300
|
-
children: [/* @__PURE__ */
|
|
300
|
+
children: [/* @__PURE__ */ b("p", {
|
|
301
301
|
className: "truncate text-sm font-medium text-text-primary",
|
|
302
302
|
children: e.title
|
|
303
|
-
}), /* @__PURE__ */
|
|
303
|
+
}), /* @__PURE__ */ b(M, {
|
|
304
304
|
tone: e.tone,
|
|
305
305
|
children: e.statusLabel
|
|
306
306
|
})]
|
|
307
|
-
}), /* @__PURE__ */
|
|
307
|
+
}), /* @__PURE__ */ x("p", {
|
|
308
308
|
className: "mt-0.5 flex items-center gap-1.5 text-xs text-text-secondary capitalize",
|
|
309
309
|
children: [
|
|
310
|
-
/* @__PURE__ */
|
|
310
|
+
/* @__PURE__ */ b("span", {
|
|
311
311
|
className: "truncate",
|
|
312
312
|
children: e.meta
|
|
313
313
|
}),
|
|
314
|
-
/* @__PURE__ */
|
|
314
|
+
/* @__PURE__ */ b("span", {
|
|
315
315
|
"aria-hidden": "true",
|
|
316
316
|
children: "·"
|
|
317
317
|
}),
|
|
318
|
-
/* @__PURE__ */
|
|
318
|
+
/* @__PURE__ */ b("span", {
|
|
319
319
|
className: "shrink-0 normal-case text-text-muted",
|
|
320
|
-
children:
|
|
320
|
+
children: A(e.at)
|
|
321
321
|
})
|
|
322
322
|
]
|
|
323
323
|
})]
|
|
@@ -328,86 +328,86 @@ function R() {
|
|
|
328
328
|
})
|
|
329
329
|
})]
|
|
330
330
|
}),
|
|
331
|
-
/* @__PURE__ */
|
|
332
|
-
title:
|
|
333
|
-
subtitle:
|
|
334
|
-
icon:
|
|
335
|
-
children: Z.length === 0 ? /* @__PURE__ */
|
|
331
|
+
/* @__PURE__ */ b(d, {
|
|
332
|
+
title: o("assethandler.dashboard.value.title", "Transaction value"),
|
|
333
|
+
subtitle: o("assethandler.dashboard.value.subtitle", "Cumulative transaction amount over time"),
|
|
334
|
+
icon: v,
|
|
335
|
+
children: Z.length === 0 ? /* @__PURE__ */ b(w, {
|
|
336
336
|
illustration: "empty-data",
|
|
337
|
-
title:
|
|
338
|
-
description:
|
|
339
|
-
}) : /* @__PURE__ */
|
|
337
|
+
title: o("assethandler.dashboard.value.empty.title", "No transactions yet"),
|
|
338
|
+
description: o("assethandler.dashboard.value.empty.description", "{{asset}} purchases, leases and disposals will chart here as they are recorded.")
|
|
339
|
+
}) : /* @__PURE__ */ b(s, {
|
|
340
340
|
data: Z,
|
|
341
341
|
xKey: "month",
|
|
342
342
|
series: [{
|
|
343
343
|
key: "value",
|
|
344
344
|
label: "Cumulative value"
|
|
345
345
|
}],
|
|
346
|
-
valueFormat: a(
|
|
346
|
+
valueFormat: a(fe),
|
|
347
347
|
height: 260,
|
|
348
348
|
ariaLabel: "Cumulative transaction value over time"
|
|
349
349
|
})
|
|
350
350
|
}),
|
|
351
|
-
/* @__PURE__ */
|
|
351
|
+
/* @__PURE__ */ x("div", {
|
|
352
352
|
className: "grid gap-6 lg:grid-cols-3",
|
|
353
|
-
children: [/* @__PURE__ */
|
|
353
|
+
children: [/* @__PURE__ */ b(d, {
|
|
354
354
|
className: "lg:col-span-2",
|
|
355
|
-
title:
|
|
356
|
-
subtitle:
|
|
357
|
-
icon:
|
|
358
|
-
children: Y.length === 0 ? /* @__PURE__ */
|
|
355
|
+
title: o("assethandler.dashboard.portfolio.title", "Portfolio by category"),
|
|
356
|
+
subtitle: o("assethandler.dashboard.portfolio.description", "{{asset}} distribution by category"),
|
|
357
|
+
icon: g,
|
|
358
|
+
children: Y.length === 0 ? /* @__PURE__ */ b(w, {
|
|
359
359
|
illustration: "empty-data",
|
|
360
|
-
title:
|
|
361
|
-
description:
|
|
362
|
-
}) : /* @__PURE__ */
|
|
360
|
+
title: o("assethandler.dashboard.portfolio.empty.title", "No {{assetsLower}} yet"),
|
|
361
|
+
description: o("assethandler.dashboard.portfolio.empty.description", "Register your first {{assetLower}} and category distribution will appear here.")
|
|
362
|
+
}) : /* @__PURE__ */ b(l, {
|
|
363
363
|
data: Y,
|
|
364
|
-
centerLabel: "
|
|
365
|
-
centerValue:
|
|
364
|
+
centerLabel: o("assethandler.dashboard.portfolio.centerLabel", "{{assets}}"),
|
|
365
|
+
centerValue: L.length,
|
|
366
366
|
height: 260,
|
|
367
|
-
ariaLabel: "
|
|
367
|
+
ariaLabel: o("assethandler.dashboard.portfolio.aria", "{{assets}} by category")
|
|
368
368
|
})
|
|
369
|
-
}), /* @__PURE__ */ C
|
|
369
|
+
}), /* @__PURE__ */ b(C, {
|
|
370
370
|
treatment: "glass",
|
|
371
371
|
className: "border-border-seam",
|
|
372
|
-
children: /* @__PURE__ */
|
|
372
|
+
children: /* @__PURE__ */ x("div", {
|
|
373
373
|
className: "flex flex-col gap-4 p-5",
|
|
374
|
-
children: [/* @__PURE__ */
|
|
374
|
+
children: [/* @__PURE__ */ b("h3", {
|
|
375
375
|
className: "text-base font-semibold text-text-primary",
|
|
376
|
-
children:
|
|
377
|
-
}), /* @__PURE__ */
|
|
376
|
+
children: o("assethandler.dashboard.operations.title", "Operations summary")
|
|
377
|
+
}), /* @__PURE__ */ b("div", {
|
|
378
378
|
className: "grid grid-cols-2 gap-3",
|
|
379
379
|
children: [
|
|
380
380
|
{
|
|
381
|
-
icon:
|
|
381
|
+
icon: y,
|
|
382
382
|
value: ue.length,
|
|
383
|
-
label: "Pending Maintenance"
|
|
383
|
+
label: o("assethandler.dashboard.operations.pendingMaintenance", "Pending Maintenance")
|
|
384
384
|
},
|
|
385
385
|
{
|
|
386
386
|
icon: m,
|
|
387
|
-
value:
|
|
388
|
-
label: "Open Work Orders"
|
|
387
|
+
value: K.length,
|
|
388
|
+
label: o("assethandler.dashboard.operations.openWorkOrders", "Open Work Orders")
|
|
389
389
|
},
|
|
390
390
|
{
|
|
391
|
-
icon:
|
|
391
|
+
icon: re,
|
|
392
392
|
value: de.length,
|
|
393
|
-
label: "Pending Changes"
|
|
393
|
+
label: o("assethandler.dashboard.operations.pendingChanges", "Pending Changes")
|
|
394
394
|
},
|
|
395
395
|
{
|
|
396
|
-
icon:
|
|
396
|
+
icon: ne,
|
|
397
397
|
value: le.length,
|
|
398
|
-
label: "Critical Alerts"
|
|
398
|
+
label: o("assethandler.dashboard.operations.criticalAlerts", "Critical Alerts")
|
|
399
399
|
}
|
|
400
400
|
].map((e) => {
|
|
401
401
|
let t = e.icon;
|
|
402
|
-
return /* @__PURE__ */
|
|
402
|
+
return /* @__PURE__ */ x("div", {
|
|
403
403
|
className: "rounded-lg border border-border-seam bg-gloss-card p-4 text-center",
|
|
404
404
|
children: [
|
|
405
|
-
/* @__PURE__ */
|
|
406
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ b(t, { className: "mx-auto mb-2 h-5 w-5 text-text-secondary" }),
|
|
406
|
+
/* @__PURE__ */ b("p", {
|
|
407
407
|
className: "text-2xl font-bold tabular-nums",
|
|
408
408
|
children: e.value
|
|
409
409
|
}),
|
|
410
|
-
/* @__PURE__ */
|
|
410
|
+
/* @__PURE__ */ b("p", {
|
|
411
411
|
className: "text-xs text-text-secondary",
|
|
412
412
|
children: e.label
|
|
413
413
|
})
|
|
@@ -418,75 +418,75 @@ function R() {
|
|
|
418
418
|
})
|
|
419
419
|
})]
|
|
420
420
|
}),
|
|
421
|
-
/* @__PURE__ */
|
|
421
|
+
/* @__PURE__ */ x("div", {
|
|
422
422
|
className: "grid gap-6 lg:grid-cols-2",
|
|
423
|
-
children: [/* @__PURE__ */ C
|
|
423
|
+
children: [/* @__PURE__ */ b(C, {
|
|
424
424
|
treatment: "glass",
|
|
425
425
|
className: "border-border-seam",
|
|
426
|
-
children: /* @__PURE__ */
|
|
426
|
+
children: /* @__PURE__ */ x("div", {
|
|
427
427
|
className: "flex flex-col gap-4 p-5",
|
|
428
|
-
children: [/* @__PURE__ */
|
|
428
|
+
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x("h3", {
|
|
429
429
|
className: "flex items-center gap-2 text-base font-semibold text-text-primary",
|
|
430
|
-
children: [/* @__PURE__ */
|
|
431
|
-
}), /* @__PURE__ */
|
|
430
|
+
children: [/* @__PURE__ */ b(h, { className: "h-4 w-4 text-status-error-text" }), o("assethandler.dashboard.incidents.title", "Active Incidents")]
|
|
431
|
+
}), /* @__PURE__ */ x("p", {
|
|
432
432
|
className: "mt-0.5 text-sm text-text-secondary",
|
|
433
433
|
children: [
|
|
434
|
-
|
|
434
|
+
G.length,
|
|
435
435
|
" ",
|
|
436
|
-
|
|
436
|
+
o("assethandler.dashboard.incidents.unresolvedCount", "unresolved incidents")
|
|
437
437
|
]
|
|
438
|
-
})] }),
|
|
438
|
+
})] }), G.length === 0 ? /* @__PURE__ */ b("p", {
|
|
439
439
|
className: "py-4 text-center text-sm text-text-secondary",
|
|
440
|
-
children:
|
|
441
|
-
}) : /* @__PURE__ */
|
|
440
|
+
children: o("assethandler.dashboard.incidents.empty", "No unresolved incidents — all clear.")
|
|
441
|
+
}) : /* @__PURE__ */ b("div", {
|
|
442
442
|
className: "space-y-2",
|
|
443
|
-
children:
|
|
443
|
+
children: G.slice(0, 5).map((e) => /* @__PURE__ */ x("button", {
|
|
444
444
|
type: "button",
|
|
445
|
-
onClick: () =>
|
|
445
|
+
onClick: () => j("/itil/incident-management"),
|
|
446
446
|
className: "flex w-full items-start gap-3 rounded-lg border border-border-seam p-3 text-left hover:bg-bg-sunken/60",
|
|
447
|
-
children: [/* @__PURE__ */
|
|
448
|
-
tone:
|
|
447
|
+
children: [/* @__PURE__ */ b(M, {
|
|
448
|
+
tone: N(e.priority),
|
|
449
449
|
children: e.priority
|
|
450
|
-
}), /* @__PURE__ */
|
|
450
|
+
}), /* @__PURE__ */ x("div", {
|
|
451
451
|
className: "min-w-0 flex-1",
|
|
452
|
-
children: [/* @__PURE__ */
|
|
452
|
+
children: [/* @__PURE__ */ b("p", {
|
|
453
453
|
className: "truncate text-sm font-medium",
|
|
454
454
|
children: e.title
|
|
455
|
-
}), /* @__PURE__ */
|
|
455
|
+
}), /* @__PURE__ */ b("p", {
|
|
456
456
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
457
|
-
children: e.assignedTo ||
|
|
457
|
+
children: e.assignedTo || o("assethandler.dashboard.incidents.unassigned", "Unassigned")
|
|
458
458
|
})]
|
|
459
459
|
})]
|
|
460
460
|
}, e.id))
|
|
461
461
|
})]
|
|
462
462
|
})
|
|
463
|
-
}), /* @__PURE__ */ C
|
|
463
|
+
}), /* @__PURE__ */ b(C, {
|
|
464
464
|
treatment: "glass",
|
|
465
465
|
className: "border-border-seam",
|
|
466
|
-
children: /* @__PURE__ */
|
|
466
|
+
children: /* @__PURE__ */ x("div", {
|
|
467
467
|
className: "flex flex-col gap-4 p-5",
|
|
468
|
-
children: [/* @__PURE__ */
|
|
468
|
+
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
|
|
469
469
|
className: "text-base font-semibold text-text-primary",
|
|
470
|
-
children:
|
|
471
|
-
}), /* @__PURE__ */
|
|
470
|
+
children: o("assethandler.dashboard.workOrders.title", "Open Work Orders")
|
|
471
|
+
}), /* @__PURE__ */ b("p", {
|
|
472
472
|
className: "mt-0.5 text-sm text-text-secondary",
|
|
473
|
-
children:
|
|
474
|
-
})] }),
|
|
473
|
+
children: o("assethandler.dashboard.workOrders.description", "Latest work in progress")
|
|
474
|
+
})] }), K.length === 0 ? /* @__PURE__ */ b("p", {
|
|
475
475
|
className: "py-4 text-center text-sm text-text-secondary",
|
|
476
|
-
children:
|
|
477
|
-
}) : /* @__PURE__ */
|
|
476
|
+
children: o("assethandler.dashboard.workOrders.empty", "No open work orders. Create one from the Operations hub.")
|
|
477
|
+
}) : /* @__PURE__ */ b("div", {
|
|
478
478
|
className: "space-y-2",
|
|
479
|
-
children: [...
|
|
479
|
+
children: [...K].sort((e, t) => t.createdAt.localeCompare(e.createdAt)).slice(0, 5).map((e) => /* @__PURE__ */ x("div", {
|
|
480
480
|
className: "flex items-center gap-3 rounded-lg border border-border-seam p-3",
|
|
481
|
-
children: [/* @__PURE__ */
|
|
481
|
+
children: [/* @__PURE__ */ b(M, {
|
|
482
482
|
tone: e.status === "in_progress" ? "info" : "warning",
|
|
483
483
|
children: e.status.replace(/_/g, " ")
|
|
484
|
-
}), /* @__PURE__ */
|
|
484
|
+
}), /* @__PURE__ */ x("div", {
|
|
485
485
|
className: "min-w-0 flex-1",
|
|
486
|
-
children: [/* @__PURE__ */
|
|
486
|
+
children: [/* @__PURE__ */ b("p", {
|
|
487
487
|
className: "truncate text-sm",
|
|
488
488
|
children: e.title
|
|
489
|
-
}), /* @__PURE__ */
|
|
489
|
+
}), /* @__PURE__ */ x("p", {
|
|
490
490
|
className: "text-xs text-text-secondary capitalize",
|
|
491
491
|
children: [
|
|
492
492
|
e.type,
|
|
@@ -500,103 +500,103 @@ function R() {
|
|
|
500
500
|
})
|
|
501
501
|
})]
|
|
502
502
|
}),
|
|
503
|
-
/* @__PURE__ */ C
|
|
503
|
+
/* @__PURE__ */ b(C, {
|
|
504
504
|
treatment: "glass",
|
|
505
505
|
className: "border-border-seam",
|
|
506
|
-
children: /* @__PURE__ */
|
|
506
|
+
children: /* @__PURE__ */ x("div", {
|
|
507
507
|
className: "flex flex-col gap-4 p-5",
|
|
508
|
-
children: [/* @__PURE__ */
|
|
508
|
+
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x("h3", {
|
|
509
509
|
className: "flex items-center gap-2 text-base font-semibold text-text-primary",
|
|
510
|
-
children: [/* @__PURE__ */
|
|
511
|
-
}), /* @__PURE__ */
|
|
510
|
+
children: [/* @__PURE__ */ b(te, { className: "h-4 w-4 text-text-secondary" }), o("assethandler.dashboard.maintenance.title", "Upcoming Maintenance")]
|
|
511
|
+
}), /* @__PURE__ */ b("p", {
|
|
512
512
|
className: "mt-0.5 text-sm text-text-secondary",
|
|
513
|
-
children:
|
|
514
|
-
})] }), $.length === 0 ? /* @__PURE__ */
|
|
513
|
+
children: o("assethandler.dashboard.maintenance.description", "Scheduled maintenance activities")
|
|
514
|
+
})] }), $.length === 0 ? /* @__PURE__ */ b(w, {
|
|
515
515
|
illustration: "empty-tasks",
|
|
516
|
-
title:
|
|
517
|
-
description:
|
|
518
|
-
}) : /* @__PURE__ */
|
|
516
|
+
title: o("assethandler.dashboard.maintenance.empty.title", "No maintenance scheduled"),
|
|
517
|
+
description: o("assethandler.dashboard.maintenance.empty.description", "Plan preventive maintenance from the scheduler and it will show up here.")
|
|
518
|
+
}) : /* @__PURE__ */ x(ie, { children: [/* @__PURE__ */ b("div", {
|
|
519
519
|
className: "space-y-2 md:hidden",
|
|
520
|
-
children: $.map((e) => /* @__PURE__ */
|
|
520
|
+
children: $.map((e) => /* @__PURE__ */ x("div", {
|
|
521
521
|
className: "rounded-lg border border-border-seam p-3",
|
|
522
|
-
children: [/* @__PURE__ */
|
|
522
|
+
children: [/* @__PURE__ */ x("div", {
|
|
523
523
|
className: "flex items-start justify-between gap-2",
|
|
524
|
-
children: [/* @__PURE__ */
|
|
524
|
+
children: [/* @__PURE__ */ b("p", {
|
|
525
525
|
className: "min-w-0 flex-1 truncate text-sm font-medium",
|
|
526
526
|
children: e.title
|
|
527
|
-
}), /* @__PURE__ */
|
|
528
|
-
tone:
|
|
527
|
+
}), /* @__PURE__ */ b(M, {
|
|
528
|
+
tone: P(e.status),
|
|
529
529
|
children: e.status.replace(/_/g, " ")
|
|
530
530
|
})]
|
|
531
|
-
}), /* @__PURE__ */
|
|
531
|
+
}), /* @__PURE__ */ x("div", {
|
|
532
532
|
className: "mt-2 flex flex-wrap items-center gap-2 text-xs text-text-secondary",
|
|
533
533
|
children: [
|
|
534
|
-
/* @__PURE__ */
|
|
534
|
+
/* @__PURE__ */ b("span", {
|
|
535
535
|
className: "capitalize",
|
|
536
536
|
children: e.type
|
|
537
537
|
}),
|
|
538
|
-
/* @__PURE__ */
|
|
539
|
-
tone:
|
|
538
|
+
/* @__PURE__ */ b(M, {
|
|
539
|
+
tone: N(e.priority),
|
|
540
540
|
children: e.priority
|
|
541
541
|
}),
|
|
542
|
-
/* @__PURE__ */
|
|
542
|
+
/* @__PURE__ */ b("span", { children: e.scheduledDate ? new Date(e.scheduledDate).toLocaleDateString() : "—" })
|
|
543
543
|
]
|
|
544
544
|
})]
|
|
545
545
|
}, e.id))
|
|
546
|
-
}), /* @__PURE__ */
|
|
546
|
+
}), /* @__PURE__ */ b("div", {
|
|
547
547
|
className: "hidden overflow-x-auto md:block",
|
|
548
|
-
children: /* @__PURE__ */
|
|
548
|
+
children: /* @__PURE__ */ x("table", {
|
|
549
549
|
className: "w-full text-sm",
|
|
550
|
-
children: [/* @__PURE__ */
|
|
550
|
+
children: [/* @__PURE__ */ b("thead", { children: /* @__PURE__ */ x("tr", {
|
|
551
551
|
className: "border-b border-border-seam text-text-secondary",
|
|
552
552
|
children: [
|
|
553
|
-
/* @__PURE__ */
|
|
553
|
+
/* @__PURE__ */ b("th", {
|
|
554
554
|
className: "py-2 text-left font-medium",
|
|
555
555
|
children: "Title"
|
|
556
556
|
}),
|
|
557
|
-
/* @__PURE__ */
|
|
557
|
+
/* @__PURE__ */ b("th", {
|
|
558
558
|
className: "py-2 text-left font-medium",
|
|
559
559
|
children: "Type"
|
|
560
560
|
}),
|
|
561
|
-
/* @__PURE__ */
|
|
561
|
+
/* @__PURE__ */ b("th", {
|
|
562
562
|
className: "py-2 text-left font-medium",
|
|
563
563
|
children: "Priority"
|
|
564
564
|
}),
|
|
565
|
-
/* @__PURE__ */
|
|
565
|
+
/* @__PURE__ */ b("th", {
|
|
566
566
|
className: "py-2 text-left font-medium",
|
|
567
567
|
children: "Scheduled"
|
|
568
568
|
}),
|
|
569
|
-
/* @__PURE__ */
|
|
569
|
+
/* @__PURE__ */ b("th", {
|
|
570
570
|
className: "py-2 text-left font-medium",
|
|
571
571
|
children: "Status"
|
|
572
572
|
})
|
|
573
573
|
]
|
|
574
|
-
}) }), /* @__PURE__ */
|
|
574
|
+
}) }), /* @__PURE__ */ b("tbody", { children: $.map((e) => /* @__PURE__ */ x("tr", {
|
|
575
575
|
className: "border-b border-border-seam hover:bg-bg-sunken/50",
|
|
576
576
|
children: [
|
|
577
|
-
/* @__PURE__ */
|
|
577
|
+
/* @__PURE__ */ b("td", {
|
|
578
578
|
className: "py-2.5 font-medium",
|
|
579
579
|
children: e.title
|
|
580
580
|
}),
|
|
581
|
-
/* @__PURE__ */
|
|
581
|
+
/* @__PURE__ */ b("td", {
|
|
582
582
|
className: "py-2.5 capitalize",
|
|
583
583
|
children: e.type
|
|
584
584
|
}),
|
|
585
|
-
/* @__PURE__ */
|
|
585
|
+
/* @__PURE__ */ b("td", {
|
|
586
586
|
className: "py-2.5",
|
|
587
|
-
children: /* @__PURE__ */
|
|
588
|
-
tone:
|
|
587
|
+
children: /* @__PURE__ */ b(M, {
|
|
588
|
+
tone: N(e.priority),
|
|
589
589
|
children: e.priority
|
|
590
590
|
})
|
|
591
591
|
}),
|
|
592
|
-
/* @__PURE__ */
|
|
592
|
+
/* @__PURE__ */ b("td", {
|
|
593
593
|
className: "py-2.5",
|
|
594
594
|
children: e.scheduledDate ? new Date(e.scheduledDate).toLocaleDateString() : "—"
|
|
595
595
|
}),
|
|
596
|
-
/* @__PURE__ */
|
|
596
|
+
/* @__PURE__ */ b("td", {
|
|
597
597
|
className: "py-2.5",
|
|
598
|
-
children: /* @__PURE__ */
|
|
599
|
-
tone:
|
|
598
|
+
children: /* @__PURE__ */ b(M, {
|
|
599
|
+
tone: P(e.status),
|
|
600
600
|
children: e.status.replace(/_/g, " ")
|
|
601
601
|
})
|
|
602
602
|
})
|
|
@@ -606,32 +606,32 @@ function R() {
|
|
|
606
606
|
})] })]
|
|
607
607
|
})
|
|
608
608
|
}),
|
|
609
|
-
/* @__PURE__ */
|
|
609
|
+
/* @__PURE__ */ b(se, {
|
|
610
610
|
storageKey: "assethandler-dashboard",
|
|
611
611
|
steps: [
|
|
612
612
|
{
|
|
613
613
|
id: "view-assets",
|
|
614
|
-
label: "Browse your
|
|
615
|
-
description: "See every tracked
|
|
616
|
-
onClick: () =>
|
|
614
|
+
label: o("assethandler.dashboard.nextSteps.viewAssets.label", "Browse your {{assetLower}} inventory"),
|
|
615
|
+
description: o("assethandler.dashboard.nextSteps.viewAssets.description", "See every tracked {{assetLower}}, its status and owner."),
|
|
616
|
+
onClick: () => j("/assets/asset-list")
|
|
617
617
|
},
|
|
618
618
|
{
|
|
619
619
|
id: "add-asset",
|
|
620
|
-
label: "Register a new
|
|
621
|
-
description: "Add equipment, hardware or software to start tracking it.",
|
|
622
|
-
onClick: () =>
|
|
620
|
+
label: o("assethandler.dashboard.nextSteps.addAsset.label", "Register a new {{assetLower}}"),
|
|
621
|
+
description: o("assethandler.dashboard.nextSteps.addAsset.description", "Add equipment, hardware or software to start tracking it."),
|
|
622
|
+
onClick: () => j("/assets/asset-create")
|
|
623
623
|
},
|
|
624
624
|
{
|
|
625
625
|
id: "incidents",
|
|
626
|
-
label: "Resolve open incidents",
|
|
627
|
-
description: "Triage service-affecting issues before they breach SLA.",
|
|
628
|
-
onClick: () =>
|
|
626
|
+
label: o("assethandler.dashboard.nextSteps.incidents.label", "Resolve open incidents"),
|
|
627
|
+
description: o("assethandler.dashboard.nextSteps.incidents.description", "Triage service-affecting issues before they breach SLA."),
|
|
628
|
+
onClick: () => j("/itil/incident-management")
|
|
629
629
|
},
|
|
630
630
|
{
|
|
631
631
|
id: "maintenance",
|
|
632
|
-
label: "Check the maintenance calendar",
|
|
633
|
-
description: "Stay ahead of scheduled and overdue maintenance.",
|
|
634
|
-
onClick: () =>
|
|
632
|
+
label: o("assethandler.dashboard.nextSteps.maintenance.label", "Check the maintenance calendar"),
|
|
633
|
+
description: o("assethandler.dashboard.nextSteps.maintenance.description", "Stay ahead of scheduled and overdue maintenance."),
|
|
634
|
+
onClick: () => j("/maintenance/maintenance-calendar")
|
|
635
635
|
}
|
|
636
636
|
]
|
|
637
637
|
})
|
|
@@ -639,6 +639,6 @@ function R() {
|
|
|
639
639
|
});
|
|
640
640
|
}
|
|
641
641
|
//#endregion
|
|
642
|
-
export {
|
|
642
|
+
export { F as DashboardPage };
|
|
643
643
|
|
|
644
644
|
//# sourceMappingURL=DashboardPage.js.map
|