placementt-core 1.400.871 → 1.400.873
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 +6 -1
- 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 +4 -1
|
@@ -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":"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"}
|
|
@@ -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
|
@@ -751,7 +751,7 @@ export type ProviderContactData = {
|
|
|
751
751
|
accessCode?: string;
|
|
752
752
|
accessExpiry?: string;
|
|
753
753
|
savedBy?: {
|
|
754
|
-
[
|
|
754
|
+
[oId: string]: {
|
|
755
755
|
exists: true;
|
|
756
756
|
activities?: null | string[];
|
|
757
757
|
eventsConsent?: boolean;
|
|
@@ -760,6 +760,9 @@ export type ProviderContactData = {
|
|
|
760
760
|
providerConsentDate?: string;
|
|
761
761
|
MATschools?: string[];
|
|
762
762
|
notes?: Descendant[];
|
|
763
|
+
additionalData?: {
|
|
764
|
+
[key: string]: unknown;
|
|
765
|
+
};
|
|
763
766
|
status: "uploaded" | "approved" | "rejected" | "providerReviewed" | "blocked";
|
|
764
767
|
};
|
|
765
768
|
};
|
|
@@ -769,6 +772,7 @@ export type InstituteData = {
|
|
|
769
772
|
staff: number;
|
|
770
773
|
studentsFields: string[];
|
|
771
774
|
staffFields: string[];
|
|
775
|
+
employerFields: string[];
|
|
772
776
|
studentsActive: number;
|
|
773
777
|
staffActive: number;
|
|
774
778
|
admin: string;
|
|
@@ -1564,6 +1568,7 @@ export type ExternalEvent = {
|
|
|
1564
1568
|
designatedStaff: string;
|
|
1565
1569
|
designatedStaffText: string;
|
|
1566
1570
|
eventRequestId?: string;
|
|
1571
|
+
employersViewed?: string;
|
|
1567
1572
|
equalexLearningOutcomes?: string;
|
|
1568
1573
|
created: string;
|
|
1569
1574
|
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
|
@@ -749,7 +749,7 @@ export type ProviderContactData = {
|
|
|
749
749
|
insuranceExpiry?: string,
|
|
750
750
|
accessCode?: string,
|
|
751
751
|
accessExpiry?: string,
|
|
752
|
-
savedBy?: {[
|
|
752
|
+
savedBy?: {[oId: string]: {
|
|
753
753
|
exists: true,
|
|
754
754
|
activities?: null|string[], // IDs of consented activities.
|
|
755
755
|
eventsConsent?: boolean,
|
|
@@ -758,6 +758,7 @@ export type ProviderContactData = {
|
|
|
758
758
|
providerConsentDate?: string,
|
|
759
759
|
MATschools?: string[],
|
|
760
760
|
notes?: Descendant[],
|
|
761
|
+
additionalData?: {[key: string]: unknown},
|
|
761
762
|
status: "uploaded"|"approved"|"rejected"|"providerReviewed"|"blocked"}},
|
|
762
763
|
}&Address
|
|
763
764
|
|
|
@@ -766,6 +767,7 @@ export type InstituteData = {
|
|
|
766
767
|
staff: number,
|
|
767
768
|
studentsFields: string[],
|
|
768
769
|
staffFields: string[],
|
|
770
|
+
employerFields: string[],
|
|
769
771
|
studentsActive: number,
|
|
770
772
|
staffActive: number,
|
|
771
773
|
admin: string,
|
|
@@ -1515,6 +1517,7 @@ export type ExternalEvent = {
|
|
|
1515
1517
|
designatedStaff: string,
|
|
1516
1518
|
designatedStaffText: string,
|
|
1517
1519
|
eventRequestId?: string,
|
|
1520
|
+
employersViewed?: string,
|
|
1518
1521
|
equalexLearningOutcomes?: string,
|
|
1519
1522
|
created: string,
|
|
1520
1523
|
activityId?: string,
|