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.
- package/lib/constants.d.ts +1 -0
- package/lib/constants.js +2 -1
- package/lib/constants.js.map +1 -1
- package/lib/hooks.d.ts +36 -1
- package/lib/hooks.js +169 -10
- package/lib/hooks.js.map +1 -1
- package/lib/typeDefinitions.d.ts +28 -3
- package/lib/util.js +2 -2
- package/lib/util.js.map +1 -1
- package/package.json +1 -1
- package/src/constants.ts +2 -0
- package/src/hooks.tsx +192 -11
- package/src/typeDefinitions.ts +30 -18
- package/src/util.ts +2 -2
package/lib/typeDefinitions.d.ts
CHANGED
|
@@ -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.
|
|
27
|
-
const awaitingProviderInsurance = placement.
|
|
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":";;;;;;AAsHA,0CAyCC;AA/JD,kDAAyC;AACzC,6EAAqD;AAErD,0CAA4C;AAgBrC,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAA0B,EAAsB,EAAE;;IAC5I,IAAI,KAAK,GAAe,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;IAE9C,MAAM,aAAa,GAAG,IAAI,uBAAa,EAAE,CAAC;IAE1C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACtF,IAAI,CAAA,MAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,MAAM,CAAC,0CAAE,QAAQ,MAAK,QAAQ,EAAE,CAAC;YAC7E,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/E,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC3D,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC;IAED,sDAAsD;IACtD,MAAM,6BAA6B,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/F,MAAM,iBAAiB,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IACpF,MAAM,kBAAkB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
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: "
|
|
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)
|
|
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
|
|
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:
|
|
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.
|
|
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
|
|
4022
|
-
const dataWithAdditionalProcessing: [string, any][] = await Promise.all(Object.entries(
|
|
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") {
|
package/src/typeDefinitions.ts
CHANGED
|
@@ -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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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.
|
|
37
|
-
const awaitingProviderInsurance = placement.
|
|
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);
|