placementt-core 1.400.872 → 1.400.874
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/lib/firebase/callableJobContext.d.ts +12 -0
- package/lib/firebase/callableJobContext.js +118 -0
- package/lib/firebase/callableJobContext.js.map +1 -0
- package/lib/firebase/firebase.d.ts +1 -11
- package/lib/firebase/firebase.js +19 -7
- package/lib/firebase/firebase.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/typeDefinitions.d.ts +5 -0
- package/package.json +1 -1
- package/src/firebase/callableJobContext.ts +128 -0
- package/src/firebase/firebase.tsx +19 -18
- package/src/index.ts +1 -0
- package/src/typeDefinitions.ts +5 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type CallableJobContext = {
|
|
2
|
+
collectionLink: string;
|
|
3
|
+
collectionItemId?: (data: unknown) => string | undefined;
|
|
4
|
+
recipientId?: (data: unknown) => string | undefined;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Maps each callable function name to its Firestore collection context.
|
|
8
|
+
* collectionItemId/recipientId are accessor functions over the data payload.
|
|
9
|
+
* Used by executeCallable and useExecuteCallableJob to tag job documents,
|
|
10
|
+
* allowing jobs to be queried by collection/item (e.g. all jobs for an event).
|
|
11
|
+
*/
|
|
12
|
+
export declare const CALLABLE_JOB_CONTEXT: Record<string, CallableJobContext>;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CALLABLE_JOB_CONTEXT = void 0;
|
|
4
|
+
const d = (data) => data;
|
|
5
|
+
/**
|
|
6
|
+
* Maps each callable function name to its Firestore collection context.
|
|
7
|
+
* collectionItemId/recipientId are accessor functions over the data payload.
|
|
8
|
+
* Used by executeCallable and useExecuteCallableJob to tag job documents,
|
|
9
|
+
* allowing jobs to be queried by collection/item (e.g. all jobs for an event).
|
|
10
|
+
*/
|
|
11
|
+
exports.CALLABLE_JOB_CONTEXT = {
|
|
12
|
+
// ─── Events ────────────────────────────────────────────────────────────────
|
|
13
|
+
"events-sendExternalEventInvites": {
|
|
14
|
+
collectionLink: "externalEvents",
|
|
15
|
+
collectionItemId: (data) => d(data)?.data?.eventId,
|
|
16
|
+
},
|
|
17
|
+
"events-sendEmployerConfirmations": {
|
|
18
|
+
collectionLink: "externalEvents",
|
|
19
|
+
collectionItemId: (data) => d(data)?.data?.event?.id,
|
|
20
|
+
},
|
|
21
|
+
"events-addStudents": {
|
|
22
|
+
collectionLink: "externalEvents",
|
|
23
|
+
collectionItemId: (data) => d(data)?.event?.id,
|
|
24
|
+
},
|
|
25
|
+
"events-studentJoinEvent": {
|
|
26
|
+
collectionLink: "externalEvents",
|
|
27
|
+
collectionItemId: (data) => d(data)?.eventId,
|
|
28
|
+
},
|
|
29
|
+
"events-careersHubAddSchool": {
|
|
30
|
+
collectionLink: "externalEvents",
|
|
31
|
+
collectionItemId: (data) => d(data)?.eventId,
|
|
32
|
+
},
|
|
33
|
+
// ─── User Management ───────────────────────────────────────────────────────
|
|
34
|
+
"userManagement-addUsers": {
|
|
35
|
+
collectionLink: "users",
|
|
36
|
+
},
|
|
37
|
+
"userManagement-activateUsers": {
|
|
38
|
+
collectionLink: "users",
|
|
39
|
+
},
|
|
40
|
+
"userManagement-deactivateUsers": {
|
|
41
|
+
collectionLink: "users",
|
|
42
|
+
},
|
|
43
|
+
"userManagement-deleteUsers": {
|
|
44
|
+
collectionLink: "users",
|
|
45
|
+
},
|
|
46
|
+
"userManagement-uploadAnalytics": {
|
|
47
|
+
collectionLink: "users",
|
|
48
|
+
},
|
|
49
|
+
"userManagement-sendParentWelcomeEmail": {
|
|
50
|
+
collectionLink: "users",
|
|
51
|
+
},
|
|
52
|
+
"userManagement-addStudentsToCohort": {
|
|
53
|
+
collectionLink: "cohorts",
|
|
54
|
+
collectionItemId: (data) => d(data)?.cohortId,
|
|
55
|
+
},
|
|
56
|
+
"userManagement-removeFromCohort": {
|
|
57
|
+
collectionLink: "users",
|
|
58
|
+
collectionItemId: (data) => d(data)?.cohortId,
|
|
59
|
+
},
|
|
60
|
+
// ─── Provider Contacts ─────────────────────────────────────────────────────
|
|
61
|
+
"providerContacts-add": {
|
|
62
|
+
collectionLink: "providerContacts",
|
|
63
|
+
},
|
|
64
|
+
"providerContacts-delete": {
|
|
65
|
+
collectionLink: "providerContacts",
|
|
66
|
+
},
|
|
67
|
+
"providerContacts-resendEmployerInvite": {
|
|
68
|
+
collectionLink: "providerContacts",
|
|
69
|
+
},
|
|
70
|
+
"providerContacts-approveEmployerContacts": {
|
|
71
|
+
collectionLink: "providerContacts",
|
|
72
|
+
},
|
|
73
|
+
// ─── Placement Listings ────────────────────────────────────────────────────
|
|
74
|
+
"placementListing-addToCohort": {
|
|
75
|
+
collectionLink: "placementListings",
|
|
76
|
+
collectionItemId: (data) => d(data)?.cohortId,
|
|
77
|
+
},
|
|
78
|
+
"placementListing-delist": {
|
|
79
|
+
collectionLink: "placementListings",
|
|
80
|
+
collectionItemId: (data) => d(data)?.cohortId,
|
|
81
|
+
},
|
|
82
|
+
// ─── Placements ────────────────────────────────────────────────────────────
|
|
83
|
+
"placement-bulkUpload": {
|
|
84
|
+
collectionLink: "placements",
|
|
85
|
+
collectionItemId: (data) => d(data)?.cohortId,
|
|
86
|
+
},
|
|
87
|
+
// ─── Registration ──────────────────────────────────────────────────────────
|
|
88
|
+
"registration-registerInstitutes": {
|
|
89
|
+
collectionLink: "institutes",
|
|
90
|
+
},
|
|
91
|
+
"registration-resendSchoolInvites": {
|
|
92
|
+
collectionLink: "careersInvites",
|
|
93
|
+
},
|
|
94
|
+
"registration-deleteSchoolInvites": {
|
|
95
|
+
collectionLink: "careersInvites",
|
|
96
|
+
},
|
|
97
|
+
"registration-registerInstitute": {
|
|
98
|
+
collectionLink: "institutes",
|
|
99
|
+
},
|
|
100
|
+
"registration-registerProvider": {
|
|
101
|
+
collectionLink: "providerContacts",
|
|
102
|
+
},
|
|
103
|
+
"registration-registerStudent": {
|
|
104
|
+
collectionLink: "users",
|
|
105
|
+
},
|
|
106
|
+
// ─── Admissions ────────────────────────────────────────────────────────────
|
|
107
|
+
"admissions-createCohort": {
|
|
108
|
+
collectionLink: "admissionCohorts",
|
|
109
|
+
},
|
|
110
|
+
// ─── Parents ───────────────────────────────────────────────────────────────
|
|
111
|
+
"parents-add": {
|
|
112
|
+
collectionLink: "parents",
|
|
113
|
+
},
|
|
114
|
+
"parents-bulkApprove": {
|
|
115
|
+
collectionLink: "parents",
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=callableJobContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callableJobContext.js","sourceRoot":"","sources":["../../src/firebase/callableJobContext.ts"],"names":[],"mappings":";;;AAMA,MAAM,CAAC,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,IAA+B,CAAC;AAE7D;;;;;GAKG;AACU,QAAA,oBAAoB,GAAuC;IACpE,8EAA8E;IAC9E,iCAAiC,EAAE;QAC/B,cAAc,EAAE,gBAAgB;QAChC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAY,EAAE,OAAO;KAC9D;IACD,kCAAkC,EAAE;QAChC,cAAc,EAAE,gBAAgB;QAChC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAY,EAAE,KAAK,EAAE,EAAE;KAChE;IACD,oBAAoB,EAAE;QAClB,cAAc,EAAE,gBAAgB;QAChC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAa,EAAE,EAAE;KAC1D;IACD,yBAAyB,EAAE;QACvB,cAAc,EAAE,gBAAgB;QAChC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAA6B;KACrE;IACD,4BAA4B,EAAE;QAC1B,cAAc,EAAE,gBAAgB;QAChC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAA6B;KACrE;IAED,8EAA8E;IAC9E,yBAAyB,EAAE;QACvB,cAAc,EAAE,OAAO;KAC1B;IACD,8BAA8B,EAAE;QAC5B,cAAc,EAAE,OAAO;KAC1B;IACD,gCAAgC,EAAE;QAC9B,cAAc,EAAE,OAAO;KAC1B;IACD,4BAA4B,EAAE;QAC1B,cAAc,EAAE,OAAO;KAC1B;IACD,gCAAgC,EAAE;QAC9B,cAAc,EAAE,OAAO;KAC1B;IACD,uCAAuC,EAAE;QACrC,cAAc,EAAE,OAAO;KAC1B;IACD,oCAAoC,EAAE;QAClC,cAAc,EAAE,SAAS;QACzB,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAA8B;KACtE;IACD,iCAAiC,EAAE;QAC/B,cAAc,EAAE,OAAO;QACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAA8B;KACtE;IAED,8EAA8E;IAC9E,sBAAsB,EAAE;QACpB,cAAc,EAAE,kBAAkB;KACrC;IACD,yBAAyB,EAAE;QACvB,cAAc,EAAE,kBAAkB;KACrC;IACD,uCAAuC,EAAE;QACrC,cAAc,EAAE,kBAAkB;KACrC;IACD,0CAA0C,EAAE;QACxC,cAAc,EAAE,kBAAkB;KACrC;IAED,8EAA8E;IAC9E,8BAA8B,EAAE;QAC5B,cAAc,EAAE,mBAAmB;QACnC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAA8B;KACtE;IACD,yBAAyB,EAAE;QACvB,cAAc,EAAE,mBAAmB;QACnC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAA8B;KACtE;IAED,8EAA8E;IAC9E,sBAAsB,EAAE;QACpB,cAAc,EAAE,YAAY;QAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAA8B;KACtE;IAED,8EAA8E;IAC9E,iCAAiC,EAAE;QAC/B,cAAc,EAAE,YAAY;KAC/B;IACD,kCAAkC,EAAE;QAChC,cAAc,EAAE,gBAAgB;KACnC;IACD,kCAAkC,EAAE;QAChC,cAAc,EAAE,gBAAgB;KACnC;IACD,gCAAgC,EAAE;QAC9B,cAAc,EAAE,YAAY;KAC/B;IACD,+BAA+B,EAAE;QAC7B,cAAc,EAAE,kBAAkB;KACrC;IACD,8BAA8B,EAAE;QAC5B,cAAc,EAAE,OAAO;KAC1B;IAED,8EAA8E;IAC9E,yBAAyB,EAAE;QACvB,cAAc,EAAE,kBAAkB;KACrC;IAED,8EAA8E;IAC9E,aAAa,EAAE;QACX,cAAc,EAAE,SAAS;KAC5B;IACD,qBAAqB,EAAE;QACnB,cAAc,EAAE,SAAS;KAC5B;CACJ,CAAC"}
|
|
@@ -18,23 +18,13 @@ export type RegistrationData = {
|
|
|
18
18
|
family_name: string;
|
|
19
19
|
};
|
|
20
20
|
export declare const register: (credentials: RegistrationData, type: "Institute" | "Provider" | "Student") => Promise<string>;
|
|
21
|
-
export type CallableLog = {
|
|
22
|
-
functionName: string;
|
|
23
|
-
data: unknown;
|
|
24
|
-
timestamp: string;
|
|
25
|
-
userId: string | null;
|
|
26
|
-
userEmail: string | null;
|
|
27
|
-
url: string | null;
|
|
28
|
-
outcome: "pending" | "success" | "error";
|
|
29
|
-
error?: string;
|
|
30
|
-
};
|
|
31
21
|
export declare const executeCallable: (functionName: string, data: unknown) => Promise<{
|
|
32
22
|
data: any;
|
|
33
23
|
}>;
|
|
34
24
|
export declare function useExecuteCallableJob({ user }: {
|
|
35
25
|
user: UserData;
|
|
36
26
|
}): {
|
|
37
|
-
execute: (functionName: "
|
|
27
|
+
execute: (functionName: "events-sendExternalEventInvites" | "events-sendEmployerConfirmations" | "events-addStudents" | "events-studentJoinEvent" | "events-careersHubAddSchool" | "userManagement-addUsers" | "userManagement-activateUsers" | "userManagement-deactivateUsers" | "userManagement-deleteUsers" | "userManagement-uploadAnalytics" | "userManagement-sendParentWelcomeEmail" | "userManagement-addStudentsToCohort" | "userManagement-removeFromCohort" | "providerContacts-add" | "providerContacts-delete" | "providerContacts-resendEmployerInvite" | "providerContacts-approveEmployerContacts" | "placementListing-addToCohort" | "placementListing-delist" | "placement-bulkUpload" | "registration-registerInstitutes" | "registration-resendSchoolInvites" | "registration-deleteSchoolInvites" | "admissions-createCohort" | "parents-add" | "parents-bulkApprove", data: {
|
|
38
28
|
[key: string]: unknown;
|
|
39
29
|
}) => Promise<{
|
|
40
30
|
severity: string;
|
package/lib/firebase/firebase.js
CHANGED
|
@@ -12,6 +12,7 @@ const firebaseQuery_1 = __importDefault(require("./firebaseQuery"));
|
|
|
12
12
|
const firebaseConfig_1 = require("./firebaseConfig");
|
|
13
13
|
const jobsSlice_1 = require("../features/jobs/jobsSlice");
|
|
14
14
|
const reduxHooks_1 = require("../reduxHooks");
|
|
15
|
+
const callableJobContext_1 = require("./callableJobContext");
|
|
15
16
|
const authListener = (setUser) => {
|
|
16
17
|
return (0, auth_1.onAuthStateChanged)(firebaseConfig_1.auth, (aUser) => {
|
|
17
18
|
if (!aUser) {
|
|
@@ -59,25 +60,32 @@ function sanitiseData(data) {
|
|
|
59
60
|
const executeCallable = async (functionName, data) => {
|
|
60
61
|
const currentUser = firebaseConfig_1.auth.currentUser;
|
|
61
62
|
const firebaseQuery = new firebaseQuery_1.default();
|
|
62
|
-
const
|
|
63
|
+
const date = new Date();
|
|
64
|
+
const context = callableJobContext_1.CALLABLE_JOB_CONTEXT[functionName];
|
|
65
|
+
const jobObject = {
|
|
63
66
|
functionName,
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
dataSent: sanitiseData(data),
|
|
68
|
+
status: "processing",
|
|
69
|
+
viewedBy: [],
|
|
70
|
+
started: date.toISOString(),
|
|
71
|
+
updated: date.toISOString(),
|
|
66
72
|
userId: currentUser?.uid ?? null,
|
|
67
73
|
userEmail: currentUser?.email ?? null,
|
|
68
74
|
url: typeof window !== "undefined" ? window.location.href : null,
|
|
69
|
-
|
|
75
|
+
collectionLink: context?.collectionLink ?? null,
|
|
76
|
+
collectionItemId: context?.collectionItemId?.(data) ?? null,
|
|
77
|
+
recipientId: context?.recipientId?.(data) ?? null,
|
|
70
78
|
};
|
|
71
|
-
const
|
|
79
|
+
const jobRef = firebaseQuery.add(["jobs"], jobObject);
|
|
72
80
|
const funcCallable = (0, functions_1.httpsCallable)(firebaseConfig_1.functions, functionName);
|
|
73
81
|
try {
|
|
74
82
|
const res = await funcCallable(data);
|
|
75
|
-
|
|
83
|
+
jobRef.then((doc) => firebaseQuery.update(["jobs", doc.id], { status: "complete", updated: new Date().toISOString() }));
|
|
76
84
|
return res;
|
|
77
85
|
}
|
|
78
86
|
catch (e) {
|
|
79
87
|
console.log("callableError", functionName, e);
|
|
80
|
-
|
|
88
|
+
jobRef.then((doc) => firebaseQuery.update(["jobs", doc.id], { status: "error", updated: new Date().toISOString(), error: e?.message ?? String(e) }));
|
|
81
89
|
throw e;
|
|
82
90
|
}
|
|
83
91
|
};
|
|
@@ -231,6 +239,7 @@ function useExecuteCallableJob({ user }) {
|
|
|
231
239
|
};
|
|
232
240
|
const date = new Date();
|
|
233
241
|
const firebaseQuery = new firebaseQuery_1.default();
|
|
242
|
+
const context = callableJobContext_1.CALLABLE_JOB_CONTEXT[functionName];
|
|
234
243
|
const jobObject = {
|
|
235
244
|
title: getCode()?.title,
|
|
236
245
|
description: getCode()?.description,
|
|
@@ -244,6 +253,9 @@ function useExecuteCallableJob({ user }) {
|
|
|
244
253
|
userId: user.id ?? null,
|
|
245
254
|
userEmail: user.email ?? null,
|
|
246
255
|
dataSent: sanitiseData(data),
|
|
256
|
+
collectionLink: context?.collectionLink ?? null,
|
|
257
|
+
collectionItemId: context?.collectionItemId?.(data) ?? null,
|
|
258
|
+
recipientId: context?.recipientId?.(data) ?? null,
|
|
247
259
|
};
|
|
248
260
|
const jobId = (await firebaseQuery.add(["jobs"], jobObject)).id;
|
|
249
261
|
console.log("jobId", jobId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../src/firebase/firebase.tsx"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../src/firebase/firebase.tsx"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -19,6 +19,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
20
|
exports.genericEmailDomains = void 0;
|
|
21
21
|
__exportStar(require("./firebase/firebase"), exports);
|
|
22
|
+
__exportStar(require("./firebase/callableJobContext"), exports);
|
|
22
23
|
__exportStar(require("./firebase/readDatabase"), exports);
|
|
23
24
|
__exportStar(require("./firebase/writeDatabase"), exports);
|
|
24
25
|
__exportStar(require("./firebase/util"), exports);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,sDAAoC;AACpC,0DAAwC;AACxC,2DAAyC;AACzC,kDAAgC;AAChC,4DAA0C;AAC1C,2DAAyC;AAEzC,oDAAkC;AAClC,kDAAgC;AAChC,uDAAqC;AACrC,iDAA+B;AAC/B,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,4DAA0C;AAC1C,kDAAgC;AAChC,iDAA+B;AAC/B,2CAAyB;AACzB,4DAA0C;AAC1C,oEAAiD;AACjD,yEAAuD;AACvD,kEAAgD;AAChD,kEAAgD;AAChD,oEAAkD;AAClD,yGAAuF;AACvF,0GAAwF;AACxF,+FAA6E;AAC7E,4DAA0C;AAC1C,oEAAkD;AAClD,gEAA8C;AAC9C,2EAAyD;AACzD,6CAA2B;AAC3B,+CAA6B;AAC7B,6DAAuE;AAA9D,2IAAA,OAAO,OAAuB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,sDAAoC;AACpC,gEAA8C;AAC9C,0DAAwC;AACxC,2DAAyC;AACzC,kDAAgC;AAChC,4DAA0C;AAC1C,2DAAyC;AAEzC,oDAAkC;AAClC,kDAAgC;AAChC,uDAAqC;AACrC,iDAA+B;AAC/B,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,4DAA0C;AAC1C,kDAAgC;AAChC,iDAA+B;AAC/B,2CAAyB;AACzB,4DAA0C;AAC1C,oEAAiD;AACjD,yEAAuD;AACvD,kEAAgD;AAChD,kEAAgD;AAChD,oEAAkD;AAClD,yGAAuF;AACvF,0GAAwF;AACxF,+FAA6E;AAC7E,4DAA0C;AAC1C,oEAAkD;AAClD,gEAA8C;AAC9C,2EAAyD;AACzD,6CAA2B;AAC3B,+CAA6B;AAC7B,6DAAuE;AAA9D,2IAAA,OAAO,OAAuB"}
|
package/lib/typeDefinitions.d.ts
CHANGED
|
@@ -760,6 +760,10 @@ export type ProviderContactData = {
|
|
|
760
760
|
providerConsentDate?: string;
|
|
761
761
|
MATschools?: string[];
|
|
762
762
|
notes?: Descendant[];
|
|
763
|
+
schoolGroups?: {
|
|
764
|
+
groups?: string[];
|
|
765
|
+
specificSchools?: string[];
|
|
766
|
+
};
|
|
763
767
|
additionalData?: {
|
|
764
768
|
[key: string]: unknown;
|
|
765
769
|
};
|
|
@@ -1568,6 +1572,7 @@ export type ExternalEvent = {
|
|
|
1568
1572
|
designatedStaff: string;
|
|
1569
1573
|
designatedStaffText: string;
|
|
1570
1574
|
eventRequestId?: string;
|
|
1575
|
+
employersViewed?: string;
|
|
1571
1576
|
equalexLearningOutcomes?: string;
|
|
1572
1577
|
created: string;
|
|
1573
1578
|
activityId?: string;
|
package/package.json
CHANGED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
export type CallableJobContext = {
|
|
2
|
+
collectionLink: string;
|
|
3
|
+
collectionItemId?: (data: unknown) => string | undefined;
|
|
4
|
+
recipientId?: (data: unknown) => string | undefined;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
const d = (data: unknown) => data as Record<string, unknown>;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Maps each callable function name to its Firestore collection context.
|
|
11
|
+
* collectionItemId/recipientId are accessor functions over the data payload.
|
|
12
|
+
* Used by executeCallable and useExecuteCallableJob to tag job documents,
|
|
13
|
+
* allowing jobs to be queried by collection/item (e.g. all jobs for an event).
|
|
14
|
+
*/
|
|
15
|
+
export const CALLABLE_JOB_CONTEXT: Record<string, CallableJobContext> = {
|
|
16
|
+
// ─── Events ────────────────────────────────────────────────────────────────
|
|
17
|
+
"events-sendExternalEventInvites": {
|
|
18
|
+
collectionLink: "externalEvents",
|
|
19
|
+
collectionItemId: (data) => (d(data)?.data as any)?.eventId,
|
|
20
|
+
},
|
|
21
|
+
"events-sendEmployerConfirmations": {
|
|
22
|
+
collectionLink: "externalEvents",
|
|
23
|
+
collectionItemId: (data) => (d(data)?.data as any)?.event?.id,
|
|
24
|
+
},
|
|
25
|
+
"events-addStudents": {
|
|
26
|
+
collectionLink: "externalEvents",
|
|
27
|
+
collectionItemId: (data) => (d(data)?.event as any)?.id,
|
|
28
|
+
},
|
|
29
|
+
"events-studentJoinEvent": {
|
|
30
|
+
collectionLink: "externalEvents",
|
|
31
|
+
collectionItemId: (data) => d(data)?.eventId as string | undefined,
|
|
32
|
+
},
|
|
33
|
+
"events-careersHubAddSchool": {
|
|
34
|
+
collectionLink: "externalEvents",
|
|
35
|
+
collectionItemId: (data) => d(data)?.eventId as string | undefined,
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
// ─── User Management ───────────────────────────────────────────────────────
|
|
39
|
+
"userManagement-addUsers": {
|
|
40
|
+
collectionLink: "users",
|
|
41
|
+
},
|
|
42
|
+
"userManagement-activateUsers": {
|
|
43
|
+
collectionLink: "users",
|
|
44
|
+
},
|
|
45
|
+
"userManagement-deactivateUsers": {
|
|
46
|
+
collectionLink: "users",
|
|
47
|
+
},
|
|
48
|
+
"userManagement-deleteUsers": {
|
|
49
|
+
collectionLink: "users",
|
|
50
|
+
},
|
|
51
|
+
"userManagement-uploadAnalytics": {
|
|
52
|
+
collectionLink: "users",
|
|
53
|
+
},
|
|
54
|
+
"userManagement-sendParentWelcomeEmail": {
|
|
55
|
+
collectionLink: "users",
|
|
56
|
+
},
|
|
57
|
+
"userManagement-addStudentsToCohort": {
|
|
58
|
+
collectionLink: "cohorts",
|
|
59
|
+
collectionItemId: (data) => d(data)?.cohortId as string | undefined,
|
|
60
|
+
},
|
|
61
|
+
"userManagement-removeFromCohort": {
|
|
62
|
+
collectionLink: "users",
|
|
63
|
+
collectionItemId: (data) => d(data)?.cohortId as string | undefined,
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
// ─── Provider Contacts ─────────────────────────────────────────────────────
|
|
67
|
+
"providerContacts-add": {
|
|
68
|
+
collectionLink: "providerContacts",
|
|
69
|
+
},
|
|
70
|
+
"providerContacts-delete": {
|
|
71
|
+
collectionLink: "providerContacts",
|
|
72
|
+
},
|
|
73
|
+
"providerContacts-resendEmployerInvite": {
|
|
74
|
+
collectionLink: "providerContacts",
|
|
75
|
+
},
|
|
76
|
+
"providerContacts-approveEmployerContacts": {
|
|
77
|
+
collectionLink: "providerContacts",
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
// ─── Placement Listings ────────────────────────────────────────────────────
|
|
81
|
+
"placementListing-addToCohort": {
|
|
82
|
+
collectionLink: "placementListings",
|
|
83
|
+
collectionItemId: (data) => d(data)?.cohortId as string | undefined,
|
|
84
|
+
},
|
|
85
|
+
"placementListing-delist": {
|
|
86
|
+
collectionLink: "placementListings",
|
|
87
|
+
collectionItemId: (data) => d(data)?.cohortId as string | undefined,
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
// ─── Placements ────────────────────────────────────────────────────────────
|
|
91
|
+
"placement-bulkUpload": {
|
|
92
|
+
collectionLink: "placements",
|
|
93
|
+
collectionItemId: (data) => d(data)?.cohortId as string | undefined,
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
// ─── Registration ──────────────────────────────────────────────────────────
|
|
97
|
+
"registration-registerInstitutes": {
|
|
98
|
+
collectionLink: "institutes",
|
|
99
|
+
},
|
|
100
|
+
"registration-resendSchoolInvites": {
|
|
101
|
+
collectionLink: "careersInvites",
|
|
102
|
+
},
|
|
103
|
+
"registration-deleteSchoolInvites": {
|
|
104
|
+
collectionLink: "careersInvites",
|
|
105
|
+
},
|
|
106
|
+
"registration-registerInstitute": {
|
|
107
|
+
collectionLink: "institutes",
|
|
108
|
+
},
|
|
109
|
+
"registration-registerProvider": {
|
|
110
|
+
collectionLink: "providerContacts",
|
|
111
|
+
},
|
|
112
|
+
"registration-registerStudent": {
|
|
113
|
+
collectionLink: "users",
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
// ─── Admissions ────────────────────────────────────────────────────────────
|
|
117
|
+
"admissions-createCohort": {
|
|
118
|
+
collectionLink: "admissionCohorts",
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
// ─── Parents ───────────────────────────────────────────────────────────────
|
|
122
|
+
"parents-add": {
|
|
123
|
+
collectionLink: "parents",
|
|
124
|
+
},
|
|
125
|
+
"parents-bulkApprove": {
|
|
126
|
+
collectionLink: "parents",
|
|
127
|
+
},
|
|
128
|
+
};
|
|
@@ -7,6 +7,7 @@ import FirebaseQuery from "./firebaseQuery";
|
|
|
7
7
|
import {auth, functions} from "./firebaseConfig";
|
|
8
8
|
import {addJob, Job, updateJob} from "../features/jobs/jobsSlice";
|
|
9
9
|
import { useAppDispatch } from "../reduxHooks";
|
|
10
|
+
import { CALLABLE_JOB_CONTEXT } from "./callableJobContext";
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
export const authListener = (setUser: SetStateAction<any>) => {
|
|
@@ -67,41 +68,37 @@ function sanitiseData(data: unknown): unknown {
|
|
|
67
68
|
);
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
export type CallableLog = {
|
|
71
|
-
functionName: string;
|
|
72
|
-
data: unknown;
|
|
73
|
-
timestamp: string;
|
|
74
|
-
userId: string | null;
|
|
75
|
-
userEmail: string | null;
|
|
76
|
-
url: string | null;
|
|
77
|
-
outcome: "pending" | "success" | "error";
|
|
78
|
-
error?: string;
|
|
79
|
-
};
|
|
80
|
-
|
|
81
71
|
export const executeCallable = async (functionName: string, data: unknown) => {
|
|
82
72
|
const currentUser = auth.currentUser;
|
|
83
73
|
const firebaseQuery = new FirebaseQuery();
|
|
74
|
+
const date = new Date();
|
|
75
|
+
const context = CALLABLE_JOB_CONTEXT[functionName];
|
|
84
76
|
|
|
85
|
-
const
|
|
77
|
+
const jobObject = {
|
|
86
78
|
functionName,
|
|
87
|
-
|
|
88
|
-
|
|
79
|
+
dataSent: sanitiseData(data),
|
|
80
|
+
status: "processing",
|
|
81
|
+
viewedBy: [],
|
|
82
|
+
started: date.toISOString(),
|
|
83
|
+
updated: date.toISOString(),
|
|
89
84
|
userId: currentUser?.uid ?? null,
|
|
90
85
|
userEmail: currentUser?.email ?? null,
|
|
91
86
|
url: typeof window !== "undefined" ? window.location.href : null,
|
|
92
|
-
|
|
87
|
+
collectionLink: context?.collectionLink ?? null,
|
|
88
|
+
collectionItemId: context?.collectionItemId?.(data) ?? null,
|
|
89
|
+
recipientId: context?.recipientId?.(data) ?? null,
|
|
93
90
|
};
|
|
94
91
|
|
|
95
|
-
const
|
|
92
|
+
const jobRef = firebaseQuery.add(["jobs"], jobObject as unknown as {[key: string]: unknown});
|
|
96
93
|
|
|
97
94
|
const funcCallable = httpsCallable(functions, functionName);
|
|
98
95
|
try {
|
|
99
96
|
const res = await funcCallable(data);
|
|
100
|
-
|
|
97
|
+
jobRef.then((doc) => firebaseQuery.update(["jobs", doc.id], {status: "complete", updated: new Date().toISOString()}));
|
|
101
98
|
return res as {data: any};
|
|
102
99
|
} catch (e: any) {
|
|
103
100
|
console.log("callableError", functionName, e);
|
|
104
|
-
|
|
101
|
+
jobRef.then((doc) => firebaseQuery.update(["jobs", doc.id], {status: "error", updated: new Date().toISOString(), error: e?.message ?? String(e)}));
|
|
105
102
|
throw e;
|
|
106
103
|
}
|
|
107
104
|
};
|
|
@@ -274,6 +271,7 @@ export function useExecuteCallableJob({user}:{user: UserData}) {
|
|
|
274
271
|
|
|
275
272
|
const date = new Date();
|
|
276
273
|
const firebaseQuery = new FirebaseQuery();
|
|
274
|
+
const context = CALLABLE_JOB_CONTEXT[functionName];
|
|
277
275
|
|
|
278
276
|
const jobObject = {
|
|
279
277
|
title: getCode()?.title,
|
|
@@ -288,6 +286,9 @@ export function useExecuteCallableJob({user}:{user: UserData}) {
|
|
|
288
286
|
userId: user.id ?? null,
|
|
289
287
|
userEmail: user.email ?? null,
|
|
290
288
|
dataSent: sanitiseData(data),
|
|
289
|
+
collectionLink: context?.collectionLink ?? null,
|
|
290
|
+
collectionItemId: context?.collectionItemId?.(data) ?? null,
|
|
291
|
+
recipientId: context?.recipientId?.(data) ?? null,
|
|
291
292
|
};
|
|
292
293
|
|
|
293
294
|
const jobId = (await firebaseQuery.add(["jobs"], jobObject)).id;
|
package/src/index.ts
CHANGED
package/src/typeDefinitions.ts
CHANGED
|
@@ -758,6 +758,10 @@ export type ProviderContactData = {
|
|
|
758
758
|
providerConsentDate?: string,
|
|
759
759
|
MATschools?: string[],
|
|
760
760
|
notes?: Descendant[],
|
|
761
|
+
schoolGroups?: {
|
|
762
|
+
groups?: string[],
|
|
763
|
+
specificSchools?: string[],
|
|
764
|
+
},
|
|
761
765
|
additionalData?: {[key: string]: unknown},
|
|
762
766
|
status: "uploaded"|"approved"|"rejected"|"providerReviewed"|"blocked"}},
|
|
763
767
|
}&Address
|
|
@@ -1517,6 +1521,7 @@ export type ExternalEvent = {
|
|
|
1517
1521
|
designatedStaff: string,
|
|
1518
1522
|
designatedStaffText: string,
|
|
1519
1523
|
eventRequestId?: string,
|
|
1524
|
+
employersViewed?: string,
|
|
1520
1525
|
equalexLearningOutcomes?: string,
|
|
1521
1526
|
created: string,
|
|
1522
1527
|
activityId?: string,
|