diff --git a/src/app/browse-by/browse-by-guard.spec.ts b/src/app/browse-by/browse-by-guard.spec.ts index 8a9f9b8c50..933c95a3cb 100644 --- a/src/app/browse-by/browse-by-guard.spec.ts +++ b/src/app/browse-by/browse-by-guard.spec.ts @@ -2,7 +2,7 @@ import { first } from 'rxjs/operators'; import { BrowseByGuard } from './browse-by-guard'; import { of as observableOf } from 'rxjs'; import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from './browse-by-switcher/browse-by-decorator'; describe('BrowseByGuard', () => { @@ -18,7 +18,7 @@ describe('BrowseByGuard', () => { const id = 'author'; const scope = '1234-65487-12354-1235'; const value = 'Filter'; - const browseDefinition = Object.assign(new FlatBrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); + const browseDefinition = Object.assign(new BrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); beforeEach(() => { dsoService = { diff --git a/src/app/browse-by/browse-by-guard.ts b/src/app/browse-by/browse-by-guard.ts index f42359b56b..e4582cb77a 100644 --- a/src/app/browse-by/browse-by-guard.ts +++ b/src/app/browse-by/browse-by-guard.ts @@ -7,7 +7,7 @@ import { getFirstSucceededRemoteData, getFirstSucceededRemoteDataPayload } from import { TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; @Injectable() /** @@ -23,7 +23,7 @@ export class BrowseByGuard implements CanActivate { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const title = route.data.title; const id = route.params.id || route.queryParams.id || route.data.id; - let browseDefinition$: Observable; + let browseDefinition$: Observable; if (hasNoValue(route.data.browseDefinition) && hasValue(id)) { browseDefinition$ = this.browseDefinitionService.findById(id).pipe(getFirstSucceededRemoteDataPayload()); } else { diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts index 91c6c29252..c2e1c9cb68 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts @@ -3,7 +3,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BROWSE_BY_COMPONENT_FACTORY, BrowseByDataType } from './browse-by-decorator'; -import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { BehaviorSubject } from 'rxjs'; import { ThemeService } from '../../shared/theme-support/theme.service'; @@ -13,33 +13,33 @@ describe('BrowseBySwitcherComponent', () => { const types = [ Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } ), ]; - const data = new BehaviorSubject(createDataWithBrowseDefinition(new FlatBrowseDefinition())); + const data = new BehaviorSubject(createDataWithBrowseDefinition(new BrowseDefinition())); const activatedRouteStub = { data @@ -70,7 +70,7 @@ describe('BrowseBySwitcherComponent', () => { comp = fixture.componentInstance; })); - types.forEach((type: FlatBrowseDefinition) => { + types.forEach((type: BrowseDefinition) => { describe(`when switching to a browse-by page for "${type.id}"`, () => { beforeEach(() => { data.next(createDataWithBrowseDefinition(type)); diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts index e4746129dc..35e4edf900 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { BROWSE_BY_COMPONENT_FACTORY } from './browse-by-decorator'; import { GenericConstructor } from '../../core/shared/generic-constructor'; -import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { ThemeService } from '../../shared/theme-support/theme.service'; @Component({ @@ -31,7 +31,7 @@ export class BrowseBySwitcherComponent implements OnInit { */ ngOnInit(): void { this.browseByComponent = this.route.data.pipe( - map((data: { browseDefinition: FlatBrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName())) + map((data: { browseDefinition: BrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName())) ); } diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index 465c5b44b4..5380bb7ec4 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; -import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { RequestService } from '../data/request.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -16,46 +15,10 @@ import { dataService } from '../data/base/data-service.decorator'; import { isNotEmpty, isNotEmptyOperator, hasValue } from '../../shared/empty.util'; import { take } from 'rxjs/operators'; import { BrowseDefinitionRestRequest } from '../data/request.models'; +import { BrowseDefinition } from '../shared/browse-definition.model'; -/** - * Data service responsible for retrieving browse definitions from the REST server - */ -@Injectable({ - providedIn: 'root', -}) -@dataService(BROWSE_DEFINITION) -export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { - private findAllData: FindAllDataImpl; - - constructor( - protected requestService: RequestService, - protected rdbService: RemoteDataBuildService, - protected objectCache: ObjectCacheService, - protected halService: HALEndpointService, - ) { - super('browses', requestService, rdbService, objectCache, halService); - - this.findAllData = new FindAllDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive); - } - - /** - * Returns {@link RemoteData} of all object with a list of {@link FollowLinkConfig}, to indicate which embedded - * info should be added to the objects - * - * @param options Find list options object - * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's - * no valid cached version. Defaults to true - * @param reRequestOnStale Whether or not the request should automatically be re- - * requested after the response becomes stale - * @param linksToFollow List of {@link FollowLinkConfig} that indicate which - * {@link HALLink}s should be automatically resolved - * @return {Observable>>} - * Return an observable that emits object list - */ - findAll(options: FindListOptions = {}, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable>> { - return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); - } +class BrowseDefinitionDataImpl extends FindAllDataImpl { /** * Create a GET request for the given href, and send it. * Use a GET request specific for BrowseDefinitions. @@ -86,3 +49,43 @@ export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { + private findAllData: BrowseDefinitionDataImpl; + + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + ) { + super('browses', requestService, rdbService, objectCache, halService); + + this.findAllData = new BrowseDefinitionDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive); + } + + /** + * Returns {@link RemoteData} of all object with a list of {@link FollowLinkConfig}, to indicate which embedded + * info should be added to the objects + * + * @param options Find list options object + * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's + * no valid cached version. Defaults to true + * @param reRequestOnStale Whether or not the request should automatically be re- + * requested after the response becomes stale + * @param linksToFollow List of {@link FollowLinkConfig} that indicate which + * {@link HALLink}s should be automatically resolved + * @return {Observable>>} + * Return an observable that emits object list + */ + findAll(options: FindListOptions = {}, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable>> { + return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); + } +} + diff --git a/src/app/core/browse/browse.service.spec.ts b/src/app/core/browse/browse.service.spec.ts index 9e0615385b..46ac8c44f4 100644 --- a/src/app/core/browse/browse.service.spec.ts +++ b/src/app/core/browse/browse.service.spec.ts @@ -6,7 +6,7 @@ import { getMockRequestService } from '../../shared/mocks/request.service.mock'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestService } from '../data/request.service'; -import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../shared/browse-definition.model'; import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; import { BrowseService } from './browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; @@ -23,7 +23,7 @@ describe('BrowseService', () => { const browsesEndpointURL = 'https://rest.api/browses'; const halService: any = new HALEndpointServiceStub(browsesEndpointURL); const browseDefinitions = [ - Object.assign(new FlatBrowseDefinition(), { + Object.assign(new BrowseDefinition(), { id: 'date', metadataBrowse: false, sortOptions: [ @@ -50,7 +50,7 @@ describe('BrowseService', () => { items: { href: 'https://rest.api/discover/browses/dateissued/items' } } }), - Object.assign(new FlatBrowseDefinition(), { + Object.assign(new BrowseDefinition(), { id: 'author', metadataBrowse: true, sortOptions: [ diff --git a/src/app/core/browse/browse.service.ts b/src/app/core/browse/browse.service.ts index 9e5589e3d8..a9a030bf57 100644 --- a/src/app/core/browse/browse.service.ts +++ b/src/app/core/browse/browse.service.ts @@ -6,6 +6,7 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { BrowseDefinition } from '../shared/browse-definition.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { BrowseEntry } from '../shared/browse-entry.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; @@ -60,7 +61,7 @@ export class BrowseService { /** * Get all BrowseDefinitions */ - getBrowseDefinitions(): Observable>> { + getBrowseDefinitions(): Observable>> { // TODO properly support pagination return this.browseDefinitionDataService.findAll({ elementsPerPage: 9999 }).pipe( getFirstSucceededRemoteData(), @@ -233,13 +234,18 @@ export class BrowseService { return this.getBrowseDefinitions().pipe( getRemoteDataPayload(), getPaginatedListPayload(), - map((browseDefinitions: FlatBrowseDefinition[]) => browseDefinitions - .find((def: FlatBrowseDefinition) => { - const matchingKeys = def.metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); + map((browseDefinitions: BrowseDefinition[]) => browseDefinitions + .find((def: BrowseDefinition) => { + let matchingKeys = ''; + + if (Array.isArray((def as FlatBrowseDefinition).metadataKeys)) { + matchingKeys = (def as FlatBrowseDefinition).metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); + } + return isNotEmpty(matchingKeys); }) ), - map((def: FlatBrowseDefinition) => { + map((def: BrowseDefinition) => { if (isEmpty(def) || isEmpty(def._links) || isEmpty(def._links[linkPath])) { throw new Error(`A browse endpoint for ${linkPath} on ${metadataKey} isn't configured`); } else { diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index c00cfd6002..5365de0c4b 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -73,7 +73,7 @@ import { ServerResponseService } from './services/server-response.service'; import { NativeWindowFactory, NativeWindowService } from './services/window.service'; import { BitstreamFormat } from './shared/bitstream-format.model'; import { Bitstream } from './shared/bitstream.model'; -import { FlatBrowseDefinition } from './shared/flat-browse-definition.model'; +import { BrowseDefinition } from './shared/browse-definition.model'; import { BrowseEntry } from './shared/browse-entry.model'; import { Bundle } from './shared/bundle.model'; import { Collection } from './shared/collection.model'; @@ -325,7 +325,7 @@ export const models = SubmissionUploadsModel, AuthStatus, BrowseEntry, - FlatBrowseDefinition, + BrowseDefinition, HierarchicalBrowseDefinition, ClaimedTask, TaskObject, diff --git a/src/app/core/data/browse-response-parsing.service.ts b/src/app/core/data/browse-response-parsing.service.ts index 9aa508ccf0..cc1a4a64a1 100644 --- a/src/app/core/data/browse-response-parsing.service.ts +++ b/src/app/core/data/browse-response-parsing.service.ts @@ -1,35 +1,42 @@ import { Injectable } from '@angular/core'; import { ObjectCacheService } from '../cache/object-cache.service'; import { hasValue } from '../../shared/empty.util'; -import { HIERARCHICAL_BROWSE_DEFINITION } from '../shared/hierarchical-browse-definition.resource-type'; +import { + HIERARCHICAL_BROWSE_DEFINITION +} from '../shared/hierarchical-browse-definition.resource-type'; import { FLAT_BROWSE_DEFINITION } from '../shared/flat-browse-definition.resource-type'; import { HierarchicalBrowseDefinition } from '../shared/hierarchical-browse-definition.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { DSOResponseParsingService } from './dso-response-parsing.service'; +import { Serializer } from '../serializer'; +import { BrowseDefinition } from '../shared/browse-definition.model'; +import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; /** * A ResponseParsingService used to parse RawRestResponse coming from the REST API to a BrowseDefinition object */ @Injectable({ - providedIn: 'root', - }) + providedIn: 'root', +}) export class BrowseResponseParsingService extends DSOResponseParsingService { - protected objectCache: ObjectCacheService; - protected toCache: boolean; + constructor( + protected objectCache: ObjectCacheService, + ) { + super(objectCache); + } protected deserialize(obj): any { const browseType: string = obj.browseType; - if (hasValue(browseType)) { + if (obj.type === BROWSE_DEFINITION.value && hasValue(browseType)) { + let serializer: Serializer; if (browseType === HIERARCHICAL_BROWSE_DEFINITION.value) { - const serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); - return serializer.deserialize(obj); - } else if (browseType === FLAT_BROWSE_DEFINITION.value) { - const serializer = new this.serializerConstructor(FlatBrowseDefinition); - return serializer.deserialize(obj); + serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); + } else { + serializer = new this.serializerConstructor(FlatBrowseDefinition); } + return serializer.deserialize(obj); } else { - console.warn('cannot deserialize type ' + browseType); - return null; + return super.deserialize(obj); } } } diff --git a/src/app/core/shared/browse-definition.model.ts b/src/app/core/shared/browse-definition.model.ts new file mode 100644 index 0000000000..a5bed53c9f --- /dev/null +++ b/src/app/core/shared/browse-definition.model.ts @@ -0,0 +1,16 @@ +import { autoserialize } from 'cerialize'; +import { CacheableObject } from '../cache/cacheable-object.model'; + +/** + * Base class for BrowseDefinition models + */ +export abstract class BrowseDefinition extends CacheableObject { + + @autoserialize + id: string; + + /** + * Get the render type of the BrowseDefinition model + */ + abstract getRenderType(): string; +} diff --git a/src/app/core/shared/browse-definition.ts b/src/app/core/shared/browse-definition.ts deleted file mode 100644 index 788ef65739..0000000000 --- a/src/app/core/shared/browse-definition.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Base class for BrowseDefinition models - */ -export abstract class BrowseDefinition { - - /** - * Get the render type of the BrowseDefinition model - */ - abstract getRenderType(): string; -} diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index fa664c7747..9660a3bac9 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,16 +1,16 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; import { SortOption } from './sort-option.model'; -import { CacheableObject } from '../cache/cacheable-object.model'; import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; -import { BrowseDefinition } from './browse-definition'; +import { BrowseDefinition } from './browse-definition.model'; @typedObject -export class FlatBrowseDefinition extends CacheableObject implements BrowseDefinition { +@inheritSerialization(BrowseDefinition) +export class FlatBrowseDefinition extends BrowseDefinition { static type = FLAT_BROWSE_DEFINITION; /** @@ -19,9 +19,6 @@ export class FlatBrowseDefinition extends CacheableObject implements BrowseDefin @excludeFromEquals type: ResourceType = FLAT_BROWSE_DEFINITION; - @autoserialize - id: string; - @autoserialize sortOptions: SortOption[]; diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/src/app/core/shared/hierarchical-browse-definition.model.ts index a57550e1b3..427f5e1947 100644 --- a/src/app/core/shared/hierarchical-browse-definition.model.ts +++ b/src/app/core/shared/hierarchical-browse-definition.model.ts @@ -1,14 +1,14 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { HIERARCHICAL_BROWSE_DEFINITION } from './hierarchical-browse-definition.resource-type'; import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; -import { CacheableObject } from '../cache/cacheable-object.model'; -import { BrowseDefinition } from './browse-definition'; +import { BrowseDefinition } from './browse-definition.model'; @typedObject -export class HierarchicalBrowseDefinition extends CacheableObject implements BrowseDefinition { +@inheritSerialization(BrowseDefinition) +export class HierarchicalBrowseDefinition extends BrowseDefinition { static type = HIERARCHICAL_BROWSE_DEFINITION; /** @@ -17,9 +17,6 @@ export class HierarchicalBrowseDefinition extends CacheableObject implements Bro @excludeFromEquals type: ResourceType = HIERARCHICAL_BROWSE_DEFINITION; - @autoserialize - id: string; - @autoserialize facetType: string; diff --git a/src/app/core/shared/operators.ts b/src/app/core/shared/operators.ts index dd0ade112a..32610c82fd 100644 --- a/src/app/core/shared/operators.ts +++ b/src/app/core/shared/operators.ts @@ -6,7 +6,7 @@ import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { MetadataField } from '../metadata/metadata-field.model'; import { MetadataSchema } from '../metadata/metadata-schema.model'; -import { FlatBrowseDefinition } from './flat-browse-definition.model'; +import { BrowseDefinition } from './browse-definition.model'; import { DSpaceObject } from './dspace-object.model'; import { InjectionToken } from '@angular/core'; import { MonoTypeOperatorFunction, SchedulerLike } from 'rxjs/internal/types'; @@ -171,17 +171,17 @@ export const toDSpaceObjectListRD = () => /** * Get the browse links from a definition by ID given an array of all definitions * @param {string} definitionID - * @returns {(source: Observable>) => Observable} + * @returns {(source: Observable>) => Observable} */ export const getBrowseDefinitionLinks = (definitionID: string) => - (source: Observable>>): Observable => + (source: Observable>>): Observable => source.pipe( getRemoteDataPayload(), getPaginatedListPayload(), - map((browseDefinitions: FlatBrowseDefinition[]) => browseDefinitions - .find((def: FlatBrowseDefinition) => def.id === definitionID) + map((browseDefinitions: BrowseDefinition[]) => browseDefinitions + .find((def: BrowseDefinition) => def.id === definitionID) ), - map((def: FlatBrowseDefinition) => { + map((def: BrowseDefinition) => { if (isNotEmpty(def)) { return def._links; } else { diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index d423d3bc33..f771ef8b27 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -7,7 +7,7 @@ import { MenuItemType } from './shared/menu/menu-item-type.model'; import { LinkMenuItemModel } from './shared/menu/menu-item/models/link.model'; import { getFirstCompletedRemoteData } from './core/shared/operators'; import { PaginatedList } from './core/data/paginated-list.model'; -import { FlatBrowseDefinition } from './core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from './core/shared/browse-definition.model'; import { RemoteData } from './core/data/remote-data'; import { TextMenuItemModel } from './shared/menu/menu-item/models/text.model'; import { BrowseService } from './core/browse/browse.service'; @@ -108,10 +108,10 @@ export class MenuResolver implements Resolve { ]; // Read the different Browse-By types from config and add them to the browse menu this.browseService.getBrowseDefinitions() - .pipe(getFirstCompletedRemoteData>()) - .subscribe((browseDefListRD: RemoteData>) => { + .pipe(getFirstCompletedRemoteData>()) + .subscribe((browseDefListRD: RemoteData>) => { if (browseDefListRD.hasSucceeded) { - browseDefListRD.payload.page.forEach((browseDef: FlatBrowseDefinition) => { + browseDefListRD.payload.page.forEach((browseDef: BrowseDefinition) => { menuList.push({ id: `browse_global_by_${browseDef.id}`, parentID: 'browse_global', diff --git a/src/app/navbar/navbar.component.spec.ts b/src/app/navbar/navbar.component.spec.ts index 084047fc46..ada9be9d0b 100644 --- a/src/app/navbar/navbar.component.spec.ts +++ b/src/app/navbar/navbar.component.spec.ts @@ -16,7 +16,7 @@ import { RouterTestingModule } from '@angular/router/testing'; import { BrowseService } from '../core/browse/browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; import { buildPaginatedList } from '../core/data/paginated-list.model'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from '../browse-by/browse-by-switcher/browse-by-decorator'; import { Item } from '../core/shared/item.model'; import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; @@ -66,26 +66,26 @@ describe('NavbarComponent', () => { beforeEach(waitForAsync(() => { browseDefinitions = [ Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } diff --git a/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts b/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts index 668bd138c8..0527d283f0 100644 --- a/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts +++ b/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts @@ -6,7 +6,7 @@ import { getCommunityPageRoute } from '../../../community-page/community-page-ro import { getCollectionPageRoute } from '../../../collection-page/collection-page-routing-paths'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { FlatBrowseDefinition } from '../../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../../core/shared/browse-definition.model'; import { RemoteData } from '../../../core/data/remote-data'; import { BrowseService } from '../../../core/browse/browse.service'; @@ -46,11 +46,11 @@ export class ComcolPageBrowseByComponent implements OnInit { ngOnInit(): void { this.browseService.getBrowseDefinitions() - .pipe(getFirstCompletedRemoteData>()) - .subscribe((browseDefListRD: RemoteData>) => { + .pipe(getFirstCompletedRemoteData>()) + .subscribe((browseDefListRD: RemoteData>) => { if (browseDefListRD.hasSucceeded) { this.allOptions = browseDefListRD.payload.page - .map((config: FlatBrowseDefinition) => ({ + .map((config: BrowseDefinition) => ({ id: config.id, label: `browse.comcol.by.${config.id}`, routerLink: `/browse/${config.id}`,