@burdenoff/microfe-crewfoundry 2026.1102.1 → 2026.1107.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 (65) hide show
  1. package/dist/crewfoundry/CrewFoundryRoot.d.ts.map +1 -1
  2. package/dist/crewfoundry/CrewFoundryRoot.js +14 -0
  3. package/dist/crewfoundry/CrewFoundryRoot.js.map +1 -1
  4. package/dist/crewfoundry/CrewFoundryRoutes.d.ts.map +1 -1
  5. package/dist/crewfoundry/CrewFoundryRoutes.js +27 -19
  6. package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
  7. package/dist/crewfoundry/components/field/DispatchBoardCard.d.ts +13 -0
  8. package/dist/crewfoundry/components/field/DispatchBoardCard.d.ts.map +1 -0
  9. package/dist/crewfoundry/components/field/DispatchBoardCard.js +127 -0
  10. package/dist/crewfoundry/components/field/DispatchBoardCard.js.map +1 -0
  11. package/dist/crewfoundry/components/field/FieldBadges.d.ts +12 -0
  12. package/dist/crewfoundry/components/field/FieldBadges.d.ts.map +1 -0
  13. package/dist/crewfoundry/components/field/FieldBadges.js +45 -0
  14. package/dist/crewfoundry/components/field/FieldBadges.js.map +1 -0
  15. package/dist/crewfoundry/components/field/MyDispatchItem.d.ts +12 -0
  16. package/dist/crewfoundry/components/field/MyDispatchItem.d.ts.map +1 -0
  17. package/dist/crewfoundry/components/field/MyDispatchItem.js +46 -0
  18. package/dist/crewfoundry/components/field/MyDispatchItem.js.map +1 -0
  19. package/dist/crewfoundry/components/field/MyShiftItem.d.ts +14 -0
  20. package/dist/crewfoundry/components/field/MyShiftItem.d.ts.map +1 -0
  21. package/dist/crewfoundry/components/field/MyShiftItem.js +87 -0
  22. package/dist/crewfoundry/components/field/MyShiftItem.js.map +1 -0
  23. package/dist/crewfoundry/components/field/ShiftsCard.d.ts +12 -0
  24. package/dist/crewfoundry/components/field/ShiftsCard.d.ts.map +1 -0
  25. package/dist/crewfoundry/components/field/ShiftsCard.js +87 -0
  26. package/dist/crewfoundry/components/field/ShiftsCard.js.map +1 -0
  27. package/dist/crewfoundry/components/field/fieldFormat.d.ts +8 -0
  28. package/dist/crewfoundry/components/field/fieldFormat.d.ts.map +1 -0
  29. package/dist/crewfoundry/components/field/fieldFormat.js +15 -0
  30. package/dist/crewfoundry/components/field/fieldFormat.js.map +1 -0
  31. package/dist/crewfoundry/components/field/fieldForms.d.ts +19 -0
  32. package/dist/crewfoundry/components/field/fieldForms.d.ts.map +1 -0
  33. package/dist/crewfoundry/components/field/fieldForms.js +223 -0
  34. package/dist/crewfoundry/components/field/fieldForms.js.map +1 -0
  35. package/dist/crewfoundry/components/forms/FormModal.d.ts +1 -1
  36. package/dist/crewfoundry/components/forms/FormModal.d.ts.map +1 -1
  37. package/dist/crewfoundry/components/forms/FormModal.js +1 -1
  38. package/dist/crewfoundry/components/forms/FormModal.js.map +1 -1
  39. package/dist/crewfoundry/lib/fieldOps.d.ts +105 -0
  40. package/dist/crewfoundry/lib/fieldOps.d.ts.map +1 -0
  41. package/dist/crewfoundry/lib/fieldOps.js +85 -0
  42. package/dist/crewfoundry/lib/fieldOps.js.map +1 -0
  43. package/dist/crewfoundry/lib/useFieldOpsData.d.ts +14 -0
  44. package/dist/crewfoundry/lib/useFieldOpsData.d.ts.map +1 -0
  45. package/dist/crewfoundry/lib/useFieldOpsData.js +31 -0
  46. package/dist/crewfoundry/lib/useFieldOpsData.js.map +1 -0
  47. package/dist/crewfoundry/pages/FieldMyWorkPagePage.d.ts +9 -0
  48. package/dist/crewfoundry/pages/FieldMyWorkPagePage.d.ts.map +1 -0
  49. package/dist/crewfoundry/pages/FieldMyWorkPagePage.js +141 -0
  50. package/dist/crewfoundry/pages/FieldMyWorkPagePage.js.map +1 -0
  51. package/dist/crewfoundry/pages/FieldOperationsPagePage.d.ts +9 -0
  52. package/dist/crewfoundry/pages/FieldOperationsPagePage.d.ts.map +1 -0
  53. package/dist/crewfoundry/pages/FieldOperationsPagePage.js +231 -0
  54. package/dist/crewfoundry/pages/FieldOperationsPagePage.js.map +1 -0
  55. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +24 -24
  56. package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js +4 -4
  57. package/dist/crewfoundry/store/crewfoundryStore.d.ts +3 -1
  58. package/dist/crewfoundry/store/crewfoundryStore.d.ts.map +1 -1
  59. package/dist/crewfoundry/store/crewfoundryStore.js +1 -1
  60. package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
  61. package/dist/crewfoundry/store/fieldOpsStore.d.ts +76 -0
  62. package/dist/crewfoundry/store/fieldOpsStore.d.ts.map +1 -0
  63. package/dist/crewfoundry/store/fieldOpsStore.js +188 -0
  64. package/dist/crewfoundry/store/fieldOpsStore.js.map +1 -0
  65. package/package.json +1 -1
