@studyportals/fawkes 8.1.2-8 → 8.1.3-0
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/dist/src/common/rules/BaseFilterKeyValueRule.js +3 -10
- package/dist/src/enums/FilterCombinations.d.ts +1 -27
- package/dist/src/enums/FilterCombinations.js +1 -27
- package/dist/src/presenters/AttendancePresenter.js +0 -4
- package/dist/src/presenters/FormatPresenter.js +1 -4
- package/dist/src/presenters/SpecialProgrammesPresenter.js +0 -4
- package/dist/src/programmes/SearchIndexabilityManager.js +3 -31
- package/dist/src/programmes/policies/AttendanceDegree.d.ts +3 -3
- package/dist/src/programmes/policies/AttendanceDegree.js +4 -4
- package/dist/src/programmes/policies/CountryDuration.d.ts +2 -2
- package/dist/src/programmes/policies/CountryDuration.js +4 -6
- package/dist/src/programmes/policies/DegreeAttendanceDiscipline.d.ts +1 -2
- package/dist/src/programmes/policies/DegreeAttendanceDiscipline.js +12 -12
- package/dist/src/programmes/policies/DegreeCountryAttendance.js +3 -3
- package/dist/src/programmes/policies/DegreeCountryTuitionFee.js +2 -2
- package/dist/src/programmes/policies/DisciplineArea.d.ts +1 -1
- package/dist/src/programmes/policies/DisciplineArea.js +1 -1
- package/dist/src/programmes/policies/DisciplineDuration.d.ts +2 -2
- package/dist/src/programmes/policies/DisciplineDuration.js +2 -2
- package/dist/src/programmes/policies/DisciplineTuitionFee.js +1 -1
- package/dist/src/programmes/policies/SpecialProgrammes.d.ts +2 -1
- package/dist/src/programmes/policies/SpecialProgrammes.js +2 -0
- package/dist/src/programmes/policies/index.d.ts +1 -29
- package/dist/src/programmes/policies/index.js +1 -29
- package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.js +2 -2
- package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.js +1 -0
- package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +4 -29
- package/dist/src/structured-data/ScholarshipStructuredDataFactory.d.ts +14 -0
- package/dist/src/structured-data/ScholarshipStructuredDataFactory.js +69 -0
- package/dist/src/structured-data/SearchStructuredDataFactory.d.ts +22 -2
- package/dist/src/structured-data/SearchStructuredDataFactory.js +64 -7
- package/dist/src/structured-data/dto/EntityDTO.d.ts +2 -0
- package/dist/src/structured-data/dto/PaywallDTO.d.ts +14 -0
- package/dist/src/structured-data/dto/index.d.ts +1 -0
- package/dist/src/structured-data/dto/index.js +1 -0
- package/dist/src/structured-data/index.d.ts +1 -0
- package/dist/src/structured-data/index.js +1 -0
- package/package.json +6 -6
- package/dist/src/common/IPolicyMetaData.d.ts +0 -6
- package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.d.ts +0 -11
- package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.js +0 -19
- package/dist/src/organisations/rules/AtLeastTwoRankedResultsRule.d.ts +0 -13
- package/dist/src/organisations/rules/AtLeastTwoRankedResultsRule.js +0 -26
- package/dist/src/organisations/rules/OnlineAttendanceRule.d.ts +0 -6
- package/dist/src/organisations/rules/OnlineAttendanceRule.js +0 -14
- package/dist/src/programmes/IProgrammeSearchApplicationState.d.ts +0 -4
- package/dist/src/programmes/IProgrammeSearchApplicationState.js +0 -1
- package/dist/src/programmes/IProgrammeSearchDependencies.d.ts +0 -7
- package/dist/src/programmes/IProgrammeSearchDependencies.js +0 -1
- package/dist/src/programmes/IProgrammesSeoDependencies.d.ts +0 -2
- package/dist/src/programmes/IProgrammesSeoDependencies.js +0 -1
- package/dist/src/programmes/policies/AttendanceArea.d.ts +0 -16
- package/dist/src/programmes/policies/AttendanceArea.js +0 -48
- package/dist/src/programmes/policies/AttendanceContinent.d.ts +0 -16
- package/dist/src/programmes/policies/AttendanceContinent.js +0 -46
- package/dist/src/programmes/policies/AttendanceDuration.d.ts +0 -17
- package/dist/src/programmes/policies/AttendanceDuration.js +0 -50
- package/dist/src/programmes/policies/AttendanceFormat.d.ts +0 -16
- package/dist/src/programmes/policies/AttendanceFormat.js +0 -48
- package/dist/src/programmes/policies/AttendanceTuitionFee.d.ts +0 -17
- package/dist/src/programmes/policies/AttendanceTuitionFee.js +0 -51
- package/dist/src/programmes/policies/ContinentDuration.d.ts +0 -16
- package/dist/src/programmes/policies/ContinentDuration.js +0 -48
- package/dist/src/programmes/policies/ContinentFormat.d.ts +0 -16
- package/dist/src/programmes/policies/ContinentFormat.js +0 -48
- package/dist/src/programmes/policies/ContinentSpecialProgrammes.d.ts +0 -16
- package/dist/src/programmes/policies/ContinentSpecialProgrammes.js +0 -48
- package/dist/src/programmes/policies/CountrySpecialProgrammes.d.ts +0 -16
- package/dist/src/programmes/policies/CountrySpecialProgrammes.js +0 -48
- package/dist/src/programmes/policies/DegreeArea.d.ts +0 -15
- package/dist/src/programmes/policies/DegreeArea.js +0 -46
- package/dist/src/programmes/policies/DegreeAreaTuitionFee.d.ts +0 -16
- package/dist/src/programmes/policies/DegreeAreaTuitionFee.js +0 -54
- package/dist/src/programmes/policies/DegreeAttendanceFormat.d.ts +0 -17
- package/dist/src/programmes/policies/DegreeAttendanceFormat.js +0 -56
- package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.d.ts +0 -17
- package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.js +0 -58
- package/dist/src/programmes/policies/DegreeAttendanceTuitionFee.d.ts +0 -18
- package/dist/src/programmes/policies/DegreeAttendanceTuitionFee.js +0 -59
- package/dist/src/programmes/policies/DegreeContinent.d.ts +0 -16
- package/dist/src/programmes/policies/DegreeContinent.js +0 -46
- package/dist/src/programmes/policies/DegreeContinentTuitionFee.d.ts +0 -16
- package/dist/src/programmes/policies/DegreeContinentTuitionFee.js +0 -52
- package/dist/src/programmes/policies/DegreeDuration.d.ts +0 -17
- package/dist/src/programmes/policies/DegreeDuration.js +0 -50
- package/dist/src/programmes/policies/DegreeFormat.d.ts +0 -16
- package/dist/src/programmes/policies/DegreeFormat.js +0 -48
- package/dist/src/programmes/policies/DegreeFormatTuitionFee.d.ts +0 -18
- package/dist/src/programmes/policies/DegreeFormatTuitionFee.js +0 -56
- package/dist/src/programmes/policies/DegreeSpecialProgrammes.d.ts +0 -17
- package/dist/src/programmes/policies/DegreeSpecialProgrammes.js +0 -52
- package/dist/src/programmes/policies/DegreeTuitionFee.d.ts +0 -16
- package/dist/src/programmes/policies/DegreeTuitionFee.js +0 -49
- package/dist/src/programmes/policies/DisciplineContinentAttendance.d.ts +0 -16
- package/dist/src/programmes/policies/DisciplineContinentAttendance.js +0 -54
- package/dist/src/programmes/policies/DisciplineCountryAttendance.d.ts +0 -16
- package/dist/src/programmes/policies/DisciplineCountryAttendance.js +0 -54
- package/dist/src/programmes/policies/DisciplineCountryDegree.d.ts +0 -16
- package/dist/src/programmes/policies/DisciplineCountryDegree.js +0 -53
- package/dist/src/programmes/policies/DisciplineCountryFormat.d.ts +0 -16
- package/dist/src/programmes/policies/DisciplineCountryFormat.js +0 -54
- package/dist/src/programmes/policies/DisciplineSpecialProgrammes.d.ts +0 -16
- package/dist/src/programmes/policies/DisciplineSpecialProgrammes.js +0 -48
- package/dist/src/programmes/policies/Duration.d.ts +0 -16
- package/dist/src/programmes/policies/Duration.js +0 -40
- package/dist/src/programmes/policies/Format.d.ts +0 -15
- package/dist/src/programmes/policies/Format.js +0 -36
- package/dist/src/programmes/rules/AtLeastSevenResultsRule.d.ts +0 -15
- package/dist/src/programmes/rules/AtLeastSevenResultsRule.js +0 -30
- package/dist/src/programmes/rules/BlendedOrOnlineAttendanceRule.d.ts +0 -6
- package/dist/src/programmes/rules/BlendedOrOnlineAttendanceRule.js +0 -18
- package/dist/src/programmes/rules/DegreeAttendanceSpecificRule.d.ts +0 -10
- package/dist/src/programmes/rules/DegreeAttendanceSpecificRule.js +0 -42
- package/dist/src/programmes/rules/DegreeCountrySpecificRule.d.ts +0 -10
- package/dist/src/programmes/rules/DegreeCountrySpecificRule.js +0 -43
- package/dist/src/programmes/rules/DegreeCountryTuitionFeeRule.d.ts +0 -11
- package/dist/src/programmes/rules/DegreeCountryTuitionFeeRule.js +0 -40
- package/dist/src/programmes/rules/ErasmusOrExecutiveSpecialProgrammeRule.d.ts +0 -6
- package/dist/src/programmes/rules/ErasmusOrExecutiveSpecialProgrammeRule.js +0 -19
- package/dist/src/programmes/rules/ErasmusSpecialProgrammeRule.d.ts +0 -6
- package/dist/src/programmes/rules/ErasmusSpecialProgrammeRule.js +0 -19
- package/dist/src/programmes/rules/ExecutiveSpecialProgrammeRule.d.ts +0 -6
- package/dist/src/programmes/rules/ExecutiveSpecialProgrammeRule.js +0 -19
- package/dist/src/programmes/rules/MBACountryAttendanceRule.d.ts +0 -11
- package/dist/src/programmes/rules/MBACountryAttendanceRule.js +0 -40
- package/dist/src/programmes/rules/MasterOfArtsDisciplineRule.d.ts +0 -10
- package/dist/src/programmes/rules/MasterOfArtsDisciplineRule.js +0 -41
- package/dist/src/programmes/rules/MasterOfEducationCountryDisciplineRule.d.ts +0 -11
- package/dist/src/programmes/rules/MasterOfEducationCountryDisciplineRule.js +0 -69
- package/dist/src/programmes/rules/MasterOfLawsCountryAttendanceRule.d.ts +0 -12
- package/dist/src/programmes/rules/MasterOfLawsCountryAttendanceRule.js +0 -43
- package/dist/src/programmes/rules/MasterOfLawsCountryTuitionFeeRule.d.ts +0 -12
- package/dist/src/programmes/rules/MasterOfLawsCountryTuitionFeeRule.js +0 -46
- package/dist/src/programmes/rules/MasterOfPhilosophyCountryAttendanceRule.d.ts +0 -12
- package/dist/src/programmes/rules/MasterOfPhilosophyCountryAttendanceRule.js +0 -43
- package/dist/src/programmes/rules/MasterOfScienceDisciplineRule.d.ts +0 -10
- package/dist/src/programmes/rules/MasterOfScienceDisciplineRule.js +0 -41
- package/dist/src/programmes/rules/OneOrTwoYearDurationRule.d.ts +0 -6
- package/dist/src/programmes/rules/OneOrTwoYearDurationRule.js +0 -19
- package/dist/src/programmes/rules/OneYearOnlyRule.d.ts +0 -11
- package/dist/src/programmes/rules/OneYearOnlyRule.js +0 -34
- package/dist/src/programmes/rules/OnlineAttendanceRule.d.ts +0 -6
- package/dist/src/programmes/rules/OnlineAttendanceRule.js +0 -15
- package/dist/src/programmes/rules/TwoYearDurationRule.d.ts +0 -6
- package/dist/src/programmes/rules/TwoYearDurationRule.js +0 -19
- package/dist/src/sitemap-generator/IPageNumberProvider.d.ts +0 -3
- package/dist/src/sitemap-generator/IPageNumberProvider.js +0 -1
- /package/dist/src/{common/IPolicyMetaData.js → structured-data/dto/PaywallDTO.js} +0 -0
|
@@ -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,32 +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';
|
|
60
|
-
export * from './Degree';
|
|
61
|
-
export * from './DisciplineSpecialProgrammes';
|
|
62
|
-
export * from './DegreeAttendanceSpecialProgrammes';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
2
|
-
import { SpecialProgrammesFilterOptionValue } from '@studyportals/search-filters';
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters/server-side';
|
|
2
|
+
import { SpecialProgrammesFilterOptionValue } from '@studyportals/search-filters/server-side';
|
|
3
3
|
import { BaseProgrammeRule } from '../BaseProgrammeRule';
|
|
4
4
|
export class ErasmusOrJointSpecialProgrammesRule extends BaseProgrammeRule {
|
|
5
5
|
forSearch(dependencies) {
|
|
@@ -3,6 +3,7 @@ export class BaseSitemapUrlGeneratorManager {
|
|
|
3
3
|
async generateUrls() {
|
|
4
4
|
const map = new Map();
|
|
5
5
|
for (const policy of this.policies) {
|
|
6
|
+
console.debug(`Generating sitemap urls for policy: ${policy.filterCombination}`); // eslint-disable-line no-console
|
|
6
7
|
const filterCombination = policy.filterCombination;
|
|
7
8
|
const urls = await policy.generateSitemapUrls();
|
|
8
9
|
console.debug(`Generated ${urls.length} urls for policy: ${filterCombination}`); // eslint-disable-line no-console
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DependencyTypes } from '../enums/DependencyTypes';
|
|
2
2
|
import { BaseSitemapUrlGeneratorManager } from './BaseSitemapUrlGeneratorManager';
|
|
3
|
-
import { Area, Attendance, AttendanceDegree, Continent, ContinentTuitionFee, Country, CountryAttendance, Discipline, SpecialProgrammes, TuitionFee, Unfiltered, CountryAttendanceDegree, CountryDuration, CountryDurationDegree, CountryEducationalForm, CountryFormat, CountryTuitionFee, DegreeAttendanceDiscipline, DegreeCountryAttendance, DegreeCountryDiscipline, DegreeCountryTuitionFee,
|
|
3
|
+
import { Area, Attendance, AttendanceDegree, Continent, ContinentTuitionFee, Country, CountryAttendance, Discipline, SpecialProgrammes, TuitionFee, Unfiltered, CountryAttendanceDegree, CountryDuration, CountryDurationDegree, CountryEducationalForm, CountryFormat, CountryTuitionFee, DegreeAttendanceDiscipline, DegreeCountryAttendance, DegreeCountryDiscipline, DegreeCountryTuitionFee, DisciplineArea, DisciplineAttendance, DisciplineContinent, DisciplineCountry, DisciplineCountryEducationalForm, DisciplineDegree, DisciplineDuration, DisciplineEducationalForm, DisciplineFormat, DisciplineTuitionFee, DisciplineTuitionFeeAttendance, CountryDegree } from '../programmes/policies';
|
|
4
4
|
import { FilterKey } from '@studyportals/search-filters/server-side';
|
|
5
5
|
import { AreaPresenter } from '../presenters/AreaPresenter';
|
|
6
6
|
import { AttendancePresenter } from '../presenters/AttendancePresenter';
|
|
@@ -13,6 +13,7 @@ import { SpecialProgrammesPresenter } from '../presenters/SpecialProgrammesPrese
|
|
|
13
13
|
import { DurationPresenter } from '../presenters/DurationPresenter';
|
|
14
14
|
import { EducationalFormPresenter } from '../presenters/EducationalFormPresenter';
|
|
15
15
|
import { FormatPresenter } from '../presenters/FormatPresenter';
|
|
16
|
+
import { Degree } from '../programmes/policies/Degree';
|
|
16
17
|
export class ProgrammesSitemapUrlGeneratorManager extends BaseSitemapUrlGeneratorManager {
|
|
17
18
|
portalType;
|
|
18
19
|
policies;
|
|
@@ -29,8 +30,6 @@ export class ProgrammesSitemapUrlGeneratorManager extends BaseSitemapUrlGenerato
|
|
|
29
30
|
new Area(dependencies),
|
|
30
31
|
new Attendance(dependencies),
|
|
31
32
|
new AttendanceDegree(dependencies),
|
|
32
|
-
new AttendanceDuration(dependencies),
|
|
33
|
-
new AttendanceContinent(dependencies),
|
|
34
33
|
new Continent(dependencies),
|
|
35
34
|
new ContinentTuitionFee(dependencies),
|
|
36
35
|
new Country(dependencies),
|
|
@@ -40,7 +39,6 @@ export class ProgrammesSitemapUrlGeneratorManager extends BaseSitemapUrlGenerato
|
|
|
40
39
|
new SpecialProgrammes(dependencies),
|
|
41
40
|
new TuitionFee(dependencies),
|
|
42
41
|
new Unfiltered(dependencies),
|
|
43
|
-
new Duration(dependencies),
|
|
44
42
|
new CountryAttendanceDegree(dependencies),
|
|
45
43
|
new CountryDegree(dependencies),
|
|
46
44
|
new CountryDuration(dependencies),
|
|
@@ -48,27 +46,11 @@ export class ProgrammesSitemapUrlGeneratorManager extends BaseSitemapUrlGenerato
|
|
|
48
46
|
new CountryEducationalForm(dependencies),
|
|
49
47
|
new CountryFormat(dependencies),
|
|
50
48
|
new CountryTuitionFee(dependencies),
|
|
51
|
-
new CountrySpecialProgrammes(dependencies),
|
|
52
|
-
new ContinentFormat(dependencies),
|
|
53
|
-
new ContinentSpecialProgrammes(dependencies),
|
|
54
|
-
new ContinentDuration(dependencies),
|
|
55
49
|
new DegreeAttendanceDiscipline(dependencies),
|
|
56
50
|
new DegreeCountryAttendance(dependencies),
|
|
57
51
|
new DegreeCountryDiscipline(dependencies),
|
|
58
52
|
new DegreeCountryTuitionFee(dependencies),
|
|
59
|
-
new
|
|
60
|
-
new DegreeContinent(dependencies),
|
|
61
|
-
new DegreeAttendanceTuitionFee(dependencies),
|
|
62
|
-
new DegreeArea(dependencies),
|
|
63
|
-
new DegreeTuitionFee(dependencies),
|
|
64
|
-
new DegreeAreaTuitionFee(dependencies),
|
|
65
|
-
new DegreeContinentTuitionFee(dependencies),
|
|
66
|
-
new DegreeDuration(dependencies),
|
|
67
|
-
new DegreeFormatTuitionFee(dependencies),
|
|
68
|
-
new DegreeAttendanceFormat(dependencies),
|
|
69
|
-
new DegreeSpecialProgrammes(dependencies),
|
|
70
|
-
new DegreeAttendanceSpecialProgrammes(dependencies),
|
|
71
|
-
new Format(dependencies),
|
|
53
|
+
new DisciplineArea(dependencies),
|
|
72
54
|
new DisciplineAttendance(dependencies),
|
|
73
55
|
new DisciplineContinent(dependencies),
|
|
74
56
|
new DisciplineCountry(dependencies),
|
|
@@ -78,14 +60,7 @@ export class ProgrammesSitemapUrlGeneratorManager extends BaseSitemapUrlGenerato
|
|
|
78
60
|
new DisciplineEducationalForm(dependencies),
|
|
79
61
|
new DisciplineFormat(dependencies),
|
|
80
62
|
new DisciplineTuitionFee(dependencies),
|
|
81
|
-
new DisciplineTuitionFeeAttendance(dependencies)
|
|
82
|
-
new DisciplineContinentAttendance(dependencies),
|
|
83
|
-
new DisciplineCountryAttendance(dependencies),
|
|
84
|
-
new DisciplineCountryFormat(dependencies),
|
|
85
|
-
new DisciplineSpecialProgrammes(dependencies),
|
|
86
|
-
new AttendanceTuitionFee(dependencies),
|
|
87
|
-
new AttendanceFormat(dependencies),
|
|
88
|
-
new AttendanceArea(dependencies)
|
|
63
|
+
new DisciplineTuitionFeeAttendance(dependencies)
|
|
89
64
|
];
|
|
90
65
|
this.presenters.set(FilterKey.AREA, AreaPresenter.getInstance());
|
|
91
66
|
this.presenters.set(FilterKey.DELIVERY_METHOD, AttendancePresenter.getInstance());
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MonetaryGrant } from "schema-dts";
|
|
2
|
+
import { StructuredDataCurrencyConversionService } from "./interface/StructuredDataCurrencyConversionService";
|
|
3
|
+
import { SearchStructuredDataFactory } from "./SearchStructuredDataFactory";
|
|
4
|
+
import { IScholarshipCard } from "@studyportals/domain-client";
|
|
5
|
+
import { EntityDTO, OfferDTO, PaywallDTO } from "./dto";
|
|
6
|
+
export declare class ScholarshipStructuredDataFactory extends SearchStructuredDataFactory<IScholarshipCard> {
|
|
7
|
+
private currencyConversionService;
|
|
8
|
+
private cardIndex;
|
|
9
|
+
constructor(currencyConversionService: StructuredDataCurrencyConversionService);
|
|
10
|
+
protected buildStructuredDataForCard(entity: EntityDTO<IScholarshipCard>): Promise<MonetaryGrant | undefined>;
|
|
11
|
+
protected getOfferData(card: IScholarshipCard): Promise<OfferDTO | undefined>;
|
|
12
|
+
protected getPaywallData(card: IScholarshipCard): PaywallDTO | undefined;
|
|
13
|
+
private buildAmount;
|
|
14
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { SearchStructuredDataFactory } from "./SearchStructuredDataFactory";
|
|
2
|
+
export class ScholarshipStructuredDataFactory extends SearchStructuredDataFactory {
|
|
3
|
+
currencyConversionService;
|
|
4
|
+
cardIndex = 0;
|
|
5
|
+
constructor(currencyConversionService) {
|
|
6
|
+
super();
|
|
7
|
+
this.currencyConversionService = currencyConversionService;
|
|
8
|
+
}
|
|
9
|
+
async buildStructuredDataForCard(entity) {
|
|
10
|
+
const url = `https://${window.location.host}/scholarships/${entity.card.getProviderId()}/${entity.card.getScholarshipVirtualName()}`;
|
|
11
|
+
const amount = await this.buildAmount(entity.card);
|
|
12
|
+
const structuredData = {
|
|
13
|
+
"@type": "MonetaryGrant",
|
|
14
|
+
name: entity.card.getScholarshipTitle() || undefined,
|
|
15
|
+
description: entity.card.getDescriptionOfApplicationBasis() || undefined,
|
|
16
|
+
funder: entity.card.getProviderName() || undefined,
|
|
17
|
+
url,
|
|
18
|
+
amount
|
|
19
|
+
};
|
|
20
|
+
this.addPaywallToStructuredData(structuredData, entity.paywall);
|
|
21
|
+
return structuredData;
|
|
22
|
+
}
|
|
23
|
+
async getOfferData(card) {
|
|
24
|
+
const benefits = card.getDescriptionOfBenefits();
|
|
25
|
+
const hasMonetaryValue = benefits && !isNaN(Number(benefits.split(' ')[0]));
|
|
26
|
+
if (!hasMonetaryValue)
|
|
27
|
+
return;
|
|
28
|
+
const [amount, currency] = [Number(benefits.split(' ')[0]), benefits.split(' ')[1]];
|
|
29
|
+
return {
|
|
30
|
+
price: Math.round(await this.currencyConversionService.convert(amount, currency, 'USD')),
|
|
31
|
+
category: 'tuition',
|
|
32
|
+
validFrom: undefined
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
36
|
+
getPaywallData(card) {
|
|
37
|
+
const currentIndex = this.cardIndex++;
|
|
38
|
+
if (currentIndex < 2) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
isAccessibleForFree: false,
|
|
43
|
+
cssSelector: '.scholarship-paywall',
|
|
44
|
+
accessMode: 'registration'
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async buildAmount(card) {
|
|
48
|
+
const benefits = card.getDescriptionOfBenefits();
|
|
49
|
+
const hasMonetaryValue = benefits && !isNaN(Number(benefits.split(' ')[0]));
|
|
50
|
+
let amount;
|
|
51
|
+
let currency;
|
|
52
|
+
if (hasMonetaryValue) {
|
|
53
|
+
[amount, currency] = [Number(benefits.split(' ')[0]), benefits.split(' ')[1]];
|
|
54
|
+
}
|
|
55
|
+
let value;
|
|
56
|
+
if (hasMonetaryValue) {
|
|
57
|
+
value = Math.round(await this.currencyConversionService.convert(amount, currency, 'USD'));
|
|
58
|
+
currency = 'USD';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
value = benefits || undefined;
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
"@type": "MonetaryAmount",
|
|
65
|
+
value,
|
|
66
|
+
currency
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -4,9 +4,10 @@ import { OfferDTO } from './dto/OfferDTO';
|
|
|
4
4
|
import { EntityDTO } from './dto/EntityDTO';
|
|
5
5
|
import { FAQItemDto } from './dto/FAQItemDto';
|
|
6
6
|
import { BreadcrumbDTO } from './dto/BreadcrumbDTO';
|
|
7
|
+
import { PaywallDTO } from './dto/PaywallDTO';
|
|
7
8
|
export declare abstract class SearchStructuredDataFactory<TCard> {
|
|
8
|
-
buildStructuredData(title: string, description: string, cards: TCard[], faqItems?: FAQItemDto[], breadcrumbs?: BreadcrumbDTO[]): Promise<WithContext<SearchResultsPage>>;
|
|
9
|
-
protected abstract buildStructuredDataForCard(entity: EntityDTO<TCard>): Thing | undefined;
|
|
9
|
+
buildStructuredData(title: string, description: string, cards: TCard[], faqItems?: FAQItemDto[], breadcrumbs?: BreadcrumbDTO[], paywallData?: PaywallDTO): Promise<WithContext<SearchResultsPage>>;
|
|
10
|
+
protected abstract buildStructuredDataForCard(entity: EntityDTO<TCard>): Promise<Thing | undefined> | Thing | undefined;
|
|
10
11
|
/**
|
|
11
12
|
* Get the rating for a card.
|
|
12
13
|
* This method should be overridden by subclasses to provide the specific rating logic.
|
|
@@ -25,10 +26,29 @@ export declare abstract class SearchStructuredDataFactory<TCard> {
|
|
|
25
26
|
* @protected
|
|
26
27
|
*/
|
|
27
28
|
protected getOfferData(card: TCard): Promise<OfferDTO | undefined>;
|
|
29
|
+
/**
|
|
30
|
+
* Get the paywall data for a card.
|
|
31
|
+
* This method should be overridden by subclasses to provide the specific paywall logic.
|
|
32
|
+
* If no paywall data is available, return undefined and no paywall information will be added to the card.
|
|
33
|
+
*
|
|
34
|
+
* @param card
|
|
35
|
+
* @protected
|
|
36
|
+
*/
|
|
37
|
+
protected getPaywallData(card: TCard): PaywallDTO | undefined;
|
|
28
38
|
private constructOptionalPageOffers;
|
|
29
39
|
protected constructOptionalFaqPage(faqItems: FAQItemDto[]): FAQPage | undefined;
|
|
40
|
+
private constructOptionalPageParts;
|
|
30
41
|
private constructOptionalBreadcrumbs;
|
|
42
|
+
private constructPaywallElement;
|
|
31
43
|
protected constructAggregateRating(reviewRating?: ReviewRatingDTO): AggregateRating | undefined;
|
|
32
44
|
protected constructOffer(offerData?: OfferDTO): Offer | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Add paywall information to any structured data object
|
|
47
|
+
*
|
|
48
|
+
* @param structuredData The structured data object to enhance
|
|
49
|
+
* @param paywallData The paywall data to add
|
|
50
|
+
* @protected
|
|
51
|
+
*/
|
|
52
|
+
protected addPaywallToStructuredData(structuredData: Record<string, any>, paywallData?: PaywallDTO): void;
|
|
33
53
|
private stripHtmlWithListRetain;
|
|
34
54
|
}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
export class SearchStructuredDataFactory {
|
|
2
|
-
async buildStructuredData(title, description, cards, faqItems = [], breadcrumbs = []) {
|
|
2
|
+
async buildStructuredData(title, description, cards, faqItems = [], breadcrumbs = [], paywallData) {
|
|
3
3
|
const entities = [];
|
|
4
4
|
const ratings = [];
|
|
5
5
|
const offersData = [];
|
|
6
6
|
for (const card of cards) {
|
|
7
7
|
const reviewRating = this.getRating(card);
|
|
8
8
|
const offer = await this.getOfferData(card);
|
|
9
|
+
const paywall = this.getPaywallData(card);
|
|
9
10
|
if (reviewRating)
|
|
10
11
|
ratings.push(reviewRating);
|
|
11
12
|
if (offer)
|
|
12
13
|
offersData.push(offer);
|
|
13
|
-
entities.push({ card, offer, reviewRating });
|
|
14
|
+
entities.push({ card, offer, reviewRating, paywall });
|
|
15
|
+
}
|
|
16
|
+
const mainEntities = [];
|
|
17
|
+
for (const entity of entities) {
|
|
18
|
+
const structuredData = await this.buildStructuredDataForCard(entity);
|
|
19
|
+
if (!structuredData)
|
|
20
|
+
continue;
|
|
21
|
+
mainEntities.push(structuredData);
|
|
14
22
|
}
|
|
15
|
-
const mainEntities = entities
|
|
16
|
-
.map(entity => this.buildStructuredDataForCard(entity))
|
|
17
|
-
.filter(entity => entity !== undefined);
|
|
18
23
|
const data = {
|
|
19
24
|
'@context': 'https://schema.org',
|
|
20
25
|
'@type': 'SearchResultsPage',
|
|
@@ -23,8 +28,11 @@ export class SearchStructuredDataFactory {
|
|
|
23
28
|
'mainEntity': mainEntities
|
|
24
29
|
};
|
|
25
30
|
data.offers = this.constructOptionalPageOffers(offersData);
|
|
26
|
-
data.hasPart = this.
|
|
31
|
+
data.hasPart = this.constructOptionalPageParts(faqItems, paywallData);
|
|
27
32
|
data.breadcrumb = this.constructOptionalBreadcrumbs(breadcrumbs);
|
|
33
|
+
if (paywallData) {
|
|
34
|
+
data.isAccessibleForFree = paywallData.isAccessibleForFree;
|
|
35
|
+
}
|
|
28
36
|
return data;
|
|
29
37
|
}
|
|
30
38
|
/**
|
|
@@ -48,7 +56,19 @@ export class SearchStructuredDataFactory {
|
|
|
48
56
|
* @protected
|
|
49
57
|
*/
|
|
50
58
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
51
|
-
|
|
59
|
+
getOfferData(card) {
|
|
60
|
+
return Promise.resolve(undefined);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get the paywall data for a card.
|
|
64
|
+
* This method should be overridden by subclasses to provide the specific paywall logic.
|
|
65
|
+
* If no paywall data is available, return undefined and no paywall information will be added to the card.
|
|
66
|
+
*
|
|
67
|
+
* @param card
|
|
68
|
+
* @protected
|
|
69
|
+
*/
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
71
|
+
getPaywallData(card) {
|
|
52
72
|
return undefined;
|
|
53
73
|
}
|
|
54
74
|
constructOptionalPageOffers(offersData) {
|
|
@@ -94,6 +114,21 @@ export class SearchStructuredDataFactory {
|
|
|
94
114
|
}))
|
|
95
115
|
};
|
|
96
116
|
}
|
|
117
|
+
constructOptionalPageParts(faqItems, paywallData) {
|
|
118
|
+
const parts = [];
|
|
119
|
+
const faqPage = this.constructOptionalFaqPage(faqItems);
|
|
120
|
+
if (faqPage) {
|
|
121
|
+
parts.push(faqPage);
|
|
122
|
+
}
|
|
123
|
+
if (paywallData && paywallData.cssSelector) {
|
|
124
|
+
parts.push(this.constructPaywallElement(paywallData));
|
|
125
|
+
}
|
|
126
|
+
if (parts.length === 0)
|
|
127
|
+
return undefined;
|
|
128
|
+
if (parts.length === 1 && parts[0]['@type'] === 'FAQPage')
|
|
129
|
+
return parts[0];
|
|
130
|
+
return parts;
|
|
131
|
+
}
|
|
97
132
|
constructOptionalBreadcrumbs(breadcrumbs) {
|
|
98
133
|
if (breadcrumbs.length <= 0)
|
|
99
134
|
return;
|
|
@@ -108,6 +143,16 @@ export class SearchStructuredDataFactory {
|
|
|
108
143
|
}))
|
|
109
144
|
};
|
|
110
145
|
}
|
|
146
|
+
constructPaywallElement(paywallData) {
|
|
147
|
+
const element = {
|
|
148
|
+
'@type': 'WebPageElement',
|
|
149
|
+
'isAccessibleForFree': paywallData.isAccessibleForFree
|
|
150
|
+
};
|
|
151
|
+
if (paywallData.cssSelector) {
|
|
152
|
+
element.cssSelector = paywallData.cssSelector;
|
|
153
|
+
}
|
|
154
|
+
return element;
|
|
155
|
+
}
|
|
111
156
|
constructAggregateRating(reviewRating) {
|
|
112
157
|
if (!reviewRating)
|
|
113
158
|
return;
|
|
@@ -131,6 +176,18 @@ export class SearchStructuredDataFactory {
|
|
|
131
176
|
'category': 'tuition'
|
|
132
177
|
};
|
|
133
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Add paywall information to any structured data object
|
|
181
|
+
*
|
|
182
|
+
* @param structuredData The structured data object to enhance
|
|
183
|
+
* @param paywallData The paywall data to add
|
|
184
|
+
* @protected
|
|
185
|
+
*/
|
|
186
|
+
addPaywallToStructuredData(structuredData, paywallData) {
|
|
187
|
+
if (!paywallData)
|
|
188
|
+
return;
|
|
189
|
+
structuredData.isAccessibleForFree = paywallData.isAccessibleForFree;
|
|
190
|
+
}
|
|
134
191
|
stripHtmlWithListRetain(html) {
|
|
135
192
|
const tempDiv = document.createElement('div');
|
|
136
193
|
tempDiv.innerHTML = html;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { OfferDTO } from "./OfferDTO";
|
|
2
2
|
import { ReviewRatingDTO } from "./ReviewRatingDTO";
|
|
3
|
+
import { PaywallDTO } from "./PaywallDTO";
|
|
3
4
|
export interface EntityDTO<TCard> {
|
|
4
5
|
card: TCard;
|
|
5
6
|
offer?: OfferDTO;
|
|
6
7
|
reviewRating?: ReviewRatingDTO;
|
|
8
|
+
paywall?: PaywallDTO;
|
|
7
9
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface PaywallDTO {
|
|
2
|
+
/**
|
|
3
|
+
* Whether the content is behind a paywall
|
|
4
|
+
*/
|
|
5
|
+
isAccessibleForFree: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* CSS selector for the paywall element (optional)
|
|
8
|
+
*/
|
|
9
|
+
cssSelector?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Type of access restriction
|
|
12
|
+
*/
|
|
13
|
+
accessMode?: 'subscription' | 'payment' | 'registration' | 'free';
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@studyportals/fawkes",
|
|
3
|
-
"version": "8.1.
|
|
3
|
+
"version": "8.1.3-0",
|
|
4
4
|
"description": "A package to centralize SEO related logic for SBLP and Sitemap Generator.",
|
|
5
5
|
"files": [
|
|
6
6
|
"./dist"
|
|
@@ -82,17 +82,17 @@
|
|
|
82
82
|
"husky": "^8.0.3",
|
|
83
83
|
"jsdom": "^26.0.0",
|
|
84
84
|
"prettier": "^3.5.3",
|
|
85
|
-
"schema-dts": "^1.1.5",
|
|
86
|
-
"ts-loader": "^9.5.2",
|
|
87
85
|
"tsc-alias": "^1.8.11",
|
|
88
86
|
"typemoq": "^2.1.0",
|
|
89
87
|
"typescript": "^5.7.3",
|
|
90
|
-
"vitest": "^2.1.8"
|
|
88
|
+
"vitest": "^2.1.8",
|
|
89
|
+
"schema-dts": "^1.1.5",
|
|
90
|
+
"ts-loader": "^9.5.2"
|
|
91
91
|
},
|
|
92
92
|
"dependencies": {
|
|
93
|
-
"@studyportals/domain-client": "
|
|
93
|
+
"@studyportals/domain-client": "^6.3.0",
|
|
94
94
|
"@studyportals/ranking-api-interface": "^1.3.12",
|
|
95
|
-
"@studyportals/search-filters": "^6.
|
|
95
|
+
"@studyportals/search-filters": "^6.1.0",
|
|
96
96
|
"@studyportals/static-domain-data": "^6.1.0"
|
|
97
97
|
},
|
|
98
98
|
"optionalDependencies": {
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { PortalType } from '@studyportals/domain-client';
|
|
2
|
-
import { IOrganisationsSeoDependencies } from './types/IOrganisationsSeoDependencies';
|
|
3
|
-
import { SortingOptions } from '../enums/SortingOptions';
|
|
4
|
-
import { BaseSeoIndexabilityPolicy } from '../common/policies/BaseSeoIndexabilityPolicy';
|
|
5
|
-
export declare abstract class OrganisationsRuleBasedIndexabilityPolicy extends BaseSeoIndexabilityPolicy<IOrganisationsSeoDependencies> {
|
|
6
|
-
protected readonly indexablePortalTypes: PortalType[];
|
|
7
|
-
protected abstract readonly sortingOption: SortingOptions;
|
|
8
|
-
constructor(dependencies: IOrganisationsSeoDependencies);
|
|
9
|
-
protected isIndexable(): Promise<boolean>;
|
|
10
|
-
private matchesSortingOption;
|
|
11
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { PortalType } from '@studyportals/domain-client';
|
|
2
|
-
import { BaseSeoIndexabilityPolicy } from '../common/policies/BaseSeoIndexabilityPolicy';
|
|
3
|
-
export class OrganisationsRuleBasedIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
|
|
4
|
-
indexablePortalTypes = [PortalType.MASTER];
|
|
5
|
-
constructor(dependencies) {
|
|
6
|
-
super(dependencies);
|
|
7
|
-
}
|
|
8
|
-
async isIndexable() {
|
|
9
|
-
const isIndexable = await super.isIndexable();
|
|
10
|
-
if (!isIndexable) {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
return this.indexablePortalTypes.includes(this.dependencies.portalType) && this.matchesSortingOption();
|
|
14
|
-
}
|
|
15
|
-
matchesSortingOption() {
|
|
16
|
-
const dependencies = this.dependencies;
|
|
17
|
-
return dependencies.sortingState.getSelectedOption() === this.sortingOption;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { IRule } from '../../common/IRule';
|
|
2
|
-
import { IOrganisationSearchDependencies } from '../types/IOrganisationSearchDependencies';
|
|
3
|
-
import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
|
|
4
|
-
import { IRankingApiClient } from '../../sitemap-generator/IRankingApiClient';
|
|
5
|
-
export declare class AtLeastTwoRankedResultsRule implements IRule {
|
|
6
|
-
private readonly minimumRankedResultsCount;
|
|
7
|
-
private readonly rankingApiClient?;
|
|
8
|
-
constructor(rankingApiClient?: IRankingApiClient);
|
|
9
|
-
forSearch(dependencies: IOrganisationSearchDependencies): Promise<boolean>;
|
|
10
|
-
forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
|
|
11
|
-
getName(): string;
|
|
12
|
-
getDescription(): string;
|
|
13
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { DependencyMissingError } from '../../errors/DependencyMissingError';
|
|
2
|
-
export class AtLeastTwoRankedResultsRule {
|
|
3
|
-
minimumRankedResultsCount = 2;
|
|
4
|
-
rankingApiClient;
|
|
5
|
-
constructor(rankingApiClient) {
|
|
6
|
-
this.rankingApiClient = rankingApiClient;
|
|
7
|
-
}
|
|
8
|
-
forSearch(dependencies) {
|
|
9
|
-
const { applicationState } = dependencies;
|
|
10
|
-
const rankedResultsCount = applicationState.getRankedResultsCount();
|
|
11
|
-
return Promise.resolve(rankedResultsCount >= this.minimumRankedResultsCount);
|
|
12
|
-
}
|
|
13
|
-
async forSitemapGenerator(filterKeyValues) {
|
|
14
|
-
if (!this.rankingApiClient) {
|
|
15
|
-
throw new DependencyMissingError('RankingApiClient');
|
|
16
|
-
}
|
|
17
|
-
const rankedResultsCount = await this.rankingApiClient.getRankedOrganisationCount(filterKeyValues);
|
|
18
|
-
return rankedResultsCount >= this.minimumRankedResultsCount;
|
|
19
|
-
}
|
|
20
|
-
getName() {
|
|
21
|
-
return 'AtLeastTwoRankedResultsRule';
|
|
22
|
-
}
|
|
23
|
-
getDescription() {
|
|
24
|
-
return `At least ${this.minimumRankedResultsCount} ranked results are available`;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
2
|
-
import { BaseFilterKeyValueRule } from '../../common/rules/BaseFilterKeyValueRule';
|
|
3
|
-
export class OnlineAttendanceRule extends BaseFilterKeyValueRule {
|
|
4
|
-
constructor() {
|
|
5
|
-
const filterKeyValues = new Map([[FilterKey.DELIVERY_METHOD, ['online']]]);
|
|
6
|
-
super(filterKeyValues);
|
|
7
|
-
}
|
|
8
|
-
getName() {
|
|
9
|
-
return 'OnlineAttendanceRule';
|
|
10
|
-
}
|
|
11
|
-
getDescription() {
|
|
12
|
-
return 'Indexable if attendance is online';
|
|
13
|
-
}
|
|
14
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { ISearchDependencies } from '../common/ISearchDependencies';
|
|
2
|
-
import { IProgrammeSearchApplicationState } from './IProgrammeSearchApplicationState';
|
|
3
|
-
import { PortalType } from '@studyportals/domain-client';
|
|
4
|
-
export interface IProgrammeSearchDependencies extends ISearchDependencies {
|
|
5
|
-
portalType: PortalType;
|
|
6
|
-
applicationState: IProgrammeSearchApplicationState;
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { FilterKey } from '@studyportals/search-filters/server-side';
|
|
2
|
-
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
3
|
-
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
4
|
-
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
5
|
-
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
6
|
-
import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
|
|
7
|
-
import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
|
|
8
|
-
export declare class AttendanceArea extends ProgrammesBaseIndexabilityPolicy {
|
|
9
|
-
readonly name: string;
|
|
10
|
-
readonly description: string;
|
|
11
|
-
readonly filterKeys: FilterKey[];
|
|
12
|
-
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule)[];
|
|
13
|
-
constructor(dependencies: IProgrammeSeoDependencies);
|
|
14
|
-
protected generateUrls(): Promise<string[]>;
|
|
15
|
-
get filterCombination(): FilterCombinations;
|
|
16
|
-
}
|