diff --git a/src/app/core/shared/browse-definition.ts b/src/app/core/shared/browse-definition.ts new file mode 100644 index 0000000000..788ef65739 --- /dev/null +++ b/src/app/core/shared/browse-definition.ts @@ -0,0 +1,10 @@ +/** + * 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 38df4a562d..2002d6bbab 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -7,9 +7,10 @@ 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'; @typedObject -export class FlatBrowseDefinition extends CacheableObject { +export class FlatBrowseDefinition extends CacheableObject implements BrowseDefinition { static type = FLAT_BROWSE_DEFINITION; /** @@ -46,4 +47,8 @@ export class FlatBrowseDefinition extends CacheableObject { entries: HALLink; items: HALLink; }; + + getRenderType(): string { + return this.dataType; + } } diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/src/app/core/shared/hierarchical-browse-definition.model.ts new file mode 100644 index 0000000000..a57550e1b3 --- /dev/null +++ b/src/app/core/shared/hierarchical-browse-definition.model.ts @@ -0,0 +1,47 @@ +import { autoserialize, autoserializeAs, deserialize } 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'; + +@typedObject +export class HierarchicalBrowseDefinition extends CacheableObject implements BrowseDefinition { + static type = HIERARCHICAL_BROWSE_DEFINITION; + + /** + * The object type + */ + @excludeFromEquals + type: ResourceType = HIERARCHICAL_BROWSE_DEFINITION; + + @autoserialize + id: string; + + @autoserialize + facetType: string; + + @autoserialize + vocabulary: string; + + @autoserializeAs('metadata') + metadataKeys: string[]; + + get self(): string { + return this._links.self.href; + } + + @deserialize + _links: { + self: HALLink; + entries: HALLink; + items: HALLink; + vocabulary: HALLink; + }; + + getRenderType(): string { + return 'hierarchy'; + } +} diff --git a/src/app/core/shared/hierarchical-browse-definition.resource-type.ts b/src/app/core/shared/hierarchical-browse-definition.resource-type.ts new file mode 100644 index 0000000000..df06d67c7a --- /dev/null +++ b/src/app/core/shared/hierarchical-browse-definition.resource-type.ts @@ -0,0 +1,9 @@ +import { ResourceType } from './resource-type'; + +/** + * The resource type for HierarchicalBrowseDefinition + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const HIERARCHICAL_BROWSE_DEFINITION = new ResourceType('hierarchicalBrowse');