mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
Merge remote-tracking branch 'github/DURACOM-191' into DURACOM-191
This commit is contained in:
@@ -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,
|
||||
|
@@ -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', () => {
|
||||
|
@@ -0,0 +1,6 @@
|
||||
export enum BrowseByDataType {
|
||||
Title = 'title',
|
||||
Metadata = 'text',
|
||||
Date = 'date',
|
||||
Hierarchy = 'hierarchy'
|
||||
}
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
8
src/app/core/cache/builders/link.service.ts
vendored
8
src/app/core/cache/builders/link.service.ts
vendored
@@ -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<LazyDataServicesMap>,
|
||||
@Inject(LINK_DEFINITION_FACTORY) private getLinkDefinition: <T extends HALResource>(source: GenericConstructor<T>, linkName: keyof T['_links']) => LinkDefinition<T>,
|
||||
@Inject(LINK_DEFINITION_MAP_FACTORY) private getLinkDefinitions: <T extends HALResource>(source: GenericConstructor<T>) => Map<keyof T['_links'], LinkDefinition<T>>,
|
||||
) {
|
||||
@@ -50,7 +52,7 @@ export class LinkService {
|
||||
public resolveLinkWithoutAttaching<T extends HALResource, U extends HALResource>(model, linkToFollow: FollowLinkConfig<T>): Observable<RemoteData<U | PaginatedList<U>>> {
|
||||
const matchingLinkDef = this.getLinkDefinition(model.constructor, linkToFollow.name);
|
||||
if (hasValue(matchingLinkDef)) {
|
||||
const lazyProvider$: Observable<HALDataService<any>> = lazyService(LAZY_DATA_SERVICES[matchingLinkDef.resourceType.value], this.injector);
|
||||
const lazyProvider$: Observable<HALDataService<any>> = lazyService(this.map[matchingLinkDef.resourceType.value], this.injector);
|
||||
return lazyProvider$.pipe(
|
||||
switchMap((provider: HALDataService<any>) => {
|
||||
const link = model._links[matchingLinkDef.linkName];
|
||||
|
@@ -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<Type<HALDataService<any>>>} = {
|
||||
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),
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
|
@@ -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';
|
||||
} from '../shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component';
|
||||
|
||||
const ENTRY_COMPONENTS = [
|
||||
ItemVersionsDeleteModalComponent,
|
||||
|
@@ -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';
|
||||
|
@@ -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';
|
||||
|
@@ -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';
|
||||
|
@@ -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';
|
||||
|
@@ -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<Component> {
|
||||
getAuthMethodContent(): AuthMethodTypeComponent {
|
||||
return rendersAuthMethodType(this.authMethod.authMethodType);
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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<AppConfig>('APP_CONFIG');
|
||||
|
||||
const APP_CONFIG_STATE = makeStateKey<AppConfig>('APP_CONFIG_STATE');
|
||||
|
||||
export interface LazyDataServicesMap {
|
||||
[type: string]: () => Promise<Type<HALDataService<any>>>
|
||||
}
|
||||
export const APP_DATA_SERVICES_MAP: InjectionToken<LazyDataServicesMap> = new InjectionToken<LazyDataServicesMap>('APP_DATA_SERVICES_MAP');
|
||||
|
||||
export {
|
||||
AppConfig,
|
||||
APP_CONFIG,
|
||||
|
Reference in New Issue
Block a user