@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.
Files changed (76) hide show
  1. package/dist/assethandler/AssetHandlerRoot.js +0 -24
  2. package/dist/assethandler/AssetHandlerRoot.js.map +1 -1
  3. package/dist/assethandler/AssetHandlerRoutes.js +92 -160
  4. package/dist/assethandler/AssetHandlerRoutes.js.map +1 -1
  5. package/dist/assethandler/pages/AnalyticsPage.js +367 -402
  6. package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
  7. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +29 -26
  8. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
  9. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +278 -164
  10. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
  11. package/dist/assethandler/pages/AssetsAssetCreatePage.js +200 -242
  12. package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
  13. package/dist/assethandler/pages/AssetsAssetDetailPage.js +192 -286
  14. package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
  15. package/dist/assethandler/pages/AssetsAssetListPage.js +204 -296
  16. package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
  17. package/dist/assethandler/pages/AssetsAssetTrackingPage.js +38 -42
  18. package/dist/assethandler/pages/AssetsAssetTrackingPage.js.map +1 -1
  19. package/dist/assethandler/pages/DashboardPage.js +212 -236
  20. package/dist/assethandler/pages/DashboardPage.js.map +1 -1
  21. package/dist/assethandler/pages/ItilIncidentDetailPage.js +41 -85
  22. package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
  23. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +1 -1
  24. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js.map +1 -1
  25. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +37 -86
  26. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js.map +1 -1
  27. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +82 -98
  28. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
  29. package/dist/assethandler/pages/OperationsOperationsHubPage.js +6 -22
  30. package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
  31. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +4 -34
  32. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
  33. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +105 -150
  34. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
  35. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +116 -152
  36. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
  37. package/dist/assethandler/providers/AssetHandlerProvider.js.map +1 -1
  38. package/dist/assethandler/store/assethandlerStore.js +68 -2206
  39. package/dist/assethandler/store/assethandlerStore.js.map +1 -1
  40. package/dist/assethandler/utils/toast.js +33 -0
  41. package/dist/assethandler/utils/toast.js.map +1 -0
  42. package/package.json +5 -4
  43. package/dist/assethandler/pages/AssetsAssetEditPage.js +0 -353
  44. package/dist/assethandler/pages/AssetsAssetEditPage.js.map +0 -1
  45. package/dist/assethandler/pages/AuditTrailPage.js +0 -215
  46. package/dist/assethandler/pages/AuditTrailPage.js.map +0 -1
  47. package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js +0 -177
  48. package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js.map +0 -1
  49. package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js +0 -162
  50. package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js.map +0 -1
  51. package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js +0 -143
  52. package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js.map +0 -1
  53. package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js +0 -163
  54. package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js.map +0 -1
  55. package/dist/assethandler/pages/ReportsReportBuilderPage.js +0 -208
  56. package/dist/assethandler/pages/ReportsReportBuilderPage.js.map +0 -1
  57. package/dist/assethandler/pages/ReportsReportsDashboardPage.js +0 -236
  58. package/dist/assethandler/pages/ReportsReportsDashboardPage.js.map +0 -1
  59. package/dist/assethandler/pages/ReportsReportsListPage.js +0 -144
  60. package/dist/assethandler/pages/ReportsReportsListPage.js.map +0 -1
  61. package/dist/assethandler/pages/SecurityScheduleBackupPage.js +0 -149
  62. package/dist/assethandler/pages/SecurityScheduleBackupPage.js.map +0 -1
  63. package/dist/assethandler/pages/UsersPage.js +0 -208
  64. package/dist/assethandler/pages/UsersPage.js.map +0 -1
  65. package/dist/assethandler/pages/UsersUserCreatePage.js +0 -220
  66. package/dist/assethandler/pages/UsersUserCreatePage.js.map +0 -1
  67. package/dist/assethandler/pages/UsersUserManagementHubPage.js +0 -373
  68. package/dist/assethandler/pages/UsersUserManagementHubPage.js.map +0 -1
  69. package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js +0 -264
  70. package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js.map +0 -1
  71. package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js +0 -206
  72. package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js.map +0 -1
  73. package/dist/assethandler/pages/WorkflowsWorkflowListPage.js +0 -171
  74. package/dist/assethandler/pages/WorkflowsWorkflowListPage.js.map +0 -1
  75. package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js +0 -173
  76. package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js.map +0 -1
