[DURACOM-191] fix browse-by-decorator map

This commit is contained in:
Andrea Barbasso
2024-03-05 11:17:25 +01:00
parent 36edc58979
commit 9cd1db54c0
4 changed files with 32 additions and 38 deletions

View File

@@ -1,9 +1,16 @@
import { Component } from '@angular/core';
import {
PublicationClaimComponent
} from '../../../notifications/suggestion-targets/publication-claim/publication-claim.component';
@Component({
selector: 'ds-admin-notifications-publication-claim-page',
templateUrl: './admin-notifications-publication-claim-page.component.html',
styleUrls: ['./admin-notifications-publication-claim-page.component.scss']
styleUrls: ['./admin-notifications-publication-claim-page.component.scss'],
imports: [
PublicationClaimComponent
],
standalone: true
})
export class AdminNotificationsPublicationClaimPageComponent {

View File

@@ -1,45 +1,34 @@
import { Component } from '@angular/core';
import { hasNoValue } from '../../shared/empty.util';
import { DEFAULT_THEME, resolveTheme } from '../../shared/object-collection/shared/listable-object/listable-object.decorator';
import { Context } from '../../core/shared/context.model';
import { GenericConstructor } from '../../core/shared/generic-constructor';
import { BrowseByDataType } from './browse-by-data-type';
import { BrowseByTitleComponent } from '../browse-by-title/browse-by-title.component';
import { BrowseByMetadataComponent } from '../browse-by-metadata/browse-by-metadata.component';
import { BrowseByDateComponent } from '../browse-by-date/browse-by-date.component';
import { BrowseByTaxonomyComponent } from '../browse-by-taxonomy/browse-by-taxonomy.component';
import {
DEFAULT_THEME,
resolveTheme
} from '../../shared/object-collection/shared/listable-object/listable-object.decorator';
import { ThemedBrowseByDatePageComponent } from '../browse-by-date-page/themed-browse-by-date-page.component';
import {
ThemedBrowseByMetadataPageComponent
} from '../browse-by-metadata-page/themed-browse-by-metadata-page.component';
import {
ThemedBrowseByTaxonomyPageComponent
} from '../browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component';
import { ThemedBrowseByTitlePageComponent } from '../browse-by-title-page/themed-browse-by-title-page.component';
import { BrowseByDataType } from './browse-by-data-type';
import { BrowseByDataType } from './browse-by-data-type';
export const DEFAULT_BROWSE_BY_TYPE = BrowseByDataType.Metadata;
export const DEFAULT_BROWSE_BY_CONTEXT = Context.Any;
export const BROWSE_BY_COMPONENT_FACTORY = new InjectionToken<(browseByType, theme) => GenericConstructor<any>>('getComponentByBrowseByType', {
providedIn: 'root',
factory: () => getComponentByBrowseByType
});
const map: Map<BrowseByDataType, Map<Context, Map<string, GenericConstructor<Component>>>> = new Map();
type BrowseByComponentType =
typeof ThemedBrowseByTitlePageComponent |
typeof ThemedBrowseByMetadataPageComponent |
typeof ThemedBrowseByDatePageComponent |
typeof ThemedBrowseByTaxonomyPageComponent;
typeof BrowseByTitleComponent |
typeof BrowseByMetadataComponent |
typeof BrowseByDateComponent |
typeof BrowseByTaxonomyComponent;
export const BROWSE_BY_DECORATOR_MAP =
new Map<BrowseByDataType, Map<string, BrowseByComponentType>>([
[BrowseByDataType.Date, new Map([[DEFAULT_THEME, ThemedBrowseByDatePageComponent]])],
[BrowseByDataType.Metadata, new Map([[DEFAULT_THEME, ThemedBrowseByMetadataPageComponent]])],
[BrowseByDataType.Hierarchy, new Map([[DEFAULT_THEME, ThemedBrowseByTaxonomyPageComponent]])],
[BrowseByDataType.Title, new Map([[DEFAULT_THEME, ThemedBrowseByTitlePageComponent]])]
new Map<BrowseByDataType, Map<Context, Map<string, BrowseByComponentType>>>([
[BrowseByDataType.Date, new Map([[DEFAULT_BROWSE_BY_CONTEXT, new Map([[DEFAULT_THEME, BrowseByDateComponent]])]])],
[BrowseByDataType.Metadata, new Map([[DEFAULT_BROWSE_BY_CONTEXT, new Map([[DEFAULT_THEME, BrowseByMetadataComponent]])]])],
[BrowseByDataType.Hierarchy, new Map([[DEFAULT_BROWSE_BY_CONTEXT, new Map([[DEFAULT_THEME, BrowseByTaxonomyComponent]])]])],
[BrowseByDataType.Title, new Map([[DEFAULT_BROWSE_BY_CONTEXT, new Map([[DEFAULT_THEME, BrowseByTitleComponent]])]])]
]);
/**
@@ -74,12 +63,12 @@ export function rendersBrowseBy(browseByType: BrowseByDataType, context = DEFAUL
* @param context The context to match
* @param theme the theme to match
*/
export function getComponentByBrowseByType(browseByType: BrowseByDataType, context: Context, theme: string): GenericConstructor<Component> {
let contextMap: Map<Context, Map<string, GenericConstructor<Component>>> = BROWSE_BY_DECORATOR_MAP.get(browseByType);
export function getComponentByBrowseByType(browseByType: BrowseByDataType, context: Context, theme: string) {
let contextMap: Map<Context, Map<string, BrowseByComponentType>> = BROWSE_BY_DECORATOR_MAP.get(browseByType);
if (hasNoValue(contextMap)) {
contextMap = map.get(DEFAULT_BROWSE_BY_TYPE);
contextMap = BROWSE_BY_DECORATOR_MAP.get(DEFAULT_BROWSE_BY_TYPE);
}
let themeMap: Map<string, GenericConstructor<Component>> = contextMap.get(context);
let themeMap: Map<string, BrowseByComponentType> = contextMap.get(context);
if (hasNoValue(themeMap)) {
themeMap = contextMap.get(DEFAULT_BROWSE_BY_CONTEXT);
}

View File

@@ -1,17 +1,15 @@
import { BrowseBySwitcherComponent } from './browse-by-switcher.component';
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 } from './browse-by-decorator';
import { BehaviorSubject } from 'rxjs';
import { SimpleChange, Component } from '@angular/core';
import { Component, SimpleChange } from '@angular/core';
import { rendersBrowseBy } from './browse-by-decorator';
import { ThemeService } from '../../shared/theme-support/theme.service';
import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model';
import { ValueListBrowseDefinition } from '../../core/shared/value-list-browse-definition.model';
import { NonHierarchicalBrowseDefinition } from '../../core/shared/non-hierarchical-browse-definition';
import { getMockThemeService } from '../../shared/mocks/theme-service.mock';
import { DynamicComponentLoaderDirective } from '../../shared/abstract-component-loader/dynamic-component-loader.directive';
import {
DynamicComponentLoaderDirective
} from '../../shared/abstract-component-loader/dynamic-component-loader.directive';
import { BrowseByDataType } from './browse-by-data-type';
@rendersBrowseBy('BrowseBySwitcherComponent' as BrowseByDataType)