@studyportals/fawkes 4.0.2-2 → 4.0.2-4
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/README.md +18 -18
- package/dist/programmes-seo/index.d.ts +6 -0
- package/dist/programmes-seo/index.js +2 -0
- package/dist/scholarships-seo/index.d.ts +2 -4
- package/dist/src/common/index.d.ts +0 -1
- package/dist/src/common/index.js +0 -1
- package/dist/src/common/policies/RuleBasedIndexabilityPolicy.d.ts +11 -0
- package/dist/src/common/policies/RuleBasedIndexabilityPolicy.js +24 -0
- package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.d.ts +11 -0
- package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.js +19 -0
- package/dist/src/organisations/rules/NoFiltersSelectedRule.d.ts +8 -0
- package/dist/src/organisations/rules/NoFiltersSelectedRule.js +14 -0
- package/dist/src/presenters/AreaPresenter.d.ts +1 -4
- package/dist/src/presenters/AreaPresenter.js +0 -2
- package/dist/src/presenters/AttendancePresenter.d.ts +1 -4
- package/dist/src/presenters/AttendancePresenter.js +0 -2
- package/dist/src/presenters/ContinentPresenter.d.ts +1 -4
- package/dist/src/presenters/ContinentPresenter.js +0 -2
- package/dist/src/presenters/CountryPresenter.d.ts +1 -4
- package/dist/src/presenters/CountryPresenter.js +0 -2
- package/dist/src/presenters/DisciplinePresenter.d.ts +1 -4
- package/dist/src/presenters/DisciplinePresenter.js +0 -2
- package/dist/src/programmes/IProgrammeSearchApplicationState.d.ts +4 -0
- package/dist/src/programmes/IProgrammeSearchDependencies.d.ts +7 -0
- package/dist/src/programmes/IProgrammeSearchDependencies.js +1 -0
- package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.d.ts +7 -0
- package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.js +10 -0
- package/dist/src/programmes/SearchIndexabilityManager.d.ts +10 -0
- package/dist/src/programmes/SearchIndexabilityManager.js +50 -0
- package/dist/src/programmes/policies/Area.d.ts +7 -0
- package/dist/src/programmes/policies/Area.js +19 -0
- package/dist/src/programmes/policies/Attendance.d.ts +7 -0
- package/dist/src/programmes/policies/Attendance.js +20 -0
- package/dist/src/programmes/policies/AttendanceDegree.d.ts +7 -0
- package/dist/src/programmes/policies/AttendanceDegree.js +23 -0
- package/dist/src/programmes/policies/Continent.d.ts +7 -0
- package/dist/src/programmes/policies/Continent.js +18 -0
- package/dist/src/programmes/policies/ContinentTuitionFee.d.ts +7 -0
- package/dist/src/programmes/policies/ContinentTuitionFee.js +21 -0
- package/dist/src/programmes/policies/Country.d.ts +7 -0
- package/dist/src/programmes/policies/Country.js +18 -0
- package/dist/src/programmes/policies/CountryAttendance.d.ts +7 -0
- package/dist/src/programmes/policies/CountryAttendance.js +21 -0
- package/dist/src/programmes/policies/CountryAttendanceDegree.d.ts +7 -0
- package/dist/src/programmes/policies/CountryAttendanceDegree.js +24 -0
- package/dist/src/programmes/policies/CountryDegree.d.ts +7 -0
- package/dist/src/programmes/policies/CountryDegree.js +21 -0
- package/dist/src/programmes/policies/CountryDuration.d.ts +7 -0
- package/dist/src/programmes/policies/CountryDuration.js +21 -0
- package/dist/src/programmes/policies/CountryDurationDegree.d.ts +7 -0
- package/dist/src/programmes/policies/CountryDurationDegree.js +24 -0
- package/dist/src/programmes/policies/CountryEducationalForm.d.ts +7 -0
- package/dist/src/programmes/policies/CountryEducationalForm.js +21 -0
- package/dist/src/programmes/policies/CountryFormat.d.ts +7 -0
- package/dist/src/programmes/policies/CountryFormat.js +21 -0
- package/dist/src/programmes/policies/CountryTuitionFee.d.ts +7 -0
- package/dist/src/programmes/policies/CountryTuitionFee.js +21 -0
- package/dist/src/programmes/policies/Discipline.d.ts +7 -0
- package/dist/src/programmes/policies/Discipline.js +18 -0
- package/dist/src/programmes/policies/DisciplineArea.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineArea.js +20 -0
- package/dist/src/programmes/policies/DisciplineAttendance.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineAttendance.js +21 -0
- package/dist/src/programmes/policies/DisciplineContinent.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineContinent.js +19 -0
- package/dist/src/programmes/policies/DisciplineCountry.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineCountry.js +19 -0
- package/dist/src/programmes/policies/DisciplineCountryDegree.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineCountryDegree.js +22 -0
- package/dist/src/programmes/policies/DisciplineCountryEducationalForm.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +22 -0
- package/dist/src/programmes/policies/DisciplineDegree.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineDegree.js +21 -0
- package/dist/src/programmes/policies/DisciplineDuration.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineDuration.js +21 -0
- package/dist/src/programmes/policies/DisciplineEducationalForm.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineEducationalForm.js +21 -0
- package/dist/src/programmes/policies/DisciplineFormat.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineFormat.js +21 -0
- package/dist/src/programmes/policies/DisciplineTuitionFee.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineTuitionFee.js +21 -0
- package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.d.ts +7 -0
- package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.js +24 -0
- package/dist/src/programmes/policies/SpecialProgrammes.d.ts +7 -0
- package/dist/src/programmes/policies/SpecialProgrammes.js +20 -0
- package/dist/src/programmes/policies/TuitionFee.d.ts +7 -0
- package/dist/src/programmes/policies/TuitionFee.js +18 -0
- package/dist/src/programmes/policies/Unfiltered.d.ts +7 -0
- package/dist/src/programmes/policies/Unfiltered.js +15 -0
- package/dist/src/programmes/policies/index.d.ts +30 -0
- package/dist/src/programmes/policies/index.js +30 -0
- package/dist/src/programmes/rules/AffordableTuitionFeeRule.d.ts +7 -0
- package/dist/src/programmes/rules/AffordableTuitionFeeRule.js +18 -0
- package/dist/src/programmes/rules/AtLeastSevenResultsRule.d.ts +7 -0
- package/dist/src/programmes/rules/AtLeastSevenResultsRule.js +13 -0
- package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.d.ts +7 -0
- package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.js +19 -0
- package/dist/src/programmes/rules/IndexableDegreeRule.d.ts +8 -0
- package/dist/src/programmes/rules/IndexableDegreeRule.js +42 -0
- package/dist/src/programmes/rules/IndexableDurationRule.d.ts +8 -0
- package/dist/src/programmes/rules/IndexableDurationRule.js +25 -0
- package/dist/src/programmes/rules/IndexableEducationalFormRule.d.ts +8 -0
- package/dist/src/programmes/rules/IndexableEducationalFormRule.js +25 -0
- package/dist/src/programmes/rules/IndexablePageNumberRule.d.ts +6 -0
- package/dist/src/programmes/rules/IndexablePageNumberRule.js +13 -0
- package/dist/src/programmes/rules/MbaDegreeRule.d.ts +7 -0
- package/dist/src/programmes/rules/MbaDegreeRule.js +18 -0
- package/dist/src/programmes/rules/MbaOrMscDegreeRule.d.ts +7 -0
- package/dist/src/programmes/rules/MbaOrMscDegreeRule.js +18 -0
- package/dist/src/programmes/rules/NotDistanceLearningPortalRule.d.ts +7 -0
- package/dist/src/programmes/rules/NotDistanceLearningPortalRule.js +14 -0
- package/dist/src/programmes/rules/OneYearDurationRule.d.ts +7 -0
- package/dist/src/programmes/rules/OneYearDurationRule.js +18 -0
- package/dist/src/programmes/rules/OnlineAttendanceRule.d.ts +5 -0
- package/dist/src/programmes/rules/OnlineAttendanceRule.js +11 -0
- package/dist/src/programmes/rules/PartTimeFormatRule.d.ts +7 -0
- package/dist/src/programmes/rules/PartTimeFormatRule.js +18 -0
- package/dist/src/scholarships/types.d.ts +3 -4
- package/dist/src/scholarships/types.js +3 -4
- package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.d.ts +0 -6
- package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.js +0 -10
- package/dist/src/sitemap-generator/ISitemapUrlGeneratorManager.d.ts +0 -2
- package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.d.ts +0 -6
- package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.js +0 -12
- package/dist/src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.d.ts +0 -1
- package/dist/src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.js +0 -1
- package/package.json +82 -82
- package/dist/src/common/IPresenter.d.ts +0 -6
- /package/dist/src/{common/IPresenter.js → programmes/IProgrammeSearchApplicationState.js} +0 -0
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
# fawkes
|
|
2
|
-
|
|
3
|
-
This project is used to centralize indexability logic for our Search
|
|
4
|
-
microservices and Sitemap Generator. The main purpose is to completely remove
|
|
5
|
-
discrepancies between pages indexed by Search and page URLs stored in Sitemap.
|
|
6
|
-
|
|
7
|
-
Link to documentation: https://studyportals.atlassian.net/wiki/x/BwAdvw
|
|
8
|
-
|
|
9
|
-
## Base structure
|
|
10
|
-
|
|
11
|
-
- organisations-seo (used by Organisation Search)
|
|
12
|
-
- scholarships-seo (used by Scholarship Search)
|
|
13
|
-
- sitemap-generator-seo (used by Sitemap Generator)
|
|
14
|
-
- src
|
|
15
|
-
- common
|
|
16
|
-
- organisations
|
|
17
|
-
- scholarships
|
|
18
|
-
- sitemap-generator
|
|
1
|
+
# fawkes
|
|
2
|
+
|
|
3
|
+
This project is used to centralize indexability logic for our Search
|
|
4
|
+
microservices and Sitemap Generator. The main purpose is to completely remove
|
|
5
|
+
discrepancies between pages indexed by Search and page URLs stored in Sitemap.
|
|
6
|
+
|
|
7
|
+
Link to documentation: https://studyportals.atlassian.net/wiki/x/BwAdvw
|
|
8
|
+
|
|
9
|
+
## Base structure
|
|
10
|
+
|
|
11
|
+
- organisations-seo (used by Organisation Search)
|
|
12
|
+
- scholarships-seo (used by Scholarship Search)
|
|
13
|
+
- sitemap-generator-seo (used by Sitemap Generator)
|
|
14
|
+
- src
|
|
15
|
+
- common
|
|
16
|
+
- organisations
|
|
17
|
+
- scholarships
|
|
18
|
+
- sitemap-generator
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ISeoFilterState } from '../src/common/ISeoFilterState';
|
|
2
|
+
import { ISeoInfoBase } from '../src/common/ISeoInfoBase';
|
|
3
|
+
import { IProgrammeSearchApplicationState } from '../src/programmes/IProgrammeSearchApplicationState';
|
|
4
|
+
import { ISearchIndexabilityManager } from '../src/common/ISearchIndexabilityManager';
|
|
5
|
+
import { SearchIndexabilityManager } from '../src/programmes/SearchIndexabilityManager';
|
|
6
|
+
export { ISeoFilterState, ISeoInfoBase, ISearchIndexabilityManager, IProgrammeSearchApplicationState, SearchIndexabilityManager };
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { ISeoFilterState } from '../src/common
|
|
2
|
-
import { ISeoInfoBase } from '../src/common/ISeoInfoBase';
|
|
3
|
-
import { ISearchIndexabilityManager } from '../src/common/ISearchIndexabilityManager';
|
|
1
|
+
import { ISeoFilterState, ISearchApplicationState, ISearchIndexabilityManager, ISeoInfoBase } from '../src/common';
|
|
4
2
|
import { SearchIndexabilityManager } from '../src/scholarships/SearchIndexabilityManager';
|
|
5
3
|
import { types } from '../src/scholarships/types';
|
|
6
|
-
export { ISeoFilterState,
|
|
4
|
+
export { ISeoFilterState, ISearchApplicationState, ISearchIndexabilityManager, ISeoInfoBase, SearchIndexabilityManager, types };
|
package/dist/src/common/index.js
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseSeoIndexabilityPolicy } from './BaseSeoIndexabilityPolicy';
|
|
2
|
+
import { ISearchDependencies } from '../ISearchDependencies';
|
|
3
|
+
import { IDependencies } from '../IDependencies';
|
|
4
|
+
import { IRule } from '../IRule';
|
|
5
|
+
import { FilterKeyValuesMap } from '../FilterKeyValuesMap';
|
|
6
|
+
export declare abstract class RuleBasedIndexabilityPolicy<TDependencies extends IDependencies> extends BaseSeoIndexabilityPolicy<TDependencies> {
|
|
7
|
+
protected abstract readonly rules: IRule[];
|
|
8
|
+
protected isIndexable(): Promise<boolean>;
|
|
9
|
+
protected checkRulesForSearch(dependencies: ISearchDependencies): Promise<boolean>;
|
|
10
|
+
protected checkRulesForSitemap(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BaseSeoIndexabilityPolicy } from './BaseSeoIndexabilityPolicy';
|
|
2
|
+
export class RuleBasedIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
|
|
3
|
+
async isIndexable() {
|
|
4
|
+
return await this.checkRulesForSearch(this.dependencies);
|
|
5
|
+
}
|
|
6
|
+
async checkRulesForSearch(dependencies) {
|
|
7
|
+
for (const rule of this.rules) {
|
|
8
|
+
const result = await rule.forSearch(dependencies);
|
|
9
|
+
if (!result) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
async checkRulesForSitemap(filterKeyValues) {
|
|
16
|
+
for (const rule of this.rules) {
|
|
17
|
+
const result = await rule.forSitemapGenerator(filterKeyValues);
|
|
18
|
+
if (!result) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IRule } from '../../common/IRule';
|
|
2
|
+
import { IOrganisationSearchDependencies } from '../types/IOrganisationSearchDependencies';
|
|
3
|
+
import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
|
|
4
|
+
export declare class NoFiltersSelectedRule implements IRule {
|
|
5
|
+
forSearch(dependencies: IOrganisationSearchDependencies): Promise<boolean>;
|
|
6
|
+
forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
|
|
7
|
+
getName(): string;
|
|
8
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class NoFiltersSelectedRule {
|
|
2
|
+
forSearch(dependencies) {
|
|
3
|
+
const { filterState, seoInfoBase } = dependencies;
|
|
4
|
+
const selectionCount = seoInfoBase.getSelectionTypeCount(filterState);
|
|
5
|
+
return Promise.resolve(selectionCount === 0);
|
|
6
|
+
}
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8
|
+
forSitemapGenerator(filterKeyValues) {
|
|
9
|
+
throw new Error('Method not implemented.');
|
|
10
|
+
}
|
|
11
|
+
getName() {
|
|
12
|
+
return 'NoFiltersSelectedRule';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { IAreaFragment } from './fragments/IAreaFragment';
|
|
2
|
-
|
|
3
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
4
|
-
export declare class AreaPresenter implements IPresenter {
|
|
5
|
-
readonly filterKey: FilterKey;
|
|
2
|
+
export declare class AreaPresenter {
|
|
6
3
|
private static instance;
|
|
7
4
|
private readonly fragments;
|
|
8
5
|
private constructor();
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { areasAll } from '@studyportals/static-domain-data/areas/areas';
|
|
2
2
|
import { areaGetPath } from '@studyportals/static-domain-data/areas/area-get-path';
|
|
3
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
4
3
|
export class AreaPresenter {
|
|
5
|
-
filterKey = FilterKey.AREA;
|
|
6
4
|
static instance;
|
|
7
5
|
fragments;
|
|
8
6
|
constructor() {
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import { IPresenter } from '../common';
|
|
2
1
|
import { IFragment } from './fragments/IFragment';
|
|
3
|
-
|
|
4
|
-
export declare class AttendancePresenter implements IPresenter {
|
|
5
|
-
readonly filterKey: FilterKey;
|
|
2
|
+
export declare class AttendancePresenter {
|
|
6
3
|
private static instance;
|
|
7
4
|
private readonly fragments;
|
|
8
5
|
private constructor();
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { IFragment } from './fragments/IFragment';
|
|
2
|
-
|
|
3
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
4
|
-
export declare class ContinentPresenter implements IPresenter {
|
|
5
|
-
readonly filterKey: FilterKey;
|
|
2
|
+
export declare class ContinentPresenter {
|
|
6
3
|
private static instance;
|
|
7
4
|
private readonly fragments;
|
|
8
5
|
private constructor();
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { continentsAll } from '@studyportals/static-domain-data/continents/continents';
|
|
2
2
|
import { continentGetPath } from '@studyportals/static-domain-data/continents/continent-get-path';
|
|
3
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
4
3
|
export class ContinentPresenter {
|
|
5
|
-
filterKey = FilterKey.CONTINENT;
|
|
6
4
|
static instance;
|
|
7
5
|
fragments;
|
|
8
6
|
constructor() {
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { ICountryFragment } from './fragments/ICountryFragment';
|
|
2
|
-
|
|
3
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
4
|
-
export declare class CountryPresenter implements IPresenter {
|
|
5
|
-
readonly filterKey: FilterKey;
|
|
2
|
+
export declare class CountryPresenter {
|
|
6
3
|
private static instance;
|
|
7
4
|
private readonly fragments;
|
|
8
5
|
private constructor();
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { countriesExtendedAll } from '@studyportals/static-domain-data/countries/countries-extended';
|
|
2
2
|
import { countryGetIsoCodePath } from '@studyportals/static-domain-data/countries/country-get-iso-path';
|
|
3
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
4
3
|
export class CountryPresenter {
|
|
5
|
-
filterKey = FilterKey.COUNTRY;
|
|
6
4
|
static instance;
|
|
7
5
|
fragments;
|
|
8
6
|
constructor() {
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { IFragment } from './fragments/IFragment';
|
|
2
|
-
|
|
3
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
4
|
-
export declare class DisciplinePresenter implements IPresenter {
|
|
5
|
-
readonly filterKey: FilterKey;
|
|
2
|
+
export declare class DisciplinePresenter {
|
|
6
3
|
private static instance;
|
|
7
4
|
private readonly fragments;
|
|
8
5
|
private constructor();
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { disciplinesAll } from '@studyportals/static-domain-data/disciplines/disciplines';
|
|
2
2
|
import { subdisciplinesAll } from '@studyportals/static-domain-data/disciplines/subdisciplines';
|
|
3
3
|
import { disciplineGetVirtualPath } from '@studyportals/static-domain-data/disciplines/discipline-get-virtual-path';
|
|
4
|
-
import { FilterKey } from '@studyportals/search-filters';
|
|
5
4
|
export class DisciplinePresenter {
|
|
6
|
-
filterKey = FilterKey.DISCIPLINES;
|
|
7
5
|
static instance;
|
|
8
6
|
fragments;
|
|
9
7
|
constructor() {
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IRule } from '../common/IRule';
|
|
2
|
+
import { ISeoDependencies } from '../common/ISeoDependencies';
|
|
3
|
+
import { BaseSeoIndexabilityPolicy } from '../common/policies/BaseSeoIndexabilityPolicy';
|
|
4
|
+
export declare abstract class ProgrammesBaseIndexabilityPolicy extends BaseSeoIndexabilityPolicy<ISeoDependencies> {
|
|
5
|
+
protected readonly rules: IRule[];
|
|
6
|
+
protected get baseRules(): IRule[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AtLeastSevenResultsRule } from './rules/AtLeastSevenResultsRule';
|
|
2
|
+
import { IndexablePageNumberRule } from './rules/IndexablePageNumberRule';
|
|
3
|
+
import { NotDistanceLearningPortalRule } from './rules/NotDistanceLearningPortalRule';
|
|
4
|
+
import { BaseSeoIndexabilityPolicy } from '../common/policies/BaseSeoIndexabilityPolicy';
|
|
5
|
+
export class ProgrammesBaseIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
|
|
6
|
+
rules = [new AtLeastSevenResultsRule(), new IndexablePageNumberRule(), new NotDistanceLearningPortalRule()];
|
|
7
|
+
get baseRules() {
|
|
8
|
+
return this.rules;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PortalType } from '@studyportals/domain-client';
|
|
2
|
+
import { ISeoInfoBase } from '../common/ISeoInfoBase';
|
|
3
|
+
import { ISeoFilterState } from '../common/ISeoFilterState';
|
|
4
|
+
import { ISearchIndexabilityManager } from '../common/ISearchIndexabilityManager';
|
|
5
|
+
import { IProgrammeSearchApplicationState } from './IProgrammeSearchApplicationState';
|
|
6
|
+
export declare class SearchIndexabilityManager implements ISearchIndexabilityManager {
|
|
7
|
+
private policies;
|
|
8
|
+
constructor(portalType: PortalType, seoInfoBase: ISeoInfoBase, filterState: ISeoFilterState, applicationState: IProgrammeSearchApplicationState);
|
|
9
|
+
shouldIndex(): Promise<boolean>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Area, Attendance, AttendanceDegree, Continent, ContinentTuitionFee, Country, CountryAttendance, CountryAttendanceDegree, CountryDegree, CountryDuration, CountryDurationDegree, CountryEducationalForm, CountryFormat, CountryTuitionFee, Discipline, DisciplineArea, DisciplineAttendance, DisciplineContinent, DisciplineCountry, DisciplineCountryDegree, DisciplineCountryEducationalForm, DisciplineDegree, DisciplineDuration, DisciplineEducationalForm, DisciplineFormat, DisciplineTuitionFee, DisciplineTuitionFeeAttendance, SpecialProgrammes, TuitionFee, Unfiltered } from './policies';
|
|
2
|
+
import { DependencyTypes } from '../enums/DependencyTypes';
|
|
3
|
+
export class SearchIndexabilityManager {
|
|
4
|
+
policies;
|
|
5
|
+
constructor(portalType, seoInfoBase, filterState, applicationState) {
|
|
6
|
+
const dependencies = {
|
|
7
|
+
dependencyType: DependencyTypes.SEARCH,
|
|
8
|
+
portalType,
|
|
9
|
+
seoInfoBase,
|
|
10
|
+
filterState,
|
|
11
|
+
applicationState
|
|
12
|
+
};
|
|
13
|
+
this.policies = [
|
|
14
|
+
new Area(dependencies),
|
|
15
|
+
new Attendance(dependencies),
|
|
16
|
+
new AttendanceDegree(dependencies),
|
|
17
|
+
new Continent(dependencies),
|
|
18
|
+
new ContinentTuitionFee(dependencies),
|
|
19
|
+
new Country(dependencies),
|
|
20
|
+
new CountryAttendance(dependencies),
|
|
21
|
+
new CountryAttendanceDegree(dependencies),
|
|
22
|
+
new CountryDegree(dependencies),
|
|
23
|
+
new CountryDuration(dependencies),
|
|
24
|
+
new CountryDurationDegree(dependencies),
|
|
25
|
+
new CountryEducationalForm(dependencies),
|
|
26
|
+
new CountryFormat(dependencies),
|
|
27
|
+
new CountryTuitionFee(dependencies),
|
|
28
|
+
new Discipline(dependencies),
|
|
29
|
+
new DisciplineArea(dependencies),
|
|
30
|
+
new DisciplineAttendance(dependencies),
|
|
31
|
+
new DisciplineContinent(dependencies),
|
|
32
|
+
new DisciplineCountry(dependencies),
|
|
33
|
+
new DisciplineCountryDegree(dependencies),
|
|
34
|
+
new DisciplineCountryEducationalForm(dependencies),
|
|
35
|
+
new DisciplineDegree(dependencies),
|
|
36
|
+
new DisciplineDuration(dependencies),
|
|
37
|
+
new DisciplineEducationalForm(dependencies),
|
|
38
|
+
new DisciplineFormat(dependencies),
|
|
39
|
+
new DisciplineTuitionFee(dependencies),
|
|
40
|
+
new DisciplineTuitionFeeAttendance(dependencies),
|
|
41
|
+
new SpecialProgrammes(dependencies),
|
|
42
|
+
new TuitionFee(dependencies),
|
|
43
|
+
new Unfiltered(dependencies)
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
async shouldIndex() {
|
|
47
|
+
const results = await Promise.all(this.policies.map((policy) => policy.shouldIndex()));
|
|
48
|
+
return results.some((result) => result);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
3
|
+
export declare class Area extends ProgrammesBaseIndexabilityPolicy {
|
|
4
|
+
protected readonly rules: import("../../common/IRule").IRule[];
|
|
5
|
+
protected generateUrls(): Promise<string[]>;
|
|
6
|
+
get filterCombination(): FilterCombinations;
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters';
|
|
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
|
+
export class Area extends ProgrammesBaseIndexabilityPolicy {
|
|
7
|
+
rules = [
|
|
8
|
+
...this.baseRules,
|
|
9
|
+
new SingleValueSelectedForFilterRule(FilterKey.AREA),
|
|
10
|
+
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
11
|
+
new OnlyFiltersSelectedRule([FilterKey.AREA, FilterKey.COUNTRY])
|
|
12
|
+
];
|
|
13
|
+
generateUrls() {
|
|
14
|
+
throw new Error('Method not implemented.');
|
|
15
|
+
}
|
|
16
|
+
get filterCombination() {
|
|
17
|
+
return FilterCombinations.AREA;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
3
|
+
export declare class Attendance extends ProgrammesBaseIndexabilityPolicy {
|
|
4
|
+
protected readonly rules: import("../../common/IRule").IRule[];
|
|
5
|
+
protected generateUrls(): Promise<string[]>;
|
|
6
|
+
get filterCombination(): FilterCombinations;
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters';
|
|
2
|
+
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
3
|
+
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
4
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
5
|
+
import { OnlineAttendanceRule } from '../rules/OnlineAttendanceRule';
|
|
6
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
7
|
+
export class Attendance extends ProgrammesBaseIndexabilityPolicy {
|
|
8
|
+
rules = [
|
|
9
|
+
...this.baseRules,
|
|
10
|
+
new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
|
|
11
|
+
new OnlyFiltersSelectedRule([FilterKey.DELIVERY_METHOD]),
|
|
12
|
+
new OnlineAttendanceRule()
|
|
13
|
+
];
|
|
14
|
+
generateUrls() {
|
|
15
|
+
throw new Error('Method not implemented.');
|
|
16
|
+
}
|
|
17
|
+
get filterCombination() {
|
|
18
|
+
return FilterCombinations.ATTENDANCE;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
3
|
+
export declare class AttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
|
|
4
|
+
protected readonly rules: import("../../common/IRule").IRule[];
|
|
5
|
+
protected generateUrls(): Promise<string[]>;
|
|
6
|
+
get filterCombination(): FilterCombinations;
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters';
|
|
2
|
+
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
3
|
+
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
4
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
5
|
+
import { OnlineAttendanceRule } from '../rules/OnlineAttendanceRule';
|
|
6
|
+
import { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
|
|
7
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
8
|
+
export class AttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
|
|
9
|
+
rules = [
|
|
10
|
+
...this.baseRules,
|
|
11
|
+
new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
|
|
12
|
+
new SingleValueSelectedForFilterRule(FilterKey.DEGREE_TYPE),
|
|
13
|
+
new OnlyFiltersSelectedRule([FilterKey.DELIVERY_METHOD, FilterKey.DEGREE_TYPE]),
|
|
14
|
+
new IndexableDegreeRule(),
|
|
15
|
+
new OnlineAttendanceRule()
|
|
16
|
+
];
|
|
17
|
+
generateUrls() {
|
|
18
|
+
throw new Error('Method not implemented.');
|
|
19
|
+
}
|
|
20
|
+
get filterCombination() {
|
|
21
|
+
return FilterCombinations.ATTENDANCE_DEGREE;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
3
|
+
export declare class Continent extends ProgrammesBaseIndexabilityPolicy {
|
|
4
|
+
protected readonly rules: import("../../common/IRule").IRule[];
|
|
5
|
+
protected generateUrls(): Promise<string[]>;
|
|
6
|
+
get filterCombination(): FilterCombinations;
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters';
|
|
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
|
+
export class Continent extends ProgrammesBaseIndexabilityPolicy {
|
|
7
|
+
rules = [
|
|
8
|
+
...this.baseRules,
|
|
9
|
+
new SingleValueSelectedForFilterRule(FilterKey.CONTINENT),
|
|
10
|
+
new OnlyFiltersSelectedRule([FilterKey.CONTINENT])
|
|
11
|
+
];
|
|
12
|
+
generateUrls() {
|
|
13
|
+
throw new Error('Method not implemented.');
|
|
14
|
+
}
|
|
15
|
+
get filterCombination() {
|
|
16
|
+
return FilterCombinations.CONTINENT;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
3
|
+
export declare class ContinentTuitionFee extends ProgrammesBaseIndexabilityPolicy {
|
|
4
|
+
protected readonly rules: import("../../common/IRule").IRule[];
|
|
5
|
+
protected generateUrls(): Promise<string[]>;
|
|
6
|
+
get filterCombination(): FilterCombinations;
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters';
|
|
2
|
+
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
3
|
+
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
4
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
5
|
+
import { AffordableTuitionFeeRule } from '../rules/AffordableTuitionFeeRule';
|
|
6
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
7
|
+
export class ContinentTuitionFee extends ProgrammesBaseIndexabilityPolicy {
|
|
8
|
+
rules = [
|
|
9
|
+
...this.baseRules,
|
|
10
|
+
new SingleValueSelectedForFilterRule(FilterKey.CONTINENT),
|
|
11
|
+
new SingleValueSelectedForFilterRule(FilterKey.TUITION_FEE),
|
|
12
|
+
new OnlyFiltersSelectedRule([FilterKey.CONTINENT, FilterKey.TUITION_FEE]),
|
|
13
|
+
new AffordableTuitionFeeRule()
|
|
14
|
+
];
|
|
15
|
+
generateUrls() {
|
|
16
|
+
throw new Error('Method not implemented.');
|
|
17
|
+
}
|
|
18
|
+
get filterCombination() {
|
|
19
|
+
return FilterCombinations.CONTINENT_TUITION_FEE;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
3
|
+
export declare class Country extends ProgrammesBaseIndexabilityPolicy {
|
|
4
|
+
protected readonly rules: import("../../common/IRule").IRule[];
|
|
5
|
+
protected generateUrls(): Promise<string[]>;
|
|
6
|
+
get filterCombination(): FilterCombinations;
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters';
|
|
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
|
+
export class Country extends ProgrammesBaseIndexabilityPolicy {
|
|
7
|
+
rules = [
|
|
8
|
+
...this.baseRules,
|
|
9
|
+
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
10
|
+
new OnlyFiltersSelectedRule([FilterKey.COUNTRY])
|
|
11
|
+
];
|
|
12
|
+
generateUrls() {
|
|
13
|
+
throw new Error('Method not implemented.');
|
|
14
|
+
}
|
|
15
|
+
get filterCombination() {
|
|
16
|
+
return FilterCombinations.COUNTRY;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
3
|
+
export declare class CountryAttendance extends ProgrammesBaseIndexabilityPolicy {
|
|
4
|
+
protected readonly rules: import("../../common/IRule").IRule[];
|
|
5
|
+
protected generateUrls(): Promise<string[]>;
|
|
6
|
+
get filterCombination(): FilterCombinations;
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters';
|
|
2
|
+
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
3
|
+
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
4
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
5
|
+
import { OnlineAttendanceRule } from '../rules/OnlineAttendanceRule';
|
|
6
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
7
|
+
export class CountryAttendance extends ProgrammesBaseIndexabilityPolicy {
|
|
8
|
+
rules = [
|
|
9
|
+
...this.baseRules,
|
|
10
|
+
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
11
|
+
new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
|
|
12
|
+
new OnlyFiltersSelectedRule([FilterKey.COUNTRY, FilterKey.DELIVERY_METHOD]),
|
|
13
|
+
new OnlineAttendanceRule()
|
|
14
|
+
];
|
|
15
|
+
generateUrls() {
|
|
16
|
+
throw new Error('Method not implemented.');
|
|
17
|
+
}
|
|
18
|
+
get filterCombination() {
|
|
19
|
+
return FilterCombinations.COUNTRY_ATTENDANCE;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
3
|
+
export declare class CountryAttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
|
|
4
|
+
protected readonly rules: import("../../common/IRule").IRule[];
|
|
5
|
+
protected generateUrls(): Promise<string[]>;
|
|
6
|
+
get filterCombination(): FilterCombinations;
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { FilterKey } from '@studyportals/search-filters';
|
|
2
|
+
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
3
|
+
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
4
|
+
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
5
|
+
import { MbaDegreeRule } from '../rules/MbaDegreeRule';
|
|
6
|
+
import { OnlineAttendanceRule } from '../rules/OnlineAttendanceRule';
|
|
7
|
+
import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
|
|
8
|
+
export class CountryAttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
|
|
9
|
+
rules = [
|
|
10
|
+
...this.baseRules,
|
|
11
|
+
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
12
|
+
new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
|
|
13
|
+
new SingleValueSelectedForFilterRule(FilterKey.DEGREE_TYPE),
|
|
14
|
+
new OnlyFiltersSelectedRule([FilterKey.COUNTRY, FilterKey.DELIVERY_METHOD, FilterKey.DEGREE_TYPE]),
|
|
15
|
+
new OnlineAttendanceRule(),
|
|
16
|
+
new MbaDegreeRule()
|
|
17
|
+
];
|
|
18
|
+
generateUrls() {
|
|
19
|
+
throw new Error('Method not implemented.');
|
|
20
|
+
}
|
|
21
|
+
get filterCombination() {
|
|
22
|
+
return FilterCombinations.COUNTRY_ATTENDANCE_DEGREE;
|
|
23
|
+
}
|
|
24
|
+
}
|