@@ -1,330 +1,288 @@
1
- import { useState as e } from "react";
2
- import { ArrowLeft as t, Save as n, X as r } from "lucide-react";
3
- import { useNavigate as i } from "react-router-dom";
4
- import { Button as a, Card as o, CardContent as s, CardDescription as c, CardHeader as l, CardTitle as u, EmphasisPanel as d, GradientText as f, Input as p, Label as m, PagePurpose as h, Select as g, SelectContent as _, SelectItem as v, SelectTrigger as y, SelectValue as b, Textarea as x } from "@burdenoff/fe-libs/ui";
5
- import { jsx as S, jsxs as C } from "react/jsx-runtime";
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
- function w() {
8
- let w = i(), [T, E] = e({
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: "active",
13
- condition: "good",
33
+ status: "ACTIVE",
34
+ condition: "GOOD",
14
35
  serialNumber: "",
15
- assetTag: "",
16
- value: "",
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
- }), D = (e, t) => {
28
- E((n) => ({
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__ */ C("div", {
77
+ return /* @__PURE__ */ T("div", {
34
78
  className: "space-y-6 p-6 max-w-4xl",
35
79
  children: [
36
- /* @__PURE__ */ C("div", {
80
+ /* @__PURE__ */ T("div", {
37
81
  className: "flex items-center justify-between",
38
- children: [/* @__PURE__ */ C("div", {
82
+ children: [/* @__PURE__ */ T("div", {
39
83
  className: "flex items-center gap-4",
40
- children: [/* @__PURE__ */ S(a, {
84
+ children: [/* @__PURE__ */ w(s, {
41
85
  variant: "ghost",
42
86
  size: "icon",
43
- onClick: () => w("/assets/asset-list"),
44
- children: /* @__PURE__ */ S(t, { className: "h-4 w-4" })
45
- }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h1", {
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__ */ S(f, { children: "Create New Asset" })
48
- }), /* @__PURE__ */ S("p", {
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__ */ C("div", {
96
+ }), /* @__PURE__ */ T("div", {
53
97
  className: "flex gap-2",
54
- children: [/* @__PURE__ */ C(a, {
98
+ children: [/* @__PURE__ */ T(s, {
55
99
  variant: "outline",
56
100
  size: "sm",
57
- onClick: () => w("/assets/asset-list"),
58
- children: [/* @__PURE__ */ S(r, { className: "mr-2 h-4 w-4" }), "Cancel"]
59
- }), /* @__PURE__ */ C(a, {
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
- children: [/* @__PURE__ */ S(n, { className: "mr-2 h-4 w-4" }), "Create Asset"]
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__ */ S(h, { children: "Register a new asset so it can be tracked, valued, maintained and assigned from day one. Capture its identity (name, tag, serial), category and condition, then the financial and location details — the more you fill in now, the better your reports and audits later." }),
66
- /* @__PURE__ */ C(d, { children: [/* @__PURE__ */ C(l, {
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__ */ S(u, { children: "General Information" }), /* @__PURE__ */ S(c, { children: "Basic asset details and identification" })]
69
- }), /* @__PURE__ */ C(s, {
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__ */ C("div", {
118
+ /* @__PURE__ */ T("div", {
73
119
  className: "grid gap-4 md:grid-cols-2",
74
- children: [/* @__PURE__ */ C("div", {
120
+ children: [/* @__PURE__ */ T("div", {
75
121
  className: "space-y-2",
76
- children: [/* @__PURE__ */ S(m, { children: "Asset Name *" }), /* @__PURE__ */ S(p, {
77
- placeholder: "e.g., Dell OptiPlex 7090",
78
- value: T.name,
79
- onChange: (e) => D("name", e.target.value)
80
- })]
81
- }), /* @__PURE__ */ C("div", {
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: [/* @__PURE__ */ S(m, { children: "Asset Tag *" }), /* @__PURE__ */ S(p, {
84
- placeholder: "e.g., IT-HW-001",
85
- value: T.assetTag,
86
- onChange: (e) => D("assetTag", e.target.value)
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__ */ C("div", {
152
+ /* @__PURE__ */ T("div", {
91
153
  className: "space-y-2",
92
- children: [/* @__PURE__ */ S(m, { children: "Description" }), /* @__PURE__ */ S(x, {
154
+ children: [/* @__PURE__ */ w(g, { children: "Description" }), /* @__PURE__ */ w(C, {
93
155
  placeholder: "Brief description of the asset...",
94
- value: T.description,
95
- onChange: (e) => D("description", e.target.value),
156
+ value: A.description,
157
+ onChange: (e) => I("description", e.target.value),
96
158
  rows: 3
97
159
  })]
98
160
  }),
99
- /* @__PURE__ */ C("div", {
161
+ /* @__PURE__ */ T("div", {
100
162
  className: "grid gap-4 md:grid-cols-3",
101
163
  children: [
102
- /* @__PURE__ */ C("div", {
164
+ /* @__PURE__ */ T("div", {
103
165
  className: "space-y-2",
104
- children: [/* @__PURE__ */ S(m, { children: "Category *" }), /* @__PURE__ */ C(g, {
105
- value: T.category,
106
- onValueChange: (e) => D("category", e),
107
- children: [/* @__PURE__ */ S(y, { children: /* @__PURE__ */ S(b, {}) }), /* @__PURE__ */ C(_, { children: [
108
- /* @__PURE__ */ S(v, {
109
- value: "electronics",
110
- children: "Electronics"
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__ */ C("div", {
176
+ /* @__PURE__ */ T("div", {
144
177
  className: "space-y-2",
145
- children: [/* @__PURE__ */ S(m, { children: "Status" }), /* @__PURE__ */ C(g, {
146
- value: T.status,
147
- onValueChange: (e) => D("status", e),
148
- children: [/* @__PURE__ */ S(y, { children: /* @__PURE__ */ S(b, {}) }), /* @__PURE__ */ C(_, { children: [
149
- /* @__PURE__ */ S(v, {
150
- value: "active",
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__ */ S(v, {
154
- value: "inactive",
186
+ /* @__PURE__ */ w(b, {
187
+ value: "INACTIVE",
155
188
  children: "Inactive"
156
189
  }),
157
- /* @__PURE__ */ S(v, {
158
- value: "under_maintenance",
159
- children: "Under Maintenance"
190
+ /* @__PURE__ */ w(b, {
191
+ value: "MAINTENANCE",
192
+ children: "Maintenance"
160
193
  }),
161
- /* @__PURE__ */ S(v, {
162
- value: "reserved",
163
- children: "Reserved"
194
+ /* @__PURE__ */ w(b, {
195
+ value: "RETIRED",
196
+ children: "Retired"
164
197
  })
165
198
  ] })]
166
199
  })]
167
200
  }),
168
- /* @__PURE__ */ C("div", {
201
+ /* @__PURE__ */ T("div", {
169
202
  className: "space-y-2",
170
- children: [/* @__PURE__ */ S(m, { children: "Condition" }), /* @__PURE__ */ C(g, {
171
- value: T.condition,
172
- onValueChange: (e) => D("condition", e),
173
- children: [/* @__PURE__ */ S(y, { children: /* @__PURE__ */ S(b, {}) }), /* @__PURE__ */ C(_, { children: [
174
- /* @__PURE__ */ S(v, {
175
- value: "excellent",
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__ */ S(v, {
179
- value: "good",
211
+ /* @__PURE__ */ w(b, {
212
+ value: "GOOD",
180
213
  children: "Good"
181
214
  }),
182
- /* @__PURE__ */ S(v, {
183
- value: "fair",
215
+ /* @__PURE__ */ w(b, {
216
+ value: "FAIR",
184
217
  children: "Fair"
185
218
  }),
186
- /* @__PURE__ */ S(v, {
187
- value: "poor",
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__ */ C(o, { children: [/* @__PURE__ */ S(l, { children: /* @__PURE__ */ S(u, { children: "Identification & Manufacturer" }) }), /* @__PURE__ */ S(s, {
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__ */ C("div", {
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__ */ S(m, { children: "Location" }), /* @__PURE__ */ S(p, {
302
- placeholder: "e.g., Building A, Floor 3, Desk 15",
303
- value: T.location,
304
- onChange: (e) => D("location", e.target.value)
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__ */ S(m, { children: "Tags (comma-separated)" }), /* @__PURE__ */ S(p, {
310
- placeholder: "e.g., desktop, engineering, high-performance",
311
- value: T.tags,
312
- onChange: (e) => D("tags", e.target.value)
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__ */ C("div", {
270
+ /* @__PURE__ */ T("div", {
318
271
  className: "flex justify-end gap-2",
319
- children: [/* @__PURE__ */ S(a, {
272
+ children: [/* @__PURE__ */ w(s, {
320
273
  variant: "outline",
274
+ onClick: () => E("/assets/asset-list"),
321
275
  children: "Cancel"
322
- }), /* @__PURE__ */ C(a, { children: [/* @__PURE__ */ S(n, { className: "mr-2 h-4 w-4" }), "Create Asset"] })]
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 { w as AssetsAssetCreatePage };
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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"}