@@ -0,0 +1,76 @@
1
+ import { CrewDispatch, CrewShift, DispatchPriority, DispatchStatus, GeoReading } from '../lib/fieldOps';
2
+
3
+ /**
4
+ * The workspace + signed-in actor a result set belongs to. Rows loaded under
5
+ * one context are never shown under another: a host that switches workspace
6
+ * or user without a reload gets a fresh fetch, not the previous rows.
7
+ */
8
+ export declare const fieldOpsContextKey: () => string;
9
+ export interface WorkspaceMemberOption {
10
+ userId: string;
11
+ label: string;
12
+ }
13
+ export interface ShiftInput {
14
+ employeeId: string;
15
+ assigneeUserId?: string | null;
16
+ title: string;
17
+ role?: string | null;
18
+ siteName?: string | null;
19
+ siteAddress?: string | null;
20
+ siteLatitude?: number | null;
21
+ siteLongitude?: number | null;
22
+ geofenceRadiusMeters?: number | null;
23
+ startsAt: string;
24
+ endsAt: string;
25
+ notes?: string | null;
26
+ reminderMinutesBefore?: number | null;
27
+ }
28
+ export interface DispatchInput {
29
+ title: string;
30
+ description?: string | null;
31
+ priority?: DispatchPriority;
32
+ siteName?: string | null;
33
+ siteAddress?: string | null;
34
+ siteLatitude?: number | null;
35
+ siteLongitude?: number | null;
36
+ dueAt?: string | null;
37
+ shiftId?: string | null;
38
+ employeeId?: string | null;
39
+ }
40
+ export interface ReminderOutcome {
41
+ dispatched: boolean;
42
+ totalDevices: number;
43
+ delivered: number;
44
+ }
45
+ interface FieldOpsState {
46
+ shifts: CrewShift[];
47
+ dispatches: CrewDispatch[];
48
+ myShifts: CrewShift[];
49
+ myDispatches: CrewDispatch[];
50
+ members: WorkspaceMemberOption[];
51
+ /** Context key the board rows were loaded for (null until first load). */
52
+ boardKey: string | null;
53
+ /** Context key the worker rows were loaded for (null until first load). */
54
+ myWorkKey: string | null;
55
+ fetchBoard: () => Promise<void>;
56
+ fetchMyWork: () => Promise<void>;
57
+ fetchMembers: () => Promise<void>;
58
+ createShift: (input: ShiftInput) => Promise<void>;
59
+ updateShift: (id: string, input: Partial<ShiftInput>) => Promise<void>;
60
+ cancelShift: (id: string, reason: string | null) => Promise<void>;
61
+ removeShift: (id: string) => Promise<void>;
62
+ sendReminder: (id: string) => Promise<ReminderOutcome>;
63
+ createDispatch: (input: DispatchInput) => Promise<void>;
64
+ assignDispatch: (id: string, input: {
65
+ shiftId?: string | null;
66
+ employeeId?: string | null;
67
+ }) => Promise<void>;
68
+ transitionDispatch: (id: string, status: DispatchStatus, notes?: string | null) => Promise<void>;
69
+ removeDispatch: (id: string) => Promise<void>;
70
+ checkIn: (id: string, position: GeoReading) => Promise<CrewShift>;
71
+ checkOut: (id: string, position: GeoReading) => Promise<CrewShift>;
72
+ advanceMyDispatch: (id: string, status: DispatchStatus, notes?: string | null) => Promise<void>;
73
+ }
74
+ export declare const useFieldOpsStore: import('zustand').UseBoundStore<import('zustand').StoreApi<FieldOpsState>>;
75
+ export {};
76
+ //# sourceMappingURL=fieldOpsStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldOpsStore.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/store/fieldOpsStore.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,UAAU,EACX,MAAM,iBAAiB,CAAC;AA2CzB;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAGrC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD,cAAc,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,cAAc,EAAE,CACd,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAC3D,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjG,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAClE,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACnE,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjG;AA4CD,eAAO,MAAM,gBAAgB,4EAyS1B,CAAC"}
@@ -0,0 +1,188 @@
1
+ import { runGraphql as e, useCrewFoundryStore as t } from "./crewfoundryStore.js";
2
+ import { create as n } from "zustand";
3
+ //#region src/crewfoundry/store/fieldOpsStore.ts
4
+ var r = "id employeeId employeeName assigneeUserId title role siteName siteAddress siteLatitude siteLongitude\n geofenceRadiusMeters startsAt endsAt status notes reminderMinutesBefore reminderSentAt checkedInAt checkedOutAt\n checkInDistanceMeters checkOutDistanceMeters cancelReason timeEntry { id totalHours overtime }", i = "id title description priority status siteName siteAddress siteLatitude siteLongitude shiftId\n employeeId employeeName assigneeUserId dueAt assignedAt enRouteAt arrivedAt completedAt completionNotes createdAt", a = `query CrewShifts($filter: CrewShiftFilterInput, $pagination: PaginationInput) {
5
+ crewShifts(filter: $filter, pagination: $pagination) { ${r} } }`, o = `query CrewDispatches($filter: CrewDispatchFilterInput, $pagination: PaginationInput) {
6
+ crewDispatches(filter: $filter, pagination: $pagination) { ${i} } }`, s = `query MyCrewShifts($filter: MyCrewShiftFilterInput, $pagination: PaginationInput) {
7
+ myCrewShifts(filter: $filter, pagination: $pagination) { ${r} } }`, c = `query MyCrewDispatches($pagination: PaginationInput) {
8
+ myCrewDispatches(pagination: $pagination) { ${i} } }`, l = `mutation CreateCrewShift($input: CreateCrewShiftInput!) { createCrewShift(input: $input) { ${r} } }`, u = `mutation UpdateCrewShift($id: ID!, $input: UpdateCrewShiftInput!) { updateCrewShift(id: $id, input: $input) { ${r} } }`, d = `mutation CancelCrewShift($id: ID!, $reason: String) { cancelCrewShift(id: $id, reason: $reason) { ${r} } }`, f = "mutation RemoveCrewShift($id: ID!) { removeCrewShift(id: $id) }", p = "mutation SendCrewShiftReminder($id: ID!) { sendCrewShiftReminder(id: $id) { shiftId dispatched totalDevices delivered reminderSentAt } }", m = `mutation CheckInMyCrewShift($id: ID!, $position: CrewGeoPositionInput!) { checkInMyCrewShift(id: $id, position: $position) { ${r} } }`, h = `mutation CheckOutMyCrewShift($id: ID!, $position: CrewGeoPositionInput!) { checkOutMyCrewShift(id: $id, position: $position) { ${r} } }`, g = `mutation CreateCrewDispatch($input: CreateCrewDispatchInput!) { createCrewDispatch(input: $input) { ${i} } }`, _ = `mutation AssignCrewDispatch($id: ID!, $input: AssignCrewDispatchInput!) { assignCrewDispatch(id: $id, input: $input) { ${i} } }`, v = `mutation TransitionCrewDispatch($id: ID!, $status: CrewDispatchStatus!, $notes: String) { transitionCrewDispatch(id: $id, status: $status, notes: $notes) { ${i} } }`, y = "mutation RemoveCrewDispatch($id: ID!) { removeCrewDispatch(id: $id) }", b = `mutation UpdateMyCrewDispatchStatus($id: ID!, $status: CrewDispatchStatus!, $notes: String) { updateMyCrewDispatchStatus(id: $id, status: $status, notes: $notes) { ${i} } }`, x = "query FieldOpsWorkspaceMembers($workspaceId: ID!, $pagination: PaginationInput) {\n workspaceMembers(workspaceId: $workspaceId, pagination: $pagination) { items { userId } hasMore } }", S = "query FieldOpsMemberIdentities($userIds: [ID!]!, $workspaceId: ID) {\n workspaceMemberIdentities(userIds: $userIds, workspaceId: $workspaceId) { userId displayName email } }", C = { limit: 100 }, w = 10, T = 50, E = () => {
9
+ let { workspaceId: e, actorId: n } = t.getState().initParams;
10
+ return `${e ?? ""}:${n ?? ""}`;
11
+ }, D = () => t.getState().initParams;
12
+ async function O(e) {
13
+ let t = [];
14
+ for (let n = 0; n < w; n += 1) {
15
+ let r = await e({
16
+ limit: C.limit,
17
+ offset: n * C.limit
18
+ });
19
+ if (t.push(...r), r.length < C.limit) break;
20
+ }
21
+ return t;
22
+ }
23
+ var k = 0, A = () => {
24
+ k += 1;
25
+ };
26
+ function j(e) {
27
+ return Object.fromEntries(Object.entries(e).filter(([, e]) => e !== void 0));
28
+ }
29
+ var M = (e, t) => e.some((e) => e.id === t.id) ? e.map((e) => e.id === t.id ? t : e) : [t, ...e], N = n((t, n) => ({
30
+ shifts: [],
31
+ dispatches: [],
32
+ myShifts: [],
33
+ myDispatches: [],
34
+ members: [],
35
+ boardKey: null,
36
+ myWorkKey: null,
37
+ fetchBoard: async () => {
38
+ let r = E();
39
+ n().boardKey !== r && t({
40
+ shifts: [],
41
+ dispatches: [],
42
+ members: [],
43
+ boardKey: null
44
+ });
45
+ let i = (/* @__PURE__ */ new Date(Date.now() - 168 * 36e5)).toISOString(), s = new Date(Date.now() + 672 * 36e5).toISOString(), c = k, [l, u] = await Promise.all([O(async (t) => (await e(a, {
46
+ filter: {
47
+ from: i,
48
+ to: s
49
+ },
50
+ pagination: t
51
+ }, D(), "Unable to load shifts")).crewShifts), O(async (t) => (await e(o, { pagination: t }, D(), "Unable to load work orders")).crewDispatches)]);
52
+ E() !== r || k !== c || t({
53
+ shifts: l,
54
+ dispatches: u,
55
+ boardKey: r
56
+ });
57
+ },
58
+ fetchMyWork: async () => {
59
+ let r = E();
60
+ n().myWorkKey !== r && t({
61
+ myShifts: [],
62
+ myDispatches: [],
63
+ myWorkKey: null
64
+ });
65
+ let i = (/* @__PURE__ */ new Date(Date.now() - 24 * 36e5)).toISOString(), a = k, [o, l] = await Promise.all([O(async (t) => (await e(s, {
66
+ filter: { from: i },
67
+ pagination: t
68
+ }, D(), "Unable to load your shifts")).myCrewShifts), O(async (t) => (await e(c, { pagination: t }, D(), "Unable to load your work orders")).myCrewDispatches)]);
69
+ E() !== r || k !== a || t({
70
+ myShifts: o,
71
+ myDispatches: l,
72
+ myWorkKey: r
73
+ });
74
+ },
75
+ fetchMembers: async () => {
76
+ let n = D().workspaceId;
77
+ if (!n) return;
78
+ let r = E(), i = [];
79
+ for (let t = 0; t < T; t += 1) {
80
+ let r = await e(x, {
81
+ workspaceId: n,
82
+ pagination: {
83
+ limit: C.limit,
84
+ offset: t * C.limit
85
+ }
86
+ }, D(), "Unable to load workspace members");
87
+ if (i.push(...r.workspaceMembers.items.map((e) => e.userId)), !r.workspaceMembers.hasMore || r.workspaceMembers.items.length === 0) break;
88
+ }
89
+ let a = [...new Set(i)];
90
+ if (a.length === 0) {
91
+ t({ members: [] });
92
+ return;
93
+ }
94
+ let o = [];
95
+ for (let e = 0; e < a.length; e += C.limit) o.push(a.slice(e, e + C.limit));
96
+ let s = (await Promise.all(o.map((t) => e(S, {
97
+ userIds: t,
98
+ workspaceId: n
99
+ }, D(), "Unable to load workspace members").then((e) => e.workspaceMemberIdentities).catch(() => [])))).flat();
100
+ if (E() !== r) return;
101
+ let c = new Map(s.map((e) => [e.userId, e]));
102
+ t({ members: a.map((e) => {
103
+ let t = c.get(e), n = t?.displayName?.trim() || t?.email?.trim() || e;
104
+ return {
105
+ userId: e,
106
+ label: t?.email && n !== t.email ? `${n} (${t.email})` : n
107
+ };
108
+ }) });
109
+ },
110
+ createShift: async (r) => {
111
+ let i = E(), a = await e(l, { input: j(r) }, D(), "Unable to schedule this shift");
112
+ A(), E() === i && t({ shifts: M(n().shifts, a.createCrewShift) });
113
+ },
114
+ updateShift: async (r, i) => {
115
+ let a = E(), o = await e(u, {
116
+ id: r,
117
+ input: j(i)
118
+ }, D(), "Unable to update this shift");
119
+ A(), E() === a && t({ shifts: M(n().shifts, o.updateCrewShift) });
120
+ },
121
+ cancelShift: async (r, i) => {
122
+ let a = E(), o = await e(d, {
123
+ id: r,
124
+ reason: i
125
+ }, D(), "Unable to cancel this shift");
126
+ A(), E() === a && t({ shifts: M(n().shifts, o.cancelCrewShift) });
127
+ },
128
+ removeShift: async (r) => {
129
+ let i = E();
130
+ await e(f, { id: r }, D(), "Unable to remove this shift"), A(), E() === i && t({ shifts: n().shifts.filter((e) => e.id !== r) });
131
+ },
132
+ sendReminder: async (r) => {
133
+ let i = E(), a = (await e(p, { id: r }, D(), "Unable to send the reminder")).sendCrewShiftReminder;
134
+ return A(), E() === i && t({ shifts: n().shifts.map((e) => e.id === r ? {
135
+ ...e,
136
+ reminderSentAt: a.reminderSentAt
137
+ } : e) }), a;
138
+ },
139
+ createDispatch: async (r) => {
140
+ let i = E(), a = await e(g, { input: j(r) }, D(), "Unable to create this work order");
141
+ A(), E() === i && t({ dispatches: M(n().dispatches, a.createCrewDispatch) });
142
+ },
143
+ assignDispatch: async (r, i) => {
144
+ let a = E(), o = await e(_, {
145
+ id: r,
146
+ input: j(i)
147
+ }, D(), "Unable to assign this work order");
148
+ A(), E() === a && t({ dispatches: M(n().dispatches, o.assignCrewDispatch) });
149
+ },
150
+ transitionDispatch: async (r, i, a) => {
151
+ let o = E(), s = await e(v, {
152
+ id: r,
153
+ status: i,
154
+ notes: a ?? null
155
+ }, D(), "Unable to update this work order");
156
+ A(), E() === o && t({ dispatches: M(n().dispatches, s.transitionCrewDispatch) });
157
+ },
158
+ removeDispatch: async (r) => {
159
+ let i = E();
160
+ await e(y, { id: r }, D(), "Unable to remove this work order"), A(), E() === i && t({ dispatches: n().dispatches.filter((e) => e.id !== r) });
161
+ },
162
+ checkIn: async (r, i) => {
163
+ let a = E(), o = await e(m, {
164
+ id: r,
165
+ position: j(i)
166
+ }, D(), "Unable to check in");
167
+ return A(), E() === a && t({ myShifts: M(n().myShifts, o.checkInMyCrewShift) }), o.checkInMyCrewShift;
168
+ },
169
+ checkOut: async (r, i) => {
170
+ let a = E(), o = await e(h, {
171
+ id: r,
172
+ position: j(i)
173
+ }, D(), "Unable to check out");
174
+ return A(), E() === a && t({ myShifts: M(n().myShifts, o.checkOutMyCrewShift) }), o.checkOutMyCrewShift;
175
+ },
176
+ advanceMyDispatch: async (r, i, a) => {
177
+ let o = E(), s = await e(b, {
178
+ id: r,
179
+ status: i,
180
+ notes: a ?? null
181
+ }, D(), "Unable to update this work order");
182
+ A(), E() === o && t({ myDispatches: M(n().myDispatches, s.updateMyCrewDispatchStatus) });
183
+ }
184
+ }));
185
+ //#endregion
186
+ export { N as useFieldOpsStore };
187
+
188
+ //# sourceMappingURL=fieldOpsStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldOpsStore.js","names":[],"sources":["../../../src/crewfoundry/store/fieldOpsStore.ts"],"sourcesContent":["/**\n * Field-operations state (BOFF-4205): shifts, work orders and the\n * workspace member directory used to link a shift to a worker's login.\n *\n * Talks to wspace-crewfoundry-svc through the same `runGraphql` transport and\n * init params (token, workspace) as the main CrewFoundry store.\n */\nimport { create } from 'zustand';\nimport type {\n CrewDispatch,\n CrewShift,\n DispatchPriority,\n DispatchStatus,\n GeoReading,\n} from '../lib/fieldOps';\nimport { runGraphql, useCrewFoundryStore } from './crewfoundryStore';\n\nconst SHIFT_FIELDS = `id employeeId employeeName assigneeUserId title role siteName siteAddress siteLatitude siteLongitude\n geofenceRadiusMeters startsAt endsAt status notes reminderMinutesBefore reminderSentAt checkedInAt checkedOutAt\n checkInDistanceMeters checkOutDistanceMeters cancelReason timeEntry { id totalHours overtime }`;\nconst DISPATCH_FIELDS = `id title description priority status siteName siteAddress siteLatitude siteLongitude shiftId\n employeeId employeeName assigneeUserId dueAt assignedAt enRouteAt arrivedAt completedAt completionNotes createdAt`;\n\nconst CREW_SHIFTS_QUERY = `query CrewShifts($filter: CrewShiftFilterInput, $pagination: PaginationInput) {\n crewShifts(filter: $filter, pagination: $pagination) { ${SHIFT_FIELDS} } }`;\nconst CREW_DISPATCHES_QUERY = `query CrewDispatches($filter: CrewDispatchFilterInput, $pagination: PaginationInput) {\n crewDispatches(filter: $filter, pagination: $pagination) { ${DISPATCH_FIELDS} } }`;\nconst MY_SHIFTS_QUERY = `query MyCrewShifts($filter: MyCrewShiftFilterInput, $pagination: PaginationInput) {\n myCrewShifts(filter: $filter, pagination: $pagination) { ${SHIFT_FIELDS} } }`;\nconst MY_DISPATCHES_QUERY = `query MyCrewDispatches($pagination: PaginationInput) {\n myCrewDispatches(pagination: $pagination) { ${DISPATCH_FIELDS} } }`;\n\nconst CREATE_SHIFT = `mutation CreateCrewShift($input: CreateCrewShiftInput!) { createCrewShift(input: $input) { ${SHIFT_FIELDS} } }`;\nconst UPDATE_SHIFT = `mutation UpdateCrewShift($id: ID!, $input: UpdateCrewShiftInput!) { updateCrewShift(id: $id, input: $input) { ${SHIFT_FIELDS} } }`;\nconst CANCEL_SHIFT = `mutation CancelCrewShift($id: ID!, $reason: String) { cancelCrewShift(id: $id, reason: $reason) { ${SHIFT_FIELDS} } }`;\nconst REMOVE_SHIFT = `mutation RemoveCrewShift($id: ID!) { removeCrewShift(id: $id) }`;\nconst SEND_REMINDER = `mutation SendCrewShiftReminder($id: ID!) { sendCrewShiftReminder(id: $id) { shiftId dispatched totalDevices delivered reminderSentAt } }`;\nconst CHECK_IN = `mutation CheckInMyCrewShift($id: ID!, $position: CrewGeoPositionInput!) { checkInMyCrewShift(id: $id, position: $position) { ${SHIFT_FIELDS} } }`;\nconst CHECK_OUT = `mutation CheckOutMyCrewShift($id: ID!, $position: CrewGeoPositionInput!) { checkOutMyCrewShift(id: $id, position: $position) { ${SHIFT_FIELDS} } }`;\n\nconst CREATE_DISPATCH = `mutation CreateCrewDispatch($input: CreateCrewDispatchInput!) { createCrewDispatch(input: $input) { ${DISPATCH_FIELDS} } }`;\nconst ASSIGN_DISPATCH = `mutation AssignCrewDispatch($id: ID!, $input: AssignCrewDispatchInput!) { assignCrewDispatch(id: $id, input: $input) { ${DISPATCH_FIELDS} } }`;\nconst TRANSITION_DISPATCH = `mutation TransitionCrewDispatch($id: ID!, $status: CrewDispatchStatus!, $notes: String) { transitionCrewDispatch(id: $id, status: $status, notes: $notes) { ${DISPATCH_FIELDS} } }`;\nconst REMOVE_DISPATCH = `mutation RemoveCrewDispatch($id: ID!) { removeCrewDispatch(id: $id) }`;\nconst MY_DISPATCH_STATUS = `mutation UpdateMyCrewDispatchStatus($id: ID!, $status: CrewDispatchStatus!, $notes: String) { updateMyCrewDispatchStatus(id: $id, status: $status, notes: $notes) { ${DISPATCH_FIELDS} } }`;\n\nconst MEMBERS_QUERY = `query FieldOpsWorkspaceMembers($workspaceId: ID!, $pagination: PaginationInput) {\n workspaceMembers(workspaceId: $workspaceId, pagination: $pagination) { items { userId } hasMore } }`;\nconst MEMBER_IDENTITIES_QUERY = `query FieldOpsMemberIdentities($userIds: [ID!]!, $workspaceId: ID) {\n workspaceMemberIdentities(userIds: $userIds, workspaceId: $workspaceId) { userId displayName email } }`;\n\nconst PAGE = { limit: 100 };\n/** Upper bound on pages (100 rows each) read for one list. */\nconst LIST_MAX_PAGES = 10;\n/** Upper bound on member-directory pages (100 each) read for the login picker. */\nconst MEMBER_MAX_PAGES = 50;\n\n/**\n * The workspace + signed-in actor a result set belongs to. Rows loaded under\n * one context are never shown under another: a host that switches workspace\n * or user without a reload gets a fresh fetch, not the previous rows.\n */\nexport const fieldOpsContextKey = (): string => {\n const { workspaceId, actorId } = useCrewFoundryStore.getState().initParams;\n return `${workspaceId ?? ''}:${actorId ?? ''}`;\n};\n\nexport interface WorkspaceMemberOption {\n userId: string;\n label: string;\n}\n\nexport interface ShiftInput {\n employeeId: string;\n assigneeUserId?: string | null;\n title: string;\n role?: string | null;\n siteName?: string | null;\n siteAddress?: string | null;\n siteLatitude?: number | null;\n siteLongitude?: number | null;\n geofenceRadiusMeters?: number | null;\n startsAt: string;\n endsAt: string;\n notes?: string | null;\n reminderMinutesBefore?: number | null;\n}\n\nexport interface DispatchInput {\n title: string;\n description?: string | null;\n priority?: DispatchPriority;\n siteName?: string | null;\n siteAddress?: string | null;\n siteLatitude?: number | null;\n siteLongitude?: number | null;\n dueAt?: string | null;\n shiftId?: string | null;\n employeeId?: string | null;\n}\n\nexport interface ReminderOutcome {\n dispatched: boolean;\n totalDevices: number;\n delivered: number;\n}\n\ninterface FieldOpsState {\n shifts: CrewShift[];\n dispatches: CrewDispatch[];\n myShifts: CrewShift[];\n myDispatches: CrewDispatch[];\n members: WorkspaceMemberOption[];\n /** Context key the board rows were loaded for (null until first load). */\n boardKey: string | null;\n /** Context key the worker rows were loaded for (null until first load). */\n myWorkKey: string | null;\n fetchBoard: () => Promise<void>;\n fetchMyWork: () => Promise<void>;\n fetchMembers: () => Promise<void>;\n createShift: (input: ShiftInput) => Promise<void>;\n updateShift: (id: string, input: Partial<ShiftInput>) => Promise<void>;\n cancelShift: (id: string, reason: string | null) => Promise<void>;\n removeShift: (id: string) => Promise<void>;\n sendReminder: (id: string) => Promise<ReminderOutcome>;\n createDispatch: (input: DispatchInput) => Promise<void>;\n assignDispatch: (\n id: string,\n input: { shiftId?: string | null; employeeId?: string | null }\n ) => Promise<void>;\n transitionDispatch: (id: string, status: DispatchStatus, notes?: string | null) => Promise<void>;\n removeDispatch: (id: string) => Promise<void>;\n checkIn: (id: string, position: GeoReading) => Promise<CrewShift>;\n checkOut: (id: string, position: GeoReading) => Promise<CrewShift>;\n advanceMyDispatch: (id: string, status: DispatchStatus, notes?: string | null) => Promise<void>;\n}\n\nconst params = () => useCrewFoundryStore.getState().initParams;\n\n/**\n * Read every page of an offset-paginated list (bounded). The service clamps a\n * page to 100 rows, so a short page means the list is exhausted.\n */\nasync function readAllPages<T>(\n readPage: (pagination: { limit: number; offset: number }) => Promise<T[]>\n): Promise<T[]> {\n const rows: T[] = [];\n for (let page = 0; page < LIST_MAX_PAGES; page += 1) {\n const batch = await readPage({ limit: PAGE.limit, offset: page * PAGE.limit });\n rows.push(...batch);\n if (batch.length < PAGE.limit) break;\n }\n return rows;\n}\n\n/**\n * Incremented by every successful write. A list fetch that started before a\n * write lands must not replace the rows that write produced, so a fetch only\n * commits its snapshot when no write happened while it was in flight. Each\n * write likewise only touches the lists when the workspace + actor it started\n * under is still current, so a late result never leaks into another context.\n */\nlet writeSeq = 0;\nconst noteWrite = (): void => {\n writeSeq += 1;\n};\n\n/** Drop keys whose value is undefined so optional inputs are omitted, not sent as null. */\nfunction compact<T extends object>(input: T): Partial<T> {\n return Object.fromEntries(\n Object.entries(input).filter(([, value]) => value !== undefined)\n ) as Partial<T>;\n}\n\nconst replaceById = <T extends { id: string }>(rows: T[], row: T): T[] =>\n rows.some((existing) => existing.id === row.id)\n ? rows.map((existing) => (existing.id === row.id ? row : existing))\n : [row, ...rows];\n\nexport const useFieldOpsStore = create<FieldOpsState>((set, get) => ({\n shifts: [],\n dispatches: [],\n myShifts: [],\n myDispatches: [],\n members: [],\n boardKey: null,\n myWorkKey: null,\n\n fetchBoard: async () => {\n const key = fieldOpsContextKey();\n if (get().boardKey !== key) set({ shifts: [], dispatches: [], members: [], boardKey: null });\n // A week back (recent history and missed shifts) through four weeks ahead.\n const from = new Date(Date.now() - 7 * 24 * 3_600_000).toISOString();\n const to = new Date(Date.now() + 28 * 24 * 3_600_000).toISOString();\n const startedAt = writeSeq;\n const [crewShifts, crewDispatches] = await Promise.all([\n readAllPages(\n async (pagination) =>\n (\n await runGraphql<{ crewShifts: CrewShift[] }>(\n CREW_SHIFTS_QUERY,\n { filter: { from, to }, pagination },\n params(),\n 'Unable to load shifts'\n )\n ).crewShifts\n ),\n readAllPages(\n async (pagination) =>\n (\n await runGraphql<{ crewDispatches: CrewDispatch[] }>(\n CREW_DISPATCHES_QUERY,\n { pagination },\n params(),\n 'Unable to load work orders'\n )\n ).crewDispatches\n ),\n ]);\n // Drop a response that resolved after the context changed, or that a\n // write overtook (the next refresh picks the write up).\n if (fieldOpsContextKey() !== key || writeSeq !== startedAt) return;\n set({ shifts: crewShifts, dispatches: crewDispatches, boardKey: key });\n },\n\n fetchMyWork: async () => {\n const key = fieldOpsContextKey();\n if (get().myWorkKey !== key) set({ myShifts: [], myDispatches: [], myWorkKey: null });\n const from = new Date(Date.now() - 24 * 3_600_000).toISOString();\n const startedAt = writeSeq;\n const [mine, myOrders] = await Promise.all([\n readAllPages(\n async (pagination) =>\n (\n await runGraphql<{ myCrewShifts: CrewShift[] }>(\n MY_SHIFTS_QUERY,\n { filter: { from }, pagination },\n params(),\n 'Unable to load your shifts'\n )\n ).myCrewShifts\n ),\n readAllPages(\n async (pagination) =>\n (\n await runGraphql<{ myCrewDispatches: CrewDispatch[] }>(\n MY_DISPATCHES_QUERY,\n { pagination },\n params(),\n 'Unable to load your work orders'\n )\n ).myCrewDispatches\n ),\n ]);\n if (fieldOpsContextKey() !== key || writeSeq !== startedAt) return;\n set({ myShifts: mine, myDispatches: myOrders, myWorkKey: key });\n },\n\n fetchMembers: async () => {\n const workspaceId = params().workspaceId;\n if (!workspaceId) return;\n const key = fieldOpsContextKey();\n const collected: string[] = [];\n for (let page = 0; page < MEMBER_MAX_PAGES; page += 1) {\n const memberData = await runGraphql<{\n workspaceMembers: { items: Array<{ userId: string }>; hasMore: boolean };\n }>(\n MEMBERS_QUERY,\n { workspaceId, pagination: { limit: PAGE.limit, offset: page * PAGE.limit } },\n params(),\n 'Unable to load workspace members'\n );\n collected.push(...memberData.workspaceMembers.items.map((item) => item.userId));\n if (!memberData.workspaceMembers.hasMore || memberData.workspaceMembers.items.length === 0)\n break;\n }\n const userIds = [...new Set(collected)];\n if (userIds.length === 0) {\n set({ members: [] });\n return;\n }\n type Identity = { userId: string; displayName: string | null; email: string | null };\n const chunks: string[][] = [];\n for (let i = 0; i < userIds.length; i += PAGE.limit)\n chunks.push(userIds.slice(i, i + PAGE.limit));\n // Independent lookups; at most MEMBER_MAX_PAGES chunks. Identities only make\n // labels friendlier, so a failed chunk falls back to ids.\n const identities = (\n await Promise.all(\n chunks.map((chunk) =>\n runGraphql<{ workspaceMemberIdentities: Identity[] }>(\n MEMBER_IDENTITIES_QUERY,\n { userIds: chunk, workspaceId },\n params(),\n 'Unable to load workspace members'\n )\n .then((data) => data.workspaceMemberIdentities)\n .catch(() => [] as Identity[])\n )\n )\n ).flat();\n if (fieldOpsContextKey() !== key) return;\n const byId = new Map(identities.map((identity) => [identity.userId, identity]));\n set({\n members: userIds.map((userId) => {\n const identity = byId.get(userId);\n const label = identity?.displayName?.trim() || identity?.email?.trim() || userId;\n return {\n userId,\n label:\n identity?.email && label !== identity.email ? `${label} (${identity.email})` : label,\n };\n }),\n });\n },\n\n createShift: async (input) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ createCrewShift: CrewShift }>(\n CREATE_SHIFT,\n { input: compact(input) },\n params(),\n 'Unable to schedule this shift'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ shifts: replaceById(get().shifts, data.createCrewShift) });\n },\n\n updateShift: async (id, input) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ updateCrewShift: CrewShift }>(\n UPDATE_SHIFT,\n { id, input: compact(input) },\n params(),\n 'Unable to update this shift'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ shifts: replaceById(get().shifts, data.updateCrewShift) });\n },\n\n cancelShift: async (id, reason) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ cancelCrewShift: CrewShift }>(\n CANCEL_SHIFT,\n { id, reason },\n params(),\n 'Unable to cancel this shift'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ shifts: replaceById(get().shifts, data.cancelCrewShift) });\n },\n\n removeShift: async (id) => {\n const key = fieldOpsContextKey();\n await runGraphql<{ removeCrewShift: boolean }>(\n REMOVE_SHIFT,\n { id },\n params(),\n 'Unable to remove this shift'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ shifts: get().shifts.filter((shift) => shift.id !== id) });\n },\n\n sendReminder: async (id) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{\n sendCrewShiftReminder: ReminderOutcome & { reminderSentAt: string | null };\n }>(SEND_REMINDER, { id }, params(), 'Unable to send the reminder');\n const outcome = data.sendCrewShiftReminder;\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({\n shifts: get().shifts.map((shift) =>\n shift.id === id ? { ...shift, reminderSentAt: outcome.reminderSentAt } : shift\n ),\n });\n return outcome;\n },\n\n createDispatch: async (input) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ createCrewDispatch: CrewDispatch }>(\n CREATE_DISPATCH,\n { input: compact(input) },\n params(),\n 'Unable to create this work order'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ dispatches: replaceById(get().dispatches, data.createCrewDispatch) });\n },\n\n assignDispatch: async (id, input) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ assignCrewDispatch: CrewDispatch }>(\n ASSIGN_DISPATCH,\n { id, input: compact(input) },\n params(),\n 'Unable to assign this work order'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ dispatches: replaceById(get().dispatches, data.assignCrewDispatch) });\n },\n\n transitionDispatch: async (id, status, notes) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ transitionCrewDispatch: CrewDispatch }>(\n TRANSITION_DISPATCH,\n { id, status, notes: notes ?? null },\n params(),\n 'Unable to update this work order'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ dispatches: replaceById(get().dispatches, data.transitionCrewDispatch) });\n },\n\n removeDispatch: async (id) => {\n const key = fieldOpsContextKey();\n await runGraphql<{ removeCrewDispatch: boolean }>(\n REMOVE_DISPATCH,\n { id },\n params(),\n 'Unable to remove this work order'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ dispatches: get().dispatches.filter((dispatch) => dispatch.id !== id) });\n },\n\n checkIn: async (id, position) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ checkInMyCrewShift: CrewShift }>(\n CHECK_IN,\n { id, position: compact(position) },\n params(),\n 'Unable to check in'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ myShifts: replaceById(get().myShifts, data.checkInMyCrewShift) });\n return data.checkInMyCrewShift;\n },\n\n checkOut: async (id, position) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ checkOutMyCrewShift: CrewShift }>(\n CHECK_OUT,\n { id, position: compact(position) },\n params(),\n 'Unable to check out'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ myShifts: replaceById(get().myShifts, data.checkOutMyCrewShift) });\n return data.checkOutMyCrewShift;\n },\n\n advanceMyDispatch: async (id, status, notes) => {\n const key = fieldOpsContextKey();\n const data = await runGraphql<{ updateMyCrewDispatchStatus: CrewDispatch }>(\n MY_DISPATCH_STATUS,\n { id, status, notes: notes ?? null },\n params(),\n 'Unable to update this work order'\n );\n noteWrite();\n if (fieldOpsContextKey() === key)\n set({ myDispatches: replaceById(get().myDispatches, data.updateMyCrewDispatchStatus) });\n },\n}));\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-crewfoundry",
3
- "version": "2026.1102.1",
3
+ "version": "2026.1107.1",
4
4
  "description": "Burdenoff CrewFoundry Microfrontend",
5
5
  "type": "module",
6
6
  "files": [