placementt-core 11.0.533 → 11.10.151
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/constants.d.ts +1 -0
- package/lib/constants.js +6 -0
- package/lib/constants.js.map +1 -1
- package/lib/features/analytics/useAnalytics.d.ts +2 -0
- package/lib/features/analytics/useAnalytics.js +21 -16
- package/lib/features/analytics/useAnalytics.js.map +1 -1
- package/lib/features/global/downtime/useDowntime.d.ts +1 -0
- package/lib/features/global/downtime/useDowntime.js +9 -7
- package/lib/features/global/downtime/useDowntime.js.map +1 -1
- package/lib/features/global/users/useUserFunctions.js +1 -1
- package/lib/features/global/users/useUserFunctions.js.map +1 -1
- package/lib/features/placements/studentPlacements/activePlacement.d.ts +5 -1
- package/lib/features/placements/studentPlacements/activePlacement.js +7 -3
- package/lib/features/placements/studentPlacements/activePlacement.js.map +1 -1
- package/lib/features/placements/studentPlacements/completedStudentPlacementsSlice.d.ts +3 -2
- package/lib/features/placements/studentPlacements/completedStudentPlacementsSlice.js +4 -1
- package/lib/features/placements/studentPlacements/completedStudentPlacementsSlice.js.map +1 -1
- package/lib/features/placements/studentPlacements/upcomingStudentPlacementsSlice.d.ts +2 -2
- package/lib/features/placements/studentPlacements/upcomingStudentPlacementsSlice.js +1 -1
- package/lib/features/placements/studentPlacements/upcomingStudentPlacementsSlice.js.map +1 -1
- package/lib/features/placements/studentPlacements/useStudentPlacements.d.ts +2 -12
- package/lib/features/placements/studentPlacements/useStudentPlacements.js +1 -26
- package/lib/features/placements/studentPlacements/useStudentPlacements.js.map +1 -1
- package/lib/features/updates/useUpdates.d.ts +1 -0
- package/lib/features/updates/useUpdates.js +13 -12
- package/lib/features/updates/useUpdates.js.map +1 -1
- package/lib/firebase/firebase.d.ts +3 -1
- package/lib/firebase/firebase.js +4 -3
- package/lib/firebase/firebase.js.map +1 -1
- package/lib/firebase/firebaseQuery.d.ts +3 -1
- package/lib/firebase/firebaseQuery.js +8 -1
- package/lib/firebase/firebaseQuery.js.map +1 -1
- package/lib/firebase/readDatabase.d.ts +2 -4
- package/lib/firebase/readDatabase.js +28 -5
- package/lib/firebase/readDatabase.js.map +1 -1
- package/lib/firebase/writeDatabase.d.ts +6 -2
- package/lib/firebase/writeDatabase.js +2 -1
- package/lib/firebase/writeDatabase.js.map +1 -1
- package/lib/hooks.d.ts +108 -9
- package/lib/hooks.js +547 -58
- package/lib/hooks.js.map +1 -1
- package/lib/reduxHooks.d.ts +41 -3
- package/lib/reduxHooks.js +61 -18
- package/lib/reduxHooks.js.map +1 -1
- package/lib/tasksAndTips.d.ts +1 -1
- package/lib/tasksAndTips.js +179 -8
- package/lib/tasksAndTips.js.map +1 -1
- package/lib/typeDefinitions.d.ts +14 -22
- package/lib/util.js +14 -8
- package/lib/util.js.map +1 -1
- package/package.json +1 -1
- package/src/constants.ts +7 -1
- package/src/features/analytics/useAnalytics.tsx +24 -15
- package/src/features/global/downtime/useDowntime.tsx +11 -7
- package/src/features/global/users/useUserFunctions.tsx +1 -1
- package/src/features/placements/studentPlacements/activePlacement.ts +8 -3
- package/src/features/placements/studentPlacements/completedStudentPlacementsSlice.ts +5 -2
- package/src/features/placements/studentPlacements/upcomingStudentPlacementsSlice.ts +2 -2
- package/src/features/placements/studentPlacements/useStudentPlacements.tsx +4 -28
- package/src/features/updates/useUpdates.tsx +14 -12
- package/src/firebase/firebase.tsx +5 -3
- package/src/firebase/firebaseQuery.tsx +8 -1
- package/src/firebase/readDatabase.tsx +33 -6
- package/src/firebase/writeDatabase.tsx +3 -1
- package/src/hooks.tsx +695 -61
- package/src/reduxHooks.ts +68 -20
- package/src/tasksAndTips.ts +184 -11
- package/src/typeDefinitions.ts +14 -20
- package/src/util.ts +14 -9
package/lib/reduxHooks.d.ts
CHANGED
|
@@ -102,13 +102,32 @@ export declare function useStudent({ user }: {
|
|
|
102
102
|
[key: string]: unknown;
|
|
103
103
|
};
|
|
104
104
|
};
|
|
105
|
+
fetchContacts: () => void;
|
|
105
106
|
getById: (item: string) => Promise<import("@firebase/firestore").DocumentData>;
|
|
106
107
|
};
|
|
107
108
|
placements: {
|
|
108
109
|
add: (formData: StudentPlacementData) => Promise<void>;
|
|
109
|
-
update: (placementId: string,
|
|
110
|
+
update: (placementId: string, attributes: Partial<StudentPlacementData>) => Promise<void>;
|
|
110
111
|
delete: (id: string) => Promise<void>;
|
|
112
|
+
getUserPlacements: () => Promise<void | import("@firebase/firestore").QuerySnapshot<import("@firebase/firestore").DocumentData> | {
|
|
113
|
+
[k: string]: any;
|
|
114
|
+
}>;
|
|
115
|
+
getPlacementsStart: (start: Date, end: Date) => Promise<{
|
|
116
|
+
[key: string]: StudentPlacementData;
|
|
117
|
+
}>;
|
|
118
|
+
getPlacementsEnd: (end: Date) => Promise<{
|
|
119
|
+
[key: string]: StudentPlacementData;
|
|
120
|
+
}>;
|
|
111
121
|
activePlacement: StudentPlacementData | undefined;
|
|
122
|
+
editActivePlacement: (attributes: Partial<StudentPlacementData>) => {
|
|
123
|
+
payload: any;
|
|
124
|
+
type: "activePlacement/editActivePlacement";
|
|
125
|
+
};
|
|
126
|
+
updateActivePlacement: () => void;
|
|
127
|
+
updateUpcomingPlacement: () => void;
|
|
128
|
+
fetchUpcomingPlacements: () => void;
|
|
129
|
+
fetchCompletedPlacements: () => void;
|
|
130
|
+
dispatchActivePlacement: () => void;
|
|
112
131
|
upcoming: StudentPlacementData | undefined;
|
|
113
132
|
upcomingPlacements: {
|
|
114
133
|
[key: string]: StudentPlacementData;
|
|
@@ -120,7 +139,7 @@ export declare function useStudent({ user }: {
|
|
|
120
139
|
};
|
|
121
140
|
applications: {
|
|
122
141
|
[key: string]: Application & {
|
|
123
|
-
listing: PlacementListing;
|
|
142
|
+
listing: PlacementListing | false;
|
|
124
143
|
provider: ProviderData;
|
|
125
144
|
address: Address;
|
|
126
145
|
};
|
|
@@ -235,13 +254,32 @@ export declare function useInstituteStudent({ user }: {
|
|
|
235
254
|
[key: string]: unknown;
|
|
236
255
|
};
|
|
237
256
|
};
|
|
257
|
+
fetchContacts: () => void;
|
|
238
258
|
getById: (item: string) => Promise<import("@firebase/firestore").DocumentData>;
|
|
239
259
|
} | undefined;
|
|
240
260
|
placements: {
|
|
241
261
|
add: (formData: StudentPlacementData) => Promise<void>;
|
|
242
|
-
update: (placementId: string,
|
|
262
|
+
update: (placementId: string, attributes: Partial<StudentPlacementData>) => Promise<void>;
|
|
243
263
|
delete: (id: string) => Promise<void>;
|
|
264
|
+
getUserPlacements: () => Promise<void | import("@firebase/firestore").QuerySnapshot<import("@firebase/firestore").DocumentData> | {
|
|
265
|
+
[k: string]: any;
|
|
266
|
+
}>;
|
|
267
|
+
getPlacementsStart: (start: Date, end: Date) => Promise<{
|
|
268
|
+
[key: string]: StudentPlacementData;
|
|
269
|
+
}>;
|
|
270
|
+
getPlacementsEnd: (end: Date) => Promise<{
|
|
271
|
+
[key: string]: StudentPlacementData;
|
|
272
|
+
}>;
|
|
244
273
|
activePlacement: StudentPlacementData | undefined;
|
|
274
|
+
editActivePlacement: (attributes: Partial<StudentPlacementData>) => {
|
|
275
|
+
payload: any;
|
|
276
|
+
type: "activePlacement/editActivePlacement";
|
|
277
|
+
};
|
|
278
|
+
updateActivePlacement: () => void;
|
|
279
|
+
updateUpcomingPlacement: () => void;
|
|
280
|
+
fetchUpcomingPlacements: () => void;
|
|
281
|
+
fetchCompletedPlacements: () => void;
|
|
282
|
+
dispatchActivePlacement: () => void;
|
|
245
283
|
upcoming: StudentPlacementData | undefined;
|
|
246
284
|
upcomingPlacements: {
|
|
247
285
|
[key: string]: StudentPlacementData;
|
package/lib/reduxHooks.js
CHANGED
|
@@ -17,6 +17,8 @@ const activePlacement_1 = require("./features/placements/studentPlacements/activ
|
|
|
17
17
|
const completedStudentPlacementsSlice_1 = require("./features/placements/studentPlacements/completedStudentPlacementsSlice");
|
|
18
18
|
const upcomingStudentPlacementsSlice_1 = require("./features/placements/studentPlacements/upcomingStudentPlacementsSlice");
|
|
19
19
|
const firebaseQuery_1 = __importDefault(require("./firebase/firebaseQuery"));
|
|
20
|
+
const readDatabase_1 = require("./firebase/readDatabase");
|
|
21
|
+
const util_1 = require("./firebase/util");
|
|
20
22
|
exports.useAppSelector = react_redux_1.useSelector;
|
|
21
23
|
const useAppDispatch = () => (0, react_redux_1.useDispatch)();
|
|
22
24
|
exports.useAppDispatch = useAppDispatch;
|
|
@@ -43,27 +45,46 @@ function useStudent({ user }) {
|
|
|
43
45
|
firebaseQuery.collectionSnapshot(async (fApplications) => {
|
|
44
46
|
const applicationsWithProviderAndListing = Object.fromEntries(await Promise.all(Object.entries(fApplications).map(async ([id, application]) => {
|
|
45
47
|
const provider = await firebaseQuery.getDocData(["providers", application.providerId]);
|
|
46
|
-
const listing = await firebaseQuery.getDocData(["placementListings", application.listingId]);
|
|
47
|
-
const address = listing.addressId && await firebaseQuery.getDocData(["addresses", listing.addressId]);
|
|
48
|
+
const listing = await firebaseQuery.getDocData(["placementListings", application.listingId]).catch(() => false);
|
|
49
|
+
const address = listing && (listing === null || listing === void 0 ? void 0 : listing.addressId) && await firebaseQuery.getDocData(["addresses", listing.addressId]);
|
|
48
50
|
return [id, { ...application, listing: listing, provider: provider, address: address }];
|
|
49
51
|
})));
|
|
50
52
|
setApplications(applicationsWithProviderAndListing);
|
|
51
53
|
}, "applications", applicationsConstraints);
|
|
52
|
-
}, [
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
}, [user.id]);
|
|
55
|
+
/*
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (!user.id) return
|
|
58
|
+
dispatch(fetchActivePlacement({userId: user.id}))
|
|
59
|
+
}, [dispatch, user.id, upcomingPlacements]);
|
|
60
|
+
*/
|
|
61
|
+
const fetchUpcomingPlacements = () => {
|
|
62
|
+
const constraints = [(0, firestore_1.where)("uid", "==", user.id), (0, firestore_1.where)("inProgress", "==", true), (0, firestore_1.orderBy)("startDate")];
|
|
63
|
+
firebaseQuery.collectionSnapshot(upcomingStudentPlacementsSlice_1.setUpcomingStudentPlacements, "placements", constraints, dispatch);
|
|
64
|
+
};
|
|
65
|
+
const fetchCompletedPlacements = () => {
|
|
66
|
+
const constraints = [(0, firestore_1.where)("uid", "==", user.id), (0, firestore_1.where)("completed", "==", true), (0, firestore_1.orderBy)("startDate")];
|
|
67
|
+
firebaseQuery.collectionSnapshot(completedStudentPlacementsSlice_1.setCompletedStudentPlacements, "placements", constraints, dispatch);
|
|
68
|
+
};
|
|
69
|
+
const fetchContacts = () => {
|
|
70
|
+
const constraints = [(0, firestore_1.where)("uid", "==", user.id)];
|
|
71
|
+
firebaseQuery.collectionSnapshot(contactsSlice_1.setContacts, "contacts", constraints, dispatch);
|
|
72
|
+
};
|
|
73
|
+
const updateUpcomingPlacement = () => {
|
|
60
74
|
if (!upcomingPlacements || !Object.entries(upcomingPlacements).length) {
|
|
61
75
|
dispatch((0, upcomingStudentPlacementsSlice_1.setUpcoming)(undefined));
|
|
62
76
|
return;
|
|
63
77
|
}
|
|
64
78
|
const upcomingPlacement = Object.entries(upcomingPlacements).find(([, v]) => new Date(v.startDate).getTime() > today.getTime());
|
|
65
79
|
upcomingPlacement ? dispatch((0, upcomingStudentPlacementsSlice_1.setUpcoming)(upcomingPlacement[1])) : dispatch((0, upcomingStudentPlacementsSlice_1.setUpcoming)(undefined));
|
|
66
|
-
}
|
|
80
|
+
};
|
|
81
|
+
const updateActivePlacement = () => {
|
|
82
|
+
const key = Object.keys(upcomingPlacements).find((key) => {
|
|
83
|
+
const placement = upcomingPlacements[key];
|
|
84
|
+
return placement.active;
|
|
85
|
+
});
|
|
86
|
+
key ? dispatch((0, activePlacement_1.setActivePlacement)(upcomingPlacements[key])) : dispatch((0, activePlacement_1.setActivePlacement)(null));
|
|
87
|
+
};
|
|
67
88
|
const getItemById = async (path, id) => {
|
|
68
89
|
return await firebaseQuery.getDocData([path, id]);
|
|
69
90
|
};
|
|
@@ -73,11 +94,11 @@ function useStudent({ user }) {
|
|
|
73
94
|
else
|
|
74
95
|
dispatch((0, completedStudentPlacementsSlice_1.deleteCompletedStudentPlacement)({ placementId: id }));
|
|
75
96
|
};
|
|
76
|
-
const handleUpdatePlacement = async (id,
|
|
97
|
+
const handleUpdatePlacement = async (id, attributes) => {
|
|
77
98
|
if (upcomingPlacements[id])
|
|
78
|
-
dispatch((0, upcomingStudentPlacementsSlice_1.updateUpcomingStudentPlacement)({ placementId: id, attributes
|
|
99
|
+
dispatch((0, upcomingStudentPlacementsSlice_1.updateUpcomingStudentPlacement)({ placementId: id, attributes }));
|
|
79
100
|
else
|
|
80
|
-
dispatch((0, completedStudentPlacementsSlice_1.updateCompletedStudentPlacement)({ placementId: id, attributes
|
|
101
|
+
dispatch((0, completedStudentPlacementsSlice_1.updateCompletedStudentPlacement)({ placementId: id, attributes }));
|
|
81
102
|
};
|
|
82
103
|
const handleAddPlacement = async (formData) => {
|
|
83
104
|
if (formData.completed)
|
|
@@ -85,19 +106,41 @@ function useStudent({ user }) {
|
|
|
85
106
|
else
|
|
86
107
|
dispatch((0, upcomingStudentPlacementsSlice_1.addUpcomingStudentPlacements)({ formData }));
|
|
87
108
|
};
|
|
109
|
+
const getUserPlacements = async () => {
|
|
110
|
+
return await (0, readDatabase_1.getPlacementsWhere)({ w: (0, firestore_1.where)("uid", "==", user === null || user === void 0 ? void 0 : user.id) });
|
|
111
|
+
};
|
|
112
|
+
const getPlacementsStart = async (start, end) => {
|
|
113
|
+
return await firebaseQuery.getDocsWhere("placements", [(0, firestore_1.where)("uid", "==", user === null || user === void 0 ? void 0 : user.id), (0, firestore_1.where)("startDate", ">=", (0, util_1.convertDate)(start, "dbstring")), (0, firestore_1.where)("startDate", "<=", (0, util_1.convertDate)(end, "dbstring"))]);
|
|
114
|
+
};
|
|
115
|
+
const getPlacementsEnd = async (end) => {
|
|
116
|
+
return await firebaseQuery.getDocsWhere("placements", [(0, firestore_1.where)("uid", "==", user === null || user === void 0 ? void 0 : user.id), (0, firestore_1.where)("endDate", ">=", (0, util_1.convertDate)(end, "dbstring")), (0, firestore_1.where)("endDate", "<=", (0, util_1.convertDate)(end, "dbstring"))]);
|
|
117
|
+
};
|
|
118
|
+
const dispatchActivePlacement = () => {
|
|
119
|
+
dispatch((0, activePlacement_1.fetchActivePlacement)({ userId: user.id }));
|
|
120
|
+
};
|
|
88
121
|
return {
|
|
89
122
|
contacts: {
|
|
90
|
-
add: async (contactForm) => dispatch((0, contactsSlice_1.addContact)({ contactForm: contactForm, userId: user.id })),
|
|
91
|
-
update: async (contactId, data) => dispatch((0, contactsSlice_1.updateContact)({ contactId: contactId, attributes: data })),
|
|
92
|
-
delete: async (contactId) => dispatch((0, contactsSlice_1.deleteContact)({ contactId: contactId })),
|
|
123
|
+
add: async (contactForm) => await dispatch((0, contactsSlice_1.addContact)({ contactForm: contactForm, userId: user.id })),
|
|
124
|
+
update: async (contactId, data) => await dispatch((0, contactsSlice_1.updateContact)({ contactId: contactId, attributes: data })),
|
|
125
|
+
delete: async (contactId) => await dispatch((0, contactsSlice_1.deleteContact)({ contactId: contactId })),
|
|
93
126
|
contacts,
|
|
127
|
+
fetchContacts,
|
|
94
128
|
getById: async (item) => await getItemById("contacts", item)
|
|
95
129
|
},
|
|
96
130
|
placements: {
|
|
97
131
|
add: async (formData) => await handleAddPlacement(formData),
|
|
98
|
-
update: async (placementId,
|
|
132
|
+
update: async (placementId, attributes) => await handleUpdatePlacement(placementId, attributes),
|
|
99
133
|
delete: async (id) => await handleDeletePlacement(id),
|
|
134
|
+
getUserPlacements,
|
|
135
|
+
getPlacementsStart,
|
|
136
|
+
getPlacementsEnd,
|
|
100
137
|
activePlacement,
|
|
138
|
+
editActivePlacement: (attributes) => dispatch((0, activePlacement_1.editActivePlacement)(attributes)),
|
|
139
|
+
updateActivePlacement,
|
|
140
|
+
updateUpcomingPlacement,
|
|
141
|
+
fetchUpcomingPlacements,
|
|
142
|
+
fetchCompletedPlacements,
|
|
143
|
+
dispatchActivePlacement,
|
|
101
144
|
upcoming,
|
|
102
145
|
upcomingPlacements: upcomingPlacements || {},
|
|
103
146
|
completedPlacements: completedPlacements || {},
|
package/lib/reduxHooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reduxHooks.js","sourceRoot":"","sources":["../src/reduxHooks.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"reduxHooks.js","sourceRoot":"","sources":["../src/reduxHooks.ts"],"names":[],"mappings":"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"}
|
package/lib/tasksAndTips.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ type ProviderTipNames = string;
|
|
|
4
4
|
type StudentTipNames = string;
|
|
5
5
|
export type InstituteTaskNames = "missingParentEmail" | "verifyInsurance" | "verifyRiskAssessment" | "verifyDbsCheck" | "inactiveStudents" | "uploadStudents" | "inactiveStaff" | "requiredStage" | "approveExternalPlacement" | "overdueStage";
|
|
6
6
|
export type StudentTaskNames = "completeOnboarding";
|
|
7
|
-
export type ProviderTaskNames = "applicationRequireReview" | "requestedVisiblePlacementListings" | "requestedVisibleAddresses" | "completeStudentDocs" | "reviewOnboarding" | "completeListing" | "completeAddress" | "registrationRequests" | "placementStarting" | "completeFeedback" | "setUpFeedback";
|
|
7
|
+
export type ProviderTaskNames = "applicationRequireReview" | "activateStaff" | "requestedVisiblePlacementListings" | "requestedVisibleAddresses" | "completeStudentDocs" | "uploadOnboarding" | "reviewOnboarding" | "completeListing" | "completeAddress" | "registrationRequests" | "placementStarting" | "completeFeedback" | "setUpFeedback";
|
|
8
8
|
export type TaskQueryReturnObject = {
|
|
9
9
|
itemName?: InstituteTaskNames | InstituteTipNames | StudentTipNames | ProviderTipNames;
|
|
10
10
|
title?: string;
|
package/lib/tasksAndTips.js
CHANGED
|
@@ -460,11 +460,13 @@ const studentTasks = {
|
|
|
460
460
|
const providerTasks = {
|
|
461
461
|
requestedVisibleAddresses: {
|
|
462
462
|
callback: async (user) => {
|
|
463
|
-
|
|
463
|
+
if (!(0, util_1.getAccess)(user, "addStaff"))
|
|
464
|
+
return;
|
|
465
|
+
const accessRequests = await firebaseQuery.getCount("users", [(0, firestore_1.where)("oId", "==", user.oId), (0, firestore_1.where)("product", "==", "providers"), (0, firestore_1.orderBy)("requestedVisibleAddresses")]) - ((Array.isArray(user === null || user === void 0 ? void 0 : user.requestedVisibleAddresses) && (user === null || user === void 0 ? void 0 : user.requestedVisibleAddresses.length) > 0) ? 1 : 0);
|
|
464
466
|
if (accessRequests === 0)
|
|
465
467
|
return;
|
|
466
468
|
if (accessRequests === 1) {
|
|
467
|
-
const userRequestingAccess = Object.entries(await firebaseQuery.getDocsWhere("users", [(0, firestore_1.where)("
|
|
469
|
+
const userRequestingAccess = Object.entries(await firebaseQuery.getDocsWhere("users", [(0, firestore_1.where)("product", "==", "providers"), (0, firestore_1.where)("oId", "==", user.oId), (0, firestore_1.orderBy)("requestedVisibleAddresses")]) || {})[0];
|
|
468
470
|
return {
|
|
469
471
|
dismissible: false,
|
|
470
472
|
severity: "primary",
|
|
@@ -486,7 +488,10 @@ const providerTasks = {
|
|
|
486
488
|
},
|
|
487
489
|
requestedVisiblePlacementListings: {
|
|
488
490
|
callback: async (user) => {
|
|
489
|
-
|
|
491
|
+
if (!(0, util_1.getAccess)(user, "addStaff"))
|
|
492
|
+
return;
|
|
493
|
+
const accessRequests = await firebaseQuery.getCount("users", [(0, firestore_1.where)("oId", "==", user.oId), (0, firestore_1.where)("product", "==", "providers"), (0, firestore_1.orderBy)("requestedVisibleListings")]) - ((Array.isArray(user === null || user === void 0 ? void 0 : user.requestedVisibleListings) && (user === null || user === void 0 ? void 0 : user.requestedVisibleListings.length) > 0) ? 1 : 0);
|
|
494
|
+
;
|
|
490
495
|
if (accessRequests === 0)
|
|
491
496
|
return;
|
|
492
497
|
if (accessRequests === 1) {
|
|
@@ -527,41 +532,207 @@ const providerTasks = {
|
|
|
527
532
|
},
|
|
528
533
|
completeStudentDocs: {
|
|
529
534
|
callback: async (user) => {
|
|
535
|
+
return;
|
|
530
536
|
return {};
|
|
531
537
|
},
|
|
532
538
|
},
|
|
533
539
|
reviewOnboarding: {
|
|
534
540
|
callback: async (user) => {
|
|
535
|
-
|
|
541
|
+
const toReview = await firebaseQuery.getCount("placements", [(0, firestore_1.where)("providerId", "==", user.oId), (0, firestore_1.where)("onboarding.completed.accepted", "==", false), (0, firestore_1.where)("onboarding.completed.submitted", "==", true), (0, firestore_1.where)("endDate", ">=", (0, util_1.dateToString)(new Date()))]);
|
|
542
|
+
if (toReview === 0)
|
|
543
|
+
return;
|
|
544
|
+
if (toReview === 1) {
|
|
545
|
+
const placement = Object.entries(await firebaseQuery.getDocsWhere("placements", [(0, firestore_1.where)("providerId", "==", user.oId), (0, firestore_1.where)("onboarding.completed.accepted", "==", false), (0, firestore_1.where)("onboarding.completed.submitted", "==", true), (0, firestore_1.where)("endDate", ">=", (0, util_1.dateToString)(new Date()))]) || {})[0];
|
|
546
|
+
const student = await firebaseQuery.getDocData(["users", placement[1].uid]);
|
|
547
|
+
return {
|
|
548
|
+
dismissible: false,
|
|
549
|
+
severity: "primary",
|
|
550
|
+
title: `${student.details.forename} ${student.details.surname} has completed their onboarding for their placement from ${(0, util_2.convertDate)(placement[1].startDate, "visual")} to ${(0, util_2.convertDate)(placement[1].endDate, "visual")}`,
|
|
551
|
+
message: `Click to view the placement and review the onboarding.`,
|
|
552
|
+
link: `/${user.product}/placements/${placement[0]}`,
|
|
553
|
+
buttonTitle: "View",
|
|
554
|
+
};
|
|
555
|
+
}
|
|
556
|
+
return {
|
|
557
|
+
dismissible: false,
|
|
558
|
+
severity: "primary",
|
|
559
|
+
title: `${toReview} student have completed their onboarding.`,
|
|
560
|
+
message: `Click to view your placements and approve completed onboarding`,
|
|
561
|
+
link: `/${user.product}/placementListings/placements`,
|
|
562
|
+
buttonTitle: "View placements",
|
|
563
|
+
};
|
|
564
|
+
},
|
|
565
|
+
},
|
|
566
|
+
uploadOnboarding: {
|
|
567
|
+
callback: async (user) => {
|
|
568
|
+
const withoutOnboarding = await firebaseQuery.getCount("placements", [(0, firestore_1.where)("providerId", "==", user.oId), (0, firestore_1.where)("onboarding", "==", null), (0, firestore_1.where)("endDate", ">=", (0, util_1.dateToString)(new Date()))]);
|
|
569
|
+
if (withoutOnboarding === 0)
|
|
570
|
+
return;
|
|
571
|
+
if (withoutOnboarding === 1) {
|
|
572
|
+
const placement = Object.entries(await firebaseQuery.getDocsWhere("placements", [(0, firestore_1.where)("providerId", "==", user.oId), (0, firestore_1.where)("onboarding", "==", null), (0, firestore_1.where)("endDate", ">=", (0, util_1.dateToString)(new Date()))]) || {})[0];
|
|
573
|
+
const student = await firebaseQuery.getDocData(["users", placement[1].uid]);
|
|
574
|
+
return {
|
|
575
|
+
dismissible: false,
|
|
576
|
+
severity: "primary",
|
|
577
|
+
title: `Send onboarding documents to ${student.details.forename} ${student.details.surname}'s placement from ${(0, util_2.convertDate)(placement[1].startDate, "visual")} to ${(0, util_2.convertDate)(placement[1].endDate, "visual")}`,
|
|
578
|
+
message: `Click to view the placement and add or dismiss onboarding reminders.`,
|
|
579
|
+
link: `/${user.product}/placements/${placement[0]}`,
|
|
580
|
+
buttonTitle: "View",
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
return {
|
|
584
|
+
dismissible: false,
|
|
585
|
+
severity: "primary",
|
|
586
|
+
title: `Set up onboarding for ${withoutOnboarding} placements to prepare yourself and your students.`,
|
|
587
|
+
message: `Click to view your placements and add or dismiss onboarding reminders.`,
|
|
588
|
+
link: `/${user.product}/placementListings/placements`,
|
|
589
|
+
buttonTitle: "View placements",
|
|
590
|
+
};
|
|
536
591
|
},
|
|
537
592
|
},
|
|
538
593
|
completeListing: {
|
|
539
594
|
callback: async (user) => {
|
|
540
|
-
|
|
595
|
+
const incompleteListings = await firebaseQuery.getCount("placementListings", [(0, firestore_1.where)("providerId", "==", user.oId), (0, firestore_1.where)("status", "==", "draft")]);
|
|
596
|
+
if (incompleteListings === 0)
|
|
597
|
+
return;
|
|
598
|
+
if (incompleteListings === 1) {
|
|
599
|
+
const incompleteListing = Object.entries(await firebaseQuery.getDocsWhere("placementListings", [(0, firestore_1.where)("providerId", "==", user.oId), (0, firestore_1.where)("status", "==", "draft")]) || {})[0];
|
|
600
|
+
const address = incompleteListing[1].addressId ? await firebaseQuery.getDocData(["addresses", incompleteListing[1].addressId]) : undefined;
|
|
601
|
+
return {
|
|
602
|
+
dismissible: false,
|
|
603
|
+
severity: "info",
|
|
604
|
+
title: `Your listing '${incompleteListing[1].title || "unnamed"}' at ${address ? `${address["address-line1"]}, ${address.postal_code.toUpperCase()}, ${(0, util_1.capitaliseWords)((0, util_1.camelCaseToNormal)(address.country))}` : "unknown address"} requires more information before publishing.`,
|
|
605
|
+
message: `Click to complete and publish the placement listing.`,
|
|
606
|
+
link: `/${user.product}/addListing/${incompleteListing[0]}`,
|
|
607
|
+
buttonTitle: "View listing",
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
return {
|
|
611
|
+
dismissible: false,
|
|
612
|
+
severity: "info",
|
|
613
|
+
title: `You have ${incompleteListings} draft listings waiting to be published.`,
|
|
614
|
+
message: `Click to review and publish the placement listings.`,
|
|
615
|
+
link: `/${user.product}/placementListings/listings`,
|
|
616
|
+
buttonTitle: "View listings",
|
|
617
|
+
};
|
|
541
618
|
},
|
|
542
619
|
},
|
|
543
620
|
completeAddress: {
|
|
544
621
|
callback: async (user) => {
|
|
545
|
-
|
|
622
|
+
const incompleteAddresses = await firebaseQuery.getCount("addresses", [(0, firestore_1.where)("product", "==", "providers"), (0, firestore_1.where)("oId", "==", user.oId), (0, firestore_1.where)("stage", "!=", "complete")]);
|
|
623
|
+
if (incompleteAddresses === 0)
|
|
624
|
+
return;
|
|
625
|
+
if (incompleteAddresses === 1) {
|
|
626
|
+
const address = Object.entries(await firebaseQuery.getDocsWhere("addresses", [(0, firestore_1.where)("product", "==", "providers"), (0, firestore_1.where)("oId", "==", user.oId), (0, firestore_1.where)("stage", "!=", "complete")]) || {})[0];
|
|
627
|
+
return {
|
|
628
|
+
dismissible: false,
|
|
629
|
+
severity: "info",
|
|
630
|
+
title: `Your address: ${address[1]["address-line1"]}, ${address[1].postal_code.toUpperCase()}, ${(0, util_1.capitaliseWords)((0, util_1.camelCaseToNormal)(address[1].country))} is currently incomplete.`,
|
|
631
|
+
message: `Click to complete the addresses.`,
|
|
632
|
+
link: `/${user.product}/addAddress/${address[0]}`,
|
|
633
|
+
buttonTitle: "View address",
|
|
634
|
+
};
|
|
635
|
+
}
|
|
636
|
+
return {
|
|
637
|
+
dismissible: false,
|
|
638
|
+
severity: "info",
|
|
639
|
+
title: `You have ${incompleteAddresses} draft addresses waiting to be published.`,
|
|
640
|
+
message: `Click to review the addresses.`,
|
|
641
|
+
link: `/${user.product}/organisation/addresses`,
|
|
642
|
+
buttonTitle: "View addresses",
|
|
643
|
+
};
|
|
546
644
|
},
|
|
547
645
|
},
|
|
548
646
|
registrationRequests: {
|
|
549
647
|
callback: async (user) => {
|
|
550
|
-
|
|
648
|
+
const regRequests = await firebaseQuery.getCount("requests", [(0, firestore_1.where)("product", "==", user.product), (0, firestore_1.where)("oId", "==", user.oId)]);
|
|
649
|
+
if (regRequests === 0)
|
|
650
|
+
return;
|
|
651
|
+
if (regRequests === 1) {
|
|
652
|
+
const request = Object.entries(await firebaseQuery.getDocsWhere("requests", [(0, firestore_1.where)("product", "==", user.product), (0, firestore_1.where)("oId", "==", user.oId)]) || {})[0];
|
|
653
|
+
return {
|
|
654
|
+
dismissible: false,
|
|
655
|
+
severity: "primary",
|
|
656
|
+
title: `${request[1].forename} ${request[1].surname} has requested to access your organisation.`,
|
|
657
|
+
message: `Click to review these request.`,
|
|
658
|
+
link: `/${user.product}/organisation/staff/requests`,
|
|
659
|
+
buttonTitle: "View requests",
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
return {
|
|
663
|
+
dismissible: false,
|
|
664
|
+
severity: "primary",
|
|
665
|
+
title: `${regRequests} people have requested to register with your organisation.`,
|
|
666
|
+
message: `Click to review these requests.`,
|
|
667
|
+
link: `/${user.product}/organisation/staff/requests`,
|
|
668
|
+
buttonTitle: "View requests",
|
|
669
|
+
};
|
|
670
|
+
},
|
|
671
|
+
},
|
|
672
|
+
activateStaff: {
|
|
673
|
+
callback: async (user) => {
|
|
674
|
+
const inactiveAccounts = await firebaseQuery.getCount("users", [(0, firestore_1.where)("product", "==", user.product), (0, firestore_1.where)("oId", "==", user.oId), (0, firestore_1.where)("status", "==", "inactive")]);
|
|
675
|
+
if (inactiveAccounts === 0)
|
|
676
|
+
return;
|
|
677
|
+
if (inactiveAccounts === 1) {
|
|
678
|
+
const account = Object.entries(await firebaseQuery.getDocsWhere("users", [(0, firestore_1.where)("product", "==", user.product), (0, firestore_1.where)("oId", "==", user.oId), (0, firestore_1.where)("status", "==", "inactive")]) || {})[0];
|
|
679
|
+
return {
|
|
680
|
+
dismissible: false,
|
|
681
|
+
severity: "info",
|
|
682
|
+
title: `Activate ${account[1].details.forename} ${account[1].details.surname}'s staff account.`,
|
|
683
|
+
message: "Activate this account to give the user access to Placementt.",
|
|
684
|
+
link: `/${user.product}/organisation/staff/all`,
|
|
685
|
+
buttonTitle: "View accounts",
|
|
686
|
+
};
|
|
687
|
+
}
|
|
688
|
+
return {
|
|
689
|
+
dismissible: false,
|
|
690
|
+
severity: "info",
|
|
691
|
+
title: `${inactiveAccounts} staff have inactive active accounts.`,
|
|
692
|
+
message: "Activate these accounts to give the user access to Placementt.",
|
|
693
|
+
link: `/${user.product}/organisation/staff/all`,
|
|
694
|
+
buttonTitle: "View accounts",
|
|
695
|
+
};
|
|
551
696
|
},
|
|
552
697
|
},
|
|
553
698
|
placementStarting: {
|
|
554
699
|
callback: async (user) => {
|
|
555
|
-
|
|
700
|
+
const sevenDaysInFuture = new Date();
|
|
701
|
+
sevenDaysInFuture.setDate(sevenDaysInFuture.getDate() + 7);
|
|
702
|
+
const placementsStartingSoon = await firebaseQuery.getCount("placements", [(0, firestore_1.where)("providerId", "==", user.oId), (0, firestore_1.where)("startDate", "<=", (0, util_2.convertDate)(sevenDaysInFuture, "dbstring")), (0, firestore_1.where)("startDate", ">", (0, util_1.dateToString)(new Date()))]);
|
|
703
|
+
if (placementsStartingSoon === 0)
|
|
704
|
+
return;
|
|
705
|
+
if (placementsStartingSoon === 1) {
|
|
706
|
+
const placement = Object.entries(await firebaseQuery.getDocsWhere("placements", [(0, firestore_1.where)("providerId", "==", user.oId), (0, firestore_1.where)("startDate", "<=", (0, util_2.convertDate)(sevenDaysInFuture, "dbstring")), (0, firestore_1.where)("startDate", ">", (0, util_1.dateToString)(new Date()))]) || {})[0];
|
|
707
|
+
const student = await firebaseQuery.getDocData(["users", placement[1].uid]);
|
|
708
|
+
return {
|
|
709
|
+
dismissible: false,
|
|
710
|
+
severity: "success",
|
|
711
|
+
title: `${student.details.forename} ${student.details.surname}'s placement from ${(0, util_2.convertDate)(placement[1].startDate, "visual")} to ${(0, util_2.convertDate)(placement[1].endDate, "visual")} is starting in less than a week.`,
|
|
712
|
+
message: `Click to view the placement and acquaint yourself with the student.`,
|
|
713
|
+
link: `/${user.product}/placements/${placement[0]}`,
|
|
714
|
+
buttonTitle: "View",
|
|
715
|
+
};
|
|
716
|
+
}
|
|
717
|
+
return {
|
|
718
|
+
dismissible: false,
|
|
719
|
+
severity: "success",
|
|
720
|
+
title: `${placementsStartingSoon} placements starting soon.`,
|
|
721
|
+
message: `Click to view scheduled placements.`,
|
|
722
|
+
link: `/${user.product}/placementListings/placements`,
|
|
723
|
+
buttonTitle: "View placements",
|
|
724
|
+
};
|
|
556
725
|
},
|
|
557
726
|
},
|
|
558
727
|
completeFeedback: {
|
|
559
728
|
callback: async (user) => {
|
|
729
|
+
return;
|
|
560
730
|
return {};
|
|
561
731
|
},
|
|
562
732
|
},
|
|
563
733
|
setUpFeedback: {
|
|
564
734
|
callback: async (user) => {
|
|
735
|
+
return;
|
|
565
736
|
return {};
|
|
566
737
|
},
|
|
567
738
|
},
|