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.
@@ -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 {};
@@ -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":"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"}
1
+ {"version":3,"file":"studentFilters.test.js","sourceRoot":"","sources":["../src/studentFilters.test.ts"],"names":[],"mappings":"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"}
@@ -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":";;;AA62IA,sDASC;AAeD,oDAKC;AAaD,0CAEC;AA7uED;;;;;kFAKkF;AACrE,QAAA,qBAAqB,GAAG,SAAS,CAAC;AAClC,QAAA,iBAAiB,GAAG,OAAO,CAAC;AAypEzC;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"}
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
@@ -2,7 +2,7 @@
2
2
  "private": false,
3
3
  "name": "placementt-core",
4
4
  "author": "Placementt",
5
- "version": "1.400.1274",
5
+ "version": "1.400.1275",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
8
8
  "scripts": {
@@ -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
+ });
@@ -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
+ };
@@ -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,