@burdenoff/microfe-assethandler 2026.625.2 → 2026.703.1
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 +0 -24
- package/dist/assethandler/AssetHandlerRoot.js.map +1 -1
- package/dist/assethandler/AssetHandlerRoutes.js +92 -160
- package/dist/assethandler/AssetHandlerRoutes.js.map +1 -1
- package/dist/assethandler/pages/AnalyticsPage.js +367 -402
- package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +29 -26
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +278 -164
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCreatePage.js +200 -242
- package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetDetailPage.js +192 -286
- package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetListPage.js +204 -296
- package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js +38 -42
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js.map +1 -1
- package/dist/assethandler/pages/DashboardPage.js +212 -236
- package/dist/assethandler/pages/DashboardPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentDetailPage.js +41 -85
- package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js.map +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +37 -86
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +82 -98
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsOperationsHubPage.js +6 -22
- package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +4 -34
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +105 -150
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +116 -152
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
- package/dist/assethandler/providers/AssetHandlerProvider.js.map +1 -1
- package/dist/assethandler/store/assethandlerStore.js +68 -2206
- package/dist/assethandler/store/assethandlerStore.js.map +1 -1
- package/dist/assethandler/utils/toast.js +33 -0
- package/dist/assethandler/utils/toast.js.map +1 -0
- package/package.json +5 -4
- package/dist/assethandler/pages/AssetsAssetEditPage.js +0 -353
- package/dist/assethandler/pages/AssetsAssetEditPage.js.map +0 -1
- package/dist/assethandler/pages/AuditTrailPage.js +0 -215
- package/dist/assethandler/pages/AuditTrailPage.js.map +0 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js +0 -177
- package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js.map +0 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js +0 -162
- package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js.map +0 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js +0 -143
- package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js.map +0 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js +0 -163
- package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js.map +0 -1
- package/dist/assethandler/pages/ReportsReportBuilderPage.js +0 -208
- package/dist/assethandler/pages/ReportsReportBuilderPage.js.map +0 -1
- package/dist/assethandler/pages/ReportsReportsDashboardPage.js +0 -236
- package/dist/assethandler/pages/ReportsReportsDashboardPage.js.map +0 -1
- package/dist/assethandler/pages/ReportsReportsListPage.js +0 -144
- package/dist/assethandler/pages/ReportsReportsListPage.js.map +0 -1
- package/dist/assethandler/pages/SecurityScheduleBackupPage.js +0 -149
- package/dist/assethandler/pages/SecurityScheduleBackupPage.js.map +0 -1
- package/dist/assethandler/pages/UsersPage.js +0 -208
- package/dist/assethandler/pages/UsersPage.js.map +0 -1
- package/dist/assethandler/pages/UsersUserCreatePage.js +0 -220
- package/dist/assethandler/pages/UsersUserCreatePage.js.map +0 -1
- package/dist/assethandler/pages/UsersUserManagementHubPage.js +0 -373
- package/dist/assethandler/pages/UsersUserManagementHubPage.js.map +0 -1
- package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js +0 -264
- package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js.map +0 -1
- package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js +0 -206
- package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js.map +0 -1
- package/dist/assethandler/pages/WorkflowsWorkflowListPage.js +0 -171
- package/dist/assethandler/pages/WorkflowsWorkflowListPage.js.map +0 -1
- package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js +0 -173
- package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js.map +0 -1
|
@@ -1,330 +1,288 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { notify as e } from "../utils/toast.js";
|
|
2
|
+
import { useState as t } from "react";
|
|
3
|
+
import { ArrowLeft as n, Loader2 as r, Save as i, X as a } from "lucide-react";
|
|
4
|
+
import { useNavigate as o } from "react-router-dom";
|
|
5
|
+
import { Button as s, Card as c, CardContent as l, CardDescription as u, CardHeader as d, CardTitle as f, EmphasisPanel as p, GradientText as m, Input as h, Label as g, PagePurpose as _, Select as v, SelectContent as y, SelectItem as b, SelectTrigger as x, SelectValue as S, Textarea as C } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { jsx as w, jsxs as T } from "react/jsx-runtime";
|
|
7
|
+
import { gql as E } from "@apollo/client";
|
|
8
|
+
import { useMutation as D } from "@apollo/client/react";
|
|
6
9
|
//#region src/assethandler/pages/AssetsAssetCreatePage.tsx
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
var O = E`
|
|
11
|
+
mutation AssetHandlerCreateAsset($input: CreateAssetInput!) {
|
|
12
|
+
createAsset(input: $input) {
|
|
13
|
+
id
|
|
14
|
+
assetNumber
|
|
15
|
+
name
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
`, k = [
|
|
19
|
+
"electronics",
|
|
20
|
+
"it_hardware",
|
|
21
|
+
"furniture",
|
|
22
|
+
"vehicles",
|
|
23
|
+
"equipment",
|
|
24
|
+
"software",
|
|
25
|
+
"networking",
|
|
26
|
+
"servers"
|
|
27
|
+
];
|
|
28
|
+
function A() {
|
|
29
|
+
let E = o(), [A, j] = t({
|
|
9
30
|
name: "",
|
|
10
31
|
description: "",
|
|
11
32
|
category: "it_hardware",
|
|
12
|
-
status: "
|
|
13
|
-
condition: "
|
|
33
|
+
status: "ACTIVE",
|
|
34
|
+
condition: "GOOD",
|
|
14
35
|
serialNumber: "",
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
location: "",
|
|
18
|
-
department: "",
|
|
36
|
+
assetNumber: "",
|
|
37
|
+
locationName: "",
|
|
19
38
|
assignedTo: "",
|
|
20
|
-
vendor: "",
|
|
21
|
-
model: "",
|
|
22
|
-
manufacturer: "",
|
|
23
|
-
depreciationRate: "20",
|
|
24
|
-
purchaseDate: "",
|
|
25
|
-
warrantyExpiry: "",
|
|
26
39
|
tags: ""
|
|
27
|
-
}),
|
|
28
|
-
|
|
40
|
+
}), [M, N] = t({}), [P, { loading: F }] = D(O, {
|
|
41
|
+
refetchQueries: ["AssetHandlerBootstrap"],
|
|
42
|
+
onCompleted: (t) => {
|
|
43
|
+
e.success("Asset created", `${t.createAsset.name} was registered in the inventory.`), E(`/assets/${t.createAsset.id}`);
|
|
44
|
+
},
|
|
45
|
+
onError: (t) => {
|
|
46
|
+
e.error("Could not create asset", t.message);
|
|
47
|
+
}
|
|
48
|
+
}), I = (e, t) => {
|
|
49
|
+
j((n) => ({
|
|
29
50
|
...n,
|
|
30
51
|
[e]: t
|
|
31
|
-
}))
|
|
52
|
+
})), N((t) => {
|
|
53
|
+
if (!t[e]) return t;
|
|
54
|
+
let n = { ...t };
|
|
55
|
+
return delete n[e], n;
|
|
56
|
+
});
|
|
57
|
+
}, L = () => {
|
|
58
|
+
let t = {};
|
|
59
|
+
if (A.name.trim() || (t.name = "Asset name is required"), A.assetNumber.trim() || (t.assetNumber = "Asset tag is required"), A.category.trim() || (t.category = "Category is required"), N(t), Object.keys(t).length > 0) {
|
|
60
|
+
e.warning("Missing required fields", "Fill in the highlighted fields and try again.");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
let n = A.tags.split(",").map((e) => e.trim()).filter(Boolean);
|
|
64
|
+
P({ variables: { input: {
|
|
65
|
+
name: A.name.trim(),
|
|
66
|
+
assetNumber: A.assetNumber.trim(),
|
|
67
|
+
category: A.category,
|
|
68
|
+
status: A.status,
|
|
69
|
+
condition: A.condition,
|
|
70
|
+
description: A.description.trim() || null,
|
|
71
|
+
serialNumber: A.serialNumber.trim() || null,
|
|
72
|
+
locationName: A.locationName.trim() || null,
|
|
73
|
+
assignedTo: A.assignedTo.trim() || null,
|
|
74
|
+
tags: n
|
|
75
|
+
} } });
|
|
32
76
|
};
|
|
33
|
-
return /* @__PURE__ */
|
|
77
|
+
return /* @__PURE__ */ T("div", {
|
|
34
78
|
className: "space-y-6 p-6 max-w-4xl",
|
|
35
79
|
children: [
|
|
36
|
-
/* @__PURE__ */
|
|
80
|
+
/* @__PURE__ */ T("div", {
|
|
37
81
|
className: "flex items-center justify-between",
|
|
38
|
-
children: [/* @__PURE__ */
|
|
82
|
+
children: [/* @__PURE__ */ T("div", {
|
|
39
83
|
className: "flex items-center gap-4",
|
|
40
|
-
children: [/* @__PURE__ */
|
|
84
|
+
children: [/* @__PURE__ */ w(s, {
|
|
41
85
|
variant: "ghost",
|
|
42
86
|
size: "icon",
|
|
43
|
-
onClick: () =>
|
|
44
|
-
children: /* @__PURE__ */
|
|
45
|
-
}), /* @__PURE__ */
|
|
87
|
+
onClick: () => E("/assets/asset-list"),
|
|
88
|
+
children: /* @__PURE__ */ w(n, { className: "h-4 w-4" })
|
|
89
|
+
}), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h1", {
|
|
46
90
|
className: "text-2xl font-bold",
|
|
47
|
-
children: /* @__PURE__ */
|
|
48
|
-
}), /* @__PURE__ */
|
|
91
|
+
children: /* @__PURE__ */ w(m, { children: "Create New Asset" })
|
|
92
|
+
}), /* @__PURE__ */ w("p", {
|
|
49
93
|
className: "text-sm text-text-secondary",
|
|
50
94
|
children: "Register a new asset in the inventory"
|
|
51
95
|
})] })]
|
|
52
|
-
}), /* @__PURE__ */
|
|
96
|
+
}), /* @__PURE__ */ T("div", {
|
|
53
97
|
className: "flex gap-2",
|
|
54
|
-
children: [/* @__PURE__ */
|
|
98
|
+
children: [/* @__PURE__ */ T(s, {
|
|
55
99
|
variant: "outline",
|
|
56
100
|
size: "sm",
|
|
57
|
-
onClick: () =>
|
|
58
|
-
children: [/* @__PURE__ */
|
|
59
|
-
}), /* @__PURE__ */
|
|
101
|
+
onClick: () => E("/assets/asset-list"),
|
|
102
|
+
children: [/* @__PURE__ */ w(a, { className: "mr-2 h-4 w-4" }), "Cancel"]
|
|
103
|
+
}), /* @__PURE__ */ T(s, {
|
|
60
104
|
size: "sm",
|
|
61
|
-
|
|
105
|
+
onClick: L,
|
|
106
|
+
disabled: F,
|
|
107
|
+
children: [F ? /* @__PURE__ */ w(r, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ w(i, { className: "mr-2 h-4 w-4" }), F ? "Creating..." : "Create Asset"]
|
|
62
108
|
})]
|
|
63
109
|
})]
|
|
64
110
|
}),
|
|
65
|
-
/* @__PURE__ */
|
|
66
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ w(_, { children: "Register a new asset so it can be tracked, maintained and assigned from day one. Capture its identity (name, tag, serial), category and condition, then the location and assignment details — the more you fill in now, the better your reports and audits later." }),
|
|
112
|
+
/* @__PURE__ */ T(p, { children: [/* @__PURE__ */ T(d, {
|
|
67
113
|
className: "px-0 pt-0",
|
|
68
|
-
children: [/* @__PURE__ */
|
|
69
|
-
}), /* @__PURE__ */
|
|
114
|
+
children: [/* @__PURE__ */ w(f, { children: "General Information" }), /* @__PURE__ */ w(u, { children: "Basic asset details and identification" })]
|
|
115
|
+
}), /* @__PURE__ */ T(l, {
|
|
70
116
|
className: "space-y-4 px-0 pb-0",
|
|
71
117
|
children: [
|
|
72
|
-
/* @__PURE__ */
|
|
118
|
+
/* @__PURE__ */ T("div", {
|
|
73
119
|
className: "grid gap-4 md:grid-cols-2",
|
|
74
|
-
children: [/* @__PURE__ */
|
|
120
|
+
children: [/* @__PURE__ */ T("div", {
|
|
75
121
|
className: "space-y-2",
|
|
76
|
-
children: [
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ w(g, { children: "Asset Name *" }),
|
|
124
|
+
/* @__PURE__ */ w(h, {
|
|
125
|
+
placeholder: "e.g., Dell OptiPlex 7090",
|
|
126
|
+
value: A.name,
|
|
127
|
+
onChange: (e) => I("name", e.target.value),
|
|
128
|
+
"aria-invalid": !!M.name
|
|
129
|
+
}),
|
|
130
|
+
M.name ? /* @__PURE__ */ w("p", {
|
|
131
|
+
className: "text-xs text-status-error-text",
|
|
132
|
+
children: M.name
|
|
133
|
+
}) : null
|
|
134
|
+
]
|
|
135
|
+
}), /* @__PURE__ */ T("div", {
|
|
82
136
|
className: "space-y-2",
|
|
83
|
-
children: [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
137
|
+
children: [
|
|
138
|
+
/* @__PURE__ */ w(g, { children: "Asset Tag *" }),
|
|
139
|
+
/* @__PURE__ */ w(h, {
|
|
140
|
+
placeholder: "e.g., IT-HW-001",
|
|
141
|
+
value: A.assetNumber,
|
|
142
|
+
onChange: (e) => I("assetNumber", e.target.value),
|
|
143
|
+
"aria-invalid": !!M.assetNumber
|
|
144
|
+
}),
|
|
145
|
+
M.assetNumber ? /* @__PURE__ */ w("p", {
|
|
146
|
+
className: "text-xs text-status-error-text",
|
|
147
|
+
children: M.assetNumber
|
|
148
|
+
}) : null
|
|
149
|
+
]
|
|
88
150
|
})]
|
|
89
151
|
}),
|
|
90
|
-
/* @__PURE__ */
|
|
152
|
+
/* @__PURE__ */ T("div", {
|
|
91
153
|
className: "space-y-2",
|
|
92
|
-
children: [/* @__PURE__ */
|
|
154
|
+
children: [/* @__PURE__ */ w(g, { children: "Description" }), /* @__PURE__ */ w(C, {
|
|
93
155
|
placeholder: "Brief description of the asset...",
|
|
94
|
-
value:
|
|
95
|
-
onChange: (e) =>
|
|
156
|
+
value: A.description,
|
|
157
|
+
onChange: (e) => I("description", e.target.value),
|
|
96
158
|
rows: 3
|
|
97
159
|
})]
|
|
98
160
|
}),
|
|
99
|
-
/* @__PURE__ */
|
|
161
|
+
/* @__PURE__ */ T("div", {
|
|
100
162
|
className: "grid gap-4 md:grid-cols-3",
|
|
101
163
|
children: [
|
|
102
|
-
/* @__PURE__ */
|
|
164
|
+
/* @__PURE__ */ T("div", {
|
|
103
165
|
className: "space-y-2",
|
|
104
|
-
children: [/* @__PURE__ */
|
|
105
|
-
value:
|
|
106
|
-
onValueChange: (e) =>
|
|
107
|
-
children: [/* @__PURE__ */
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
/* @__PURE__ */ S(v, {
|
|
113
|
-
value: "it_hardware",
|
|
114
|
-
children: "IT Hardware"
|
|
115
|
-
}),
|
|
116
|
-
/* @__PURE__ */ S(v, {
|
|
117
|
-
value: "furniture",
|
|
118
|
-
children: "Furniture"
|
|
119
|
-
}),
|
|
120
|
-
/* @__PURE__ */ S(v, {
|
|
121
|
-
value: "vehicles",
|
|
122
|
-
children: "Vehicles"
|
|
123
|
-
}),
|
|
124
|
-
/* @__PURE__ */ S(v, {
|
|
125
|
-
value: "equipment",
|
|
126
|
-
children: "Equipment"
|
|
127
|
-
}),
|
|
128
|
-
/* @__PURE__ */ S(v, {
|
|
129
|
-
value: "software",
|
|
130
|
-
children: "Software"
|
|
131
|
-
}),
|
|
132
|
-
/* @__PURE__ */ S(v, {
|
|
133
|
-
value: "networking",
|
|
134
|
-
children: "Networking"
|
|
135
|
-
}),
|
|
136
|
-
/* @__PURE__ */ S(v, {
|
|
137
|
-
value: "servers",
|
|
138
|
-
children: "Servers"
|
|
139
|
-
})
|
|
140
|
-
] })]
|
|
166
|
+
children: [/* @__PURE__ */ w(g, { children: "Category *" }), /* @__PURE__ */ T(v, {
|
|
167
|
+
value: A.category,
|
|
168
|
+
onValueChange: (e) => I("category", e),
|
|
169
|
+
children: [/* @__PURE__ */ w(x, { children: /* @__PURE__ */ w(S, {}) }), /* @__PURE__ */ w(y, { children: k.map((e) => /* @__PURE__ */ w(b, {
|
|
170
|
+
value: e,
|
|
171
|
+
className: "capitalize",
|
|
172
|
+
children: e.replace(/_/g, " ")
|
|
173
|
+
}, e)) })]
|
|
141
174
|
})]
|
|
142
175
|
}),
|
|
143
|
-
/* @__PURE__ */
|
|
176
|
+
/* @__PURE__ */ T("div", {
|
|
144
177
|
className: "space-y-2",
|
|
145
|
-
children: [/* @__PURE__ */
|
|
146
|
-
value:
|
|
147
|
-
onValueChange: (e) =>
|
|
148
|
-
children: [/* @__PURE__ */
|
|
149
|
-
/* @__PURE__ */
|
|
150
|
-
value: "
|
|
178
|
+
children: [/* @__PURE__ */ w(g, { children: "Status" }), /* @__PURE__ */ T(v, {
|
|
179
|
+
value: A.status,
|
|
180
|
+
onValueChange: (e) => I("status", e),
|
|
181
|
+
children: [/* @__PURE__ */ w(x, { children: /* @__PURE__ */ w(S, {}) }), /* @__PURE__ */ T(y, { children: [
|
|
182
|
+
/* @__PURE__ */ w(b, {
|
|
183
|
+
value: "ACTIVE",
|
|
151
184
|
children: "Active"
|
|
152
185
|
}),
|
|
153
|
-
/* @__PURE__ */
|
|
154
|
-
value: "
|
|
186
|
+
/* @__PURE__ */ w(b, {
|
|
187
|
+
value: "INACTIVE",
|
|
155
188
|
children: "Inactive"
|
|
156
189
|
}),
|
|
157
|
-
/* @__PURE__ */
|
|
158
|
-
value: "
|
|
159
|
-
children: "
|
|
190
|
+
/* @__PURE__ */ w(b, {
|
|
191
|
+
value: "MAINTENANCE",
|
|
192
|
+
children: "Maintenance"
|
|
160
193
|
}),
|
|
161
|
-
/* @__PURE__ */
|
|
162
|
-
value: "
|
|
163
|
-
children: "
|
|
194
|
+
/* @__PURE__ */ w(b, {
|
|
195
|
+
value: "RETIRED",
|
|
196
|
+
children: "Retired"
|
|
164
197
|
})
|
|
165
198
|
] })]
|
|
166
199
|
})]
|
|
167
200
|
}),
|
|
168
|
-
/* @__PURE__ */
|
|
201
|
+
/* @__PURE__ */ T("div", {
|
|
169
202
|
className: "space-y-2",
|
|
170
|
-
children: [/* @__PURE__ */
|
|
171
|
-
value:
|
|
172
|
-
onValueChange: (e) =>
|
|
173
|
-
children: [/* @__PURE__ */
|
|
174
|
-
/* @__PURE__ */
|
|
175
|
-
value: "
|
|
203
|
+
children: [/* @__PURE__ */ w(g, { children: "Condition" }), /* @__PURE__ */ T(v, {
|
|
204
|
+
value: A.condition,
|
|
205
|
+
onValueChange: (e) => I("condition", e),
|
|
206
|
+
children: [/* @__PURE__ */ w(x, { children: /* @__PURE__ */ w(S, {}) }), /* @__PURE__ */ T(y, { children: [
|
|
207
|
+
/* @__PURE__ */ w(b, {
|
|
208
|
+
value: "EXCELLENT",
|
|
176
209
|
children: "Excellent"
|
|
177
210
|
}),
|
|
178
|
-
/* @__PURE__ */
|
|
179
|
-
value: "
|
|
211
|
+
/* @__PURE__ */ w(b, {
|
|
212
|
+
value: "GOOD",
|
|
180
213
|
children: "Good"
|
|
181
214
|
}),
|
|
182
|
-
/* @__PURE__ */
|
|
183
|
-
value: "
|
|
215
|
+
/* @__PURE__ */ w(b, {
|
|
216
|
+
value: "FAIR",
|
|
184
217
|
children: "Fair"
|
|
185
218
|
}),
|
|
186
|
-
/* @__PURE__ */
|
|
187
|
-
value: "
|
|
219
|
+
/* @__PURE__ */ w(b, {
|
|
220
|
+
value: "POOR",
|
|
188
221
|
children: "Poor"
|
|
222
|
+
}),
|
|
223
|
+
/* @__PURE__ */ w(b, {
|
|
224
|
+
value: "DAMAGED",
|
|
225
|
+
children: "Damaged"
|
|
189
226
|
})
|
|
190
227
|
] })]
|
|
191
228
|
})]
|
|
192
229
|
})
|
|
193
230
|
]
|
|
231
|
+
}),
|
|
232
|
+
/* @__PURE__ */ T("div", {
|
|
233
|
+
className: "space-y-2",
|
|
234
|
+
children: [/* @__PURE__ */ w(g, { children: "Serial Number" }), /* @__PURE__ */ w(h, {
|
|
235
|
+
placeholder: "e.g., DELL-7090-X1A2B3",
|
|
236
|
+
value: A.serialNumber,
|
|
237
|
+
onChange: (e) => I("serialNumber", e.target.value)
|
|
238
|
+
})]
|
|
194
239
|
})
|
|
195
240
|
]
|
|
196
241
|
})] }),
|
|
197
|
-
/* @__PURE__ */
|
|
242
|
+
/* @__PURE__ */ T(c, { children: [/* @__PURE__ */ w(d, { children: /* @__PURE__ */ w(f, { children: "Assignment & Location" }) }), /* @__PURE__ */ T(l, {
|
|
198
243
|
className: "space-y-4",
|
|
199
|
-
children: /* @__PURE__ */
|
|
244
|
+
children: [/* @__PURE__ */ T("div", {
|
|
200
245
|
className: "grid gap-4 md:grid-cols-2",
|
|
201
|
-
children: [
|
|
202
|
-
/* @__PURE__ */ C("div", {
|
|
203
|
-
className: "space-y-2",
|
|
204
|
-
children: [/* @__PURE__ */ S(m, { children: "Serial Number *" }), /* @__PURE__ */ S(p, {
|
|
205
|
-
placeholder: "e.g., DELL-7090-X1A2B3",
|
|
206
|
-
value: T.serialNumber,
|
|
207
|
-
onChange: (e) => D("serialNumber", e.target.value)
|
|
208
|
-
})]
|
|
209
|
-
}),
|
|
210
|
-
/* @__PURE__ */ C("div", {
|
|
211
|
-
className: "space-y-2",
|
|
212
|
-
children: [/* @__PURE__ */ S(m, { children: "Vendor" }), /* @__PURE__ */ S(p, {
|
|
213
|
-
placeholder: "e.g., Dell Technologies",
|
|
214
|
-
value: T.vendor,
|
|
215
|
-
onChange: (e) => D("vendor", e.target.value)
|
|
216
|
-
})]
|
|
217
|
-
}),
|
|
218
|
-
/* @__PURE__ */ C("div", {
|
|
219
|
-
className: "space-y-2",
|
|
220
|
-
children: [/* @__PURE__ */ S(m, { children: "Manufacturer" }), /* @__PURE__ */ S(p, {
|
|
221
|
-
placeholder: "e.g., Dell",
|
|
222
|
-
value: T.manufacturer,
|
|
223
|
-
onChange: (e) => D("manufacturer", e.target.value)
|
|
224
|
-
})]
|
|
225
|
-
}),
|
|
226
|
-
/* @__PURE__ */ C("div", {
|
|
227
|
-
className: "space-y-2",
|
|
228
|
-
children: [/* @__PURE__ */ S(m, { children: "Model" }), /* @__PURE__ */ S(p, {
|
|
229
|
-
placeholder: "e.g., OptiPlex 7090",
|
|
230
|
-
value: T.model,
|
|
231
|
-
onChange: (e) => D("model", e.target.value)
|
|
232
|
-
})]
|
|
233
|
-
})
|
|
234
|
-
]
|
|
235
|
-
})
|
|
236
|
-
})] }),
|
|
237
|
-
/* @__PURE__ */ C(o, { children: [/* @__PURE__ */ S(l, { children: /* @__PURE__ */ S(u, { children: "Financial Details" }) }), /* @__PURE__ */ C(s, {
|
|
238
|
-
className: "space-y-4",
|
|
239
|
-
children: [/* @__PURE__ */ C("div", {
|
|
240
|
-
className: "grid gap-4 md:grid-cols-3",
|
|
241
|
-
children: [
|
|
242
|
-
/* @__PURE__ */ C("div", {
|
|
243
|
-
className: "space-y-2",
|
|
244
|
-
children: [/* @__PURE__ */ S(m, { children: "Purchase Value ($) *" }), /* @__PURE__ */ S(p, {
|
|
245
|
-
type: "number",
|
|
246
|
-
placeholder: "0.00",
|
|
247
|
-
value: T.value,
|
|
248
|
-
onChange: (e) => D("value", e.target.value)
|
|
249
|
-
})]
|
|
250
|
-
}),
|
|
251
|
-
/* @__PURE__ */ C("div", {
|
|
252
|
-
className: "space-y-2",
|
|
253
|
-
children: [/* @__PURE__ */ S(m, { children: "Depreciation Rate (%)" }), /* @__PURE__ */ S(p, {
|
|
254
|
-
type: "number",
|
|
255
|
-
placeholder: "20",
|
|
256
|
-
value: T.depreciationRate,
|
|
257
|
-
onChange: (e) => D("depreciationRate", e.target.value)
|
|
258
|
-
})]
|
|
259
|
-
}),
|
|
260
|
-
/* @__PURE__ */ C("div", {
|
|
261
|
-
className: "space-y-2",
|
|
262
|
-
children: [/* @__PURE__ */ S(m, { children: "Purchase Date *" }), /* @__PURE__ */ S(p, {
|
|
263
|
-
type: "date",
|
|
264
|
-
value: T.purchaseDate,
|
|
265
|
-
onChange: (e) => D("purchaseDate", e.target.value)
|
|
266
|
-
})]
|
|
267
|
-
})
|
|
268
|
-
]
|
|
269
|
-
}), /* @__PURE__ */ C("div", {
|
|
270
|
-
className: "space-y-2",
|
|
271
|
-
children: [/* @__PURE__ */ S(m, { children: "Warranty Expiry" }), /* @__PURE__ */ S(p, {
|
|
272
|
-
type: "date",
|
|
273
|
-
value: T.warrantyExpiry,
|
|
274
|
-
onChange: (e) => D("warrantyExpiry", e.target.value)
|
|
275
|
-
})]
|
|
276
|
-
})]
|
|
277
|
-
})] }),
|
|
278
|
-
/* @__PURE__ */ C(o, { children: [/* @__PURE__ */ S(l, { children: /* @__PURE__ */ S(u, { children: "Assignment & Location" }) }), /* @__PURE__ */ C(s, {
|
|
279
|
-
className: "space-y-4",
|
|
280
|
-
children: [
|
|
281
|
-
/* @__PURE__ */ C("div", {
|
|
282
|
-
className: "grid gap-4 md:grid-cols-2",
|
|
283
|
-
children: [/* @__PURE__ */ C("div", {
|
|
284
|
-
className: "space-y-2",
|
|
285
|
-
children: [/* @__PURE__ */ S(m, { children: "Assigned To" }), /* @__PURE__ */ S(p, {
|
|
286
|
-
placeholder: "e.g., john.smith@company.com",
|
|
287
|
-
value: T.assignedTo,
|
|
288
|
-
onChange: (e) => D("assignedTo", e.target.value)
|
|
289
|
-
})]
|
|
290
|
-
}), /* @__PURE__ */ C("div", {
|
|
291
|
-
className: "space-y-2",
|
|
292
|
-
children: [/* @__PURE__ */ S(m, { children: "Department" }), /* @__PURE__ */ S(p, {
|
|
293
|
-
placeholder: "e.g., Information Technology",
|
|
294
|
-
value: T.department,
|
|
295
|
-
onChange: (e) => D("department", e.target.value)
|
|
296
|
-
})]
|
|
297
|
-
})]
|
|
298
|
-
}),
|
|
299
|
-
/* @__PURE__ */ C("div", {
|
|
246
|
+
children: [/* @__PURE__ */ T("div", {
|
|
300
247
|
className: "space-y-2",
|
|
301
|
-
children: [/* @__PURE__ */
|
|
302
|
-
placeholder: "e.g.,
|
|
303
|
-
value:
|
|
304
|
-
onChange: (e) =>
|
|
248
|
+
children: [/* @__PURE__ */ w(g, { children: "Assigned To" }), /* @__PURE__ */ w(h, {
|
|
249
|
+
placeholder: "e.g., john.smith@company.com",
|
|
250
|
+
value: A.assignedTo,
|
|
251
|
+
onChange: (e) => I("assignedTo", e.target.value)
|
|
305
252
|
})]
|
|
306
|
-
}),
|
|
307
|
-
/* @__PURE__ */ C("div", {
|
|
253
|
+
}), /* @__PURE__ */ T("div", {
|
|
308
254
|
className: "space-y-2",
|
|
309
|
-
children: [/* @__PURE__ */
|
|
310
|
-
placeholder: "e.g.,
|
|
311
|
-
value:
|
|
312
|
-
onChange: (e) =>
|
|
255
|
+
children: [/* @__PURE__ */ w(g, { children: "Location" }), /* @__PURE__ */ w(h, {
|
|
256
|
+
placeholder: "e.g., Building A, Floor 3, Desk 15",
|
|
257
|
+
value: A.locationName,
|
|
258
|
+
onChange: (e) => I("locationName", e.target.value)
|
|
313
259
|
})]
|
|
314
|
-
})
|
|
315
|
-
|
|
260
|
+
})]
|
|
261
|
+
}), /* @__PURE__ */ T("div", {
|
|
262
|
+
className: "space-y-2",
|
|
263
|
+
children: [/* @__PURE__ */ w(g, { children: "Tags (comma-separated)" }), /* @__PURE__ */ w(h, {
|
|
264
|
+
placeholder: "e.g., desktop, engineering, high-performance",
|
|
265
|
+
value: A.tags,
|
|
266
|
+
onChange: (e) => I("tags", e.target.value)
|
|
267
|
+
})]
|
|
268
|
+
})]
|
|
316
269
|
})] }),
|
|
317
|
-
/* @__PURE__ */
|
|
270
|
+
/* @__PURE__ */ T("div", {
|
|
318
271
|
className: "flex justify-end gap-2",
|
|
319
|
-
children: [/* @__PURE__ */
|
|
272
|
+
children: [/* @__PURE__ */ w(s, {
|
|
320
273
|
variant: "outline",
|
|
274
|
+
onClick: () => E("/assets/asset-list"),
|
|
321
275
|
children: "Cancel"
|
|
322
|
-
}), /* @__PURE__ */
|
|
276
|
+
}), /* @__PURE__ */ T(s, {
|
|
277
|
+
onClick: L,
|
|
278
|
+
disabled: F,
|
|
279
|
+
children: [F ? /* @__PURE__ */ w(r, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ w(i, { className: "mr-2 h-4 w-4" }), F ? "Creating..." : "Create Asset"]
|
|
280
|
+
})]
|
|
323
281
|
})
|
|
324
282
|
]
|
|
325
283
|
});
|
|
326
284
|
}
|
|
327
285
|
//#endregion
|
|
328
|
-
export {
|
|
286
|
+
export { A as AssetsAssetCreatePage };
|
|
329
287
|
|
|
330
288
|
//# sourceMappingURL=AssetsAssetCreatePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetsAssetCreatePage.js","names":[],"sources":["../../../src/assethandler/pages/AssetsAssetCreatePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, Save, X } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\n\nexport function AssetsAssetCreatePage() {\n const navigate = useNavigate();\n const [formData, setFormData] = useState({\n name: '',\n description: '',\n category: 'it_hardware',\n status: 'active',\n condition: 'good',\n serialNumber: '',\n assetTag: '',\n value: '',\n location: '',\n department: '',\n assignedTo: '',\n vendor: '',\n model: '',\n manufacturer: '',\n depreciationRate: '20',\n purchaseDate: '',\n warrantyExpiry: '',\n tags: '',\n });\n\n const handleChange = (field: string, value: string) => {\n setFormData((prev) => ({ ...prev, [field]: value }));\n };\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/assets/asset-list')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold\">\n <GradientText>Create New Asset</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Register a new asset in the inventory</p>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigate('/assets/asset-list')}>\n <X className=\"mr-2 h-4 w-4\" />\n Cancel\n </Button>\n <Button size=\"sm\">\n <Save className=\"mr-2 h-4 w-4\" />\n Create Asset\n </Button>\n </div>\n </div>\n\n <PagePurpose>\n Register a new asset so it can be tracked, valued, maintained and assigned from day one.\n Capture its identity (name, tag, serial), category and condition, then the financial and\n location details — the more you fill in now, the better your reports and audits later.\n </PagePurpose>\n\n <EmphasisPanel>\n <CardHeader className=\"px-0 pt-0\">\n <CardTitle>General Information</CardTitle>\n <CardDescription>Basic asset details and identification</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4 px-0 pb-0\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Asset Name *</Label>\n <Input\n placeholder=\"e.g., Dell OptiPlex 7090\"\n value={formData.name}\n onChange={(e) => handleChange('name', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Asset Tag *</Label>\n <Input\n placeholder=\"e.g., IT-HW-001\"\n value={formData.assetTag}\n onChange={(e) => handleChange('assetTag', e.target.value)}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Description</Label>\n <Textarea\n placeholder=\"Brief description of the asset...\"\n value={formData.description}\n onChange={(e) => handleChange('description', e.target.value)}\n rows={3}\n />\n </div>\n <div className=\"grid gap-4 md:grid-cols-3\">\n <div className=\"space-y-2\">\n <Label>Category *</Label>\n <Select value={formData.category} onValueChange={(v) => handleChange('category', v)}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"electronics\">Electronics</SelectItem>\n <SelectItem value=\"it_hardware\">IT Hardware</SelectItem>\n <SelectItem value=\"furniture\">Furniture</SelectItem>\n <SelectItem value=\"vehicles\">Vehicles</SelectItem>\n <SelectItem value=\"equipment\">Equipment</SelectItem>\n <SelectItem value=\"software\">Software</SelectItem>\n <SelectItem value=\"networking\">Networking</SelectItem>\n <SelectItem value=\"servers\">Servers</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label>Status</Label>\n <Select value={formData.status} onValueChange={(v) => handleChange('status', v)}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"active\">Active</SelectItem>\n <SelectItem value=\"inactive\">Inactive</SelectItem>\n <SelectItem value=\"under_maintenance\">Under Maintenance</SelectItem>\n <SelectItem value=\"reserved\">Reserved</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label>Condition</Label>\n <Select\n value={formData.condition}\n onValueChange={(v) => handleChange('condition', v)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"excellent\">Excellent</SelectItem>\n <SelectItem value=\"good\">Good</SelectItem>\n <SelectItem value=\"fair\">Fair</SelectItem>\n <SelectItem value=\"poor\">Poor</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle>Identification & Manufacturer</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Serial Number *</Label>\n <Input\n placeholder=\"e.g., DELL-7090-X1A2B3\"\n value={formData.serialNumber}\n onChange={(e) => handleChange('serialNumber', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Vendor</Label>\n <Input\n placeholder=\"e.g., Dell Technologies\"\n value={formData.vendor}\n onChange={(e) => handleChange('vendor', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Manufacturer</Label>\n <Input\n placeholder=\"e.g., Dell\"\n value={formData.manufacturer}\n onChange={(e) => handleChange('manufacturer', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Model</Label>\n <Input\n placeholder=\"e.g., OptiPlex 7090\"\n value={formData.model}\n onChange={(e) => handleChange('model', e.target.value)}\n />\n </div>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Financial Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid gap-4 md:grid-cols-3\">\n <div className=\"space-y-2\">\n <Label>Purchase Value ($) *</Label>\n <Input\n type=\"number\"\n placeholder=\"0.00\"\n value={formData.value}\n onChange={(e) => handleChange('value', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Depreciation Rate (%)</Label>\n <Input\n type=\"number\"\n placeholder=\"20\"\n value={formData.depreciationRate}\n onChange={(e) => handleChange('depreciationRate', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Purchase Date *</Label>\n <Input\n type=\"date\"\n value={formData.purchaseDate}\n onChange={(e) => handleChange('purchaseDate', e.target.value)}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Warranty Expiry</Label>\n <Input\n type=\"date\"\n value={formData.warrantyExpiry}\n onChange={(e) => handleChange('warrantyExpiry', e.target.value)}\n />\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Assignment & Location</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Assigned To</Label>\n <Input\n placeholder=\"e.g., john.smith@company.com\"\n value={formData.assignedTo}\n onChange={(e) => handleChange('assignedTo', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Department</Label>\n <Input\n placeholder=\"e.g., Information Technology\"\n value={formData.department}\n onChange={(e) => handleChange('department', e.target.value)}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Location</Label>\n <Input\n placeholder=\"e.g., Building A, Floor 3, Desk 15\"\n value={formData.location}\n onChange={(e) => handleChange('location', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Tags (comma-separated)</Label>\n <Input\n placeholder=\"e.g., desktop, engineering, high-performance\"\n value={formData.tags}\n onChange={(e) => handleChange('tags', e.target.value)}\n />\n </div>\n </CardContent>\n </Card>\n\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\">Cancel</Button>\n <Button>\n <Save className=\"mr-2 h-4 w-4\" />\n Create Asset\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AssetsAssetCreatePage.js","names":[],"sources":["../../../src/assethandler/pages/AssetsAssetCreatePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n CardDescription,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, Loader2, Save, X } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport { notify } from '../utils/toast';\n\nconst CREATE_ASSET_MUTATION = gql`\n mutation AssetHandlerCreateAsset($input: CreateAssetInput!) {\n createAsset(input: $input) {\n id\n assetNumber\n name\n }\n }\n`;\n\nconst CATEGORY_OPTIONS = [\n 'electronics',\n 'it_hardware',\n 'furniture',\n 'vehicles',\n 'equipment',\n 'software',\n 'networking',\n 'servers',\n];\n\nexport function AssetsAssetCreatePage() {\n const navigate = useNavigate();\n const [formData, setFormData] = useState({\n name: '',\n description: '',\n category: 'it_hardware',\n status: 'ACTIVE',\n condition: 'GOOD',\n serialNumber: '',\n assetNumber: '',\n locationName: '',\n assignedTo: '',\n tags: '',\n });\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n const [createAsset, { loading: creating }] = useMutation<{\n createAsset: { id: string; assetNumber: string; name: string };\n }>(CREATE_ASSET_MUTATION, {\n refetchQueries: ['AssetHandlerBootstrap'],\n onCompleted: (data) => {\n notify.success('Asset created', `${data.createAsset.name} was registered in the inventory.`);\n navigate(`/assets/${data.createAsset.id}`);\n },\n onError: (error) => {\n notify.error('Could not create asset', error.message);\n },\n });\n\n const handleChange = (field: string, value: string) => {\n setFormData((prev) => ({ ...prev, [field]: value }));\n setErrors((prev) => {\n if (!prev[field]) return prev;\n const next = { ...prev };\n delete next[field];\n return next;\n });\n };\n\n const handleSubmit = () => {\n const nextErrors: Record<string, string> = {};\n if (!formData.name.trim()) nextErrors.name = 'Asset name is required';\n if (!formData.assetNumber.trim()) nextErrors.assetNumber = 'Asset tag is required';\n if (!formData.category.trim()) nextErrors.category = 'Category is required';\n setErrors(nextErrors);\n if (Object.keys(nextErrors).length > 0) {\n notify.warning('Missing required fields', 'Fill in the highlighted fields and try again.');\n return;\n }\n\n const tags = formData.tags\n .split(',')\n .map((tag) => tag.trim())\n .filter(Boolean);\n\n void createAsset({\n variables: {\n input: {\n name: formData.name.trim(),\n assetNumber: formData.assetNumber.trim(),\n category: formData.category,\n status: formData.status,\n condition: formData.condition,\n description: formData.description.trim() || null,\n serialNumber: formData.serialNumber.trim() || null,\n locationName: formData.locationName.trim() || null,\n assignedTo: formData.assignedTo.trim() || null,\n tags,\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/assets/asset-list')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold\">\n <GradientText>Create New Asset</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Register a new asset in the inventory</p>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigate('/assets/asset-list')}>\n <X className=\"mr-2 h-4 w-4\" />\n Cancel\n </Button>\n <Button size=\"sm\" onClick={handleSubmit} disabled={creating}>\n {creating ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : (\n <Save className=\"mr-2 h-4 w-4\" />\n )}\n {creating ? 'Creating...' : 'Create Asset'}\n </Button>\n </div>\n </div>\n\n <PagePurpose>\n Register a new asset so it can be tracked, maintained and assigned from day one. Capture its\n identity (name, tag, serial), category and condition, then the location and assignment\n details — the more you fill in now, the better your reports and audits later.\n </PagePurpose>\n\n <EmphasisPanel>\n <CardHeader className=\"px-0 pt-0\">\n <CardTitle>General Information</CardTitle>\n <CardDescription>Basic asset details and identification</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4 px-0 pb-0\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Asset Name *</Label>\n <Input\n placeholder=\"e.g., Dell OptiPlex 7090\"\n value={formData.name}\n onChange={(e) => handleChange('name', e.target.value)}\n aria-invalid={!!errors.name}\n />\n {errors.name ? <p className=\"text-xs text-status-error-text\">{errors.name}</p> : null}\n </div>\n <div className=\"space-y-2\">\n <Label>Asset Tag *</Label>\n <Input\n placeholder=\"e.g., IT-HW-001\"\n value={formData.assetNumber}\n onChange={(e) => handleChange('assetNumber', e.target.value)}\n aria-invalid={!!errors.assetNumber}\n />\n {errors.assetNumber ? (\n <p className=\"text-xs text-status-error-text\">{errors.assetNumber}</p>\n ) : null}\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Description</Label>\n <Textarea\n placeholder=\"Brief description of the asset...\"\n value={formData.description}\n onChange={(e) => handleChange('description', e.target.value)}\n rows={3}\n />\n </div>\n <div className=\"grid gap-4 md:grid-cols-3\">\n <div className=\"space-y-2\">\n <Label>Category *</Label>\n <Select value={formData.category} onValueChange={(v) => handleChange('category', v)}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {CATEGORY_OPTIONS.map((category) => (\n <SelectItem key={category} value={category} className=\"capitalize\">\n {category.replace(/_/g, ' ')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label>Status</Label>\n <Select value={formData.status} onValueChange={(v) => handleChange('status', v)}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ACTIVE\">Active</SelectItem>\n <SelectItem value=\"INACTIVE\">Inactive</SelectItem>\n <SelectItem value=\"MAINTENANCE\">Maintenance</SelectItem>\n <SelectItem value=\"RETIRED\">Retired</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label>Condition</Label>\n <Select\n value={formData.condition}\n onValueChange={(v) => handleChange('condition', v)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"EXCELLENT\">Excellent</SelectItem>\n <SelectItem value=\"GOOD\">Good</SelectItem>\n <SelectItem value=\"FAIR\">Fair</SelectItem>\n <SelectItem value=\"POOR\">Poor</SelectItem>\n <SelectItem value=\"DAMAGED\">Damaged</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Serial Number</Label>\n <Input\n placeholder=\"e.g., DELL-7090-X1A2B3\"\n value={formData.serialNumber}\n onChange={(e) => handleChange('serialNumber', e.target.value)}\n />\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle>Assignment & Location</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Assigned To</Label>\n <Input\n placeholder=\"e.g., john.smith@company.com\"\n value={formData.assignedTo}\n onChange={(e) => handleChange('assignedTo', e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Location</Label>\n <Input\n placeholder=\"e.g., Building A, Floor 3, Desk 15\"\n value={formData.locationName}\n onChange={(e) => handleChange('locationName', e.target.value)}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label>Tags (comma-separated)</Label>\n <Input\n placeholder=\"e.g., desktop, engineering, high-performance\"\n value={formData.tags}\n onChange={(e) => handleChange('tags', e.target.value)}\n />\n </div>\n </CardContent>\n </Card>\n\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" onClick={() => navigate('/assets/asset-list')}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={creating}>\n {creating ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : (\n <Save className=\"mr-2 h-4 w-4\" />\n )}\n {creating ? 'Creating...' : 'Create Asset'}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|