@studyportals/fawkes 8.0.2-0 → 8.1.1-1

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.
Files changed (129) hide show
  1. package/dist/src/enums/FilterCombinations.d.ts +1 -23
  2. package/dist/src/enums/FilterCombinations.js +1 -23
  3. package/dist/src/organisations/rules/AtLeastSevenResultsRule.d.ts +15 -0
  4. package/dist/src/organisations/rules/AtLeastSevenResultsRule.js +30 -0
  5. package/dist/src/presenters/AttendancePresenter.js +0 -4
  6. package/dist/src/presenters/FormatPresenter.js +1 -4
  7. package/dist/src/presenters/SpecialProgrammesPresenter.js +0 -4
  8. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.js +0 -1
  9. package/dist/src/programmes/SearchIndexabilityManager.js +3 -27
  10. package/dist/src/programmes/policies/AttendanceDegree.d.ts +3 -2
  11. package/dist/src/programmes/policies/AttendanceDegree.js +6 -7
  12. package/dist/src/programmes/policies/CountryAttendanceDegree.js +1 -1
  13. package/dist/src/programmes/policies/CountryDuration.d.ts +2 -2
  14. package/dist/src/programmes/policies/CountryDuration.js +4 -6
  15. package/dist/src/programmes/policies/CountryDurationDegree.js +1 -1
  16. package/dist/src/programmes/policies/CountryEducationalForm.js +1 -1
  17. package/dist/src/programmes/policies/DegreeAttendanceDiscipline.d.ts +1 -2
  18. package/dist/src/programmes/policies/DegreeAttendanceDiscipline.js +12 -12
  19. package/dist/src/programmes/policies/DisciplineArea.d.ts +1 -1
  20. package/dist/src/programmes/policies/DisciplineArea.js +1 -1
  21. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +1 -1
  22. package/dist/src/programmes/policies/DisciplineEducationalForm.js +1 -1
  23. package/dist/src/programmes/policies/SpecialProgrammes.d.ts +2 -1
  24. package/dist/src/programmes/policies/SpecialProgrammes.js +3 -1
  25. package/dist/src/programmes/policies/index.d.ts +1 -26
  26. package/dist/src/programmes/policies/index.js +1 -26
  27. package/dist/src/programmes/rules/AtLeastSevenResultsRule.js +1 -1
  28. package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.js +2 -2
  29. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +3 -27
  30. package/dist/src/structured-data/OrganisationStructuredDataFactory.d.ts +9 -0
  31. package/dist/src/structured-data/OrganisationStructuredDataFactory.js +25 -0
  32. package/dist/src/structured-data/dto/OrganisationDTO.d.ts +7 -0
  33. package/dist/src/structured-data/index.d.ts +1 -0
  34. package/dist/src/structured-data/index.js +1 -0
  35. package/package.json +105 -105
  36. package/dist/src/common/IPolicyMetaData.d.ts +0 -6
  37. package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.d.ts +0 -11
  38. package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.js +0 -19
  39. package/dist/src/organisations/rules/OnlineAttendanceRule.d.ts +0 -6
  40. package/dist/src/organisations/rules/OnlineAttendanceRule.js +0 -14
  41. package/dist/src/programmes/IProgrammeSearchApplicationState.d.ts +0 -4
  42. package/dist/src/programmes/IProgrammeSearchApplicationState.js +0 -1
  43. package/dist/src/programmes/IProgrammeSearchDependencies.d.ts +0 -7
  44. package/dist/src/programmes/IProgrammeSearchDependencies.js +0 -1
  45. package/dist/src/programmes/IProgrammesSeoDependencies.d.ts +0 -2
  46. package/dist/src/programmes/IProgrammesSeoDependencies.js +0 -1
  47. package/dist/src/programmes/policies/AttendanceArea.d.ts +0 -16
  48. package/dist/src/programmes/policies/AttendanceArea.js +0 -48
  49. package/dist/src/programmes/policies/AttendanceContinent.d.ts +0 -16
  50. package/dist/src/programmes/policies/AttendanceContinent.js +0 -46
  51. package/dist/src/programmes/policies/AttendanceDuration.d.ts +0 -16
  52. package/dist/src/programmes/policies/AttendanceDuration.js +0 -48
  53. package/dist/src/programmes/policies/AttendanceFormat.d.ts +0 -16
  54. package/dist/src/programmes/policies/AttendanceFormat.js +0 -48
  55. package/dist/src/programmes/policies/AttendanceTuitionFee.d.ts +0 -16
  56. package/dist/src/programmes/policies/AttendanceTuitionFee.js +0 -49
  57. package/dist/src/programmes/policies/ContinentDuration.d.ts +0 -15
  58. package/dist/src/programmes/policies/ContinentDuration.js +0 -46
  59. package/dist/src/programmes/policies/ContinentFormat.d.ts +0 -15
  60. package/dist/src/programmes/policies/ContinentFormat.js +0 -46
  61. package/dist/src/programmes/policies/ContinentSpecialProgrammes.d.ts +0 -15
  62. package/dist/src/programmes/policies/ContinentSpecialProgrammes.js +0 -46
  63. package/dist/src/programmes/policies/CountrySpecialProgrammes.d.ts +0 -15
  64. package/dist/src/programmes/policies/CountrySpecialProgrammes.js +0 -46
  65. package/dist/src/programmes/policies/DegreeArea.d.ts +0 -15
  66. package/dist/src/programmes/policies/DegreeArea.js +0 -46
  67. package/dist/src/programmes/policies/DegreeAreaTuitionFee.d.ts +0 -15
  68. package/dist/src/programmes/policies/DegreeAreaTuitionFee.js +0 -52
  69. package/dist/src/programmes/policies/DegreeAttendanceFormat.d.ts +0 -15
  70. package/dist/src/programmes/policies/DegreeAttendanceFormat.js +0 -52
  71. package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.d.ts +0 -16
  72. package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.js +0 -56
  73. package/dist/src/programmes/policies/DegreeAttendanceTuitionFee.d.ts +0 -16
  74. package/dist/src/programmes/policies/DegreeAttendanceTuitionFee.js +0 -55
  75. package/dist/src/programmes/policies/DegreeContinent.d.ts +0 -16
  76. package/dist/src/programmes/policies/DegreeContinent.js +0 -46
  77. package/dist/src/programmes/policies/DegreeContinentTuitionFee.d.ts +0 -16
  78. package/dist/src/programmes/policies/DegreeContinentTuitionFee.js +0 -52
  79. package/dist/src/programmes/policies/DegreeDuration.d.ts +0 -16
  80. package/dist/src/programmes/policies/DegreeDuration.js +0 -48
  81. package/dist/src/programmes/policies/DegreeFormat.d.ts +0 -16
  82. package/dist/src/programmes/policies/DegreeFormat.js +0 -49
  83. package/dist/src/programmes/policies/DegreeFormatTuitionFee.d.ts +0 -16
  84. package/dist/src/programmes/policies/DegreeFormatTuitionFee.js +0 -52
  85. package/dist/src/programmes/policies/DegreeSpecialProgrammes.d.ts +0 -15
  86. package/dist/src/programmes/policies/DegreeSpecialProgrammes.js +0 -48
  87. package/dist/src/programmes/policies/DegreeTuitionFee.d.ts +0 -15
  88. package/dist/src/programmes/policies/DegreeTuitionFee.js +0 -47
  89. package/dist/src/programmes/policies/DisciplineContinentAttendance.d.ts +0 -16
  90. package/dist/src/programmes/policies/DisciplineContinentAttendance.js +0 -54
  91. package/dist/src/programmes/policies/DisciplineCountryAttendance.d.ts +0 -16
  92. package/dist/src/programmes/policies/DisciplineCountryAttendance.js +0 -54
  93. package/dist/src/programmes/policies/DisciplineCountryDegree.d.ts +0 -16
  94. package/dist/src/programmes/policies/DisciplineCountryDegree.js +0 -53
  95. package/dist/src/programmes/policies/DisciplineCountryFormat.d.ts +0 -15
  96. package/dist/src/programmes/policies/DisciplineCountryFormat.js +0 -52
  97. package/dist/src/programmes/policies/DisciplineSpecialProgrammes.d.ts +0 -15
  98. package/dist/src/programmes/policies/DisciplineSpecialProgrammes.js +0 -46
  99. package/dist/src/programmes/policies/Duration.d.ts +0 -15
  100. package/dist/src/programmes/policies/Duration.js +0 -38
  101. package/dist/src/programmes/policies/Format.d.ts +0 -15
  102. package/dist/src/programmes/policies/Format.js +0 -38
  103. package/dist/src/programmes/rules/DegreeAttendanceSpecificRule.d.ts +0 -10
  104. package/dist/src/programmes/rules/DegreeAttendanceSpecificRule.js +0 -42
  105. package/dist/src/programmes/rules/DegreeCountrySpecificRule.d.ts +0 -10
  106. package/dist/src/programmes/rules/DegreeCountrySpecificRule.js +0 -43
  107. package/dist/src/programmes/rules/DegreeCountryTuitionFeeRule.d.ts +0 -11
  108. package/dist/src/programmes/rules/DegreeCountryTuitionFeeRule.js +0 -40
  109. package/dist/src/programmes/rules/MBACountryAttendanceRule.d.ts +0 -11
  110. package/dist/src/programmes/rules/MBACountryAttendanceRule.js +0 -40
  111. package/dist/src/programmes/rules/MasterOfArtsDisciplineRule.d.ts +0 -10
  112. package/dist/src/programmes/rules/MasterOfArtsDisciplineRule.js +0 -41
  113. package/dist/src/programmes/rules/MasterOfEducationCountryDisciplineRule.d.ts +0 -11
  114. package/dist/src/programmes/rules/MasterOfEducationCountryDisciplineRule.js +0 -69
  115. package/dist/src/programmes/rules/MasterOfLawsCountryAttendanceRule.d.ts +0 -12
  116. package/dist/src/programmes/rules/MasterOfLawsCountryAttendanceRule.js +0 -43
  117. package/dist/src/programmes/rules/MasterOfLawsCountryTuitionFeeRule.d.ts +0 -12
  118. package/dist/src/programmes/rules/MasterOfLawsCountryTuitionFeeRule.js +0 -46
  119. package/dist/src/programmes/rules/MasterOfPhilosophyCountryAttendanceRule.d.ts +0 -12
  120. package/dist/src/programmes/rules/MasterOfPhilosophyCountryAttendanceRule.js +0 -43
  121. package/dist/src/programmes/rules/MasterOfScienceDisciplineRule.d.ts +0 -10
  122. package/dist/src/programmes/rules/MasterOfScienceDisciplineRule.js +0 -41
  123. package/dist/src/programmes/rules/OneYearOnlyRule.d.ts +0 -11
  124. package/dist/src/programmes/rules/OneYearOnlyRule.js +0 -34
  125. package/dist/src/programmes/rules/OnlineAttendanceRule.d.ts +0 -6
  126. package/dist/src/programmes/rules/OnlineAttendanceRule.js +0 -15
  127. package/dist/src/sitemap-generator/IPageNumberProvider.d.ts +0 -3
  128. package/dist/src/sitemap-generator/IPageNumberProvider.js +0 -1
  129. /package/dist/src/{common/IPolicyMetaData.js → structured-data/dto/OrganisationDTO.js} +0 -0
