placementt-core 1.400.1274 → 1.400.1275
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/studentFilters.d.ts +19 -0
- package/lib/studentFilters.js +28 -1
- package/lib/studentFilters.js.map +1 -1
- package/lib/studentFilters.test.js +15 -0
- package/lib/studentFilters.test.js.map +1 -1
- package/lib/typeDefinitions.d.ts +3 -0
- package/lib/typeDefinitions.js.map +1 -1
- package/package.json +1 -1
- package/src/studentFilters.test.ts +17 -1
- package/src/studentFilters.ts +29 -0
- package/src/typeDefinitions.ts +3 -0
package/lib/studentFilters.d.ts
CHANGED
|
@@ -109,4 +109,23 @@ export declare const legacyStudentFilter: (filters: StudentFilter[]) => {
|
|
|
109
109
|
* @return {string} the account.
|
|
110
110
|
*/
|
|
111
111
|
export declare const describeStudentFilters: (filters: StudentFilter[], label?: (field: string) => string) => string;
|
|
112
|
+
/** One rule of a cohort's auto-add filter (InstituteData.cohortFilters), on a student
|
|
113
|
+
* field either as `details.<field>` or, from older group set-ups, the bare field. */
|
|
114
|
+
export type CohortAutoAddRule = {
|
|
115
|
+
k: string;
|
|
116
|
+
e?: string;
|
|
117
|
+
v: unknown;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Whether a cohort's auto-add filter says the cohort is for students inside these
|
|
121
|
+
* filters: it names at least one of their fields with `==` or `in`, and every rule on
|
|
122
|
+
* those fields shares a value with them. False when the filter can't tell (no shared
|
|
123
|
+
* field, another operator) or rules them out, so the caller counts the cohort's
|
|
124
|
+
* students instead - students added by hand needn't match the filter.
|
|
125
|
+
*
|
|
126
|
+
* @param {CohortAutoAddRule[]|undefined} rules the cohort's auto-add filter.
|
|
127
|
+
* @param {StudentFilter[]} filters the staff member's filters.
|
|
128
|
+
* @return {boolean} whether the filter alone shows the cohort is in scope.
|
|
129
|
+
*/
|
|
130
|
+
export declare const autoAddFilterOverlapsStudentFilters: (rules: CohortAutoAddRule[] | undefined, filters: StudentFilter[]) => boolean;
|
|
112
131
|
export {};
|
package/lib/studentFilters.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.describeStudentFilters = exports.legacyStudentFilter = exports.studentFilterAlgoliaClause = exports.studentFilterCombinations = exports.studentFilterConstraints = exports.studentMatchesStaffFilters = exports.studentMatchesFilters = exports.studentFiltersProblem = exports.studentFilterCombinationCount = exports.getStudentFilters = exports.MAX_STUDENT_FILTER_COMBINATIONS = void 0;
|
|
3
|
+
exports.autoAddFilterOverlapsStudentFilters = exports.describeStudentFilters = exports.legacyStudentFilter = exports.studentFilterAlgoliaClause = exports.studentFilterCombinations = exports.studentFilterConstraints = exports.studentMatchesStaffFilters = exports.studentMatchesFilters = exports.studentFiltersProblem = exports.studentFilterCombinationCount = exports.getStudentFilters = exports.MAX_STUDENT_FILTER_COMBINATIONS = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* A staff member's student access, as a list of field filters ANDed together: a
|
|
6
6
|
* student is visible when, for every filter, `details[field]` is one of `values`.
|
|
@@ -138,4 +138,31 @@ exports.legacyStudentFilter = legacyStudentFilter;
|
|
|
138
138
|
*/
|
|
139
139
|
const describeStudentFilters = (filters, label = (f) => f) => filters.map((f) => `${label(f.field)}: ${f.values.join(", ")}`).join("; ");
|
|
140
140
|
exports.describeStudentFilters = describeStudentFilters;
|
|
141
|
+
/**
|
|
142
|
+
* Whether a cohort's auto-add filter says the cohort is for students inside these
|
|
143
|
+
* filters: it names at least one of their fields with `==` or `in`, and every rule on
|
|
144
|
+
* those fields shares a value with them. False when the filter can't tell (no shared
|
|
145
|
+
* field, another operator) or rules them out, so the caller counts the cohort's
|
|
146
|
+
* students instead - students added by hand needn't match the filter.
|
|
147
|
+
*
|
|
148
|
+
* @param {CohortAutoAddRule[]|undefined} rules the cohort's auto-add filter.
|
|
149
|
+
* @param {StudentFilter[]} filters the staff member's filters.
|
|
150
|
+
* @return {boolean} whether the filter alone shows the cohort is in scope.
|
|
151
|
+
*/
|
|
152
|
+
const autoAddFilterOverlapsStudentFilters = (rules, filters) => {
|
|
153
|
+
let shared = 0;
|
|
154
|
+
for (const f of filters) {
|
|
155
|
+
for (const rule of (rules || []).filter((r) => r.k.replace(/^details\./, "") === f.field)) {
|
|
156
|
+
const op = rule.e || "==";
|
|
157
|
+
if (op !== "==" && op !== "in")
|
|
158
|
+
continue;
|
|
159
|
+
const values = (op === "in" && Array.isArray(rule.v) ? rule.v : [rule.v]).map(String);
|
|
160
|
+
if (!values.some((v) => f.values.includes(v)))
|
|
161
|
+
return false;
|
|
162
|
+
shared++;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return shared > 0;
|
|
166
|
+
};
|
|
167
|
+
exports.autoAddFilterOverlapsStudentFilters = autoAddFilterOverlapsStudentFilters;
|
|
141
168
|
//# sourceMappingURL=studentFilters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studentFilters.js","sourceRoot":"","sources":["../src/studentFilters.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"studentFilters.js","sourceRoot":"","sources":["../src/studentFilters.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,4 +64,19 @@ describe("presentation", () => {
|
|
|
64
64
|
expect((0, studentFilters_1.describeStudentFilters)([year, form], (f) => f.toUpperCase())).toBe("YEAR: 10, 11; FORM: A");
|
|
65
65
|
});
|
|
66
66
|
});
|
|
67
|
+
describe("autoAddFilterOverlapsStudentFilters", () => {
|
|
68
|
+
it("is true when a shared field matches with == or in", () => {
|
|
69
|
+
expect((0, studentFilters_1.autoAddFilterOverlapsStudentFilters)([{ k: "details.year", v: "10" }], [year])).toBe(true);
|
|
70
|
+
expect((0, studentFilters_1.autoAddFilterOverlapsStudentFilters)([{ k: "year", e: "in", v: [11, 12] }], [year])).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
it("is false when a shared field rules the scope out", () => {
|
|
73
|
+
expect((0, studentFilters_1.autoAddFilterOverlapsStudentFilters)([{ k: "details.year", e: "==", v: "12" }], [year])).toBe(false);
|
|
74
|
+
expect((0, studentFilters_1.autoAddFilterOverlapsStudentFilters)([{ k: "details.year", v: "10" }, { k: "details.form", v: "B" }], [year, form])).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it("is false when the filter can't tell", () => {
|
|
77
|
+
expect((0, studentFilters_1.autoAddFilterOverlapsStudentFilters)(undefined, [year])).toBe(false);
|
|
78
|
+
expect((0, studentFilters_1.autoAddFilterOverlapsStudentFilters)([{ k: "details.form", v: "A" }], [year])).toBe(false);
|
|
79
|
+
expect((0, studentFilters_1.autoAddFilterOverlapsStudentFilters)([{ k: "details.year", e: ">=", v: "10" }], [year])).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
67
82
|
//# sourceMappingURL=studentFilters.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studentFilters.test.js","sourceRoot":"","sources":["../src/studentFilters.test.ts"],"names":[],"mappings":";;AAAA,qDAI0B;AAE1B,MAAM,IAAI,GAAG,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAC,CAAC;AACnD,MAAM,IAAI,GAAG,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAC,CAAC;AAE5C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,IAAA,kCAAiB,EAAC,EAAC,cAAc,EAAE,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAC,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtL,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,IAAA,kCAAiB,EAAC,EAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,CAAC;IACjI,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,IAAA,kCAAiB,EAAC,EAAC,aAAa,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAA,kCAAiB,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,IAAA,sCAAqB,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAC,OAAO,EAAE,EAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,MAAM,CAAC,IAAA,sCAAqB,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5F,MAAM,CAAC,IAAA,sCAAqB,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,IAAA,2CAA0B,EAAC,EAAE,EAAE,EAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,CAAC,IAAA,2CAA0B,EAAC,EAAC,cAAc,EAAE,CAAC,IAAI,CAAC,EAAC,EAAE,EAAC,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,IAAA,yCAAwB,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChI,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,IAAA,0CAAyB,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACpD,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAC,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAC,CAAC;YAC3D,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAC,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAC,CAAC;SAC9D,CAAC,CAAC;QACH,MAAM,CAAC,IAAA,0CAAyB,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,IAAA,2CAA0B,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC7H,MAAM,CAAC,IAAA,2CAA0B,EAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,IAAA,8CAA6B,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAA,8CAA6B,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,IAAA,sCAAqB,EAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,CAAC,IAAA,sCAAqB,EAAC,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACvG,MAAM,CAAC,IAAA,sCAAqB,EAAC,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAA,sCAAqB,EAAC,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAC,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAC7K,MAAM,CAAC,IAAA,sCAAqB,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,IAAA,oCAAmB,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;QAC9G,MAAM,CAAC,IAAA,oCAAmB,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,SAAS,EAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,IAAA,uCAAsB,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"studentFilters.test.js","sourceRoot":"","sources":["../src/studentFilters.test.ts"],"names":[],"mappings":"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"}
|
package/lib/typeDefinitions.d.ts
CHANGED
|
@@ -2510,6 +2510,9 @@ export type ExternalEvent = {
|
|
|
2510
2510
|
acceptingEmployers?: boolean;
|
|
2511
2511
|
acceptingStudents?: boolean;
|
|
2512
2512
|
acceptingSchools?: boolean;
|
|
2513
|
+
/** @deprecated No longer written. An event belongs to whoever its `oId` names, so a
|
|
2514
|
+
* trust's event for one of its schools is stored under that school. Older trust-built
|
|
2515
|
+
* events still carry this, always equal to their oId. */
|
|
2513
2516
|
schoolId?: string;
|
|
2514
2517
|
yearGroups?: string[];
|
|
2515
2518
|
simpleEvent?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeDefinitions.js","sourceRoot":"","sources":["../src/typeDefinitions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"typeDefinitions.js","sourceRoot":"","sources":["../src/typeDefinitions.ts"],"names":[],"mappings":";;;AAg3IA,sDASC;AAeD,oDAKC;AAaD,0CAEC;AAhvED;;;;;kFAKkF;AACrE,QAAA,qBAAqB,GAAG,SAAS,CAAC;AAClC,QAAA,iBAAiB,GAAG,OAAO,CAAC;AA4pEzC;yEACyE;AAC5D,QAAA,0BAA0B,GAA2C;IAC9E,gBAAgB,EAAE,2BAA2B;IAC7C,mBAAmB,EAAE,sBAAsB;IAC3C,cAAc,EAAE,iBAAiB;IACjC,kBAAkB,EAAE,qBAAqB;IACzC,UAAU,EAAE,oCAAoC;IAChD,aAAa,EAAE,yBAAyB;IACxC,aAAa,EAAE,wBAAwB;IACvC,KAAK,EAAE,OAAO;CACjB,CAAC;AAEW,QAAA,0BAA0B,GAA+C;IAClF,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,OAAO;CACjB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,SAAgB,qBAAqB,CAAC,SAAsC;IACxE,QAAQ,SAAS,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC;QAC5B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC7B,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;IAC3B,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,oBAAoB,CAChC,IAAwC,EACxC,MAA6C;IAE7C,OAAO,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,YAAY,IAAI,KAAK,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,eAAe,CAAC,KAA6D;IACzF,OAAO,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,IAAI,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AAC/E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
describeStudentFilters, getStudentFilters, legacyStudentFilter, studentFilterAlgoliaClause,
|
|
2
|
+
autoAddFilterOverlapsStudentFilters, describeStudentFilters, getStudentFilters, legacyStudentFilter, studentFilterAlgoliaClause,
|
|
3
3
|
studentFilterCombinationCount, studentFilterCombinations, studentFilterConstraints,
|
|
4
4
|
studentFiltersProblem, studentMatchesFilters, studentMatchesStaffFilters,
|
|
5
5
|
} from "./studentFilters";
|
|
@@ -72,3 +72,19 @@ describe("presentation", () => {
|
|
|
72
72
|
expect(describeStudentFilters([year, form], (f) => f.toUpperCase())).toBe("YEAR: 10, 11; FORM: A");
|
|
73
73
|
});
|
|
74
74
|
});
|
|
75
|
+
|
|
76
|
+
describe("autoAddFilterOverlapsStudentFilters", () => {
|
|
77
|
+
it("is true when a shared field matches with == or in", () => {
|
|
78
|
+
expect(autoAddFilterOverlapsStudentFilters([{k: "details.year", v: "10"}], [year])).toBe(true);
|
|
79
|
+
expect(autoAddFilterOverlapsStudentFilters([{k: "year", e: "in", v: [11, 12]}], [year])).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it("is false when a shared field rules the scope out", () => {
|
|
82
|
+
expect(autoAddFilterOverlapsStudentFilters([{k: "details.year", e: "==", v: "12"}], [year])).toBe(false);
|
|
83
|
+
expect(autoAddFilterOverlapsStudentFilters([{k: "details.year", v: "10"}, {k: "details.form", v: "B"}], [year, form])).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
it("is false when the filter can't tell", () => {
|
|
86
|
+
expect(autoAddFilterOverlapsStudentFilters(undefined, [year])).toBe(false);
|
|
87
|
+
expect(autoAddFilterOverlapsStudentFilters([{k: "details.form", v: "A"}], [year])).toBe(false);
|
|
88
|
+
expect(autoAddFilterOverlapsStudentFilters([{k: "details.year", e: ">=", v: "10"}], [year])).toBe(false);
|
|
89
|
+
});
|
|
90
|
+
});
|
package/src/studentFilters.ts
CHANGED
|
@@ -148,3 +148,32 @@ export const legacyStudentFilter = (filters: StudentFilter[]): {studentFilter?:
|
|
|
148
148
|
*/
|
|
149
149
|
export const describeStudentFilters = (filters: StudentFilter[], label: (field: string) => string = (f) => f): string =>
|
|
150
150
|
filters.map((f) => `${label(f.field)}: ${f.values.join(", ")}`).join("; ");
|
|
151
|
+
|
|
152
|
+
/** One rule of a cohort's auto-add filter (InstituteData.cohortFilters), on a student
|
|
153
|
+
* field either as `details.<field>` or, from older group set-ups, the bare field. */
|
|
154
|
+
export type CohortAutoAddRule = {k: string, e?: string, v: unknown};
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Whether a cohort's auto-add filter says the cohort is for students inside these
|
|
158
|
+
* filters: it names at least one of their fields with `==` or `in`, and every rule on
|
|
159
|
+
* those fields shares a value with them. False when the filter can't tell (no shared
|
|
160
|
+
* field, another operator) or rules them out, so the caller counts the cohort's
|
|
161
|
+
* students instead - students added by hand needn't match the filter.
|
|
162
|
+
*
|
|
163
|
+
* @param {CohortAutoAddRule[]|undefined} rules the cohort's auto-add filter.
|
|
164
|
+
* @param {StudentFilter[]} filters the staff member's filters.
|
|
165
|
+
* @return {boolean} whether the filter alone shows the cohort is in scope.
|
|
166
|
+
*/
|
|
167
|
+
export const autoAddFilterOverlapsStudentFilters = (rules: CohortAutoAddRule[]|undefined, filters: StudentFilter[]): boolean => {
|
|
168
|
+
let shared = 0;
|
|
169
|
+
for (const f of filters) {
|
|
170
|
+
for (const rule of (rules || []).filter((r) => r.k.replace(/^details\./, "") === f.field)) {
|
|
171
|
+
const op = rule.e || "==";
|
|
172
|
+
if (op !== "==" && op !== "in") continue;
|
|
173
|
+
const values = (op === "in" && Array.isArray(rule.v) ? rule.v : [rule.v]).map(String);
|
|
174
|
+
if (!values.some((v) => f.values.includes(v))) return false;
|
|
175
|
+
shared++;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return shared > 0;
|
|
179
|
+
};
|
package/src/typeDefinitions.ts
CHANGED
|
@@ -2501,6 +2501,9 @@ export type ExternalEvent = {
|
|
|
2501
2501
|
acceptingEmployers?: boolean,
|
|
2502
2502
|
acceptingStudents?: boolean,
|
|
2503
2503
|
acceptingSchools?: boolean,
|
|
2504
|
+
/** @deprecated No longer written. An event belongs to whoever its `oId` names, so a
|
|
2505
|
+
* trust's event for one of its schools is stored under that school. Older trust-built
|
|
2506
|
+
* events still carry this, always equal to their oId. */
|
|
2504
2507
|
schoolId?: string,
|
|
2505
2508
|
yearGroups?: string[],
|
|
2506
2509
|
simpleEvent?: boolean,
|