@burdenoff/microfe-timecampus 2026.703.6 → 2026.707.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/generated/wspace-operations.js +1023 -1514
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.js +12 -18
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/timecampus/TimeCampusRoot.js +130 -198
- package/dist/timecampus/TimeCampusRoot.js.map +1 -1
- package/dist/timecampus/TimeCampusRoutes.js +96 -164
- package/dist/timecampus/TimeCampusRoutes.js.map +1 -1
- package/dist/timecampus/components/index.js +2 -2
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js +7 -7
- package/dist/timecampus/pages/client-portal/ClientPortalPage.js +6 -6
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js +8 -8
- package/dist/timecampus/pages/geofencing/GeofencingPage.js +6 -6
- package/dist/timecampus/pages/lifetime/FiniteLifePage.js +91 -91
- package/dist/timecampus/pages/lifetime/FiniteLifePage.js.map +1 -1
- package/dist/timecampus/pages/lifetime/LifeBalancePage.js +18 -18
- package/dist/timecampus/pages/lifetime/LifeTimelinePage.js +7 -7
- package/dist/timecampus/pages/lifetime/ValuesGoalsPage.js +1 -1
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js +6 -6
- package/dist/timecampus/pages/projects/ProjectDetailPage.js +7 -7
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js +212 -212
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js.map +1 -1
- package/dist/timecampus/pages/team/TeamMembersPage.js +4 -4
- package/dist/timecampus/pages/time/TimeTrackingPage.js +143 -143
- package/dist/timecampus/pages/time/TimeTrackingPage.js.map +1 -1
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.js +1 -1
- package/dist/timecampus/pages/timeline/TimelinePage.js +1 -1
- package/dist/timecampus/pages/timeline/TimelinePage.js.map +1 -1
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js +87 -93
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js.map +1 -1
- package/package.json +1 -1
- package/dist/timecampus/pages/applets/AppletStorePage.js +0 -167
- package/dist/timecampus/pages/applets/AppletStorePage.js.map +0 -1
- package/dist/timecampus/pages/applets/InstalledAppletsPage.js +0 -162
- package/dist/timecampus/pages/applets/InstalledAppletsPage.js.map +0 -1
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js +0 -133
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js.map +0 -1
- package/dist/timecampus/pages/channels/ChannelsPage.js +0 -418
- package/dist/timecampus/pages/channels/ChannelsPage.js.map +0 -1
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js +0 -142
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js.map +0 -1
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js +0 -119
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js.map +0 -1
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js +0 -110
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js.map +0 -1
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js +0 -83
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js.map +0 -1
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js +0 -198
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js.map +0 -1
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js +0 -124
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js.map +0 -1
- package/dist/timecampus/pages/templates/TemplateApplicationPage.js +0 -88
- package/dist/timecampus/pages/templates/TemplateApplicationPage.js.map +0 -1
- package/dist/timecampus/pages/templates/TemplateDetailPage.js +0 -135
- package/dist/timecampus/pages/templates/TemplateDetailPage.js.map +0 -1
- package/dist/timecampus/pages/templates/TemplatesPage.js +0 -191
- package/dist/timecampus/pages/templates/TemplatesPage.js.map +0 -1
- package/dist/timecampus/pages/widgets/WidgetDetailPage.js +0 -196
- package/dist/timecampus/pages/widgets/WidgetDetailPage.js.map +0 -1
- package/dist/timecampus/pages/widgets/WidgetsPage.js +0 -297
- package/dist/timecampus/pages/widgets/WidgetsPage.js.map +0 -1
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js +0 -133
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js.map +0 -1
- package/dist/timecampus/pages/workflows/WorkflowsPage.js +0 -311
- package/dist/timecampus/pages/workflows/WorkflowsPage.js.map +0 -1
|
@@ -1,144 +1,144 @@
|
|
|
1
1
|
import { formatHours as e, getInitials as t } from "../../utils/helpers.js";
|
|
2
2
|
import { StatCard as n } from "../../components/StatCard.js";
|
|
3
3
|
import { LoadingSkeleton as r } from "../../components/LoadingSkeleton.js";
|
|
4
|
-
import { useBulkCreateAllocationsMutation as i, useCreateAllocationMutation as
|
|
5
|
-
import { PageLayout as
|
|
6
|
-
import { StatusBadge as
|
|
7
|
-
import { EmptyState as
|
|
4
|
+
import { useBulkCreateAllocationsMutation as i, useCreateAllocationMutation as ee, useCreateResourcePlanMutation as te, useDeleteAllocationMutation as ne, useDeleteResourcePlanMutation as re, useGetCapacityOverviewQuery as ie, useListResourcePlansQuery as ae, useUpdateAllocationMutation as oe, useUpdateResourcePlanMutation as se } from "../../../generated/wspace-operations.js";
|
|
5
|
+
import { PageLayout as a } from "../../components/PageLayout.js";
|
|
6
|
+
import { StatusBadge as ce } from "../../components/StatusBadge.js";
|
|
7
|
+
import { EmptyState as le } from "../../components/EmptyState.js";
|
|
8
|
+
import { Modal as o } from "../../components/Modal.js";
|
|
8
9
|
import { ChartCard as s } from "../../components/ChartCard.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { ProgressMeter as l } from "../../components/charts/ProgressMeter.js";
|
|
10
|
+
import { DonutChart as ue } from "../../components/charts/DonutChart.js";
|
|
11
|
+
import { RadialGauge as de } from "../../components/charts/RadialGauge.js";
|
|
12
|
+
import { ProgressMeter as fe } from "../../components/charts/ProgressMeter.js";
|
|
13
13
|
import "../../components/index.js";
|
|
14
|
-
import { useState as
|
|
15
|
-
import { AlertTriangle as
|
|
14
|
+
import { useState as c } from "react";
|
|
15
|
+
import { AlertTriangle as pe, CalendarRange as me, Pencil as he, Plus as l, Trash2 as u, TrendingUp as ge, UserPlus as _e, Users as d } from "lucide-react";
|
|
16
16
|
import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
17
17
|
import { GlassCard as ve } from "@burdenoff/fe-libs/ui";
|
|
18
18
|
//#region src/timecampus/pages/resource-planning/ResourcePlanningPage.tsx
|
|
19
|
-
var
|
|
19
|
+
var ye = 25, h = "mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary", g = (e) => e.slice(0, 10), _ = (e) => new Date(e).toISOString(), v = () => {
|
|
20
20
|
let e = /* @__PURE__ */ new Date(), t = new Date(e.getFullYear(), e.getMonth(), e.getDate()), n = new Date(e.getFullYear(), e.getMonth(), e.getDate() + 7);
|
|
21
21
|
return {
|
|
22
22
|
name: "",
|
|
23
23
|
description: "",
|
|
24
|
-
startDate:
|
|
25
|
-
endDate:
|
|
24
|
+
startDate: g(t.toISOString()),
|
|
25
|
+
endDate: g(n.toISOString()),
|
|
26
26
|
status: "active"
|
|
27
27
|
};
|
|
28
|
-
},
|
|
28
|
+
}, y = (e) => ({
|
|
29
29
|
userId: "",
|
|
30
30
|
allocatedHours: "",
|
|
31
|
-
startDate: e ?
|
|
32
|
-
endDate: e ?
|
|
31
|
+
startDate: e ? g(e.startDate) : "",
|
|
32
|
+
endDate: e ? g(e.endDate) : "",
|
|
33
33
|
notes: ""
|
|
34
34
|
});
|
|
35
|
-
function
|
|
36
|
-
let
|
|
37
|
-
limit:
|
|
35
|
+
function b() {
|
|
36
|
+
let b = /* @__PURE__ */ new Date(), be = new Date(b.getFullYear(), b.getMonth(), b.getDate()).toISOString(), xe = new Date(b.getFullYear(), b.getMonth(), b.getDate() + 7).toISOString(), { data: x, loading: Se, error: Ce, refetch: we, fetchMore: Te } = ae({ variables: {
|
|
37
|
+
limit: ye,
|
|
38
38
|
offset: 0
|
|
39
|
-
} }), { data: Ee, refetch: De } =
|
|
40
|
-
startDate:
|
|
41
|
-
endDate:
|
|
42
|
-
} }), [Oe, { loading: S, error: ke }] =
|
|
39
|
+
} }), { data: Ee, refetch: De } = ie({ variables: {
|
|
40
|
+
startDate: be,
|
|
41
|
+
endDate: xe
|
|
42
|
+
} }), [Oe, { loading: S, error: ke }] = te(), [Ae, { loading: C, error: je }] = se(), [Me, { loading: w }] = re(), [Ne, { loading: T }] = ee(), [Pe, { loading: E }] = i(), [Fe, { loading: D, error: Ie }] = oe(), [Le, { loading: O }] = ne(), [Re, k] = c(!1), [A, ze] = c(null), [j, M] = c(v()), [N, P] = c(null), [F, I] = c(null), [L, R] = c([]), [Be, z] = c(!1), [B, V] = c(null), [H, U] = c(null), [W, G] = c(null), [K, q] = c(!1), J = x?.resourcePlans?.items ?? [], Ve = x?.resourcePlans?.hasMore ?? !1, Y = Ee?.capacityOverview, X = async () => {
|
|
43
43
|
await Promise.all([we(), De()]);
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
},
|
|
47
|
-
|
|
44
|
+
}, He = () => {
|
|
45
|
+
ze(null), M(v()), k(!0);
|
|
46
|
+
}, Ue = (e) => {
|
|
47
|
+
ze(e), M({
|
|
48
48
|
name: e.name,
|
|
49
49
|
description: e.description ?? "",
|
|
50
|
-
startDate:
|
|
51
|
-
endDate:
|
|
50
|
+
startDate: g(e.startDate),
|
|
51
|
+
endDate: g(e.endDate),
|
|
52
52
|
status: e.status
|
|
53
53
|
}), k(!0);
|
|
54
|
-
},
|
|
55
|
-
|
|
54
|
+
}, We = async () => {
|
|
55
|
+
j.name.trim() && (A ? await Ae({ variables: {
|
|
56
56
|
id: A.id,
|
|
57
57
|
input: {
|
|
58
|
-
name:
|
|
59
|
-
description:
|
|
60
|
-
startDate:
|
|
61
|
-
endDate:
|
|
62
|
-
status:
|
|
58
|
+
name: j.name.trim(),
|
|
59
|
+
description: j.description.trim() || void 0,
|
|
60
|
+
startDate: _(j.startDate),
|
|
61
|
+
endDate: _(j.endDate),
|
|
62
|
+
status: j.status
|
|
63
63
|
}
|
|
64
64
|
} }) : await Oe({ variables: { input: {
|
|
65
|
-
name:
|
|
66
|
-
description:
|
|
67
|
-
startDate:
|
|
68
|
-
endDate:
|
|
69
|
-
} } }), k(!1), await
|
|
70
|
-
},
|
|
71
|
-
|
|
72
|
-
},
|
|
73
|
-
|
|
74
|
-
},
|
|
75
|
-
|
|
65
|
+
name: j.name.trim(),
|
|
66
|
+
description: j.description.trim() || void 0,
|
|
67
|
+
startDate: _(j.startDate),
|
|
68
|
+
endDate: _(j.endDate)
|
|
69
|
+
} } }), k(!1), await X());
|
|
70
|
+
}, Ge = async () => {
|
|
71
|
+
N && (await Me({ variables: { id: N.id } }), P(null), await X());
|
|
72
|
+
}, Ke = (e) => {
|
|
73
|
+
I(e), R([y(e)]), z(!1);
|
|
74
|
+
}, Z = (e, t) => {
|
|
75
|
+
R((n) => n.map((n, r) => r === e ? {
|
|
76
76
|
...n,
|
|
77
77
|
...t
|
|
78
78
|
} : n));
|
|
79
|
-
},
|
|
80
|
-
|
|
81
|
-
},
|
|
82
|
-
|
|
83
|
-
},
|
|
84
|
-
if (!(!
|
|
85
|
-
|
|
79
|
+
}, qe = () => {
|
|
80
|
+
R((e) => [...e, y(F ?? void 0)]);
|
|
81
|
+
}, Je = (e) => {
|
|
82
|
+
R((t) => t.filter((t, n) => n !== e));
|
|
83
|
+
}, Ye = L.every((e) => e.userId.trim() !== "" && e.allocatedHours.trim() !== "" && e.startDate !== "" && e.endDate !== ""), Xe = async () => {
|
|
84
|
+
if (!(!F || !Ye || L.length === 0)) {
|
|
85
|
+
z(!1);
|
|
86
86
|
try {
|
|
87
|
-
if (
|
|
88
|
-
let e =
|
|
87
|
+
if (L.length === 1) {
|
|
88
|
+
let e = L[0];
|
|
89
89
|
await Ne({ variables: { input: {
|
|
90
|
-
resourcePlanId:
|
|
90
|
+
resourcePlanId: F.id,
|
|
91
91
|
userId: e.userId.trim(),
|
|
92
92
|
allocatedHours: Number(e.allocatedHours),
|
|
93
|
-
startDate:
|
|
94
|
-
endDate:
|
|
93
|
+
startDate: _(e.startDate),
|
|
94
|
+
endDate: _(e.endDate),
|
|
95
95
|
notes: e.notes.trim() || void 0
|
|
96
96
|
} } });
|
|
97
97
|
} else await Pe({ variables: {
|
|
98
|
-
planId:
|
|
99
|
-
allocations:
|
|
98
|
+
planId: F.id,
|
|
99
|
+
allocations: L.map((e) => ({
|
|
100
100
|
userId: e.userId.trim(),
|
|
101
101
|
allocatedHours: Number(e.allocatedHours),
|
|
102
|
-
startDate:
|
|
103
|
-
endDate:
|
|
102
|
+
startDate: _(e.startDate),
|
|
103
|
+
endDate: _(e.endDate),
|
|
104
104
|
notes: e.notes.trim() || void 0
|
|
105
105
|
}))
|
|
106
106
|
} });
|
|
107
|
-
|
|
107
|
+
I(null), await X();
|
|
108
108
|
} catch {
|
|
109
|
-
|
|
109
|
+
z(!0);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
},
|
|
113
|
-
|
|
112
|
+
}, Ze = (e) => {
|
|
113
|
+
V(e), U({
|
|
114
114
|
userId: e.userId,
|
|
115
115
|
allocatedHours: String(e.allocatedHours),
|
|
116
116
|
actualHours: String(e.actualHours),
|
|
117
|
-
startDate:
|
|
118
|
-
endDate:
|
|
117
|
+
startDate: g(e.startDate),
|
|
118
|
+
endDate: g(e.endDate),
|
|
119
119
|
notes: e.notes ?? ""
|
|
120
120
|
});
|
|
121
|
-
},
|
|
122
|
-
!
|
|
123
|
-
id:
|
|
121
|
+
}, Qe = async () => {
|
|
122
|
+
!B || !H || (await Fe({ variables: {
|
|
123
|
+
id: B.id,
|
|
124
124
|
input: {
|
|
125
|
-
userId:
|
|
126
|
-
allocatedHours: Number(
|
|
127
|
-
actualHours: Number(
|
|
128
|
-
startDate:
|
|
129
|
-
endDate:
|
|
130
|
-
notes:
|
|
125
|
+
userId: H.userId.trim(),
|
|
126
|
+
allocatedHours: Number(H.allocatedHours),
|
|
127
|
+
actualHours: Number(H.actualHours),
|
|
128
|
+
startDate: _(H.startDate),
|
|
129
|
+
endDate: _(H.endDate),
|
|
130
|
+
notes: H.notes.trim() || void 0
|
|
131
131
|
}
|
|
132
|
-
} }),
|
|
133
|
-
}, Qe = async () => {
|
|
134
|
-
G && (await Le({ variables: { id: G.id } }), K(null), await Z());
|
|
132
|
+
} }), V(null), U(null), await X());
|
|
135
133
|
}, $e = async () => {
|
|
136
|
-
|
|
134
|
+
W && (await Le({ variables: { id: W.id } }), G(null), await X());
|
|
135
|
+
}, et = async () => {
|
|
136
|
+
q(!0);
|
|
137
137
|
try {
|
|
138
138
|
await Te({
|
|
139
139
|
variables: {
|
|
140
|
-
limit:
|
|
141
|
-
offset:
|
|
140
|
+
limit: ye,
|
|
141
|
+
offset: J.length
|
|
142
142
|
},
|
|
143
143
|
updateQuery: (e, { fetchMoreResult: t }) => t ? { resourcePlans: {
|
|
144
144
|
...t.resourcePlans,
|
|
@@ -146,14 +146,14 @@ function x() {
|
|
|
146
146
|
} } : e
|
|
147
147
|
});
|
|
148
148
|
} finally {
|
|
149
|
-
|
|
149
|
+
q(!1);
|
|
150
150
|
}
|
|
151
|
-
},
|
|
152
|
-
onClick:
|
|
151
|
+
}, tt = /* @__PURE__ */ m("button", {
|
|
152
|
+
onClick: He,
|
|
153
153
|
className: "inline-flex items-center gap-1.5 rounded-md bg-action-primary-bg px-3 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
|
|
154
|
-
children: [/* @__PURE__ */ p(
|
|
154
|
+
children: [/* @__PURE__ */ p(l, { className: "h-4 w-4" }), "New Resource Plan"]
|
|
155
155
|
});
|
|
156
|
-
if (Se) return /* @__PURE__ */ p(
|
|
156
|
+
if (Se) return /* @__PURE__ */ p(a, {
|
|
157
157
|
title: "Resource Planning",
|
|
158
158
|
description: "Plan and optimize team resource allocation",
|
|
159
159
|
children: /* @__PURE__ */ p(r, {
|
|
@@ -161,7 +161,7 @@ function x() {
|
|
|
161
161
|
count: 5
|
|
162
162
|
})
|
|
163
163
|
});
|
|
164
|
-
if (Ce) return /* @__PURE__ */ p(
|
|
164
|
+
if (Ce) return /* @__PURE__ */ p(a, {
|
|
165
165
|
title: "Resource Planning",
|
|
166
166
|
description: "Plan and optimize team resource allocation",
|
|
167
167
|
children: /* @__PURE__ */ p("div", {
|
|
@@ -169,12 +169,12 @@ function x() {
|
|
|
169
169
|
children: "Failed to load resource planning data. Please try again later."
|
|
170
170
|
})
|
|
171
171
|
});
|
|
172
|
-
let
|
|
173
|
-
return /* @__PURE__ */ m(
|
|
172
|
+
let nt = Y?.utilizationRate ?? 0, Q = Y?.overallocatedUsers ?? [], $ = Q.length, rt = Y?.availableCapacity ?? 0, it = Y?.allocatedCapacity ?? 0, at = Y?.totalCapacity ?? 0, ot = !!Y && (at > 0 || it > 0 || $ > 0);
|
|
173
|
+
return /* @__PURE__ */ m(a, {
|
|
174
174
|
title: "Resource Planning",
|
|
175
175
|
description: "Plan and optimize team resource allocation",
|
|
176
176
|
purpose: "Match the work ahead to the people you have — see who's over- or under-booked and how much capacity is free this week — so you can commit to deadlines you can actually hit without burning anyone out.",
|
|
177
|
-
actions:
|
|
177
|
+
actions: tt,
|
|
178
178
|
children: [
|
|
179
179
|
/* @__PURE__ */ m("div", {
|
|
180
180
|
className: "space-y-6",
|
|
@@ -185,7 +185,7 @@ function x() {
|
|
|
185
185
|
/* @__PURE__ */ p(n, {
|
|
186
186
|
featured: !0,
|
|
187
187
|
title: "Team Utilization",
|
|
188
|
-
value: `${Math.round(
|
|
188
|
+
value: `${Math.round(nt)}%`,
|
|
189
189
|
icon: /* @__PURE__ */ p(ge, { className: "h-5 w-5" })
|
|
190
190
|
}),
|
|
191
191
|
/* @__PURE__ */ p(n, {
|
|
@@ -196,13 +196,13 @@ function x() {
|
|
|
196
196
|
}),
|
|
197
197
|
/* @__PURE__ */ p(n, {
|
|
198
198
|
title: "Active Plans",
|
|
199
|
-
value: String(
|
|
199
|
+
value: String(J.length),
|
|
200
200
|
icon: /* @__PURE__ */ p(d, { className: "h-5 w-5" })
|
|
201
201
|
}),
|
|
202
202
|
/* @__PURE__ */ p(n, {
|
|
203
203
|
title: "Available Capacity",
|
|
204
204
|
value: `${Math.round(rt)}h`,
|
|
205
|
-
icon: /* @__PURE__ */ p(
|
|
205
|
+
icon: /* @__PURE__ */ p(me, { className: "h-5 w-5" }),
|
|
206
206
|
description: "This week"
|
|
207
207
|
})
|
|
208
208
|
]
|
|
@@ -212,7 +212,7 @@ function x() {
|
|
|
212
212
|
children: [/* @__PURE__ */ p(s, {
|
|
213
213
|
title: "Capacity split",
|
|
214
214
|
description: "Allocated vs available hours this week",
|
|
215
|
-
children: /* @__PURE__ */ p(
|
|
215
|
+
children: /* @__PURE__ */ p(ue, {
|
|
216
216
|
data: [{
|
|
217
217
|
name: "Allocated",
|
|
218
218
|
value: it
|
|
@@ -228,8 +228,8 @@ function x() {
|
|
|
228
228
|
}), /* @__PURE__ */ m(s, {
|
|
229
229
|
title: "Utilization & over-allocation",
|
|
230
230
|
description: "Team utilization and who is over-booked this week",
|
|
231
|
-
children: [/* @__PURE__ */ p(
|
|
232
|
-
value: Math.round(
|
|
231
|
+
children: [/* @__PURE__ */ p(de, {
|
|
232
|
+
value: Math.round(nt),
|
|
233
233
|
max: 100,
|
|
234
234
|
label: "Utilization",
|
|
235
235
|
sublabel: "this week",
|
|
@@ -248,22 +248,22 @@ function x() {
|
|
|
248
248
|
children: "No one is over-allocated this week."
|
|
249
249
|
}) : /* @__PURE__ */ p("div", {
|
|
250
250
|
className: "flex flex-wrap gap-2",
|
|
251
|
-
children:
|
|
251
|
+
children: Q.map((e) => /* @__PURE__ */ m("span", {
|
|
252
252
|
className: "inline-flex items-center gap-1 rounded-full bg-status-warning-bg px-2.5 py-0.5 text-xs font-medium text-status-warning-text",
|
|
253
|
-
children: [/* @__PURE__ */ p(
|
|
253
|
+
children: [/* @__PURE__ */ p(pe, { className: "h-3.5 w-3.5" }), e]
|
|
254
254
|
}, e))
|
|
255
255
|
})]
|
|
256
256
|
})]
|
|
257
257
|
})]
|
|
258
258
|
}),
|
|
259
|
-
|
|
259
|
+
J.length === 0 ? /* @__PURE__ */ p(le, {
|
|
260
260
|
illustration: "empty-people",
|
|
261
261
|
title: "No resource plans yet",
|
|
262
262
|
description: "Create a resource plan to start allocating team members and balancing workload across the week.",
|
|
263
|
-
action:
|
|
263
|
+
action: tt
|
|
264
264
|
}) : /* @__PURE__ */ m("div", {
|
|
265
265
|
className: "space-y-6",
|
|
266
|
-
children: [
|
|
266
|
+
children: [J.map((n) => /* @__PURE__ */ m(ve, {
|
|
267
267
|
treatment: "glass",
|
|
268
268
|
className: "overflow-hidden",
|
|
269
269
|
children: [/* @__PURE__ */ m("div", {
|
|
@@ -276,7 +276,7 @@ function x() {
|
|
|
276
276
|
children: [/* @__PURE__ */ p("p", {
|
|
277
277
|
className: "text-sm font-semibold text-text-primary",
|
|
278
278
|
children: n.name
|
|
279
|
-
}), /* @__PURE__ */ p(
|
|
279
|
+
}), /* @__PURE__ */ p(ce, {
|
|
280
280
|
label: n.status,
|
|
281
281
|
status: n.status
|
|
282
282
|
})]
|
|
@@ -297,7 +297,7 @@ function x() {
|
|
|
297
297
|
}),
|
|
298
298
|
/* @__PURE__ */ p("div", {
|
|
299
299
|
className: "mt-3 max-w-sm",
|
|
300
|
-
children: /* @__PURE__ */ p(
|
|
300
|
+
children: /* @__PURE__ */ p(fe, {
|
|
301
301
|
size: "sm",
|
|
302
302
|
label: "Logged vs allocated",
|
|
303
303
|
value: n.totalActualHours,
|
|
@@ -310,19 +310,19 @@ function x() {
|
|
|
310
310
|
className: "flex flex-wrap items-center gap-2",
|
|
311
311
|
children: [
|
|
312
312
|
/* @__PURE__ */ m("button", {
|
|
313
|
-
onClick: () =>
|
|
313
|
+
onClick: () => Ke(n),
|
|
314
314
|
className: "inline-flex items-center gap-1 rounded-md bg-action-primary-bg px-2.5 py-1.5 text-xs font-medium text-action-primary-text hover:bg-action-primary-bg/90",
|
|
315
315
|
children: [/* @__PURE__ */ p(_e, { className: "h-3.5 w-3.5" }), "Add Allocation"]
|
|
316
316
|
}),
|
|
317
317
|
/* @__PURE__ */ m("button", {
|
|
318
|
-
onClick: () =>
|
|
318
|
+
onClick: () => Ue(n),
|
|
319
319
|
className: "inline-flex items-center gap-1 rounded-md border border-border-subtle px-2.5 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
320
|
-
children: [/* @__PURE__ */ p(
|
|
320
|
+
children: [/* @__PURE__ */ p(he, { className: "h-3.5 w-3.5" }), "Edit"]
|
|
321
321
|
}),
|
|
322
322
|
/* @__PURE__ */ m("button", {
|
|
323
|
-
onClick: () =>
|
|
323
|
+
onClick: () => P(n),
|
|
324
324
|
className: "inline-flex items-center gap-1 rounded-md border border-border-subtle px-2.5 py-1.5 text-xs font-medium text-status-error-text hover:bg-status-error-bg",
|
|
325
|
-
children: [/* @__PURE__ */ p(
|
|
325
|
+
children: [/* @__PURE__ */ p(u, { className: "h-3.5 w-3.5" }), "Delete"]
|
|
326
326
|
})
|
|
327
327
|
]
|
|
328
328
|
})]
|
|
@@ -364,7 +364,7 @@ function x() {
|
|
|
364
364
|
}) }), /* @__PURE__ */ p("tbody", {
|
|
365
365
|
className: "divide-y divide-border-seam",
|
|
366
366
|
children: n.allocations.map((n) => {
|
|
367
|
-
let r = n.utilizationRate ?? (n.allocatedHours > 0 ? Math.round(n.actualHours / n.allocatedHours * 100) : 0), i = r > 100 ? "danger" : r < 70 ? "warning" : "success",
|
|
367
|
+
let r = n.utilizationRate ?? (n.allocatedHours > 0 ? Math.round(n.actualHours / n.allocatedHours * 100) : 0), i = r > 100 ? "danger" : r < 70 ? "warning" : "success", ee = i === "danger" ? "text-status-error-text" : i === "warning" ? "text-status-warning-text" : "text-status-success-text";
|
|
368
368
|
return /* @__PURE__ */ m("tr", {
|
|
369
369
|
className: "transition-colors hover:bg-bg-sunken/50",
|
|
370
370
|
children: [
|
|
@@ -402,7 +402,7 @@ function x() {
|
|
|
402
402
|
className: "px-4 py-3",
|
|
403
403
|
children: /* @__PURE__ */ m("div", {
|
|
404
404
|
className: "flex w-40 items-center gap-2",
|
|
405
|
-
children: [/* @__PURE__ */ p(
|
|
405
|
+
children: [/* @__PURE__ */ p(fe, {
|
|
406
406
|
size: "sm",
|
|
407
407
|
value: r,
|
|
408
408
|
max: 100,
|
|
@@ -410,7 +410,7 @@ function x() {
|
|
|
410
410
|
showValue: !1,
|
|
411
411
|
className: "flex-1"
|
|
412
412
|
}), /* @__PURE__ */ m("span", {
|
|
413
|
-
className: `shrink-0 text-xs font-medium tabular-nums ${
|
|
413
|
+
className: `shrink-0 text-xs font-medium tabular-nums ${ee}`,
|
|
414
414
|
children: [r, "%"]
|
|
415
415
|
})]
|
|
416
416
|
})
|
|
@@ -420,15 +420,15 @@ function x() {
|
|
|
420
420
|
children: /* @__PURE__ */ m("div", {
|
|
421
421
|
className: "flex items-center justify-end gap-1",
|
|
422
422
|
children: [/* @__PURE__ */ p("button", {
|
|
423
|
-
onClick: () =>
|
|
423
|
+
onClick: () => Ze(n),
|
|
424
424
|
"aria-label": "Edit allocation",
|
|
425
425
|
className: "rounded-md border border-border-subtle p-1.5 text-text-primary hover:bg-bg-sunken/50",
|
|
426
|
-
children: /* @__PURE__ */ p(
|
|
426
|
+
children: /* @__PURE__ */ p(he, { className: "h-4 w-4" })
|
|
427
427
|
}), /* @__PURE__ */ p("button", {
|
|
428
|
-
onClick: () =>
|
|
428
|
+
onClick: () => G(n),
|
|
429
429
|
"aria-label": "Delete allocation",
|
|
430
430
|
className: "rounded-md border border-border-subtle p-1.5 text-status-error-text hover:bg-status-error-bg",
|
|
431
|
-
children: /* @__PURE__ */ p(
|
|
431
|
+
children: /* @__PURE__ */ p(u, { className: "h-4 w-4" })
|
|
432
432
|
})]
|
|
433
433
|
})
|
|
434
434
|
})
|
|
@@ -438,19 +438,19 @@ function x() {
|
|
|
438
438
|
})]
|
|
439
439
|
})
|
|
440
440
|
})]
|
|
441
|
-
}, n.id)),
|
|
441
|
+
}, n.id)), Ve && /* @__PURE__ */ p("div", {
|
|
442
442
|
className: "flex justify-center",
|
|
443
443
|
children: /* @__PURE__ */ p("button", {
|
|
444
|
-
onClick:
|
|
445
|
-
disabled:
|
|
444
|
+
onClick: et,
|
|
445
|
+
disabled: K,
|
|
446
446
|
className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50 disabled:opacity-50",
|
|
447
|
-
children:
|
|
447
|
+
children: K ? "Loading..." : "Load more"
|
|
448
448
|
})
|
|
449
449
|
})]
|
|
450
450
|
})
|
|
451
451
|
]
|
|
452
452
|
}),
|
|
453
|
-
/* @__PURE__ */ m(
|
|
453
|
+
/* @__PURE__ */ m(o, {
|
|
454
454
|
open: Re,
|
|
455
455
|
onClose: () => k(!1),
|
|
456
456
|
title: A ? "Edit Resource Plan" : "New Resource Plan",
|
|
@@ -461,8 +461,8 @@ function x() {
|
|
|
461
461
|
className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
462
462
|
children: "Cancel"
|
|
463
463
|
}), /* @__PURE__ */ p("button", {
|
|
464
|
-
onClick:
|
|
465
|
-
disabled: S || C || !
|
|
464
|
+
onClick: We,
|
|
465
|
+
disabled: S || C || !j.name.trim(),
|
|
466
466
|
className: "rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50",
|
|
467
467
|
children: S || C ? "Saving..." : A ? "Save Changes" : "Create Plan"
|
|
468
468
|
})] }),
|
|
@@ -478,12 +478,12 @@ function x() {
|
|
|
478
478
|
}), /* @__PURE__ */ p("input", {
|
|
479
479
|
type: "text",
|
|
480
480
|
placeholder: "e.g. Q3 Delivery",
|
|
481
|
-
value:
|
|
482
|
-
onChange: (e) =>
|
|
483
|
-
...
|
|
481
|
+
value: j.name,
|
|
482
|
+
onChange: (e) => M({
|
|
483
|
+
...j,
|
|
484
484
|
name: e.target.value
|
|
485
485
|
}),
|
|
486
|
-
className:
|
|
486
|
+
className: h
|
|
487
487
|
})] }),
|
|
488
488
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
489
489
|
className: "block text-sm font-medium text-text-primary",
|
|
@@ -491,12 +491,12 @@ function x() {
|
|
|
491
491
|
}), /* @__PURE__ */ p("textarea", {
|
|
492
492
|
rows: 2,
|
|
493
493
|
placeholder: "What this plan covers",
|
|
494
|
-
value:
|
|
495
|
-
onChange: (e) =>
|
|
496
|
-
...
|
|
494
|
+
value: j.description,
|
|
495
|
+
onChange: (e) => M({
|
|
496
|
+
...j,
|
|
497
497
|
description: e.target.value
|
|
498
498
|
}),
|
|
499
|
-
className:
|
|
499
|
+
className: h
|
|
500
500
|
})] }),
|
|
501
501
|
/* @__PURE__ */ m("div", {
|
|
502
502
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
|
|
@@ -505,35 +505,35 @@ function x() {
|
|
|
505
505
|
children: "Start Date"
|
|
506
506
|
}), /* @__PURE__ */ p("input", {
|
|
507
507
|
type: "date",
|
|
508
|
-
value:
|
|
509
|
-
onChange: (e) =>
|
|
510
|
-
...
|
|
508
|
+
value: j.startDate,
|
|
509
|
+
onChange: (e) => M({
|
|
510
|
+
...j,
|
|
511
511
|
startDate: e.target.value
|
|
512
512
|
}),
|
|
513
|
-
className:
|
|
513
|
+
className: h
|
|
514
514
|
})] }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
515
515
|
className: "block text-sm font-medium text-text-primary",
|
|
516
516
|
children: "End Date"
|
|
517
517
|
}), /* @__PURE__ */ p("input", {
|
|
518
518
|
type: "date",
|
|
519
|
-
value:
|
|
520
|
-
onChange: (e) =>
|
|
521
|
-
...
|
|
519
|
+
value: j.endDate,
|
|
520
|
+
onChange: (e) => M({
|
|
521
|
+
...j,
|
|
522
522
|
endDate: e.target.value
|
|
523
523
|
}),
|
|
524
|
-
className:
|
|
524
|
+
className: h
|
|
525
525
|
})] })]
|
|
526
526
|
}),
|
|
527
527
|
A && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
528
528
|
className: "block text-sm font-medium text-text-primary",
|
|
529
529
|
children: "Status"
|
|
530
530
|
}), /* @__PURE__ */ m("select", {
|
|
531
|
-
value:
|
|
532
|
-
onChange: (e) =>
|
|
533
|
-
...
|
|
531
|
+
value: j.status,
|
|
532
|
+
onChange: (e) => M({
|
|
533
|
+
...j,
|
|
534
534
|
status: e.target.value
|
|
535
535
|
}),
|
|
536
|
-
className:
|
|
536
|
+
className: h,
|
|
537
537
|
children: [
|
|
538
538
|
/* @__PURE__ */ p("option", {
|
|
539
539
|
value: "active",
|
|
@@ -556,36 +556,36 @@ function x() {
|
|
|
556
556
|
]
|
|
557
557
|
})]
|
|
558
558
|
}),
|
|
559
|
-
/* @__PURE__ */ m(
|
|
560
|
-
open:
|
|
561
|
-
onClose: () =>
|
|
559
|
+
/* @__PURE__ */ m(o, {
|
|
560
|
+
open: F !== null,
|
|
561
|
+
onClose: () => I(null),
|
|
562
562
|
title: "Add Allocation",
|
|
563
|
-
description:
|
|
563
|
+
description: F ? `Assign team members to "${F.name}".` : void 0,
|
|
564
564
|
size: "xl",
|
|
565
565
|
footer: /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("button", {
|
|
566
|
-
onClick: () =>
|
|
566
|
+
onClick: () => I(null),
|
|
567
567
|
className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
568
568
|
children: "Cancel"
|
|
569
569
|
}), /* @__PURE__ */ p("button", {
|
|
570
|
-
onClick:
|
|
571
|
-
disabled: T || E || !
|
|
570
|
+
onClick: Xe,
|
|
571
|
+
disabled: T || E || !Ye,
|
|
572
572
|
className: "rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50",
|
|
573
|
-
children: T || E ? "Saving..." :
|
|
573
|
+
children: T || E ? "Saving..." : L.length > 1 ? `Add ${L.length} Allocations` : "Add Allocation"
|
|
574
574
|
})] }),
|
|
575
|
-
children: [
|
|
575
|
+
children: [Be && /* @__PURE__ */ p("div", {
|
|
576
576
|
className: "mb-4 rounded-lg border border-status-error-bg/40 bg-status-error-bg p-3 text-sm text-status-error-text",
|
|
577
577
|
children: "Failed to add allocations. Please check the values and try again."
|
|
578
578
|
}), /* @__PURE__ */ m("div", {
|
|
579
579
|
className: "space-y-4",
|
|
580
|
-
children: [
|
|
580
|
+
children: [L.map((e, t) => /* @__PURE__ */ m("div", {
|
|
581
581
|
className: "rounded-lg border border-border-subtle p-3",
|
|
582
582
|
children: [/* @__PURE__ */ m("div", {
|
|
583
583
|
className: "mb-2 flex items-center justify-between",
|
|
584
584
|
children: [/* @__PURE__ */ m("span", {
|
|
585
585
|
className: "text-xs font-medium text-text-secondary",
|
|
586
586
|
children: ["Allocation ", t + 1]
|
|
587
|
-
}),
|
|
588
|
-
onClick: () =>
|
|
587
|
+
}), L.length > 1 && /* @__PURE__ */ p("button", {
|
|
588
|
+
onClick: () => Je(t),
|
|
589
589
|
className: "text-xs font-medium text-status-error-text hover:underline",
|
|
590
590
|
children: "Remove"
|
|
591
591
|
})]
|
|
@@ -599,8 +599,8 @@ function x() {
|
|
|
599
599
|
type: "text",
|
|
600
600
|
placeholder: "User identifier",
|
|
601
601
|
value: e.userId,
|
|
602
|
-
onChange: (e) =>
|
|
603
|
-
className:
|
|
602
|
+
onChange: (e) => Z(t, { userId: e.target.value }),
|
|
603
|
+
className: h
|
|
604
604
|
})] }),
|
|
605
605
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
606
606
|
className: "block text-xs font-medium text-text-primary",
|
|
@@ -609,8 +609,8 @@ function x() {
|
|
|
609
609
|
type: "number",
|
|
610
610
|
placeholder: "0",
|
|
611
611
|
value: e.allocatedHours,
|
|
612
|
-
onChange: (e) =>
|
|
613
|
-
className:
|
|
612
|
+
onChange: (e) => Z(t, { allocatedHours: e.target.value }),
|
|
613
|
+
className: h
|
|
614
614
|
})] }),
|
|
615
615
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
616
616
|
className: "block text-xs font-medium text-text-primary",
|
|
@@ -618,8 +618,8 @@ function x() {
|
|
|
618
618
|
}), /* @__PURE__ */ p("input", {
|
|
619
619
|
type: "date",
|
|
620
620
|
value: e.startDate,
|
|
621
|
-
onChange: (e) =>
|
|
622
|
-
className:
|
|
621
|
+
onChange: (e) => Z(t, { startDate: e.target.value }),
|
|
622
|
+
className: h
|
|
623
623
|
})] }),
|
|
624
624
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
625
625
|
className: "block text-xs font-medium text-text-primary",
|
|
@@ -627,8 +627,8 @@ function x() {
|
|
|
627
627
|
}), /* @__PURE__ */ p("input", {
|
|
628
628
|
type: "date",
|
|
629
629
|
value: e.endDate,
|
|
630
|
-
onChange: (e) =>
|
|
631
|
-
className:
|
|
630
|
+
onChange: (e) => Z(t, { endDate: e.target.value }),
|
|
631
|
+
className: h
|
|
632
632
|
})] }),
|
|
633
633
|
/* @__PURE__ */ m("div", {
|
|
634
634
|
className: "sm:col-span-2",
|
|
@@ -639,34 +639,34 @@ function x() {
|
|
|
639
639
|
type: "text",
|
|
640
640
|
placeholder: "Context for this allocation",
|
|
641
641
|
value: e.notes,
|
|
642
|
-
onChange: (e) =>
|
|
643
|
-
className:
|
|
642
|
+
onChange: (e) => Z(t, { notes: e.target.value }),
|
|
643
|
+
className: h
|
|
644
644
|
})]
|
|
645
645
|
})
|
|
646
646
|
]
|
|
647
647
|
})]
|
|
648
648
|
}, t)), /* @__PURE__ */ m("button", {
|
|
649
|
-
onClick:
|
|
649
|
+
onClick: qe,
|
|
650
650
|
className: "inline-flex items-center gap-1 rounded-md border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
651
|
-
children: [/* @__PURE__ */ p(
|
|
651
|
+
children: [/* @__PURE__ */ p(l, { className: "h-4 w-4" }), "Add another person"]
|
|
652
652
|
})]
|
|
653
653
|
})]
|
|
654
654
|
}),
|
|
655
|
-
/* @__PURE__ */ m(
|
|
656
|
-
open:
|
|
655
|
+
/* @__PURE__ */ m(o, {
|
|
656
|
+
open: B !== null && H !== null,
|
|
657
657
|
onClose: () => {
|
|
658
|
-
|
|
658
|
+
V(null), U(null);
|
|
659
659
|
},
|
|
660
660
|
title: "Edit Allocation",
|
|
661
661
|
size: "lg",
|
|
662
662
|
footer: /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("button", {
|
|
663
663
|
onClick: () => {
|
|
664
|
-
|
|
664
|
+
V(null), U(null);
|
|
665
665
|
},
|
|
666
666
|
className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
667
667
|
children: "Cancel"
|
|
668
668
|
}), /* @__PURE__ */ p("button", {
|
|
669
|
-
onClick:
|
|
669
|
+
onClick: Qe,
|
|
670
670
|
disabled: D,
|
|
671
671
|
className: "rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50",
|
|
672
672
|
children: D ? "Saving..." : "Save Changes"
|
|
@@ -674,7 +674,7 @@ function x() {
|
|
|
674
674
|
children: [Ie && /* @__PURE__ */ p("div", {
|
|
675
675
|
className: "mb-4 rounded-lg border border-status-error-bg/40 bg-status-error-bg p-3 text-sm text-status-error-text",
|
|
676
676
|
children: "Failed to update allocation. Please try again."
|
|
677
|
-
}),
|
|
677
|
+
}), H && /* @__PURE__ */ m("div", {
|
|
678
678
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
|
|
679
679
|
children: [
|
|
680
680
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
@@ -682,36 +682,36 @@ function x() {
|
|
|
682
682
|
children: "User ID"
|
|
683
683
|
}), /* @__PURE__ */ p("input", {
|
|
684
684
|
type: "text",
|
|
685
|
-
value:
|
|
686
|
-
onChange: (e) =>
|
|
687
|
-
...
|
|
685
|
+
value: H.userId,
|
|
686
|
+
onChange: (e) => U({
|
|
687
|
+
...H,
|
|
688
688
|
userId: e.target.value
|
|
689
689
|
}),
|
|
690
|
-
className:
|
|
690
|
+
className: h
|
|
691
691
|
})] }),
|
|
692
692
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
693
693
|
className: "block text-sm font-medium text-text-primary",
|
|
694
694
|
children: "Allocated Hours"
|
|
695
695
|
}), /* @__PURE__ */ p("input", {
|
|
696
696
|
type: "number",
|
|
697
|
-
value:
|
|
698
|
-
onChange: (e) =>
|
|
699
|
-
...
|
|
697
|
+
value: H.allocatedHours,
|
|
698
|
+
onChange: (e) => U({
|
|
699
|
+
...H,
|
|
700
700
|
allocatedHours: e.target.value
|
|
701
701
|
}),
|
|
702
|
-
className:
|
|
702
|
+
className: h
|
|
703
703
|
})] }),
|
|
704
704
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
705
705
|
className: "block text-sm font-medium text-text-primary",
|
|
706
706
|
children: "Actual Hours"
|
|
707
707
|
}), /* @__PURE__ */ p("input", {
|
|
708
708
|
type: "number",
|
|
709
|
-
value:
|
|
710
|
-
onChange: (e) =>
|
|
711
|
-
...
|
|
709
|
+
value: H.actualHours,
|
|
710
|
+
onChange: (e) => U({
|
|
711
|
+
...H,
|
|
712
712
|
actualHours: e.target.value
|
|
713
713
|
}),
|
|
714
|
-
className:
|
|
714
|
+
className: h
|
|
715
715
|
})] }),
|
|
716
716
|
/* @__PURE__ */ p("div", {}),
|
|
717
717
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
@@ -719,24 +719,24 @@ function x() {
|
|
|
719
719
|
children: "Start Date"
|
|
720
720
|
}), /* @__PURE__ */ p("input", {
|
|
721
721
|
type: "date",
|
|
722
|
-
value:
|
|
723
|
-
onChange: (e) =>
|
|
724
|
-
...
|
|
722
|
+
value: H.startDate,
|
|
723
|
+
onChange: (e) => U({
|
|
724
|
+
...H,
|
|
725
725
|
startDate: e.target.value
|
|
726
726
|
}),
|
|
727
|
-
className:
|
|
727
|
+
className: h
|
|
728
728
|
})] }),
|
|
729
729
|
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
730
730
|
className: "block text-sm font-medium text-text-primary",
|
|
731
731
|
children: "End Date"
|
|
732
732
|
}), /* @__PURE__ */ p("input", {
|
|
733
733
|
type: "date",
|
|
734
|
-
value:
|
|
735
|
-
onChange: (e) =>
|
|
736
|
-
...
|
|
734
|
+
value: H.endDate,
|
|
735
|
+
onChange: (e) => U({
|
|
736
|
+
...H,
|
|
737
737
|
endDate: e.target.value
|
|
738
738
|
}),
|
|
739
|
-
className:
|
|
739
|
+
className: h
|
|
740
740
|
})] }),
|
|
741
741
|
/* @__PURE__ */ m("div", {
|
|
742
742
|
className: "sm:col-span-2",
|
|
@@ -745,28 +745,28 @@ function x() {
|
|
|
745
745
|
children: "Notes (optional)"
|
|
746
746
|
}), /* @__PURE__ */ p("input", {
|
|
747
747
|
type: "text",
|
|
748
|
-
value:
|
|
749
|
-
onChange: (e) =>
|
|
750
|
-
...
|
|
748
|
+
value: H.notes,
|
|
749
|
+
onChange: (e) => U({
|
|
750
|
+
...H,
|
|
751
751
|
notes: e.target.value
|
|
752
752
|
}),
|
|
753
|
-
className:
|
|
753
|
+
className: h
|
|
754
754
|
})]
|
|
755
755
|
})
|
|
756
756
|
]
|
|
757
757
|
})]
|
|
758
758
|
}),
|
|
759
|
-
/* @__PURE__ */ p(
|
|
760
|
-
open:
|
|
761
|
-
onClose: () =>
|
|
759
|
+
/* @__PURE__ */ p(o, {
|
|
760
|
+
open: N !== null,
|
|
761
|
+
onClose: () => P(null),
|
|
762
762
|
title: "Delete Resource Plan",
|
|
763
763
|
description: "This action cannot be undone.",
|
|
764
764
|
footer: /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("button", {
|
|
765
|
-
onClick: () =>
|
|
765
|
+
onClick: () => P(null),
|
|
766
766
|
className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
767
767
|
children: "Cancel"
|
|
768
768
|
}), /* @__PURE__ */ p("button", {
|
|
769
|
-
onClick:
|
|
769
|
+
onClick: Ge,
|
|
770
770
|
disabled: w,
|
|
771
771
|
className: "rounded-md bg-status-error-bg px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg/80 disabled:opacity-50",
|
|
772
772
|
children: w ? "Deleting..." : "Delete"
|
|
@@ -778,23 +778,23 @@ function x() {
|
|
|
778
778
|
" ",
|
|
779
779
|
/* @__PURE__ */ p("span", {
|
|
780
780
|
className: "font-medium text-text-primary",
|
|
781
|
-
children:
|
|
781
|
+
children: N?.name
|
|
782
782
|
}),
|
|
783
783
|
"? All its allocations will be removed."
|
|
784
784
|
]
|
|
785
785
|
})
|
|
786
786
|
}),
|
|
787
|
-
/* @__PURE__ */ p(
|
|
788
|
-
open:
|
|
789
|
-
onClose: () =>
|
|
787
|
+
/* @__PURE__ */ p(o, {
|
|
788
|
+
open: W !== null,
|
|
789
|
+
onClose: () => G(null),
|
|
790
790
|
title: "Delete Allocation",
|
|
791
791
|
description: "This action cannot be undone.",
|
|
792
792
|
footer: /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("button", {
|
|
793
|
-
onClick: () =>
|
|
793
|
+
onClick: () => G(null),
|
|
794
794
|
className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
|
|
795
795
|
children: "Cancel"
|
|
796
796
|
}), /* @__PURE__ */ p("button", {
|
|
797
|
-
onClick:
|
|
797
|
+
onClick: $e,
|
|
798
798
|
disabled: O,
|
|
799
799
|
className: "rounded-md bg-status-error-bg px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg/80 disabled:opacity-50",
|
|
800
800
|
children: O ? "Deleting..." : "Delete"
|
|
@@ -806,7 +806,7 @@ function x() {
|
|
|
806
806
|
" ",
|
|
807
807
|
/* @__PURE__ */ p("span", {
|
|
808
808
|
className: "font-medium text-text-primary",
|
|
809
|
-
children:
|
|
809
|
+
children: W?.userId
|
|
810
810
|
}),
|
|
811
811
|
"?"
|
|
812
812
|
]
|
|
@@ -816,6 +816,6 @@ function x() {
|
|
|
816
816
|
});
|
|
817
817
|
}
|
|
818
818
|
//#endregion
|
|
819
|
-
export {
|
|
819
|
+
export { b as ResourcePlanningPage };
|
|
820
820
|
|
|
821
821
|
//# sourceMappingURL=ResourcePlanningPage.js.map
|