@@ -4,8 +4,6 @@ export declare enum FilterCombinations {
4
4
  AREA_DISCIPLINE = "areaDiscipline",
5
5
  COUNTRY = "country",
6
6
  DEGREE = "degree",
7
- DURATION = "duration",
8
- FORMAT = "format",
9
7
  COUNTRY_DEGREE = "countryDegree",
10
8
  COUNTRY_DURATION = "countryDuration",
11
9
  COUNTRY_FORMAT = "countryFormat",
@@ -13,8 +11,6 @@ export declare enum FilterCombinations {
13
11
  COUNTRY_EDUCATIONAL_FORM = "countryEducationalForm",
14
12
  COUNTRY_ATTENDANCE_DEGREE = "countryAttendanceDegree",
15
13
  COUNTRY_DURATION_DEGREE = "countryDurationDegree",
16
- COUNTRY_SPECIAL_PROGRAMMES = "countrySpecialProgrammes",
17
- CONTINENT_FORMAT = "continentFormat",
18
14
  DISCIPLINE_AREA = "disciplineArea",
19
15
  DISCIPLINE_ATTENDANCE = "disciplineAttendance",
20
16
  DISCIPLINE_COUNTRY = "disciplineCountry",
@@ -26,34 +22,16 @@ export declare enum FilterCombinations {
26
22
  DISCIPLINE_EDUCATIONAL_FORM = "disciplineEducationalForm",
27
23
  DISCIPLINE_TUITION_FEE_ATTENDANCE = "disciplineTuitionFeeAttendance",
28
24
  DISCIPLINE_COUNTRY_EDUCATIONAL_FORM = "disciplineCountryEducationalForm",
29
- DISCIPLINE_CONTINENT_ATTENDANCE = "disciplineContinentAttendance",
30
- DISCIPLINE_SPECIAL_PROGRAMMES = "disciplineSpecialProgrammes",
31
- DISCIPLINE_COUNTRY_ATTENDANCE = "disciplineCountryAttendance",
32
25
  DEGREE_COUNTRY_DISCIPLINE = "degreeCountryDiscipline",
33
26
  DEGREE_ATTENDANCE_DISCIPLINE = "degreeAttendanceDiscipline",
34
27
  DEGREE_COUNTRY_TUITION_FEE = "degreeCountryTuitionFee",
35
28
  DEGREE_COUNTRY_ATTENDANCE = "degreeCountryAttendance",
36
- DEGREE_TUITION_FEE = "degreeTuitionFee",
37
- DEGREE_ATTENDANCE_TUITION_FEE = "degreeAttendanceTuitionFee",
38
- DEGREE_ATTENDANCE_FORMAT = "degreeAttendanceFormat",
39
- DEGREE_AREA = "degreeArea",
40
- DEGREE_FORMAT = "degreeFormat",
41
- DEGREE_CONTINENT = "degreeContinent",
42
- DEGREE_AREA_TUITION_FEE = "degreeAreaTuitionFee",
43
- DEGREE_CONTINENT_TUITION_FEE = "degreeContinentTuitionFee",
44
- DEGREE_DURATION = "degreeDuration",
45
- DEGREE_FORMAT_TUITION_FEE = "degreeFormatTuitionFee",
46
- DEGREE_SPECIAL_PROGRAMMES = "degreeSpecialProgrammes",
47
29
  DISCIPLINE = "discipline",
48
30
  UNFILTERED = "unfiltered",
49
31
  UNIVERSITY_COUNTRY = "universityCountry",
50
32
  ATTENDANCE_DISCIPLINE = "attendancedDiscipline",
51
33
  ATTENDANCE_DEGREE = "attendanceDegree",
52
- ATTENDANCE_TUITION_FEE = "attendanceTuitionFee",
53
- ATTENDANCE_DURATION = "attendanceDuration",
54
- ATTENDANCE_FORMAT = "attendanceFormat",
55
- ATTENDANCE_AREA = "attendanceArea",
56
- ATTENDANCE_CONTINENT = "attendanceContinent",
34
+ CONTINENT_ATTENDANCE = "continentAttendance",
57
35
  COUNTRY_ATTENDANCE = "countryAttendance",
58
36
  ATTENDANCE = "attendance",
59
37
  CONTINENT = "continent",
@@ -5,8 +5,6 @@ export var FilterCombinations;
5
5
  FilterCombinations["AREA_DISCIPLINE"] = "areaDiscipline";
6
6
  FilterCombinations["COUNTRY"] = "country";
7
7
  FilterCombinations["DEGREE"] = "degree";
8
- FilterCombinations["DURATION"] = "duration";
9
- FilterCombinations["FORMAT"] = "format";
10
8
  FilterCombinations["COUNTRY_DEGREE"] = "countryDegree";
11
9
  FilterCombinations["COUNTRY_DURATION"] = "countryDuration";
12
10
  FilterCombinations["COUNTRY_FORMAT"] = "countryFormat";
@@ -14,8 +12,6 @@ export var FilterCombinations;
14
12
  FilterCombinations["COUNTRY_EDUCATIONAL_FORM"] = "countryEducationalForm";
15
13
  FilterCombinations["COUNTRY_ATTENDANCE_DEGREE"] = "countryAttendanceDegree";
16
14
  FilterCombinations["COUNTRY_DURATION_DEGREE"] = "countryDurationDegree";
17
- FilterCombinations["COUNTRY_SPECIAL_PROGRAMMES"] = "countrySpecialProgrammes";
18
- FilterCombinations["CONTINENT_FORMAT"] = "continentFormat";
19
15
  FilterCombinations["DISCIPLINE_AREA"] = "disciplineArea";
20
16
  FilterCombinations["DISCIPLINE_ATTENDANCE"] = "disciplineAttendance";
21
17
  FilterCombinations["DISCIPLINE_COUNTRY"] = "disciplineCountry";
@@ -27,34 +23,16 @@ export var FilterCombinations;
27
23
  FilterCombinations["DISCIPLINE_EDUCATIONAL_FORM"] = "disciplineEducationalForm";
28
24
  FilterCombinations["DISCIPLINE_TUITION_FEE_ATTENDANCE"] = "disciplineTuitionFeeAttendance";
29
25
  FilterCombinations["DISCIPLINE_COUNTRY_EDUCATIONAL_FORM"] = "disciplineCountryEducationalForm";
30
- FilterCombinations["DISCIPLINE_CONTINENT_ATTENDANCE"] = "disciplineContinentAttendance";
31
- FilterCombinations["DISCIPLINE_SPECIAL_PROGRAMMES"] = "disciplineSpecialProgrammes";
32
- FilterCombinations["DISCIPLINE_COUNTRY_ATTENDANCE"] = "disciplineCountryAttendance";
33
26
  FilterCombinations["DEGREE_COUNTRY_DISCIPLINE"] = "degreeCountryDiscipline";
34
27
  FilterCombinations["DEGREE_ATTENDANCE_DISCIPLINE"] = "degreeAttendanceDiscipline";
35
28
  FilterCombinations["DEGREE_COUNTRY_TUITION_FEE"] = "degreeCountryTuitionFee";
36
29
  FilterCombinations["DEGREE_COUNTRY_ATTENDANCE"] = "degreeCountryAttendance";
37
- FilterCombinations["DEGREE_TUITION_FEE"] = "degreeTuitionFee";
38
- FilterCombinations["DEGREE_ATTENDANCE_TUITION_FEE"] = "degreeAttendanceTuitionFee";
39
- FilterCombinations["DEGREE_ATTENDANCE_FORMAT"] = "degreeAttendanceFormat";
40
- FilterCombinations["DEGREE_AREA"] = "degreeArea";
41
- FilterCombinations["DEGREE_FORMAT"] = "degreeFormat";
42
- FilterCombinations["DEGREE_CONTINENT"] = "degreeContinent";
43
- FilterCombinations["DEGREE_AREA_TUITION_FEE"] = "degreeAreaTuitionFee";
44
- FilterCombinations["DEGREE_CONTINENT_TUITION_FEE"] = "degreeContinentTuitionFee";
45
- FilterCombinations["DEGREE_DURATION"] = "degreeDuration";
46
- FilterCombinations["DEGREE_FORMAT_TUITION_FEE"] = "degreeFormatTuitionFee";
47
- FilterCombinations["DEGREE_SPECIAL_PROGRAMMES"] = "degreeSpecialProgrammes";
48
30
  FilterCombinations["DISCIPLINE"] = "discipline";
49
31
  FilterCombinations["UNFILTERED"] = "unfiltered";
50
32
  FilterCombinations["UNIVERSITY_COUNTRY"] = "universityCountry";
51
33
  FilterCombinations["ATTENDANCE_DISCIPLINE"] = "attendancedDiscipline";
52
34
  FilterCombinations["ATTENDANCE_DEGREE"] = "attendanceDegree";
53
- FilterCombinations["ATTENDANCE_TUITION_FEE"] = "attendanceTuitionFee";
54
- FilterCombinations["ATTENDANCE_DURATION"] = "attendanceDuration";
55
- FilterCombinations["ATTENDANCE_FORMAT"] = "attendanceFormat";
56
- FilterCombinations["ATTENDANCE_AREA"] = "attendanceArea";
57
- FilterCombinations["ATTENDANCE_CONTINENT"] = "attendanceContinent";
35
+ FilterCombinations["CONTINENT_ATTENDANCE"] = "continentAttendance";
58
36
  FilterCombinations["COUNTRY_ATTENDANCE"] = "countryAttendance";
59
37
  FilterCombinations["ATTENDANCE"] = "attendance";
60
38
  FilterCombinations["CONTINENT"] = "continent";
@@ -0,0 +1,15 @@
1
+ import { ISearchDependencies } from '../../common/ISearchDependencies';
2
+ import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
3
+ import { ISearchApiClient } from '../../sitemap-generator/ISearchApiClient';
4
+ import { IRule } from '../../common/IRule';
5
+ export declare class AtLeastSevenResultsRule implements IRule {
6
+ private readonly minimumResultsCount;
7
+ private readonly maximumPageSize;
8
+ private readonly searchApiClient?;
9
+ constructor(searchApiClient?: ISearchApiClient);
10
+ forSearch(dependencies: ISearchDependencies): Promise<boolean>;
11
+ forSitemapGeneratorWithPageNumber(filterKeyValues: FilterKeyValuesMap, pageNumber: number): Promise<boolean>;
12
+ forSitemapGenerator(): Promise<boolean>;
13
+ getName(): string;
14
+ getDescription(): string;
15
+ }
@@ -0,0 +1,30 @@
1
+ import { DependencyMissingError } from '../../errors/DependencyMissingError';
2
+ export class AtLeastSevenResultsRule {
3
+ minimumResultsCount = 7;
4
+ maximumPageSize = 20;
5
+ searchApiClient;
6
+ constructor(searchApiClient) {
7
+ this.searchApiClient = searchApiClient;
8
+ }
9
+ forSearch(dependencies) {
10
+ const { applicationState } = dependencies;
11
+ const resultCount = applicationState.getNumberOfResults();
12
+ return Promise.resolve(resultCount >= this.minimumResultsCount);
13
+ }
14
+ async forSitemapGeneratorWithPageNumber(filterKeyValues, pageNumber) {
15
+ if (!this.searchApiClient) {
16
+ throw new DependencyMissingError('SearchApiClient');
17
+ }
18
+ const count = await this.searchApiClient.getCount(filterKeyValues);
19
+ return count >= (pageNumber - 1) * this.maximumPageSize + this.minimumResultsCount;
20
+ }
21
+ forSitemapGenerator() {
22
+ throw new Error('Method not implemented.');
23
+ }
24
+ getName() {
25
+ return 'AtLeastSevenResultsRule';
26
+ }
27
+ getDescription() {
28
+ return 'Is indexable if there are at least 2 results.';
29
+ }
30
+ }
@@ -8,10 +8,6 @@ export class AttendancePresenter {
8
8
  {
9
9
  id: 'online',
10
10
  path: 'online'
11
- },
12
- {
13
- id: 'blended',
14
- path: 'blended'
15
11
  }
16
12
  ];
17
13
  }
@@ -4,14 +4,11 @@ export class FormatPresenter {
4
4
  static instance;
5
5
  fragments;
6
6
  constructor() {
7
+ // Part-time is the only indexable format according to PartTimeFormatRule
7
8
  this.fragments = [
8
9
  {
9
10
  id: FormatFilterOptionValue.PART_TIME,
10
11
  path: 'part-time'
11
- },
12
- {
13
- id: FormatFilterOptionValue.FULL_TIME,
14
- path: 'full-time'
15
12
  }
16
13
  ];
17
14
  }
@@ -12,10 +12,6 @@ export class SpecialProgrammesPresenter {
12
12
  {
13
13
  id: SpecialProgrammesFilterOptionValue.ERASMUS_MUNDUS,
14
14
  path: 'erasmus-mundus'
15
- },
16
- {
17
- id: SpecialProgrammesFilterOptionValue.EXECUTIVE_PROGRAMMES,
18
- path: 'executive-programmes'
19
15
  }
20
16
  ];
21
17
  }
@@ -28,7 +28,6 @@ export class ProgrammesBaseIndexabilityPolicy extends BaseSeoIndexabilityPolicy
28
28
  else {
29
29
  result = await rule.forSitemapGenerator(filterKeyValues);
30
30
  }
31
- // console.log("RuleName: " + rule.getName() + " Rule result: " + result); // eslint-disable-line
32
31
  if (!result) {
33
32
  return false;
34
33
  }
@@ -1,4 +1,4 @@
1
- import { Area, Attendance, AttendanceDegree, Continent, ContinentTuitionFee, Country, CountryAttendance, CountryAttendanceDegree, CountryDegree, CountryDuration, CountryDurationDegree, CountryEducationalForm, CountryFormat, CountryTuitionFee, DegreeAttendanceDiscipline, DegreeCountryAttendance, DegreeCountryDiscipline, DegreeCountryTuitionFee, Discipline, DisciplineAttendance, DisciplineContinent, DisciplineCountry, DisciplineCountryEducationalForm, DisciplineDegree, DisciplineDuration, DisciplineEducationalForm, DisciplineFormat, DisciplineTuitionFee, DisciplineTuitionFeeAttendance, SpecialProgrammes, TuitionFee, Unfiltered, AttendanceArea, AttendanceContinent, AttendanceDuration, AttendanceFormat, AttendanceTuitionFee, ContinentDuration, ContinentFormat, ContinentSpecialProgrammes, CountrySpecialProgrammes, DegreeArea, DegreeAreaTuitionFee, DegreeAttendanceFormat, DegreeAttendanceTuitionFee, DegreeContinent, DegreeContinentTuitionFee, DegreeDuration, DegreeFormat, DegreeFormatTuitionFee, DegreeSpecialProgrammes, DegreeTuitionFee, DisciplineContinentAttendance, DisciplineCountryAttendance, DisciplineCountryFormat, Duration, Format } from './policies';
1
+ import { Area, Attendance, AttendanceDegree, Continent, ContinentTuitionFee, Country, CountryAttendance, CountryAttendanceDegree, CountryDegree, CountryDuration, CountryDurationDegree, CountryEducationalForm, CountryFormat, CountryTuitionFee, DegreeAttendanceDiscipline, DegreeCountryAttendance, DegreeCountryDiscipline, DegreeCountryTuitionFee, Discipline, DisciplineArea, DisciplineAttendance, DisciplineContinent, DisciplineCountry, DisciplineCountryEducationalForm, DisciplineDegree, DisciplineDuration, DisciplineEducationalForm, DisciplineFormat, DisciplineTuitionFee, DisciplineTuitionFeeAttendance, SpecialProgrammes, TuitionFee, Unfiltered } from './policies';
2
2
  import { DependencyTypes } from '../enums/DependencyTypes';
3
3
  import { Degree } from './policies/Degree';
4
4
  export class SearchIndexabilityManager {
@@ -32,6 +32,7 @@ export class SearchIndexabilityManager {
32
32
  new DegreeCountryDiscipline(dependencies),
33
33
  new DegreeCountryTuitionFee(dependencies),
34
34
  new Discipline(dependencies),
35
+ new DisciplineArea(dependencies),
35
36
  new DisciplineAttendance(dependencies),
36
37
  new DisciplineContinent(dependencies),
37
38
  new DisciplineCountry(dependencies),
@@ -44,32 +45,7 @@ export class SearchIndexabilityManager {
44
45
  new DisciplineTuitionFeeAttendance(dependencies),
45
46
  new SpecialProgrammes(dependencies),
46
47
  new TuitionFee(dependencies),
47
- new Unfiltered(dependencies),
48
- new CountrySpecialProgrammes(dependencies),
49
- new DegreeArea(dependencies),
50
- new DegreeAreaTuitionFee(dependencies),
51
- new DegreeAttendanceFormat(dependencies),
52
- new DegreeAttendanceTuitionFee(dependencies),
53
- new DegreeContinent(dependencies),
54
- new DegreeContinentTuitionFee(dependencies),
55
- new DegreeDuration(dependencies),
56
- new DegreeFormat(dependencies),
57
- new DegreeFormatTuitionFee(dependencies),
58
- new DegreeSpecialProgrammes(dependencies),
59
- new DegreeTuitionFee(dependencies),
60
- new DisciplineContinentAttendance(dependencies),
61
- new DisciplineCountryAttendance(dependencies),
62
- new DisciplineCountryFormat(dependencies),
63
- new Duration(dependencies),
64
- new Format(dependencies),
65
- new AttendanceArea(dependencies),
66
- new AttendanceContinent(dependencies),
67
- new AttendanceDuration(dependencies),
68
- new AttendanceFormat(dependencies),
69
- new AttendanceTuitionFee(dependencies),
70
- new ContinentDuration(dependencies),
71
- new ContinentFormat(dependencies),
72
- new ContinentSpecialProgrammes(dependencies),
48
+ new Unfiltered(dependencies)
73
49
  ];
74
50
  }
75
51
  getPolicies() {
@@ -2,14 +2,15 @@ import { FilterKey } from '@studyportals/search-filters/server-side';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
6
+ import { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
5
7
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
8
  import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
7
- import { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
8
9
  export declare class AttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
9
10
  readonly name: string;
10
11
  readonly description: string;
11
12
  readonly filterKeys: FilterKey[];
12
- protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexableDegreeRule)[];
13
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule | IndexableDegreeRule)[];
13
14
  constructor(dependencies: IProgrammeSeoDependencies);
14
15
  protected generateUrls(): Promise<string[]>;
15
16
  get filterCombination(): FilterCombinations;
@@ -2,19 +2,21 @@ import { FilterKey } from '@studyportals/search-filters/server-side';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
6
+ import { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
5
7
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
8
  import { AttendancePresenter } from '../../presenters/AttendancePresenter';
7
9
  import { DegreePresenter } from '../../presenters/DegreePresenter';
8
- import { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
9
10
  export class AttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
10
11
  name = 'Attendance Degree Type Policy';
11
- description = 'Determines indexing rules for pages filtered by both study format (online, blended, on-campus, etc.), and degree type prioritizing degrees and formats with demonstrated search demand.';
12
+ description = 'Determines indexing rules for pages filtered by both study format (online, on-campus, etc.), and degree type prioritizing degrees and formats with demonstrated search demand.';
12
13
  filterKeys = [FilterKey.DELIVERY_METHOD, FilterKey.DEGREE_TYPE];
13
14
  rules = [
14
15
  new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
15
16
  new SingleValueSelectedForFilterRule(FilterKey.DEGREE_TYPE),
16
17
  new OnlyFiltersSelectedRule([FilterKey.DELIVERY_METHOD, FilterKey.DEGREE_TYPE]),
17
- new IndexableDegreeRule()
18
+ new IndexableDegreeRule(),
19
+ new OnlineAttendanceRule()
18
20
  ];
19
21
  constructor(dependencies) {
20
22
  super(dependencies);
@@ -23,12 +25,9 @@ export class AttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
23
25
  async generateUrls() {
24
26
  const attendanceFragments = AttendancePresenter.getInstance().getFragments();
25
27
  const degreeFragments = DegreePresenter.getInstance().getFragments();
26
- // Allow online and blended learning formats
27
- const allowedAttendanceIds = ["online", "blended"];
28
- const allowedAttendances = attendanceFragments.filter(attendance => allowedAttendanceIds.includes(attendance.id));
29
28
  const paths = [];
30
29
  for (const pageNumber of this.indexablePageNumbers) {
31
- for (const attendance of allowedAttendances) {
30
+ for (const attendance of attendanceFragments) {
32
31
  for (const degree of degreeFragments) {
33
32
  const filterKeyValues = new Map([
34
33
  [FilterKey.DELIVERY_METHOD, [attendance.id]],
@@ -10,7 +10,7 @@ import { AttendancePresenter } from '../../presenters/AttendancePresenter';
10
10
  import { DegreePresenter } from '../../presenters/DegreePresenter';
11
11
  export class CountryAttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
12
12
  name = 'Country Attendance Degree Policy';
13
- description = `Determines indexing rules for pages filtered by country,
13
+ description = `Determines indexing rules for pages filtered by country,
14
14
  study format (online, on-campus, etc.), and degree type.`;
15
15
  filterKeys = [FilterKey.COUNTRY, FilterKey.DELIVERY_METHOD, FilterKey.DEGREE_TYPE];
16
16
  rules = [
@@ -2,14 +2,14 @@ import { FilterKey } from '@studyportals/search-filters/server-side';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
- import { OneYearOnlyRule } from '../rules/OneYearOnlyRule';
5
+ import { IndexableDurationRule } from '../rules/IndexableDurationRule';
6
6
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
7
  import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
8
8
  export declare class CountryDuration extends ProgrammesBaseIndexabilityPolicy {
9
9
  readonly name: string;
10
10
  readonly description: string;
11
11
  readonly filterKeys: FilterKey[];
12
- protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OneYearOnlyRule)[];
12
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexableDurationRule)[];
13
13
  constructor(dependencies: IProgrammeSeoDependencies);
14
14
  protected generateUrls(): Promise<string[]>;
15
15
  get filterCombination(): FilterCombinations;
@@ -2,19 +2,19 @@ import { FilterKey } from '@studyportals/search-filters/server-side';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
- import { OneYearOnlyRule } from '../rules/OneYearOnlyRule';
5
+ import { IndexableDurationRule } from '../rules/IndexableDurationRule';
6
6
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
7
  import { CountryPresenter } from '../../presenters/CountryPresenter';
8
8
  import { DurationPresenter } from '../../presenters/DurationPresenter';
9
9
  export class CountryDuration extends ProgrammesBaseIndexabilityPolicy {
10
10
  name = 'Country Duration Policy';
11
- description = 'Determines indexing rules for pages filtered by both country, and duration (1 year only).';
11
+ description = 'Determines indexing rules for pages filtered by both country, and duration (1 year, 2 years, etc.).';
12
12
  filterKeys = [FilterKey.COUNTRY, FilterKey.DURATION];
13
13
  rules = [
14
14
  new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
15
15
  new SingleValueSelectedForFilterRule(FilterKey.DURATION),
16
16
  new OnlyFiltersSelectedRule([FilterKey.COUNTRY, FilterKey.DURATION]),
17
- new OneYearOnlyRule()
17
+ new IndexableDurationRule()
18
18
  ];
19
19
  constructor(dependencies) {
20
20
  super(dependencies);
@@ -23,12 +23,10 @@ export class CountryDuration extends ProgrammesBaseIndexabilityPolicy {
23
23
  async generateUrls() {
24
24
  const countryFragments = CountryPresenter.getInstance().getFragments();
25
25
  const durationFragments = DurationPresenter.getInstance().getFragments();
26
- const allowedDurationIds = ["[360,360]"];
27
- const allowedDurations = durationFragments.filter(duration => allowedDurationIds.includes(duration.id));
28
26
  const paths = [];
29
27
  for (const pageNumber of this.indexablePageNumbers) {
30
28
  for (const country of countryFragments) {
31
- for (const duration of allowedDurations) {
29
+ for (const duration of durationFragments) {
32
30
  const filterKeyValues = new Map([
33
31
  [FilterKey.COUNTRY, [country.id]],
34
32
  [FilterKey.DURATION, [duration.id]]
@@ -10,7 +10,7 @@ import { DegreePresenter } from '../../presenters/DegreePresenter';
10
10
  import { DurationPresenter } from '../../presenters/DurationPresenter';
11
11
  export class CountryDurationDegree extends ProgrammesBaseIndexabilityPolicy {
12
12
  name = 'Country Duration Degree Policy';
13
- description = `Determines indexing rules for pages filtered by country,
13
+ description = `Determines indexing rules for pages filtered by country,
14
14
  duration (1 year, 2 years, etc.), and degree type.`;
15
15
  filterKeys = [FilterKey.COUNTRY, FilterKey.DURATION, FilterKey.DEGREE_TYPE];
16
16
  rules = [
@@ -8,7 +8,7 @@ import { CountryPresenter } from '../../presenters/CountryPresenter';
8
8
  import { EducationalFormPresenter } from '../../presenters/EducationalFormPresenter';
9
9
  export class CountryEducationalForm extends ProgrammesBaseIndexabilityPolicy {
10
10
  name = 'Country Educational Form Policy';
11
- description = `Determines indexing rules for pages filtered by both country,
11
+ description = `Determines indexing rules for pages filtered by both country,
12
12
  and educational form (academic, semester, summer school, etc.).`;
13
13
  filterKeys = [FilterKey.COUNTRY, FilterKey.EDUCATIONAL_FORM];
14
14
  rules = [
@@ -5,12 +5,11 @@ import { FilterCombinations } from '../../enums/FilterCombinations';
5
5
  import { DegreeAttendanceDisciplineSpecificRule } from '../rules/DegreeAttendanceDisciplineSpecificRule';
6
6
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
7
  import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
8
- import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
9
8
  export declare class DegreeAttendanceDiscipline extends ProgrammesBaseIndexabilityPolicy {
10
9
  readonly name: string;
11
10
  readonly description: string;
12
11
  readonly filterKeys: FilterKey[];
13
- protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule | DegreeAttendanceDisciplineSpecificRule)[];
12
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | DegreeAttendanceDisciplineSpecificRule)[];
14
13
  constructor(dependencies: IProgrammeSeoDependencies);
15
14
  protected generateUrls(): Promise<string[]>;
16
15
  get filterCombination(): FilterCombinations;
@@ -8,7 +8,6 @@ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityP
8
8
  import { DegreePresenter } from '../../presenters/DegreePresenter';
9
9
  import { AttendancePresenter } from '../../presenters/AttendancePresenter';
10
10
  import { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
11
- import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
12
11
  export class DegreeAttendanceDiscipline extends ProgrammesBaseIndexabilityPolicy {
13
12
  name = 'Degree Attendance Discipline Policy';
14
13
  description = 'Determines indexing rules for pages filtered by degree type, attendance, and discipline.';
@@ -19,7 +18,6 @@ export class DegreeAttendanceDiscipline extends ProgrammesBaseIndexabilityPolicy
19
18
  new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
20
19
  new OnlyFiltersSelectedRule([FilterKey.DEGREE_TYPE, FilterKey.DELIVERY_METHOD, FilterKey.DISCIPLINES]),
21
20
  new DegreeAttendanceDisciplineSpecificRule(),
22
- new OnlineAttendanceRule()
23
21
  ];
24
22
  constructor(dependencies) {
25
23
  super(dependencies);
@@ -35,22 +33,24 @@ export class DegreeAttendanceDiscipline extends ProgrammesBaseIndexabilityPolicy
35
33
  DegreeTypeFilterOptionValue.MSC,
36
34
  DegreeTypeFilterOptionValue.MBA
37
35
  ];
36
+ const onlineAttendance = attendanceFragments.find(a => a.id === 'online');
37
+ if (!onlineAttendance) {
38
+ return paths;
39
+ }
38
40
  for (const pageNumber of this.indexablePageNumbers) {
39
41
  for (const degreeId of allowedDegreeIds) {
40
42
  const degree = degreeFragments.find(d => d.id === degreeId);
41
43
  if (!degree)
42
44
  continue;
43
45
  for (const discipline of disciplineFragments) {
44
- for (const attendance of attendanceFragments) {
45
- const filterKeyValues = new Map([
46
- [FilterKey.DEGREE_TYPE, [degree.id]],
47
- [FilterKey.DELIVERY_METHOD, [attendance.id]],
48
- [FilterKey.DISCIPLINES, [discipline.id]]
49
- ]);
50
- const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
51
- if (result) {
52
- paths.push(this.getPathWithPageNumber(`${degree.path}/${attendance.path}/${discipline.path}`, pageNumber));
53
- }
46
+ const filterKeyValues = new Map([
47
+ [FilterKey.DEGREE_TYPE, [degree.id]],
48
+ [FilterKey.DELIVERY_METHOD, [onlineAttendance.id]],
49
+ [FilterKey.DISCIPLINES, [discipline.id]]
50
+ ]);
51
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
52
+ if (result) {
53
+ paths.push(this.getPathWithPageNumber(`${degree.path}/${onlineAttendance.path}/${discipline.path}`, pageNumber));
54
54
  }
55
55
  }
56
56
  }
@@ -1,4 +1,4 @@
1
- import { FilterKey } from '@studyportals/search-filters';
1
+ import { FilterKey } from '@studyportals/search-filters/server-side';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from '@studyportals/search-filters';
1
+ import { FilterKey } from '@studyportals/search-filters/server-side';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -9,7 +9,7 @@ import { CountryPresenter } from '../../presenters/CountryPresenter';
9
9
  import { EducationalFormPresenter } from '../../presenters/EducationalFormPresenter';
10
10
  export class DisciplineCountryEducationalForm extends ProgrammesBaseIndexabilityPolicy {
11
11
  name = 'Discipline Country Educational Form Policy';
12
- description = `Determines indexing rules for pages filtered by discipline,
12
+ description = `Determines indexing rules for pages filtered by discipline,
13
13
  country, and educational form (academic, semester, summer school, etc.).`;
14
14
  filterKeys = [FilterKey.DISCIPLINES, FilterKey.COUNTRY, FilterKey.EDUCATIONAL_FORM];
15
15
  rules = [
@@ -8,7 +8,7 @@ import { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
8
8
  import { EducationalFormPresenter } from '../../presenters/EducationalFormPresenter';
9
9
  export class DisciplineEducationalForm extends ProgrammesBaseIndexabilityPolicy {
10
10
  name = 'Discipline Educational Form Policy';
11
- description = `Determines indexing rules for pages filtered by both discipline,
11
+ description = `Determines indexing rules for pages filtered by both discipline,
12
12
  and educational form (academic, semester, summer school, etc.).`;
13
13
  filterKeys = [FilterKey.DISCIPLINES, FilterKey.EDUCATIONAL_FORM];
14
14
  rules = [
@@ -2,13 +2,14 @@ import { FilterKey } from '@studyportals/search-filters/server-side';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { ErasmusOrJointSpecialProgrammesRule } from '../rules/ErasmusOrJointSpecialProgrammesRule';
5
6
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
7
  import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
7
8
  export declare class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
8
9
  readonly name: string;
9
10
  readonly description: string;
10
11
  readonly filterKeys: FilterKey[];
11
- protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
12
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | ErasmusOrJointSpecialProgrammesRule)[];
12
13
  constructor(dependencies: IProgrammeSeoDependencies);
13
14
  protected generateUrls(): Promise<string[]>;
14
15
  get filterCombination(): FilterCombinations;
@@ -2,6 +2,7 @@ import { FilterKey } from '@studyportals/search-filters/server-side';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { ErasmusOrJointSpecialProgrammesRule } from '../rules/ErasmusOrJointSpecialProgrammesRule';
5
6
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
7
  import { SpecialProgrammesPresenter } from '../../presenters/SpecialProgrammesPresenter';
7
8
  export class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
@@ -10,7 +11,8 @@ export class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
10
11
  filterKeys = [FilterKey.SPECIAL_PROGRAMMES];
11
12
  rules = [
12
13
  new SingleValueSelectedForFilterRule(FilterKey.SPECIAL_PROGRAMMES),
13
- new OnlyFiltersSelectedRule([FilterKey.SPECIAL_PROGRAMMES])
14
+ new OnlyFiltersSelectedRule([FilterKey.SPECIAL_PROGRAMMES]),
15
+ new ErasmusOrJointSpecialProgrammesRule()
14
16
  ];
15
17
  constructor(dependencies) {
16
18
  super(dependencies);
@@ -18,6 +18,7 @@ export * from './DegreeCountryDiscipline';
18
18
  export * from './DegreeCountryTuitionFee';
19
19
  export * from './DisciplineDegree';
20
20
  export * from './Discipline';
21
+ export * from './DisciplineArea';
21
22
  export * from './DisciplineAttendance';
22
23
  export * from './DisciplineContinent';
23
24
  export * from './DisciplineCountry';
@@ -31,29 +32,3 @@ export * from './DisciplineTuitionFeeAttendance';
31
32
  export * from './SpecialProgrammes';
32
33
  export * from './TuitionFee';
33
34
  export * from './Unfiltered';
34
- export * from './Format';
35
- export * from './DegreeFormat';
36
- export * from './DegreeAttendanceTuitionFee';
37
- export * from './DegreeArea';
38
- export * from './DegreeTuitionFee';
39
- export * from './DegreeAttendanceTuitionFee';
40
- export * from './DegreeContinent';
41
- export * from './AttendanceTuitionFee';
42
- export * from './Duration';
43
- export * from './AttendanceDuration';
44
- export * from './DegreeAreaTuitionFee';
45
- export * from './DisciplineContinentAttendance';
46
- export * from './DegreeContinentTuitionFee';
47
- export * from './AttendanceFormat';
48
- export * from './ContinentFormat';
49
- export * from './AttendanceContinent';
50
- export * from './DegreeDuration';
51
- export * from './ContinentSpecialProgrammes';
52
- export * from './CountrySpecialProgrammes';
53
- export * from './AttendanceArea';
54
- export * from './DegreeFormatTuitionFee';
55
- export * from './ContinentDuration';
56
- export * from './DegreeAttendanceFormat';
57
- export * from './DisciplineCountryAttendance';
58
- export * from './DisciplineCountryFormat';
59
- export * from './DegreeSpecialProgrammes';
@@ -18,6 +18,7 @@ export * from './DegreeCountryDiscipline';
18
18
  export * from './DegreeCountryTuitionFee';
19
19
  export * from './DisciplineDegree';
20
20
  export * from './Discipline';
21
+ export * from './DisciplineArea';
21
22
  export * from './DisciplineAttendance';
22
23
  export * from './DisciplineContinent';
23
24
  export * from './DisciplineCountry';
@@ -31,29 +32,3 @@ export * from './DisciplineTuitionFeeAttendance';
31
32
  export * from './SpecialProgrammes';
32
33
  export * from './TuitionFee';
33
34
  export * from './Unfiltered';
34
- export * from './Format';
35
- export * from './DegreeFormat';
36
- export * from './DegreeAttendanceTuitionFee';
37
- export * from './DegreeArea';
38
- export * from './DegreeTuitionFee';
39
- export * from './DegreeAttendanceTuitionFee';
40
- export * from './DegreeContinent';
41
- export * from './AttendanceTuitionFee';
42
- export * from './Duration';
43
- export * from './AttendanceDuration';
44
- export * from './DegreeAreaTuitionFee';
45
- export * from './DisciplineContinentAttendance';
46
- export * from './DegreeContinentTuitionFee';
47
- export * from './AttendanceFormat';
48
- export * from './ContinentFormat';
49
- export * from './AttendanceContinent';
50
- export * from './DegreeDuration';
51
- export * from './ContinentSpecialProgrammes';
52
- export * from './CountrySpecialProgrammes';
53
- export * from './AttendanceArea';
54
- export * from './DegreeFormatTuitionFee';
55
- export * from './ContinentDuration';
56
- export * from './DegreeAttendanceFormat';
57
- export * from './DisciplineCountryAttendance';
58
- export * from './DisciplineCountryFormat';
59
- export * from './DegreeSpecialProgrammes';
@@ -15,7 +15,7 @@ export class AtLeastSevenResultsRule {
15
15
  if (!this.searchApiClient) {
16
16
  throw new DependencyMissingError('SearchApiClient');
17
17
  }
18
- const count = await this.searchApiClient.getProgrammeCount(filterKeyValues);
18
+ const count = await this.searchApiClient.getCount(filterKeyValues);
19
19
  return count >= (pageNumber - 1) * this.maximumPageSize + this.minimumResultsCount;
20
20
  }
21
21
  forSitemapGenerator() {