From 8861a21a2a0296a4a80c7a1a329b23bf6d40c717 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 19 Jan 2024 12:21:26 +0100 Subject: [PATCH] [DURACOM-191] fix circular dependencies --- package.json | 3 +- src/app/browse-by/browse-by-guard.spec.ts | 2 +- .../browse-by-switcher/browse-by-data-type.ts | 6 ++++ .../browse-by-decorator.spec.ts | 3 +- .../browse-by-switcher/browse-by-decorator.ts | 8 +----- .../browse-by-switcher.component.spec.ts | 3 +- src/app/core/cache/builders/link.service.ts | 8 ++++-- src/app/core/data-services-map.ts | 5 ++-- .../non-hierarchical-browse-definition.ts | 2 +- src/app/init.service.ts | 7 ++++- src/app/item-page/item-shared.module.ts | 28 +++++++++++++------ ...dynamic-lookup-relation-modal.component.ts | 4 +-- ...-relation-external-source-tab.component.ts | 12 +++++--- ...ic-lookup-relation-search-tab.component.ts | 4 +-- ...lookup-relation-selection-tab.component.ts | 2 +- .../container/log-in-container.component.ts | 6 ++-- .../methods/log-in.methods-decorator.ts | 2 +- src/config/app-config.interface.ts | 10 +++++-- 18 files changed, 73 insertions(+), 42 deletions(-) create mode 100644 src/app/browse-by/browse-by-switcher/browse-by-data-type.ts diff --git a/package.json b/package.json index e5347742c8..ec372f7339 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "cypress:run": "cypress run", "env:yaml": "ts-node --project ./tsconfig.ts-node.json scripts/env-to-yaml.ts", "base-href": "ts-node --project ./tsconfig.ts-node.json scripts/base-href.ts", - "check-circ-deps": "npx madge --exclude '(bitstream|bundle|collection|config-submission-form|eperson|item|version)\\.model\\.ts$' --circular --extensions ts ./" + "check-circ-deps": "npx madge --exclude '(bitstream|bundle|collection|config-submission-form|eperson|item|version)\\.model\\.ts$' --circular --extensions ts ./", + "check-circ-deps-fix": "npx madge --exclude '(bitstream|bundle|collection|config-submission-form|eperson|item|version)\\.model\\.ts$|data\\-services\\-map\\.ts' --circular --extensions ts ./" }, "browser": { "fs": false, diff --git a/src/app/browse-by/browse-by-guard.spec.ts b/src/app/browse-by/browse-by-guard.spec.ts index aac5ba2723..46babb74bc 100644 --- a/src/app/browse-by/browse-by-guard.spec.ts +++ b/src/app/browse-by/browse-by-guard.spec.ts @@ -2,11 +2,11 @@ import { first } from 'rxjs/operators'; import { BrowseByGuard } from './browse-by-guard'; import { of as observableOf } from 'rxjs'; import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; -import { BrowseByDataType } from './browse-by-switcher/browse-by-decorator'; import { ValueListBrowseDefinition } from '../core/shared/value-list-browse-definition.model'; import { DSONameServiceMock } from '../shared/mocks/dso-name.service.mock'; import { DSONameService } from '../core/breadcrumbs/dso-name.service'; import { RouterStub } from '../shared/testing/router.stub'; +import { BrowseByDataType } from './browse-by-switcher/browse-by-data-type'; describe('BrowseByGuard', () => { describe('canActivate', () => { diff --git a/src/app/browse-by/browse-by-switcher/browse-by-data-type.ts b/src/app/browse-by/browse-by-switcher/browse-by-data-type.ts new file mode 100644 index 0000000000..03d52fce69 --- /dev/null +++ b/src/app/browse-by/browse-by-switcher/browse-by-data-type.ts @@ -0,0 +1,6 @@ +export enum BrowseByDataType { + Title = 'title', + Metadata = 'text', + Date = 'date', + Hierarchy = 'hierarchy' +} diff --git a/src/app/browse-by/browse-by-switcher/browse-by-decorator.spec.ts b/src/app/browse-by/browse-by-switcher/browse-by-decorator.spec.ts index 19a6277151..f61c3ab568 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-decorator.spec.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-decorator.spec.ts @@ -1,4 +1,5 @@ -import { BrowseByDataType, rendersBrowseBy } from './browse-by-decorator'; +import { rendersBrowseBy } from './browse-by-decorator'; +import { BrowseByDataType } from './browse-by-data-type'; describe('BrowseByDecorator', () => { const titleDecorator = rendersBrowseBy(BrowseByDataType.Title); diff --git a/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts b/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts index 69f6157168..4dda69810e 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts @@ -13,13 +13,7 @@ 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'; - -export enum BrowseByDataType { - Title = 'title', - Metadata = 'text', - Date = 'date', - Hierarchy = 'hierarchy' -} +import { BrowseByDataType } from './browse-by-data-type'; export const DEFAULT_BROWSE_BY_TYPE = BrowseByDataType.Metadata; 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 752693998d..e676e86a0b 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 @@ -2,12 +2,13 @@ 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, BrowseByDataType } from './browse-by-decorator'; +import { BROWSE_BY_COMPONENT_FACTORY } from './browse-by-decorator'; import { BehaviorSubject } from 'rxjs'; 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 { BrowseByDataType } from './browse-by-data-type'; describe('BrowseBySwitcherComponent', () => { let comp: BrowseBySwitcherComponent; diff --git a/src/app/core/cache/builders/link.service.ts b/src/app/core/cache/builders/link.service.ts index 2181a13d9a..5af4a8341a 100644 --- a/src/app/core/cache/builders/link.service.ts +++ b/src/app/core/cache/builders/link.service.ts @@ -1,4 +1,4 @@ -import { Inject, Injectable, Injector } from '@angular/core'; +import { Inject, Injectable, InjectionToken, Injector } from '@angular/core'; import { hasValue, isNotEmpty } from '../../../shared/empty.util'; import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { GenericConstructor } from '../../shared/generic-constructor'; @@ -10,7 +10,8 @@ import { HALDataService } from '../../data/base/hal-data-service.interface'; import { PaginatedList } from '../../data/paginated-list.model'; import { lazyService } from '../../lazy-service'; import { catchError, switchMap } from 'rxjs/operators'; -import { LAZY_DATA_SERVICES } from '../../data-services-map'; +import { APP_DATA_SERVICES_MAP, LazyDataServicesMap } from '../../../../config/app-config.interface'; + /** * A Service to handle the resolving and removing @@ -21,6 +22,7 @@ export class LinkService { constructor( protected injector: Injector, + @Inject(APP_DATA_SERVICES_MAP) private map: InjectionToken, @Inject(LINK_DEFINITION_FACTORY) private getLinkDefinition: (source: GenericConstructor, linkName: keyof T['_links']) => LinkDefinition, @Inject(LINK_DEFINITION_MAP_FACTORY) private getLinkDefinitions: (source: GenericConstructor) => Map>, ) { @@ -50,7 +52,7 @@ export class LinkService { public resolveLinkWithoutAttaching(model, linkToFollow: FollowLinkConfig): Observable>> { const matchingLinkDef = this.getLinkDefinition(model.constructor, linkToFollow.name); if (hasValue(matchingLinkDef)) { - const lazyProvider$: Observable> = lazyService(LAZY_DATA_SERVICES[matchingLinkDef.resourceType.value], this.injector); + const lazyProvider$: Observable> = lazyService(this.map[matchingLinkDef.resourceType.value], this.injector); return lazyProvider$.pipe( switchMap((provider: HALDataService) => { const link = model._links[matchingLinkDef.linkName]; diff --git a/src/app/core/data-services-map.ts b/src/app/core/data-services-map.ts index 6abb153a67..df2813714f 100644 --- a/src/app/core/data-services-map.ts +++ b/src/app/core/data-services-map.ts @@ -46,8 +46,6 @@ import { VERSION } from './shared/version.resource-type'; import { FEATURE } from './shared/feature.resource-type'; import { DSPACE_OBJECT } from './shared/dspace-object.resource-type'; import { BITSTREAM_FORMAT } from './shared/bitstream-format.resource-type'; -import { Type } from '@angular/core'; -import { HALDataService } from './data/base/hal-data-service.interface'; import { SYSTEMWIDEALERT } from '../system-wide-alert/system-wide-alert.resource-type'; import { ACCESS_STATUS @@ -56,8 +54,9 @@ import { SUBSCRIPTION } from '../shared/subscriptions/models/subscription.resour import { SCRIPT } from '../process-page/scripts/script.resource-type'; import { PROCESS } from '../process-page/processes/process.resource-type'; import { IDENTIFIERS } from '../shared/object-list/identifier-data/identifier-data.resource-type'; +import { LazyDataServicesMap } from '../../config/app-config.interface'; -export const LAZY_DATA_SERVICES: {[key: string]: () => Promise>>} = { +export const LAZY_DATA_SERVICES: LazyDataServicesMap = { [AUTHORIZATION.value]: () => import('./data/feature-authorization/authorization-data.service').then(m => m.AuthorizationDataService), [BROWSE_DEFINITION.value]: () => import('./browse/browse-definition-data.service').then(m => m.BrowseDefinitionDataService), [BULK_ACCESS_CONDITION_OPTIONS.value]: () => import('./config/bulk-access-config-data.service').then(m => m.BulkAccessConfigDataService), diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/src/app/core/shared/non-hierarchical-browse-definition.ts index 00dfd2b4f3..db36d23166 100644 --- a/src/app/core/shared/non-hierarchical-browse-definition.ts +++ b/src/app/core/shared/non-hierarchical-browse-definition.ts @@ -1,7 +1,7 @@ import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { SortOption } from './sort-option.model'; import { BrowseDefinition } from './browse-definition.model'; -import { BrowseByDataType } from '../../browse-by/browse-by-data-type'; +import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-data-type'; /** * Super class for NonHierarchicalBrowseDefinition models, diff --git a/src/app/init.service.ts b/src/app/init.service.ts index 9fef2ca4ed..8265b8dae0 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -10,7 +10,7 @@ import { CheckAuthenticationTokenAction } from './core/auth/auth.actions'; import { CorrelationIdService } from './correlation-id/correlation-id.service'; import { APP_INITIALIZER, Inject, Provider, Type } from '@angular/core'; import { makeStateKey, TransferState } from '@angular/platform-browser'; -import { APP_CONFIG, AppConfig } from '../config/app-config.interface'; +import { APP_CONFIG, APP_DATA_SERVICES_MAP, AppConfig } from '../config/app-config.interface'; import { environment } from '../environments/environment'; import { AppState } from './app.reducer'; import isEqual from 'lodash/isEqual'; @@ -24,6 +24,7 @@ import { isAuthenticationBlocking } from './core/auth/selectors'; import { distinctUntilChanged, find } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { MenuService } from './shared/menu/menu.service'; +import { LAZY_DATA_SERVICES } from './core/data-services-map'; /** * Performs the initialization of the app. @@ -90,6 +91,10 @@ export abstract class InitService { deps: [ InitService ], multi: true, }, + { + provide: APP_DATA_SERVICES_MAP, + useValue: LAZY_DATA_SERVICES, + }, ]; } diff --git a/src/app/item-page/item-shared.module.ts b/src/app/item-page/item-shared.module.ts index 7d4bb5a230..3a937bc44f 100644 --- a/src/app/item-page/item-shared.module.ts +++ b/src/app/item-page/item-shared.module.ts @@ -1,22 +1,34 @@ -import { RelatedEntitiesSearchComponent } from './simple/related-entities/related-entities-search/related-entities-search.component'; +import { + RelatedEntitiesSearchComponent +} from './simple/related-entities/related-entities-search/related-entities-search.component'; import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SearchModule } from '../shared/search/search.module'; import { TranslateModule } from '@ngx-translate/core'; import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core'; -import { TabbedRelatedEntitiesSearchComponent } from './simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component'; -import { ItemVersionsDeleteModalComponent } from './versions/item-versions-delete-modal/item-versions-delete-modal.component'; -import { ItemVersionsSummaryModalComponent } from './versions/item-versions-summary-modal/item-versions-summary-modal.component'; +import { + TabbedRelatedEntitiesSearchComponent +} from './simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component'; +import { + ItemVersionsDeleteModalComponent +} from './versions/item-versions-delete-modal/item-versions-delete-modal.component'; +import { + ItemVersionsSummaryModalComponent +} from './versions/item-versions-summary-modal/item-versions-summary-modal.component'; import { MetadataValuesComponent } from './field-components/metadata-values/metadata-values.component'; -import { GenericItemPageFieldComponent } from './simple/field-components/specific-field/generic/generic-item-page-field.component'; -import { MetadataRepresentationListComponent } from './simple/metadata-representation-list/metadata-representation-list.component'; +import { + GenericItemPageFieldComponent +} from './simple/field-components/specific-field/generic/generic-item-page-field.component'; +import { + MetadataRepresentationListComponent +} from './simple/metadata-representation-list/metadata-representation-list.component'; import { RelatedItemsComponent } from './simple/related-items/related-items-component'; import { ThemedMetadataRepresentationListComponent } from './simple/metadata-representation-list/themed-metadata-representation-list.component'; import { - dsDynamicFormControlMapFn -} from '../shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.map'; + dsDynamicFormControlMapFn +} from '../shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component'; const ENTRY_COMPONENTS = [ ItemVersionsDeleteModalComponent, diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.ts index 5de3b7e148..cbf1eaac23 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.ts @@ -1,9 +1,9 @@ import { Component, EventEmitter, NgZone, OnDestroy, OnInit, Output } from '@angular/core'; -import { combineLatest as observableCombineLatest, Observable, Subscription, BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs'; import { NgbActiveModal, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; import { hasValue, isNotEmpty } from '../../../../empty.util'; import { map, skip, switchMap, take } from 'rxjs/operators'; -import { SEARCH_CONFIG_SERVICE } from '../../../../../my-dspace-page/my-dspace-page.component'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../my-dspace-page/my-dspace-configuration.service'; import { SearchConfigurationService } from '../../../../../core/shared/search/search-configuration.service'; import { SelectableListService } from '../../../../object-list/selectable-list/selectable-list.service'; import { SelectableListState } from '../../../../object-list/selectable-list/selectable-list.reducer'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts index baa9289750..c74678d8d4 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts @@ -1,5 +1,5 @@ -import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ComponentRef } from '@angular/core'; -import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-page.component'; +import { Component, ComponentRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-configuration.service'; import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; import { Router } from '@angular/router'; import { ExternalSourceDataService } from '../../../../../../core/data/external-source-data.service'; @@ -15,8 +15,12 @@ import { fadeIn, fadeInOut } from '../../../../../animations/fade'; import { PaginationComponentOptions } from '../../../../../pagination/pagination-component-options.model'; import { RelationshipOptions } from '../../../models/relationship-options.model'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { ExternalSourceEntryImportModalComponent } from './external-source-entry-import-modal/external-source-entry-import-modal.component'; -import { ThemedExternalSourceEntryImportModalComponent } from './external-source-entry-import-modal/themed-external-source-entry-import-modal.component'; +import { + ExternalSourceEntryImportModalComponent +} from './external-source-entry-import-modal/external-source-entry-import-modal.component'; +import { + ThemedExternalSourceEntryImportModalComponent +} from './external-source-entry-import-modal/themed-external-source-entry-import-modal.component'; import { hasValue, hasValueOperator } from '../../../../../empty.util'; import { SelectableListService } from '../../../../../object-list/selectable-list/selectable-list.service'; import { Item } from '../../../../../../core/shared/item.model'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts index b894e6b024..5f634f1747 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts @@ -1,10 +1,10 @@ import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-page.component'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-configuration.service'; import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; import { Item } from '../../../../../../core/shared/item.model'; import { SearchResult } from '../../../../../search/models/search-result.model'; import { PaginatedList } from '../../../../../../core/data/paginated-list.model'; -import { Observable, BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, Observable } from 'rxjs'; import { RelationshipOptions } from '../../../models/relationship-options.model'; import { PaginationComponentOptions } from '../../../../../pagination/pagination-component-options.model'; import { ListableObject } from '../../../../../object-collection/shared/listable-object.model'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/selection-tab/dynamic-lookup-relation-selection-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/selection-tab/dynamic-lookup-relation-selection-tab.component.ts index 45557f5415..c690bd93a3 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/selection-tab/dynamic-lookup-relation-selection-tab.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/selection-tab/dynamic-lookup-relation-selection-tab.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-page.component'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-configuration.service'; import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; import { Observable } from 'rxjs'; import { ListableObject } from '../../../../../object-collection/shared/listable-object.model'; diff --git a/src/app/shared/log-in/container/log-in-container.component.ts b/src/app/shared/log-in/container/log-in-container.component.ts index 004ff3a0e7..006b008edf 100644 --- a/src/app/shared/log-in/container/log-in-container.component.ts +++ b/src/app/shared/log-in/container/log-in-container.component.ts @@ -1,5 +1,5 @@ -import { Component, Injector, Input, OnInit, Type } from '@angular/core'; -import { rendersAuthMethodType } from '../methods/log-in.methods-decorator'; +import { Component, Injector, Input, OnInit } from '@angular/core'; +import { AuthMethodTypeComponent, rendersAuthMethodType } from '../methods/log-in.methods-decorator'; import { AuthMethod } from '../../../core/auth/models/auth.method'; import { NgComponentOutlet } from '@angular/common'; @@ -50,7 +50,7 @@ export class LogInContainerComponent implements OnInit { /** * Find the correct component based on the AuthMethod's type */ - getAuthMethodContent(): Type { + getAuthMethodContent(): AuthMethodTypeComponent { return rendersAuthMethodType(this.authMethod.authMethodType); } diff --git a/src/app/shared/log-in/methods/log-in.methods-decorator.ts b/src/app/shared/log-in/methods/log-in.methods-decorator.ts index ff023f3bab..724d66b38c 100644 --- a/src/app/shared/log-in/methods/log-in.methods-decorator.ts +++ b/src/app/shared/log-in/methods/log-in.methods-decorator.ts @@ -2,7 +2,7 @@ import { AuthMethodType } from '../../../core/auth/models/auth.method-type'; import { LogInPasswordComponent } from './password/log-in-password.component'; import { LogInExternalProviderComponent } from './log-in-external-provider/log-in-external-provider.component'; -type AuthMethodTypeComponent = +export type AuthMethodTypeComponent = typeof LogInPasswordComponent | typeof LogInExternalProviderComponent; diff --git a/src/config/app-config.interface.ts b/src/config/app-config.interface.ts index 5a474ae561..16217b18eb 100644 --- a/src/config/app-config.interface.ts +++ b/src/config/app-config.interface.ts @@ -1,4 +1,4 @@ -import { InjectionToken } from '@angular/core'; +import { InjectionToken, Type } from '@angular/core'; import { makeStateKey } from '@angular/platform-browser'; import { Config } from './config.interface'; import { ServerConfig } from './server-config.interface'; @@ -22,7 +22,8 @@ import { HomeConfig } from './homepage-config.interface'; import { MarkdownConfig } from './markdown-config.interface'; import { FilterVocabularyConfig } from './filter-vocabulary-config'; import { DiscoverySortConfig } from './discovery-sort.config'; -import {QualityAssuranceConfig} from './quality-assurance.config'; +import { QualityAssuranceConfig } from './quality-assurance.config'; +import { HALDataService } from '../app/core/data/base/hal-data-service.interface'; interface AppConfig extends Config { ui: UIServerConfig; @@ -60,6 +61,11 @@ const APP_CONFIG = new InjectionToken('APP_CONFIG'); const APP_CONFIG_STATE = makeStateKey('APP_CONFIG_STATE'); +export interface LazyDataServicesMap { + [type: string]: () => Promise>> +} +export const APP_DATA_SERVICES_MAP: InjectionToken = new InjectionToken('APP_DATA_SERVICES_MAP'); + export { AppConfig, APP_CONFIG,