placementt-core 11.0.892 → 11.0.914

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.
@@ -19,6 +19,7 @@ export type StudentPlacementData = {
19
19
  providerEmailed: Timestamp;
20
20
  parentEmailed: Timestamp;
21
21
  providerPhone: string;
22
+ studentDescription?: string;
22
23
  website?: string;
23
24
  id: string;
24
25
  providerCompleted: string[];
@@ -155,6 +156,17 @@ export type PlacementQuestions = {
155
156
  pay?: number;
156
157
  payFrequency: "total" | "hourly" | "daily" | "weekly" | "monthly" | "annually";
157
158
  };
159
+ export type SavedPlacement = {
160
+ placementId: string;
161
+ savedByProduct: Products;
162
+ savedByUserType: "Organisation" | "Student";
163
+ savedById: string;
164
+ schoolId?: string;
165
+ status?: "Accepted" | "Blocked" | "providerReview";
166
+ listed: boolean;
167
+ concurrentPlacements?: number;
168
+ id: string;
169
+ };
158
170
  export type PlacementListing = {
159
171
  title: string;
160
172
  providerId: string;
@@ -560,7 +572,7 @@ export type ProviderContactData = {
560
572
  savedBy?: {
561
573
  [key: string]: {
562
574
  exists: true;
563
- activities?: string[];
575
+ activities?: null | string[];
564
576
  providerConsent?: boolean;
565
577
  providerConsentDate?: string;
566
578
  MATschools?: string[];
@@ -615,6 +627,7 @@ export type InstituteData = {
615
627
  approveAlumniMessages?: boolean;
616
628
  anonymiseAlumniConvoStudents?: boolean;
617
629
  alumniConversations?: boolean;
630
+ activityInvitesSent?: string;
618
631
  } & Address;
619
632
  export type ExternalActivity = {
620
633
  title?: string;
@@ -627,6 +640,7 @@ export type ExternalActivity = {
627
640
  alumni?: boolean;
628
641
  provider?: boolean;
629
642
  permanent?: boolean;
643
+ activityType: "workExperience" | "workplaceVisits" | "mentoring" | "mockInterviews" | "other";
630
644
  };
631
645
  export type NotificationObject = {
632
646
  buttonURL: string;
@@ -676,7 +690,7 @@ export type StaffRoles = {
676
690
  };
677
691
  staff: string[];
678
692
  };
679
- export type QueryObjectConstraint = [string, "==" | "<" | "<=" | ">=" | ">" | "!=" | "array-contains" | "array-contains-any" | "in" | "not-in", string | boolean][];
693
+ export type QueryObjectConstraint = [string, "==" | "<" | "<=" | ">=" | ">" | "!=" | "array-contains" | "array-contains-any" | "in" | "not-in", string | boolean | string[]][];
680
694
  export type QueryObject = {
681
695
  path: string[];
682
696
  where?: QueryObjectConstraint;
@@ -726,7 +740,7 @@ export type CohortData = {
726
740
  endSubmission: string;
727
741
  startPlacements: string;
728
742
  endPlacements: string;
729
- stage: "info" | "name" | "placementType" | "students" | "workflow" | "review" | "created" | "archived";
743
+ stage: "info" | "name" | "placementType" | "students" | "workflow" | "review" | "created" | "archived" | "database";
730
744
  workflow: WorkflowStage[];
731
745
  customWorkflow?: boolean;
732
746
  oId: string;
@@ -735,6 +749,8 @@ export type CohortData = {
735
749
  designatedStaff?: string;
736
750
  autoArchiveDate?: string;
737
751
  logType?: "basic" | "custom";
752
+ listingReleaseDate?: string;
753
+ enableListings?: boolean;
738
754
  logs?: {
739
755
  students?: string;
740
756
  staff?: string;
@@ -756,6 +772,10 @@ export type CohortData = {
756
772
  [key in keyof typeof emailTemplates]: string;
757
773
  };
758
774
  skillsTargets?: string[];
775
+ recurringEmails?: {
776
+ sendType?: "all" | "lastWeek";
777
+ frequency?: "oneTime" | "weeklyMonday" | "fortnightlyMonday";
778
+ };
759
779
  };
760
780
  export type ArrowObject = {
761
781
  start: number | string;
@@ -846,6 +866,11 @@ export type PlacementReviewDetails = {
846
866
  };
847
867
  primaryColor?: string;
848
868
  primaryImage?: string;
869
+ savedBySchool?: boolean;
870
+ consentedActivities?: string[];
871
+ instituteActivities?: {
872
+ [key: string]: ExternalActivity;
873
+ };
849
874
  };
850
875
  export type BlogCategories = "students" | "providers" | "institutes" | "placementt";
851
876
  export type Blog = {
package/lib/util.js CHANGED
@@ -23,8 +23,8 @@ const getPlacementFlagCodes = async ({ placement, studentData, workflow, institu
23
23
  // If placement after provider review and not verified
24
24
  const placementIsPostProviderReview = placement.leadTimes.some((x) => x.split("_")[0] === "3");
25
25
  const placementNotEnded = !placement.leadTimes.some((x) => x.split("_")[0] === "8");
26
- const providerUnverified = placement.providerId && !((_b = institute === null || institute === void 0 ? void 0 : institute.verifiedProviders) === null || _b === void 0 ? void 0 : _b.includes(placement.providerId));
27
- const awaitingProviderInsurance = placement.providerId && ((_c = institute === null || institute === void 0 ? void 0 : institute.awaitingProviderInsurance) === null || _c === void 0 ? void 0 : _c.includes(placement.providerId));
26
+ const providerUnverified = placement.providerContactId && !((_b = institute === null || institute === void 0 ? void 0 : institute.verifiedProviders) === null || _b === void 0 ? void 0 : _b.includes(placement.providerContactId));
27
+ const awaitingProviderInsurance = placement.providerContactId && ((_c = institute === null || institute === void 0 ? void 0 : institute.awaitingProviderInsurance) === null || _c === void 0 ? void 0 : _c.includes(placement.providerContactId));
28
28
  const riskAssessmentNotVerified = !((_d = institute === null || institute === void 0 ? void 0 : institute.verifiedRiskAssessments) === null || _d === void 0 ? void 0 : _d.includes(placement.placementId || placement.id));
29
29
  const awaitingRiskAssessment = !placement.riskAssessment || ((_e = institute === null || institute === void 0 ? void 0 : institute.awaitingPlacementRiskAssessments) === null || _e === void 0 ? void 0 : _e.includes(placement.placementId || placement.id));
30
30
  const dbsCheckNotVerified = !((_f = institute === null || institute === void 0 ? void 0 : institute.verifiedDbsChecks) === null || _f === void 0 ? void 0 : _f.includes(placement.placementId || placement.id));
package/lib/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "private": false,
3
3
  "name": "placementt-core",
4
4
  "author": "Placementt",
5
- "version": "11.0.892",
5
+ "version": "11.0.914",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
8
8
  "scripts": {
package/src/constants.ts CHANGED
@@ -794,3 +794,5 @@ export const MISQueryParams = {
794
794
  placeholder: "E.g. 'Year X'",
795
795
  }],
796
796
  };
797
+
798
+ export const externalActivityTypes = ["workExperience", "workplaceVisits", "mentoring", "mockInterviews", "other"]
package/src/hooks.tsx CHANGED
@@ -348,7 +348,7 @@ export function useNewInstitutePlacementList({id, user, filters, view, cohort, q
348
348
  direction: "asc",
349
349
  },
350
350
  ["Student Email - Desc"]: {
351
- value: "studentEmaile",
351
+ value: "studentEmail",
352
352
  direction: "desc",
353
353
  },
354
354
  ["Provider email - Asc"]: {
@@ -367,17 +367,22 @@ export function useNewInstitutePlacementList({id, user, filters, view, cohort, q
367
367
 
368
368
  const student = await getUserById(placement.uid).catch(() => false) as UserData|false;
369
369
 
370
- if (!student) return;
370
+ if (!student) {
371
+ console.log("No student");
372
+ return
373
+ };
371
374
 
372
375
  if (!user.studentFilterValues.includes(student.details[user.studentFilter])) {
376
+ console.log("filter not included. Filteres: ", user.studentFilterValues, "value", user.studentFilter, "-", student.details[user.studentFilter]);
373
377
  return false;
374
378
  }
375
379
  }
380
+ console.log("Valid placement", k);
376
381
  return {...placement, id: k};
377
382
  }
378
383
 
379
384
 
380
- const {tableData, pageUp, pageDown, setFilters, page, setView, loading, updateSearch, updateSort, sort} = useDataViewerPaginator({view, filters, sorts, queryLimit: ql, data: query, additionalEntryProcessing: additionalProcessing, onSearch: async (s, sort, page, filters, limit) => await algoliaPlacementSearch(user, s, sort, page, filters, limit, cohort, inProgress)})
385
+ const {tableData, pageUp, pageDown, setFilters, page, setView, loading, updateSearch, updateSort, sort} = useDataViewerPaginator({view, filters, sorts, queryLimit: ql, data: query, additionalEntryProcessing: additionalProcessing, onSearch: async (s, sort, page, filters, limit) => await algoliaPlacementSearch(query || [], user, s, sort, page, filters, limit, cohort, inProgress)})
381
386
 
382
387
  useEffect(() => {
383
388
  // Sets the query of for the DataViewerPaginator
@@ -385,7 +390,7 @@ export function useNewInstitutePlacementList({id, user, filters, view, cohort, q
385
390
  setQuery(undefined);
386
391
  return;
387
392
  }
388
- if (((user.userGroup === "admin" || (cohort && user.viewCohorts === "some" && user?.visibleCohorts?.includes(cohort as string)) || (user.viewCohorts === "all" && user.viewStudents === "all")))) {
393
+ if (((user.userGroup === "admin" || (cohort && user.viewCohorts === "some" && user?.visibleCohorts?.includes(cohort as string)) || (user.viewCohorts === "all" && user.viewStudents !== "none")))) {
389
394
  const constraints:QueryObjectConstraint = [["oId", "==", user.oId], ["draft", "==", false]];
390
395
 
391
396
  cohort && constraints.push(["cohort", "==", cohort]);
@@ -499,7 +504,7 @@ export function useAlumniPaginator({user, alumniConvoUser, filters, view, school
499
504
  }
500
505
 
501
506
 
502
- const algoliaPlacementSearch = async (user: UserData, query?: string, sort?: [string, {value: string, direction: "asc"|"desc"}], page?: number, filters?: FilterObject, limit?: number, cohort?: string, inProgress?: boolean) => {
507
+ const algoliaPlacementSearch = async (data: QueryObject[], user: UserData, query?: string, sort?: [string, {value: string, direction: "asc"|"desc"}], page?: number, filters?: FilterObject, limit?: number, cohort?: string, inProgress?: boolean) => {
503
508
  const algoliaClient = algoliasearch(process.env.NODE_ENV === "development" ? "A0ZB50I7VS" : "XMPXCMUUOJ", user.algoliaKey);
504
509
  const placementsIndex = algoliaClient.initIndex(sort ? Object.values(sort[1]).join("_") : "placements");
505
510
  // const usersIndex = algoliaClient.initIndex("users");
@@ -1000,7 +1005,7 @@ export function useProviderContactPaginator({data, user, view, filters}:{data:Qu
1000
1005
  return v;
1001
1006
  }
1002
1007
 
1003
- const {tableData, pageUp, pageDown, setFilters, page, setView, loading} = useDataViewerPaginator({view, filters, queryLimit: 20, data: query, additionalEntryProcessing: getAdditionalData})
1008
+ const {tableData, pageUp, pageDown, setFilters, page, setView, loading} = useDataViewerPaginator({view, filters, queryLimit: 10, data: query, additionalEntryProcessing: getAdditionalData})
1004
1009
 
1005
1010
 
1006
1011
  useEffect(() => {
@@ -1029,6 +1034,182 @@ type UserPaginatorParams = {
1029
1034
  sort?: string
1030
1035
  }
1031
1036
 
1037
+
1038
+ const algoliaUsersSearch = async (data: QueryObject[], user: UserData, query?: string, sort?: [string, {value: string, direction: "asc"|"desc"}], page?: number, filters?: FilterObject, limit?: number, cohort?: string) => {
1039
+ const algoliaClient = algoliasearch(process.env.NODE_ENV === "development" ? "A0ZB50I7VS" : "XMPXCMUUOJ", user.algoliaKey);
1040
+ console.log("SORT", sort);
1041
+ const userIndex = algoliaClient.initIndex(sort ? `users_${Object.values(sort[1]).join("_")}` : "users");
1042
+ const constraints = data[0].where;
1043
+
1044
+ if (!constraints?.length) return {};
1045
+
1046
+ let userSearchString = constraints.map(([k, e, v]) => {
1047
+ if (e === "==") return `${k}:"${v}"`; // Equality check
1048
+ if (e === "!=") return `${k}:-"${v}"`; // Not equal check
1049
+ if (e === "<") return `${k}:<${v}`; // Less than check
1050
+ if (e === "<=") return `${k}:<=${v}`; // Less than or equal check
1051
+ if (e === ">") return `${k}:>${v}`; // Greater than check
1052
+ if (e === ">=") return `${k}:>=${v}`; // Greater than or equal check
1053
+ if (e === "array-contains") return `${k}:"${v}"`; // Array contains check (string format)
1054
+ if (e === "array-contains-any") return `${k}:"${(v as string[]).join('","')}"`; // Array contains any of the values (string format)
1055
+ if (e === "in") return `${k}:(${(v as string[]).join('","')})`; // In check
1056
+ if (e === "not-in") return `${k}:(-${(v as string[]).join('","')})`; // Not in check
1057
+ return;
1058
+ }).join(" AND ");
1059
+
1060
+ console.log("QUERY", userSearchString);
1061
+
1062
+ filters && Object.entries(filters).filter(([, filter]) => filter.value).map(([id, filter]) => {
1063
+ userSearchString = userSearchString + ` AND ${id}:${filter.value}`;
1064
+ });
1065
+
1066
+ const options = {
1067
+ filters: userSearchString,
1068
+ hitsPerPage: limit,
1069
+ page: page ? page - 1 : undefined,
1070
+ }
1071
+
1072
+ const searchUsersHits = await userIndex.search<UserData>(query || "", options);
1073
+
1074
+ console.log(searchUsersHits.hits);
1075
+
1076
+ const i = (searchUsersHits ? (await Promise.all(searchUsersHits.hits.map(async (hit) => {
1077
+ return [hit.objectID, hit];
1078
+ }))) : []).filter((e) => e !== undefined) as [string, UserData][];
1079
+
1080
+ return Object.fromEntries(i)
1081
+ }
1082
+
1083
+
1084
+ type NewUserPaginatorParams = {
1085
+ user: UserData,
1086
+ cohort?: string,
1087
+ queryConstraints?: QueryObjectConstraint,
1088
+ ql?: number,
1089
+ view: "list"|"table",
1090
+ filters?: FilterObject,
1091
+ institute: InstituteData,
1092
+ userType: "Staff"|"Students"
1093
+ }
1094
+
1095
+
1096
+ export function useNewCohortUserPaginator({user, institute, filters, view, cohort, queryConstraints, ql=DEFAULTQUERYLIMIT, userType}:NewUserPaginatorParams) {
1097
+ const [query, setQuery] = useState<QueryObject[]>();
1098
+
1099
+ const firebaseQuery = new FirebaseQuery();
1100
+
1101
+ const sorts:Sorts = {
1102
+ ["Student Forename - Asc"]: {
1103
+ value: "details.forename",
1104
+ direction: "asc",
1105
+ },
1106
+ ["Student Forename - Desc"]: {
1107
+ value: "details.forename",
1108
+ direction: "desc",
1109
+ },
1110
+ ["Student Surname - Asc"]: {
1111
+ value: "details.surname",
1112
+ direction: "asc",
1113
+ },
1114
+ ["Student Surname - Desc"]: {
1115
+ value: "details.surname",
1116
+ direction: "desc",
1117
+ },
1118
+ ["Student Email - Asc"]: {
1119
+ value: "email",
1120
+ direction: "asc",
1121
+ },
1122
+ ["Student Email - Desc"]: {
1123
+ value: "email",
1124
+ direction: "desc",
1125
+ }
1126
+ }
1127
+
1128
+ useEffect(() => {
1129
+
1130
+ const getAccess = async () => {
1131
+ // Sets the query of for the DataViewerPaginator
1132
+ if(user.product !== "institutes" || user.userType !== "Staff") {
1133
+ setQuery(undefined);
1134
+ return;
1135
+ }
1136
+
1137
+ const constraints:QueryObjectConstraint = [["oId", "==", user.oId], ["userType", "==", userType]];
1138
+ cohort && constraints.push(["cohort", "==", cohort]);
1139
+ queryConstraints && constraints.unshift(...queryConstraints);
1140
+
1141
+ const mSetQuery = (clear?: boolean) => {
1142
+ setQuery(clear ? undefined : [{
1143
+ path: ["users"],
1144
+ where: constraints
1145
+ }]);
1146
+ return;
1147
+ }
1148
+
1149
+ if (institute.package === "institutes-one") {
1150
+ if (user.userGroup === "admin" || (user.viewCohorts === "all" && user.viewStudents === "all")) return mSetQuery();
1151
+
1152
+ if (!user.viewCohorts || user.viewCohorts === "none" || !user.viewStudents || user.viewStudents === "none" || (user.viewCohorts === "some" && !user.visibleCohorts?.length) || (user.viewStudents === "some" && !user.studentFilterValues?.length)) return mSetQuery(true);
1153
+
1154
+ if (user.viewStudents === "some") {
1155
+ constraints.push([`details.${user.studentFilter}`, "in", user.studentFilterValues as string[]]);
1156
+ }
1157
+
1158
+ if (cohort) {
1159
+ const canViewCohort = user.viewCohorts === "all" || (user.viewCohorts === "some" && user.visibleCohorts?.includes("cohort"));
1160
+ return mSetQuery(canViewCohort);
1161
+ } else {
1162
+ // No cohort.
1163
+ if (user.viewCohorts === "all") return mSetQuery();
1164
+ if (user.viewCohorts === "some" && user.visibleCohorts) {
1165
+ constraints.push(["cohort", "in", user.visibleCohorts]);
1166
+ return mSetQuery()
1167
+ }
1168
+ return mSetQuery(true);
1169
+ }
1170
+ }
1171
+
1172
+ if (institute.package === "institutes-two") {
1173
+ if (user.userGroup === "admin" || (user.viewSchools === "all" && user.viewCohorts === "all" && user.viewStudents === "all")) return mSetQuery();
1174
+
1175
+ if (!user.viewCohorts || !user.viewSchools || user.viewSchools === "none" || user.viewCohorts === "none") return mSetQuery(true);
1176
+ if (!user.viewStudents || user.viewStudents === "none" || (user.viewStudents === "some" && !user.studentFilterValues?.length) || (user.viewCohorts === "some" && !user.visibleCohorts?.length) || (user.viewSchools === "some" && !user.visibleSchools?.length)) return mSetQuery(true);
1177
+
1178
+ if (user.viewStudents === "some") {
1179
+ constraints.push([`details.${user.studentFilter}`, "in", user.studentFilterValues as string[]]);
1180
+ }
1181
+
1182
+ if (cohort) {
1183
+ if (user.viewCohorts === "some" && !user.visibleCohorts?.includes(cohort)) return mSetQuery(true);
1184
+
1185
+ if (user.viewSchools === "some") {
1186
+ const cohortData = await firebaseQuery.getDocData(["cohorts", cohort]) as CohortData;
1187
+ if (!cohortData.schoolId || !user.visibleSchools?.includes(cohortData.schoolId)) return mSetQuery(true)
1188
+ }
1189
+ } else {
1190
+ if (user.viewCohorts === "some" && user.visibleCohorts) {
1191
+ constraints.push(["cohort", "in", user.visibleCohorts]);
1192
+ } else if (user.viewSchools === "some" && user.visibleSchools) {
1193
+ const cohorts = await firebaseQuery.getDocsWhere("cohorts", [where("oId", "==", user.oId), where("schoolId", "in", user.visibleSchools)]);
1194
+ constraints.push(["cohort", "in", Object.keys(cohorts || {})]);
1195
+ }
1196
+ }
1197
+ return mSetQuery();
1198
+ }
1199
+ setQuery(undefined)
1200
+ }
1201
+ getAccess();
1202
+ }, [user, queryConstraints, cohort])
1203
+
1204
+
1205
+ const {tableData, pageUp, pageDown, setFilters, page, setView, loading, updateSearch, updateSort, sort} = useDataViewerPaginator({view, filters, sorts, queryLimit: ql, data: query, onSearch: async (s, sort, page, filters, limit) => await algoliaUsersSearch(query || [], user, s, sort, page, filters, limit, cohort)})
1206
+
1207
+
1208
+ return {tableData, page, loading, updateSearch, setFilters, setView, pageUp, pageDown, sorts, updateSort, sort}
1209
+ }
1210
+
1211
+
1212
+
1032
1213
  export function useCohortUserPaginator({user, cohort, data, search, userType, sort}:UserPaginatorParams) {
1033
1214
  const [tableData, setTableData] = useState<{[key:string]:{[key:string]: unknown}}>({});
1034
1215
  const [queryAnchor, setQueryAnchor] = useState<{startDoc?: QueryDocumentSnapshot, endDoc?: QueryDocumentSnapshot, startQueryPos: number, endQueryPos: number}>({startDoc: undefined, endDoc: undefined, startQueryPos: 0, endQueryPos: 0});
@@ -2065,8 +2246,8 @@ type CreateCohortRendererParams = {
2065
2246
  initialData ?: CohortData
2066
2247
  }
2067
2248
 
2068
- export type CreateCohortStages = "info"|"name"|"placementType"|"review";
2069
- const cohortStages = ["info", "name", "placementType", "review", "created"];
2249
+ export type CreateCohortStages = "info"|"name"|"placementType"|"database"|"review";
2250
+ const cohortStages = ["info", "name", "placementType", "database", "review", "created"];
2070
2251
 
2071
2252
  const defaultCohortData:CohortData = {
2072
2253
  name: "",
@@ -3272,7 +3453,7 @@ export function useGetIndividualPlacementForPlacementPage({user, placementId, or
3272
3453
  }
3273
3454
  if (e === "noInsurance") {
3274
3455
  if (!eliData) {
3275
- const storageRef = ref(storage, `insurance/${placement.providerId}.pdf`);
3456
+ const storageRef = ref(storage, `insurance/${placement.providerContactId}.pdf`);
3276
3457
  const file = await getDownloadURL(storageRef).catch(() => placement.insuranceSkippedReason);
3277
3458
  setELIData(file);
3278
3459
  }
@@ -4018,8 +4199,8 @@ export function useDataViewerPaginator({view: initialView, sorts, queryLimit=10,
4018
4199
 
4019
4200
  if (onSearch && (searchString || sort)) {
4020
4201
  if (typeof onSearch === "boolean") throw new Error("When using Firestore queries, an onSearch function should be passed to retrieve data externally. Additional processing is however completed in this hook.");
4021
- const data = await onSearch(searchString, sort, page[0], filters, queryLimit);
4022
- const dataWithAdditionalProcessing: [string, any][] = await Promise.all(Object.entries(data).map(async ([k, v]) => [k, await processedData(k, v)]));
4202
+ const searchData = await onSearch(searchString, sort, page[0], filters, queryLimit);
4203
+ const dataWithAdditionalProcessing: [string, any][] = await Promise.all(Object.entries(searchData).map(async ([k, v]) => [k, await processedData(k, v)]));
4023
4204
 
4024
4205
  setTableData((old) => {
4025
4206
  if (view === "table") {
@@ -21,6 +21,7 @@ export type StudentPlacementData = {
21
21
  providerEmailed: Timestamp,
22
22
  parentEmailed: Timestamp,
23
23
  providerPhone: string,
24
+ studentDescription?: string,
24
25
  website?: string,
25
26
  id:string,
26
27
  providerCompleted: string[],
@@ -142,17 +143,17 @@ export type PlacementQuestions = {
142
143
  payFrequency: "total"|"hourly"|"daily"|"weekly"|"monthly"|"annually",
143
144
  }
144
145
 
145
- // export type SavedPlacement = {
146
- // placementId: string,
147
- // savedByProduct: Products,
148
- // savedByUserType: "Organisation"|"Student",
149
- // savedById: string,
150
- // schoolId?: string,
151
- // status?: "Accepted" | "Blocked" | "providerReview";
152
- // listed: boolean,
153
- // concurrentPlacements?: number,
154
- // id: string
155
- // }
146
+ export type SavedPlacement = {
147
+ placementId: string,
148
+ savedByProduct: Products,
149
+ savedByUserType: "Organisation"|"Student",
150
+ savedById: string,
151
+ schoolId?: string,
152
+ status?: "Accepted" | "Blocked" | "providerReview";
153
+ listed: boolean,
154
+ concurrentPlacements?: number,
155
+ id: string
156
+ }
156
157
 
157
158
  // export type PlacementListingStages = "basic"|"address"|"students"|"responsibilities"|"applications"|"onboarding"|"review"|"complete";
158
159
 
@@ -593,7 +594,7 @@ export type ProviderContactData = {
593
594
  insuranceExpiry?: string,
594
595
  savedBy?: {[key:string]: {
595
596
  exists: true,
596
- activities?: string[], // IDs of consented activities.
597
+ activities?: null|string[], // IDs of consented activities.
597
598
  providerConsent?: boolean,
598
599
  providerConsentDate?: string,
599
600
  MATschools?: string[],
@@ -638,7 +639,8 @@ export type InstituteData = {
638
639
  shareAlumni?: boolean
639
640
  approveAlumniMessages?: boolean,
640
641
  anonymiseAlumniConvoStudents?: boolean,
641
- alumniConversations?: boolean
642
+ alumniConversations?: boolean,
643
+ activityInvitesSent?: string
642
644
  }&Address;
643
645
 
644
646
  export type ExternalActivity = {
@@ -651,7 +653,8 @@ export type ExternalActivity = {
651
653
  oId?: string,
652
654
  alumni?: boolean,
653
655
  provider?: boolean,
654
- permanent?: boolean
656
+ permanent?: boolean,
657
+ activityType: "workExperience"|"workplaceVisits"|"mentoring"|"mockInterviews"|"other"
655
658
  }
656
659
 
657
660
  export type NotificationObject = {
@@ -706,7 +709,7 @@ export type StaffRoles = {
706
709
  staff: string[]
707
710
  };
708
711
 
709
- export type QueryObjectConstraint = [string, "=="|"<"|"<="|">="|">"|"!="|"array-contains"|"array-contains-any"|"in"|"not-in", string|boolean][]
712
+ export type QueryObjectConstraint = [string, "=="|"<"|"<="|">="|">"|"!="|"array-contains"|"array-contains-any"|"in"|"not-in", string|boolean|string[]][]
710
713
 
711
714
  export type QueryObject = {
712
715
  path: string[],
@@ -762,7 +765,7 @@ export type CohortData = {
762
765
  endSubmission: string,
763
766
  startPlacements: string,
764
767
  endPlacements: string,
765
- stage: "info"|"name"|"placementType"|"students"|"workflow"|"review"|"created"|"archived",
768
+ stage: "info"|"name"|"placementType"|"students"|"workflow"|"review"|"created"|"archived"|"database",
766
769
  workflow: WorkflowStage[]
767
770
  customWorkflow?: boolean,
768
771
  oId: string,
@@ -771,6 +774,8 @@ export type CohortData = {
771
774
  designatedStaff?: string,
772
775
  autoArchiveDate?: string,
773
776
  logType?: "basic"|"custom",
777
+ listingReleaseDate?: string,
778
+ enableListings?: boolean,
774
779
  logs?: {
775
780
  students?: string,
776
781
  staff?: string,
@@ -789,7 +794,11 @@ export type CohortData = {
789
794
  providerFeedbackSent?: Timestamp,
790
795
  studentsFeedbackSent?: Timestamp,
791
796
  emailTemplates?: {[key in keyof typeof emailTemplates]: string},
792
- skillsTargets?: string[]
797
+ skillsTargets?: string[],
798
+ recurringEmails?: {
799
+ sendType?: "all"|"lastWeek",
800
+ frequency?: "oneTime"|"weeklyMonday"|"fortnightlyMonday"
801
+ }
793
802
  }
794
803
 
795
804
  export type ArrowObject = {
@@ -863,7 +872,10 @@ export type PlacementReviewDetails = {
863
872
  feedback: CustomFormSchema,
864
873
  providerFeedback?: {[key: string]: unknown},
865
874
  primaryColor?: string,
866
- primaryImage?: string
875
+ primaryImage?: string,
876
+ savedBySchool?: boolean,
877
+ consentedActivities?: string[],
878
+ instituteActivities?: {[key: string]: ExternalActivity}
867
879
  }
868
880
 
869
881
  export type BlogCategories = "students"|"providers"|"institutes"|"placementt"
package/src/util.ts CHANGED
@@ -33,8 +33,8 @@ export const getPlacementFlagCodes = async ({placement, studentData, workflow, i
33
33
  // If placement after provider review and not verified
34
34
  const placementIsPostProviderReview = placement.leadTimes.some((x) => x.split("_")[0] === "3");
35
35
  const placementNotEnded = !placement.leadTimes.some((x) => x.split("_")[0] === "8");
36
- const providerUnverified = placement.providerId && !institute?.verifiedProviders?.includes(placement.providerId);
37
- const awaitingProviderInsurance = placement.providerId && institute?.awaitingProviderInsurance?.includes(placement.providerId);
36
+ const providerUnverified = placement.providerContactId && !institute?.verifiedProviders?.includes(placement.providerContactId);
37
+ const awaitingProviderInsurance = placement.providerContactId && institute?.awaitingProviderInsurance?.includes(placement.providerContactId);
38
38
 
39
39
  const riskAssessmentNotVerified = !institute?.verifiedRiskAssessments?.includes(placement.placementId || placement.id);
40
40
  const awaitingRiskAssessment = !placement.riskAssessment || institute?.awaitingPlacementRiskAssessments?.includes(placement.placementId || placement.id);