From 2340164394915bad302194bb0eff1e0305d1fc49 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Fri, 27 May 2022 17:21:21 +0200 Subject: [PATCH 001/246] 91874: Themed DsDynamicLookupRelationSearchTabComponent and MetadataRepresentationListComponent --- .../item-pages/project/project.component.html | 4 +- .../publication/publication.component.html | 4 +- .../untyped-item/untyped-item.component.html | 4 +- ...-metadata-representation-list.component.ts | 35 +++++++++ ...ic-lookup-relation-search-tab.component.ts | 71 +++++++++++++++++++ src/app/shared/form/form.module.ts | 2 + src/app/shared/shared.module.ts | 2 + ...etadata-representation-list.component.html | 0 .../metadata-representation-list.component.ts | 11 +++ ...-lookup-relation-search-tab.component.html | 0 ...-lookup-relation-search-tab.component.scss | 0 ...ic-lookup-relation-search-tab.component.ts | 21 ++++++ src/themes/custom/theme.module.ts | 6 +- 13 files changed, 153 insertions(+), 7 deletions(-) create mode 100644 src/app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component.ts create mode 100644 src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component.ts create mode 100644 src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.html create mode 100644 src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.ts create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.scss create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts diff --git a/src/app/entity-groups/research-entities/item-pages/project/project.component.html b/src/app/entity-groups/research-entities/item-pages/project/project.component.html index 8f2ff6adcd..515a278a85 100644 --- a/src/app/entity-groups/research-entities/item-pages/project/project.component.html +++ b/src/app/entity-groups/research-entities/item-pages/project/project.component.html @@ -20,12 +20,12 @@ - - + diff --git a/src/app/item-page/simple/item-types/publication/publication.component.html b/src/app/item-page/simple/item-types/publication/publication.component.html index bace9fcd0a..4cf0c1f185 100644 --- a/src/app/item-page/simple/item-types/publication/publication.component.html +++ b/src/app/item-page/simple/item-types/publication/publication.component.html @@ -27,12 +27,12 @@ - - + diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 04794717f1..160f716309 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -30,12 +30,12 @@ - - + diff --git a/src/app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component.ts b/src/app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component.ts new file mode 100644 index 0000000000..e7a526bb05 --- /dev/null +++ b/src/app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component.ts @@ -0,0 +1,35 @@ +import { ThemedComponent } from '../../../shared/theme-support/themed.component'; +import { MetadataRepresentationListComponent } from './metadata-representation-list.component'; +import { Component, Input } from '@angular/core'; +import { Item } from '../../../core/shared/item.model'; + +@Component({ + selector: 'ds-themed-metadata-representation-list', + styleUrls: [], + templateUrl: '../../../shared/theme-support/themed.component.html', +}) +export class ThemedMetadataRepresentationListComponent extends ThemedComponent { + protected inAndOutputNames: (keyof MetadataRepresentationListComponent & keyof this)[] = ['parentItem', 'itemType', 'metadataFields', 'label', 'incrementBy']; + + @Input() parentItem: Item; + + @Input() itemType: string; + + @Input() metadataFields: string[]; + + @Input() label: string; + + @Input() incrementBy = 10; + + protected getComponentName(): string { + return 'MetadataRepresentationListComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/item-page/simple/metadata-representation-list/metadata-representation-list.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./metadata-representation-list.component`); + } +} diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component.ts new file mode 100644 index 0000000000..da998ed5a6 --- /dev/null +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component.ts @@ -0,0 +1,71 @@ +import { ThemedComponent } from '../../../../../theme-support/themed.component'; +import { DsDynamicLookupRelationSearchTabComponent } from './dynamic-lookup-relation-search-tab.component'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { RelationshipOptions } from '../../../models/relationship-options.model'; +import { Observable } from 'rxjs'; +import { ListableObject } from '../../../../../object-collection/shared/listable-object.model'; +import { Context } from '../../../../../../core/shared/context.model'; +import { RelationshipType } from '../../../../../../core/shared/item-relationships/relationship-type.model'; +import { Item } from '../../../../../../core/shared/item.model'; +import { SearchResult } from '../../../../../search/models/search-result.model'; +import { SearchObjects } from '../../../../../search/models/search-objects.model'; +import { DSpaceObject } from '../../../../../../core/shared/dspace-object.model'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; + +@Component({ + selector: 'ds-themed-dynamic-lookup-relation-search-tab', + styleUrls: [], + templateUrl: '../../../../../theme-support/themed.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ] +}) +export class ThemedDynamicLookupRelationSearchTabComponent extends ThemedComponent { + protected inAndOutputNames: (keyof DsDynamicLookupRelationSearchTabComponent & keyof this)[] = ['relationship', 'listId', + 'query', 'repeatable', 'selection$', 'context', 'relationshipType', 'item', 'isLeft', 'toRemove', 'isEditRelationship', + 'deselectObject', 'selectObject', 'resultFound']; + + @Input() relationship: RelationshipOptions; + + @Input() listId: string; + + @Input() query: string; + + @Input() repeatable: boolean; + + @Input() selection$: Observable; + + @Input() context: Context; + + @Input() relationshipType: RelationshipType; + + @Input() item: Item; + + @Input() isLeft: boolean; + + @Input() toRemove: SearchResult[]; + + @Input() isEditRelationship: boolean; + + @Output() deselectObject: EventEmitter = new EventEmitter(); + + @Output() selectObject: EventEmitter = new EventEmitter(); + + @Output() resultFound: EventEmitter> = new EventEmitter>(); + + protected getComponentName(): string { + return 'DsDynamicLookupRelationSearchTabComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../../../themes/${themeName}/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./dynamic-lookup-relation-search-tab.component`); + } +} diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index 62ab5bd647..ae85022719 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -30,6 +30,7 @@ import { ExistingRelationListElementComponent } from './builder/ds-dynamic-form- import { ExternalSourceEntryImportModalComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/external-source-entry-import-modal/external-source-entry-import-modal.component'; import { CustomSwitchComponent } from './builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component'; import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap'; +import { ThemedDynamicLookupRelationSearchTabComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component'; const COMPONENTS = [ CustomSwitchComponent, @@ -38,6 +39,7 @@ const COMPONENTS = [ DsDynamicListComponent, DsDynamicLookupComponent, DsDynamicLookupRelationSearchTabComponent, + ThemedDynamicLookupRelationSearchTabComponent, DsDynamicLookupRelationSelectionTabComponent, DsDynamicLookupRelationExternalSourceTabComponent, DsDynamicDisabledComponent, diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 715ee66a99..b6e153db91 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -177,6 +177,7 @@ import { ScopeSelectorModalComponent } from './search-form/scope-selector-modal/ import { BitstreamRequestACopyPageComponent } from './bitstream-request-a-copy-page/bitstream-request-a-copy-page.component'; import { DsSelectComponent } from './ds-select/ds-select.component'; import { LogInOidcComponent } from './log-in/methods/oidc/log-in-oidc.component'; +import { ThemedMetadataRepresentationListComponent } from '../item-page/simple/metadata-representation-list/themed-metadata-representation-list.component'; const MODULES = [ // Do NOT include UniversalModule, HttpModule, or JsonpModule here @@ -412,6 +413,7 @@ const SHARED_ITEM_PAGE_COMPONENTS = [ ItemAlertsComponent, GenericItemPageFieldComponent, MetadataRepresentationListComponent, + ThemedMetadataRepresentationListComponent, RelatedItemsComponent, ]; diff --git a/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.html b/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.ts b/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.ts new file mode 100644 index 0000000000..8a6036a23b --- /dev/null +++ b/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.ts @@ -0,0 +1,11 @@ +import { MetadataRepresentationListComponent as BaseComponent } from '../../../../../../app/item-page/simple/metadata-representation-list/metadata-representation-list.component'; +import { Component } from '@angular/core'; + +@Component({ + selector: 'ds-metadata-representation-list', + // templateUrl: './metadata-representation-list.component.html' + templateUrl: '../../../../../../app/item-page/simple/metadata-representation-list/metadata-representation-list.component.html' +}) +export class MetadataRepresentationListComponent extends BaseComponent { + +} diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.scss b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts new file mode 100644 index 0000000000..2380cc67e8 --- /dev/null +++ b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts @@ -0,0 +1,21 @@ +import { DsDynamicLookupRelationSearchTabComponent as BaseComponent } from '../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component'; +import { Component } from '@angular/core'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../../../../app/my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../../../../app/core/shared/search/search-configuration.service'; + +@Component({ + selector: 'ds-dynamic-lookup-relation-search-tab', + // styleUrls: ['./dynamic-lookup-relation-search-tab.component.scss'], + styleUrls: ['../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.scss'], + // templateUrl: './dynamic-lookup-relation-search-tab.component.html', + templateUrl: '../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ] +}) +export class DsDynamicLookupRelationSearchTabComponent extends BaseComponent { + +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index e2e97b9087..94250b416f 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -84,6 +84,8 @@ import { SearchModule } from '../../app/shared/search/search.module'; import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; +import { MetadataRepresentationListComponent } from './app/item-page/simple/metadata-representation-list/metadata-representation-list.component'; +import { DsDynamicLookupRelationSearchTabComponent } from './app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component'; const DECLARATIONS = [ FileSectionComponent, @@ -126,7 +128,9 @@ const DECLARATIONS = [ NavbarComponent, HeaderNavbarWrapperComponent, BreadcrumbsComponent, - FeedbackComponent + FeedbackComponent, + MetadataRepresentationListComponent, + DsDynamicLookupRelationSearchTabComponent, ]; @NgModule({ From 7eaa50949df4273fa1b9fa55429a62f80b823fd4 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 30 May 2022 14:53:43 +0200 Subject: [PATCH 002/246] 90761: Themed DsDynamicLookupRelationExternalSourceTabComponent --- ...-relation-external-source-tab.component.ts | 62 +++++++++++++++++++ src/app/shared/form/form.module.ts | 2 + ...elation-external-source-tab.component.html | 0 ...elation-external-source-tab.component.scss | 0 ...-relation-external-source-tab.component.ts | 26 ++++++++ src/themes/custom/theme.module.ts | 2 + 6 files changed, 92 insertions(+) create mode 100644 src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component.ts create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.scss create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component.ts new file mode 100644 index 0000000000..f3d8421365 --- /dev/null +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component.ts @@ -0,0 +1,62 @@ +import { ThemedComponent } from '../../../../../theme-support/themed.component'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { RelationshipOptions } from '../../../models/relationship-options.model'; +import { ListableObject } from '../../../../../object-collection/shared/listable-object.model'; +import { Context } from '../../../../../../core/shared/context.model'; +import { Item } from '../../../../../../core/shared/item.model'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; +import { Collection } from '../../../../../../core/shared/collection.model'; +import { ExternalSource } from '../../../../../../core/shared/external-source.model'; +import { DsDynamicLookupRelationExternalSourceTabComponent } from './dynamic-lookup-relation-external-source-tab.component'; +import { fadeIn, fadeInOut } from '../../../../../animations/fade'; + +@Component({ + selector: 'ds-themed-dynamic-lookup-relation-external-source-tab', + styleUrls: [], + templateUrl: '../../../../../theme-support/themed.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ], + animations: [ + fadeIn, + fadeInOut + ] +}) +export class ThemedDynamicLookupRelationExternalSourceTabComponent extends ThemedComponent { + protected inAndOutputNames: (keyof DsDynamicLookupRelationExternalSourceTabComponent & keyof this)[] = ['label', 'listId', + 'item', 'collection', 'relationship', 'context', 'repeatable', 'importedObject', 'externalSource']; + + @Input() label: string; + + @Input() listId: string; + + @Input() item: Item; + + @Input() collection: Collection; + + @Input() relationship: RelationshipOptions; + + @Input() context: Context; + + @Input() repeatable: boolean; + + @Output() importedObject: EventEmitter = new EventEmitter(); + + @Input() externalSource: ExternalSource; + + protected getComponentName(): string { + return 'DsDynamicLookupRelationExternalSourceTabComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../../../themes/${themeName}/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./dynamic-lookup-relation-external-source-tab.component`); + } +} diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index ae85022719..4e9eee7e3a 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -31,6 +31,7 @@ import { ExternalSourceEntryImportModalComponent } from './builder/ds-dynamic-fo import { CustomSwitchComponent } from './builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component'; import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap'; import { ThemedDynamicLookupRelationSearchTabComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component'; +import { ThemedDynamicLookupRelationExternalSourceTabComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component'; const COMPONENTS = [ CustomSwitchComponent, @@ -42,6 +43,7 @@ const COMPONENTS = [ ThemedDynamicLookupRelationSearchTabComponent, DsDynamicLookupRelationSelectionTabComponent, DsDynamicLookupRelationExternalSourceTabComponent, + ThemedDynamicLookupRelationExternalSourceTabComponent, DsDynamicDisabledComponent, DsDynamicLookupRelationModalComponent, DsDynamicScrollableDropdownComponent, diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.scss b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts new file mode 100644 index 0000000000..569d007b4d --- /dev/null +++ b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts @@ -0,0 +1,26 @@ +import { DsDynamicLookupRelationExternalSourceTabComponent as BaseComponent } from '../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component'; +import { Component } from '@angular/core'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../../../../app/my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../../../../app/core/shared/search/search-configuration.service'; +import { fadeIn, fadeInOut } from '../../../../../../../../../app/shared/animations/fade'; + +@Component({ + selector: 'ds-dynamic-lookup-relation-external-source-tab', + // styleUrls: ['./dynamic-lookup-relation-external-source-tab.component.scss'], + styleUrls: ['../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.scss'], + // templateUrl: './dynamic-lookup-relation-external-source-tab.component.html', + templateUrl: '../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ], + animations: [ + fadeIn, + fadeInOut + ] +}) +export class DsDynamicLookupRelationExternalSourceTabComponent extends BaseComponent { + +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index 94250b416f..f37b0f820c 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -86,6 +86,7 @@ import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { MetadataRepresentationListComponent } from './app/item-page/simple/metadata-representation-list/metadata-representation-list.component'; import { DsDynamicLookupRelationSearchTabComponent } from './app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component'; +import { DsDynamicLookupRelationExternalSourceTabComponent } from './app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component'; const DECLARATIONS = [ FileSectionComponent, @@ -131,6 +132,7 @@ const DECLARATIONS = [ FeedbackComponent, MetadataRepresentationListComponent, DsDynamicLookupRelationSearchTabComponent, + DsDynamicLookupRelationExternalSourceTabComponent, ]; @NgModule({ From 86e084bf0520eaa9fb3705d76c55012884aa97d8 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 30 May 2022 16:27:28 +0200 Subject: [PATCH 003/246] 90761: themed component calls --- .../dynamic-lookup-relation-modal.component.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html index f95cd98c65..9a7aeee4d2 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html @@ -12,7 +12,7 @@
  • {{'submission.sections.describe.relationship-lookup.search-tab.tab-title.' + relationshipOptions.relationshipType | translate : { count: (totalInternal$ | async)} }} - - +
  • {{'submission.sections.describe.relationship-lookup.search-tab.tab-title.' + source.id | translate : { count: (totalExternal$ | async)[idx] } }} - - +
  • From e96954cf607ae4f1ef569b809a94c83e6ae402ee Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Thu, 1 Dec 2022 10:27:10 +0100 Subject: [PATCH 004/246] 94688: Added ThemedSearchFormComponent --- .../collection-item-mapper.component.html | 4 +- src/app/home-page/home-page.component.html | 2 +- .../item-collection-mapper.component.html | 4 +- ...elation-external-source-tab.component.html | 4 +- .../themed-search-form.component.ts | 50 +++++++++++++++++++ src/app/shared/search/search.component.html | 4 +- src/app/shared/shared.module.ts | 2 + 7 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 src/app/shared/search-form/themed-search-form.component.ts diff --git a/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.html b/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.html index 042beddc84..a48c4d15bf 100644 --- a/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.html +++ b/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.html @@ -28,14 +28,14 @@
    - - +
    diff --git a/src/app/home-page/home-page.component.html b/src/app/home-page/home-page.component.html index 1000dbe9a4..87613b56d0 100644 --- a/src/app/home-page/home-page.component.html +++ b/src/app/home-page/home-page.component.html @@ -3,7 +3,7 @@ - + diff --git a/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.html b/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.html index c779c4aafa..507e35e630 100644 --- a/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.html +++ b/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.html @@ -27,13 +27,13 @@
    - - +
    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.html b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html index dac0e03444..cf8cb56577 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html @@ -4,10 +4,10 @@
    - - +

    {{ 'submission.sections.describe.relationship-lookup.selection-tab.title.' + externalSource.id | translate}}

    diff --git a/src/app/shared/search-form/themed-search-form.component.ts b/src/app/shared/search-form/themed-search-form.component.ts new file mode 100644 index 0000000000..a8a511bd35 --- /dev/null +++ b/src/app/shared/search-form/themed-search-form.component.ts @@ -0,0 +1,50 @@ +import { Component, Input, Output, EventEmitter } from '@angular/core'; +import { ThemedComponent } from '../theme-support/themed.component'; +import { SearchFormComponent } from './search-form.component'; + +/** + * Themed wrapper for {@link SearchFormComponent} + */ +@Component({ + selector: 'ds-themed-search-form', + styleUrls: [], + templateUrl: '../../shared/theme-support/themed.component.html', +}) +export class ThemedSearchFormComponent extends ThemedComponent { + + @Input() query: string; + + @Input() inPlaceSearch; + + @Input() scope = ''; + + @Input() currentUrl: string; + + @Input() large = false; + + @Input() brandColor = 'primary'; + + @Input() searchPlaceholder: string; + + @Input() showScopeSelector = false; + + @Output() submitSearch = new EventEmitter(); + + protected inAndOutputNames: (keyof SearchFormComponent & keyof this)[] = [ + 'query', 'inPlaceSearch', 'scope', 'currentUrl', 'large', 'brandColor', 'searchPlaceholder', 'showScopeSelector', + 'submitSearch', + ]; + + protected getComponentName(): string { + return 'SearchFormComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/shared/search-form/search-form.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./search-form.component'); + } + +} diff --git a/src/app/shared/search/search.component.html b/src/app/shared/search/search.component.html index cdad62dcbd..4a601a6c4c 100644 --- a/src/app/shared/search/search.component.html +++ b/src/app/shared/search/search.component.html @@ -79,14 +79,14 @@ - - +
    diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 45e9764151..a259d15912 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -60,6 +60,7 @@ import { LoadingComponent } from './loading/loading.component'; import { PaginationComponent } from './pagination/pagination.component'; import { ThumbnailComponent } from '../thumbnail/thumbnail.component'; import { SearchFormComponent } from './search-form/search-form.component'; +import { ThemedSearchFormComponent } from './search-form/themed-search-form.component'; import { SearchResultGridElementComponent } from './object-grid/search-result-grid-element/search-result-grid-element.component'; @@ -396,6 +397,7 @@ const COMPONENTS = [ PaginationComponent, RSSComponent, SearchFormComponent, + ThemedSearchFormComponent, PageWithSidebarComponent, SidebarDropdownComponent, SidebarFilterComponent, From ba15b28c7cd65b4fd50819eecd220c88bb52d876 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Thu, 1 Dec 2022 10:28:15 +0100 Subject: [PATCH 005/246] 94688: Added themeable template of SearchFormComponent --- .../shared/search-form/search-form.component.html | 0 .../shared/search-form/search-form.component.scss | 0 .../shared/search-form/search-form.component.ts | 14 ++++++++++++++ src/themes/custom/lazy-theme.module.ts | 2 ++ 4 files changed, 16 insertions(+) create mode 100644 src/themes/custom/app/shared/search-form/search-form.component.html create mode 100644 src/themes/custom/app/shared/search-form/search-form.component.scss create mode 100644 src/themes/custom/app/shared/search-form/search-form.component.ts diff --git a/src/themes/custom/app/shared/search-form/search-form.component.html b/src/themes/custom/app/shared/search-form/search-form.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/search-form/search-form.component.scss b/src/themes/custom/app/shared/search-form/search-form.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/search-form/search-form.component.ts b/src/themes/custom/app/shared/search-form/search-form.component.ts new file mode 100644 index 0000000000..5721f8196c --- /dev/null +++ b/src/themes/custom/app/shared/search-form/search-form.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { + SearchFormComponent as BaseComponent, +} from '../../../../../app/shared/search-form/search-form.component'; + +@Component({ + selector: 'ds-search-form', + // styleUrls: ['./search-form.component.scss'], + styleUrls: ['../../../../../app/shared/search-form/search-form.component.scss'], + // templateUrl: './search-form.component.html', + templateUrl: '../../../../../app/shared/search-form/search-form.component.html', +}) +export class SearchFormComponent extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index d2ac0ae787..6d1f9157b8 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -50,6 +50,7 @@ import { BrowseBySwitcherComponent } from './app/browse-by/browse-by-switcher/br import { CommunityListPageComponent } from './app/community-list-page/community-list-page.component'; import { SearchPageComponent } from './app/search-page/search-page.component'; import { ConfigurationSearchPageComponent } from './app/search-page/configuration-search-page.component'; +import { SearchFormComponent } from './app/shared/search-form/search-form.component'; import { EndUserAgreementComponent } from './app/info/end-user-agreement/end-user-agreement.component'; import { PageNotFoundComponent } from './app/pagenotfound/pagenotfound.component'; import { ObjectNotFoundComponent } from './app/lookup-by-id/objectnotfound/objectnotfound.component'; @@ -123,6 +124,7 @@ const DECLARATIONS = [ CommunityListPageComponent, SearchPageComponent, ConfigurationSearchPageComponent, + SearchFormComponent, EndUserAgreementComponent, PageNotFoundComponent, ObjectNotFoundComponent, From 2451bbbd34bb0044056567411cc8ff386012e8be Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 21 Dec 2022 13:35:54 +0100 Subject: [PATCH 006/246] 97729: Themed ItemAlertsComponent --- .../full/full-item-page.component.html | 2 +- .../item-page/simple/item-page.component.html | 2 +- .../themed-item-alerts.component.ts | 30 +++++++++++++++++++ src/app/shared/shared.module.ts | 2 ++ .../item-alerts/item-alerts.component.html | 0 .../item-alerts/item-alerts.component.scss | 0 .../item/item-alerts/item-alerts.component.ts | 12 ++++++++ src/themes/custom/lazy-theme.module.ts | 4 +-- 8 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 src/app/shared/item/item-alerts/themed-item-alerts.component.ts create mode 100644 src/themes/custom/app/shared/item/item-alerts/item-alerts.component.html create mode 100644 src/themes/custom/app/shared/item/item-alerts/item-alerts.component.scss create mode 100644 src/themes/custom/app/shared/item/item-alerts/item-alerts.component.ts diff --git a/src/app/item-page/full/full-item-page.component.html b/src/app/item-page/full/full-item-page.component.html index ee4ead2835..9fbfa08cfd 100644 --- a/src/app/item-page/full/full-item-page.component.html +++ b/src/app/item-page/full/full-item-page.component.html @@ -1,7 +1,7 @@
    - +
    diff --git a/src/app/item-page/simple/item-page.component.html b/src/app/item-page/simple/item-page.component.html index 0fc423c195..cc9983bb35 100644 --- a/src/app/item-page/simple/item-page.component.html +++ b/src/app/item-page/simple/item-page.component.html @@ -1,7 +1,7 @@
    - + diff --git a/src/app/shared/item/item-alerts/themed-item-alerts.component.ts b/src/app/shared/item/item-alerts/themed-item-alerts.component.ts new file mode 100644 index 0000000000..a650699984 --- /dev/null +++ b/src/app/shared/item/item-alerts/themed-item-alerts.component.ts @@ -0,0 +1,30 @@ +import { Component, Input } from '@angular/core'; +import { Item } from '../../../core/shared/item.model'; +import { ItemAlertsComponent } from './item-alerts.component'; +import { ThemedComponent } from '../../theme-support/themed.component'; + +/** + * Themed wrapper for {@link ItemAlertsComponent} + */ +@Component({ + selector: 'ds-themed-item-alerts', + styleUrls: [], + templateUrl: '../../theme-support/themed.component.html', +}) +export class ThemedItemAlertsComponent extends ThemedComponent { + protected inAndOutputNames: (keyof ItemAlertsComponent & keyof this)[] = ['item']; + + @Input() item: Item; + + protected getComponentName(): string { + return 'ItemAlertsComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/shared/item/item-alerts/item-alerts.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./item-alerts.component'); + } +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 45e9764151..342077eb05 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -324,6 +324,7 @@ import { } from '../item-page/simple/field-components/specific-field/title/item-page-title-field.component'; import { MarkdownPipe } from './utils/markdown.pipe'; import { GoogleRecaptchaModule } from '../core/google-recaptcha/google-recaptcha.module'; +import { ThemedItemAlertsComponent } from './item/item-alerts/themed-item-alerts.component'; const MODULES = [ CommonModule, @@ -587,6 +588,7 @@ const SHARED_ITEM_PAGE_COMPONENTS = [ DsoPageVersionButtonComponent, PersonPageClaimButtonComponent, ItemAlertsComponent, + ThemedItemAlertsComponent, GenericItemPageFieldComponent, MetadataRepresentationListComponent, RelatedItemsComponent, diff --git a/src/themes/custom/app/shared/item/item-alerts/item-alerts.component.html b/src/themes/custom/app/shared/item/item-alerts/item-alerts.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/item/item-alerts/item-alerts.component.scss b/src/themes/custom/app/shared/item/item-alerts/item-alerts.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/item/item-alerts/item-alerts.component.ts b/src/themes/custom/app/shared/item/item-alerts/item-alerts.component.ts new file mode 100644 index 0000000000..3b63a1e69d --- /dev/null +++ b/src/themes/custom/app/shared/item/item-alerts/item-alerts.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +import { ItemAlertsComponent as BaseComponent } from '../../../../../../app/shared/item/item-alerts/item-alerts.component'; + +@Component({ + selector: 'ds-item-alerts', + // templateUrl: './item-alerts.component.html', + templateUrl: '../../../../../../app/shared/item/item-alerts/item-alerts.component.html', + // styleUrls: ['./item-alerts.component.scss'], + styleUrls: ['../../../../../../app/shared/item/item-alerts/item-alerts.component.scss'], +}) +export class ItemAlertsComponent extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index d2ac0ae787..3a76150621 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -114,6 +114,7 @@ import { ObjectListComponent } from './app/shared/object-list/object-list.compon import { BrowseByMetadataPageComponent } from './app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component'; import { BrowseByDatePageComponent } from './app/browse-by/browse-by-date-page/browse-by-date-page.component'; import { BrowseByTitlePageComponent } from './app/browse-by/browse-by-title-page/browse-by-title-page.component'; +import { ItemAlertsComponent } from './app/shared/item/item-alerts/item-alerts.component'; const DECLARATIONS = [ FileSectionComponent, @@ -168,8 +169,7 @@ const DECLARATIONS = [ BrowseByMetadataPageComponent, BrowseByDatePageComponent, BrowseByTitlePageComponent, - - + ItemAlertsComponent, ]; @NgModule({ From 9979d8664d4562e5f79c4cabec711ff66f8f02e0 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 11 Jan 2023 10:27:30 +0100 Subject: [PATCH 007/246] Made SearchFiltersComponent themeable --- .../themed-search-filters.component.ts | 35 +++++++++++++++++++ .../search-sidebar.component.html | 4 +-- src/app/shared/search/search.module.ts | 4 ++- .../search-filters.component.html | 1 + .../search-filters.component.scss | 0 .../search-filters.component.ts | 32 +++++++++++++++++ src/themes/custom/theme.module.ts | 4 ++- 7 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 src/app/shared/search/search-filters/themed-search-filters.component.ts create mode 100644 src/themes/custom/app/shared/search/search-filters/search-filters.component.html create mode 100644 src/themes/custom/app/shared/search/search-filters/search-filters.component.scss create mode 100644 src/themes/custom/app/shared/search/search-filters/search-filters.component.ts diff --git a/src/app/shared/search/search-filters/themed-search-filters.component.ts b/src/app/shared/search/search-filters/themed-search-filters.component.ts new file mode 100644 index 0000000000..7bf2d3d0ac --- /dev/null +++ b/src/app/shared/search/search-filters/themed-search-filters.component.ts @@ -0,0 +1,35 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../theme-support/themed.component'; +import { SearchFiltersComponent } from './search-filters.component'; +import { Observable } from 'rxjs/internal/Observable'; + +/** + * Themed wrapper for SearchFiltersComponent + */ +@Component({ + selector: 'ds-themed-search-filters', + styleUrls: [], + templateUrl: '../../theme-support/themed.component.html', +}) +export class ThemedSearchFiltersComponent extends ThemedComponent { + + @Input() currentConfiguration; + @Input() currentScope: string; + @Input() inPlaceSearch; + @Input() refreshFilters: Observable; + + protected inAndOutputNames: (keyof SearchFiltersComponent & keyof this)[] = [ + 'currentConfiguration', 'currentScope', 'inPlaceSearch', 'refreshFilters']; + + protected getComponentName(): string { + return 'SearchFiltersComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/shared/search/search-filters/search-filters.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./search-filters.component'); + } +} diff --git a/src/app/shared/search/search-sidebar/search-sidebar.component.html b/src/app/shared/search/search-sidebar/search-sidebar.component.html index e17fe941ba..de89001999 100644 --- a/src/app/shared/search/search-sidebar/search-sidebar.component.html +++ b/src/app/shared/search/search-sidebar/search-sidebar.component.html @@ -17,10 +17,10 @@ [defaultConfiguration]="configuration" [inPlaceSearch]="inPlaceSearch" (changeConfiguration)="changeConfiguration.emit($event)"> - + [inPlaceSearch]="inPlaceSearch">
    diff --git a/src/app/shared/search/search.module.ts b/src/app/shared/search/search.module.ts index 797d35d88f..6bbe4baab1 100644 --- a/src/app/shared/search/search.module.ts +++ b/src/app/shared/search/search.module.ts @@ -29,6 +29,7 @@ import { SharedModule } from '../shared.module'; import { SearchResultsComponent } from './search-results/search-results.component'; import { SearchComponent } from './search.component'; import { ThemedSearchComponent } from './themed-search.component'; +import { ThemedSearchFiltersComponent } from './search-filters/themed-search-filters.component'; const COMPONENTS = [ SearchComponent, @@ -52,7 +53,8 @@ const COMPONENTS = [ SearchAuthorityFilterComponent, SearchSwitchConfigurationComponent, ConfigurationSearchPageComponent, - ThemedConfigurationSearchPageComponent + ThemedConfigurationSearchPageComponent, + ThemedSearchFiltersComponent, ]; const ENTRY_COMPONENTS = [ diff --git a/src/themes/custom/app/shared/search/search-filters/search-filters.component.html b/src/themes/custom/app/shared/search/search-filters/search-filters.component.html new file mode 100644 index 0000000000..2a02d41ce2 --- /dev/null +++ b/src/themes/custom/app/shared/search/search-filters/search-filters.component.html @@ -0,0 +1 @@ +TEST diff --git a/src/themes/custom/app/shared/search/search-filters/search-filters.component.scss b/src/themes/custom/app/shared/search/search-filters/search-filters.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/search/search-filters/search-filters.component.ts b/src/themes/custom/app/shared/search/search-filters/search-filters.component.ts new file mode 100644 index 0000000000..ad3ec93383 --- /dev/null +++ b/src/themes/custom/app/shared/search/search-filters/search-filters.component.ts @@ -0,0 +1,32 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE_ATMIRE and NOTICE_ATMIRE files at the root of the source + * tree and available online at + * + * https://www.atmire.com/software-license/ + */ +import { Component } from '@angular/core'; +import { + SearchFiltersComponent as BaseComponent, +} from '../../../../../../app/shared/search/search-filters/search-filters.component'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../app/my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../app/core/shared/search/search-configuration.service'; + + +@Component({ + selector: 'ds-search-filters', + // styleUrls: ['./search-filters.component.scss'], + styleUrls: ['../../../../../../app/shared/search/search-filters/search-filters.component.scss'], + // templateUrl: './search-filters.component.html', + templateUrl: '../../../../../../app/shared/search/search-filters/search-filters.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ] + +}) + +export class SearchFiltersComponent extends BaseComponent { +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index e2e97b9087..fba0ce894a 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -84,6 +84,7 @@ import { SearchModule } from '../../app/shared/search/search.module'; import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; +import { SearchFiltersComponent } from './app/shared/search/search-filters/search-filters.component'; const DECLARATIONS = [ FileSectionComponent, @@ -126,7 +127,8 @@ const DECLARATIONS = [ NavbarComponent, HeaderNavbarWrapperComponent, BreadcrumbsComponent, - FeedbackComponent + FeedbackComponent, + SearchFiltersComponent, ]; @NgModule({ From 9fdac08c678b5f19e0521ffc6f55ccc26091c504 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 11 Jan 2023 10:53:32 +0100 Subject: [PATCH 008/246] removed unnecessary text in html file --- .../shared/search/search-filters/search-filters.component.html | 1 - 1 file changed, 1 deletion(-) diff --git a/src/themes/custom/app/shared/search/search-filters/search-filters.component.html b/src/themes/custom/app/shared/search/search-filters/search-filters.component.html index 2a02d41ce2..e69de29bb2 100644 --- a/src/themes/custom/app/shared/search/search-filters/search-filters.component.html +++ b/src/themes/custom/app/shared/search/search-filters/search-filters.component.html @@ -1 +0,0 @@ -TEST From 7926277acdf4389244b0447dc7348a7d668ab772 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 11 Jan 2023 11:24:42 +0100 Subject: [PATCH 009/246] added new input to ThemedSearchFiltersComponent --- .../search/search-filters/themed-search-filters.component.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/shared/search/search-filters/themed-search-filters.component.ts b/src/app/shared/search/search-filters/themed-search-filters.component.ts index 7bf2d3d0ac..a9a9c10e51 100644 --- a/src/app/shared/search/search-filters/themed-search-filters.component.ts +++ b/src/app/shared/search/search-filters/themed-search-filters.component.ts @@ -2,6 +2,8 @@ import { Component, Input } from '@angular/core'; import { ThemedComponent } from '../../theme-support/themed.component'; import { SearchFiltersComponent } from './search-filters.component'; import { Observable } from 'rxjs/internal/Observable'; +import { RemoteData } from '../../../core/data/remote-data'; +import { SearchFilterConfig } from '../models/search-filter-config.model'; /** * Themed wrapper for SearchFiltersComponent @@ -17,9 +19,10 @@ export class ThemedSearchFiltersComponent extends ThemedComponent; + @Input() filters: Observable>; protected inAndOutputNames: (keyof SearchFiltersComponent & keyof this)[] = [ - 'currentConfiguration', 'currentScope', 'inPlaceSearch', 'refreshFilters']; + 'filters', 'currentConfiguration', 'currentScope', 'inPlaceSearch', 'refreshFilters']; protected getComponentName(): string { return 'SearchFiltersComponent'; From cb982d6552adbb676a7653984e82d4b2e928b1c8 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 11 Jan 2023 14:46:37 +0100 Subject: [PATCH 010/246] Made SearchSidebarComponent themeable --- .../themed-search-sidebar.component.ts | 51 +++++++++++++++++++ src/app/shared/search/search.module.ts | 2 + .../search-sidebar.component.html | 0 .../search-sidebar.component.scss | 0 .../search-sidebar.component.ts | 32 ++++++++++++ src/themes/custom/theme.module.ts | 2 + 6 files changed, 87 insertions(+) create mode 100644 src/app/shared/search/search-sidebar/themed-search-sidebar.component.ts create mode 100644 src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.html create mode 100644 src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.scss create mode 100644 src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.ts diff --git a/src/app/shared/search/search-sidebar/themed-search-sidebar.component.ts b/src/app/shared/search/search-sidebar/themed-search-sidebar.component.ts new file mode 100644 index 0000000000..470c947162 --- /dev/null +++ b/src/app/shared/search/search-sidebar/themed-search-sidebar.component.ts @@ -0,0 +1,51 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { ThemedComponent } from '../../theme-support/themed.component'; +import { SearchSidebarComponent } from './search-sidebar.component'; +import { SearchConfigurationOption } from '../search-switch-configuration/search-configuration-option.model'; +import { SortOptions } from '../../../core/cache/models/sort-options.model'; +import { ViewMode } from '../../../core/shared/view-mode.model'; +import { PaginatedSearchOptions } from '../models/paginated-search-options.model'; +import { Observable } from 'rxjs'; + +/** + * Themed wrapper for SearchSidebarComponent + */ +@Component({ + selector: 'ds-themed-search-sidebar', + styleUrls: [], + templateUrl: '../../theme-support/themed.component.html', +}) +export class ThemedSearchSidebarComponent extends ThemedComponent { + + @Input() configuration; + @Input() configurationList: SearchConfigurationOption[]; + @Input() currentScope: string; + @Input() currentSortOption: SortOptions; + @Input() resultCount; + @Input() viewModeList: ViewMode[]; + @Input() showViewModes = true; + @Input() inPlaceSearch; + @Input() searchOptions: PaginatedSearchOptions; + @Input() sortOptionsList: SortOptions[]; + @Input() refreshFilters: Observable; + @Output() toggleSidebar = new EventEmitter(); + @Output() changeConfiguration: EventEmitter = new EventEmitter(); + @Output() changeViewMode: EventEmitter = new EventEmitter(); + + protected inAndOutputNames: (keyof SearchSidebarComponent & keyof this)[] = [ + 'configuration', 'configurationList', 'currentScope', 'currentSortOption', + 'resultCount', 'viewModeList', 'showViewModes', 'inPlaceSearch', + 'searchOptions', 'sortOptionsList', 'refreshFilters', 'toggleSidebar', 'changeConfiguration', 'changeViewMode']; + + protected getComponentName(): string { + return 'SearchSidebarComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/shared/search/search-sidebar/search-sidebar.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./search-sidebar.component'); + } +} diff --git a/src/app/shared/search/search.module.ts b/src/app/shared/search/search.module.ts index 6bbe4baab1..be7fb0b044 100644 --- a/src/app/shared/search/search.module.ts +++ b/src/app/shared/search/search.module.ts @@ -30,6 +30,7 @@ import { SearchResultsComponent } from './search-results/search-results.componen import { SearchComponent } from './search.component'; import { ThemedSearchComponent } from './themed-search.component'; import { ThemedSearchFiltersComponent } from './search-filters/themed-search-filters.component'; +import { ThemedSearchSidebarComponent } from './search-sidebar/themed-search-sidebar.component'; const COMPONENTS = [ SearchComponent, @@ -55,6 +56,7 @@ const COMPONENTS = [ ConfigurationSearchPageComponent, ThemedConfigurationSearchPageComponent, ThemedSearchFiltersComponent, + ThemedSearchSidebarComponent, ]; const ENTRY_COMPONENTS = [ diff --git a/src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.html b/src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.scss b/src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.ts b/src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.ts new file mode 100644 index 0000000000..aed31b91e2 --- /dev/null +++ b/src/themes/custom/app/shared/search/search-sidebar/search-sidebar.component.ts @@ -0,0 +1,32 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE_ATMIRE and NOTICE_ATMIRE files at the root of the source + * tree and available online at + * + * https://www.atmire.com/software-license/ + */ +import { Component } from '@angular/core'; +import { + SearchSidebarComponent as BaseComponent, +} from '../../../../../../app/shared/search/search-sidebar/search-sidebar.component'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../app/my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../app/core/shared/search/search-configuration.service'; + + +@Component({ + selector: 'ds-search-sidebar', + // styleUrls: ['./search-sidebar.component.scss'], + styleUrls: ['../../../../../../app/shared/search/search-sidebar/search-sidebar.component.scss'], + // templateUrl: './search-sidebar.component.html', + templateUrl: '../../../../../../app/shared/search/search-sidebar/search-sidebar.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ] + +}) + +export class SearchSidebarComponent extends BaseComponent { +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index fba0ce894a..1ab61cbc42 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -85,6 +85,7 @@ import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resou import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { SearchFiltersComponent } from './app/shared/search/search-filters/search-filters.component'; +import { SearchSidebarComponent } from './app/shared/search/search-sidebar/search-sidebar.component'; const DECLARATIONS = [ FileSectionComponent, @@ -129,6 +130,7 @@ const DECLARATIONS = [ BreadcrumbsComponent, FeedbackComponent, SearchFiltersComponent, + SearchSidebarComponent, ]; @NgModule({ From bcb27f666aa6994eac44be286b10b2d4834603f5 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 11 Jan 2023 15:14:19 +0100 Subject: [PATCH 011/246] replace ds-search-sidebar with ds-themed-search-sidebar --- src/app/shared/search/search.component.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/shared/search/search.component.html b/src/app/shared/search/search.component.html index c292c94c44..ce37f054eb 100644 --- a/src/app/shared/search/search.component.html +++ b/src/app/shared/search/search.component.html @@ -44,7 +44,7 @@ - - + - + From 660a6dbd56b46a5e7745c53f9b88ce178c0107f2 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Thu, 19 Jan 2023 13:52:57 +0100 Subject: [PATCH 012/246] 98661: Created themeable FullFileSectionComponent --- .../themed-full-file-section.component.ts | 32 +++++++++++++++++++ .../full/full-item-page.component.html | 2 +- src/app/item-page/item-page.module.ts | 4 +++ .../full-file-section.component.html | 0 .../full-file-section.component.scss | 0 .../full-file-section.component.ts | 14 ++++++++ src/themes/custom/theme.module.ts | 6 +++- 7 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/app/item-page/full/field-components/file-section/themed-full-file-section.component.ts create mode 100644 src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.html create mode 100644 src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.scss create mode 100644 src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.ts diff --git a/src/app/item-page/full/field-components/file-section/themed-full-file-section.component.ts b/src/app/item-page/full/field-components/file-section/themed-full-file-section.component.ts new file mode 100644 index 0000000000..015eec285c --- /dev/null +++ b/src/app/item-page/full/field-components/file-section/themed-full-file-section.component.ts @@ -0,0 +1,32 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../../shared/theme-support/themed.component'; +import { FullFileSectionComponent } from './full-file-section.component'; +import { Item } from '../../../../core/shared/item.model'; + +/** + * Themed wrapper for {@link FullFileSectionComponent} + */ +@Component({ + selector: 'ds-themed-item-page-full-file-section', + styleUrls: [], + templateUrl: './../../../../shared/theme-support/themed.component.html', +}) +export class ThemedFullFileSectionComponent extends ThemedComponent { + + @Input() item: Item; + + protected inAndOutputNames: (keyof FullFileSectionComponent & keyof this)[] = ['item']; + + protected getComponentName(): string { + return 'FullFileSectionComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/item-page/full/field-components/file-section/full-file-section.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./full-file-section.component'); + } + +} diff --git a/src/app/item-page/full/full-item-page.component.html b/src/app/item-page/full/full-item-page.component.html index d2655c4ad0..45a473e532 100644 --- a/src/app/item-page/full/full-item-page.component.html +++ b/src/app/item-page/full/full-item-page.component.html @@ -26,7 +26,7 @@ - +
    diff --git a/src/app/item-page/item-page.module.ts b/src/app/item-page/item-page.module.ts index 80cb1f61a2..d07ab678a7 100644 --- a/src/app/item-page/item-page.module.ts +++ b/src/app/item-page/item-page.module.ts @@ -34,6 +34,9 @@ import { MiradorViewerComponent } from './mirador-viewer/mirador-viewer.componen import { VersionPageComponent } from './version-page/version-page/version-page.component'; import { VersionedItemComponent } from './simple/item-types/versioned-item/versioned-item.component'; import { ThemedFileSectionComponent } from './simple/field-components/file-section/themed-file-section.component'; +import { + ThemedFullFileSectionComponent +} from './full/field-components/file-section/themed-full-file-section.component'; const ENTRY_COMPONENTS = [ @@ -57,6 +60,7 @@ const DECLARATIONS = [ ItemPageFieldComponent, CollectionsComponent, FullFileSectionComponent, + ThemedFullFileSectionComponent, PublicationComponent, UntypedItemComponent, ItemComponent, diff --git a/src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.html b/src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.scss b/src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.ts b/src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.ts new file mode 100644 index 0000000000..39c27b7350 --- /dev/null +++ b/src/themes/custom/app/item-page/full/field-components/file-section/full-file-section.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { + FullFileSectionComponent as BaseComponent +} from '../../../../../../../app/item-page/full/field-components/file-section/full-file-section.component'; + +@Component({ + selector: 'ds-item-page-full-file-section', + // styleUrls: ['./full-file-section.component.scss'], + styleUrls: ['../../../../../../../app/item-page/full/field-components/file-section/full-file-section.component.scss'], + // templateUrl: './full-file-section.component.html', + templateUrl: '../../../../../../../app/item-page/full/field-components/file-section/full-file-section.component.html', +}) +export class FullFileSectionComponent extends BaseComponent { +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index e2e97b9087..bb9e59f48d 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -84,6 +84,9 @@ import { SearchModule } from '../../app/shared/search/search.module'; import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; +import { + FullFileSectionComponent +} from './app/item-page/full/field-components/file-section/full-file-section.component'; const DECLARATIONS = [ FileSectionComponent, @@ -126,7 +129,8 @@ const DECLARATIONS = [ NavbarComponent, HeaderNavbarWrapperComponent, BreadcrumbsComponent, - FeedbackComponent + FeedbackComponent, + FullFileSectionComponent, ]; @NgModule({ From 6114337660de2c8154402de7185d3064d9c3192f Mon Sep 17 00:00:00 2001 From: lotte Date: Mon, 23 Jan 2023 12:16:05 +0100 Subject: [PATCH 013/246] Split up process module to be importable --- .../process-page-shared.module.ts | 49 +++++++++++++++++++ src/app/process-page/process-page.module.ts | 18 +------ 2 files changed, 51 insertions(+), 16 deletions(-) create mode 100644 src/app/process-page/process-page-shared.module.ts diff --git a/src/app/process-page/process-page-shared.module.ts b/src/app/process-page/process-page-shared.module.ts new file mode 100644 index 0000000000..efa154f26b --- /dev/null +++ b/src/app/process-page/process-page-shared.module.ts @@ -0,0 +1,49 @@ +import { NgModule } from '@angular/core'; +import { SharedModule } from '../shared/shared.module'; +import { ProcessPageRoutingModule } from './process-page-routing.module'; +import { NewProcessComponent } from './new/new-process.component'; +import { ScriptsSelectComponent } from './form/scripts-select/scripts-select.component'; +import { ScriptHelpComponent } from './form/script-help/script-help.component'; +import { ParameterSelectComponent } from './form/process-parameters/parameter-select/parameter-select.component'; +import { ProcessParametersComponent } from './form/process-parameters/process-parameters.component'; +import { StringValueInputComponent } from './form/process-parameters/parameter-value-input/string-value-input/string-value-input.component'; +import { ParameterValueInputComponent } from './form/process-parameters/parameter-value-input/parameter-value-input.component'; +import { FileValueInputComponent } from './form/process-parameters/parameter-value-input/file-value-input/file-value-input.component'; +import { BooleanValueInputComponent } from './form/process-parameters/parameter-value-input/boolean-value-input/boolean-value-input.component'; +import { DateValueInputComponent } from './form/process-parameters/parameter-value-input/date-value-input/date-value-input.component'; +import { ProcessOverviewComponent } from './overview/process-overview.component'; +import { ProcessDetailComponent } from './detail/process-detail.component'; +import { ProcessDetailFieldComponent } from './detail/process-detail-field/process-detail-field.component'; +import { ProcessBreadcrumbsService } from './process-breadcrumbs.service'; +import { ProcessBreadcrumbResolver } from './process-breadcrumb.resolver'; +import { ProcessFormComponent } from './form/process-form.component'; + +@NgModule({ + imports: [ + SharedModule, + ], + declarations: [ + NewProcessComponent, + ScriptsSelectComponent, + ScriptHelpComponent, + ParameterSelectComponent, + ProcessParametersComponent, + StringValueInputComponent, + ParameterValueInputComponent, + FileValueInputComponent, + BooleanValueInputComponent, + DateValueInputComponent, + ProcessOverviewComponent, + ProcessDetailComponent, + ProcessDetailFieldComponent, + ProcessFormComponent + ], + providers: [ + ProcessBreadcrumbResolver, + ProcessBreadcrumbsService + ] +}) + +export class ProcessPageSharedModule { + +} diff --git a/src/app/process-page/process-page.module.ts b/src/app/process-page/process-page.module.ts index ebe03e4537..471b55cf46 100644 --- a/src/app/process-page/process-page.module.ts +++ b/src/app/process-page/process-page.module.ts @@ -17,31 +17,17 @@ import { ProcessDetailFieldComponent } from './detail/process-detail-field/proce import { ProcessBreadcrumbsService } from './process-breadcrumbs.service'; import { ProcessBreadcrumbResolver } from './process-breadcrumb.resolver'; import { ProcessFormComponent } from './form/process-form.component'; +import { ProcessPageSharedModule } from './process-page-shared.module'; @NgModule({ imports: [ ProcessPageRoutingModule, SharedModule, + ProcessPageSharedModule, ], declarations: [ - NewProcessComponent, - ScriptsSelectComponent, - ScriptHelpComponent, - ParameterSelectComponent, - ProcessParametersComponent, - StringValueInputComponent, - ParameterValueInputComponent, - FileValueInputComponent, - BooleanValueInputComponent, - DateValueInputComponent, - ProcessOverviewComponent, - ProcessDetailComponent, - ProcessDetailFieldComponent, - ProcessFormComponent ], providers: [ - ProcessBreadcrumbResolver, - ProcessBreadcrumbsService ] }) From a4679ca7e54f1f2e4383f2e610713259d55095db Mon Sep 17 00:00:00 2001 From: lotte Date: Mon, 23 Jan 2023 12:33:01 +0100 Subject: [PATCH 014/246] Made ListableObjectComponentLoaderComponent themeable --- ...-search-result-list-element.component.html | 4 +- ...admin-workflow-list-element.component.html | 4 +- .../item-delete/item-delete.component.html | 8 ++-- .../edit-relationship.component.html | 4 +- .../virtual-metadata.component.html | 4 +- .../item-page/simple/item-page.component.html | 2 +- .../related-items.component.html | 4 +- .../related-items.component.spec.ts | 2 +- .../shared/browse-by/browse-by.component.html | 2 +- .../dso-selector/dso-selector.component.html | 4 +- ...sting-relation-list-element.component.html | 2 +- .../dso-input-suggestions.component.html | 2 +- ...table-object-component-loader.component.ts | 43 +++++++++++++++++++ .../object-detail.component.html | 2 +- .../object-grid/object-grid.component.html | 2 +- .../item-metadata-list-element.component.html | 2 +- ...em-metadata-list-element.component.spec.ts | 2 +- .../object-list/object-list.component.html | 4 +- src/app/shared/shared.module.ts | 2 + ...ble-object-component-loader.component.html | 0 ...ble-object-component-loader.component.scss | 0 ...table-object-component-loader.component.ts | 13 ++++++ src/themes/custom/theme.module.ts | 2 + 23 files changed, 87 insertions(+), 27 deletions(-) create mode 100644 src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts create mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html create mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss create mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html index 259512552c..b34868f736 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html @@ -1,7 +1,7 @@ - + [hideBadges]="true"> diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html index 192cc751f2..909882361a 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html @@ -1,10 +1,10 @@
    {{ "admin.workflow.item.workflow" | translate }}
    - + [listID]="listID"> diff --git a/src/app/item-page/edit-item-page/item-delete/item-delete.component.html b/src/app/item-page/edit-item-page/item-delete/item-delete.component.html index df50e13b48..fb8acb61f3 100644 --- a/src/app/item-page/edit-item-page/item-delete/item-delete.component.html +++ b/src/app/item-page/edit-item-page/item-delete/item-delete.component.html @@ -31,11 +31,11 @@ class="d-flex flex-row"> - - +
  • diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 7b799bfaea..77681f1d63 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -173,6 +173,7 @@ import { BitstreamRequestACopyPageComponent } from './bitstream-request-a-copy-p import { DsSelectComponent } from './ds-select/ds-select.component'; import { LogInOidcComponent } from './log-in/methods/oidc/log-in-oidc.component'; import { ThemedItemListPreviewComponent } from './object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component'; +import { ThemedListableObjectComponentLoaderComponent } from './object-collection/shared/listable-object/themed-listable-object-component-loader.component'; const MODULES = [ // Do NOT include UniversalModule, HttpModule, or JsonpModule here @@ -286,6 +287,7 @@ const COMPONENTS = [ CommunitySearchResultGridElementComponent, PageSizeSelectorComponent, ListableObjectComponentLoaderComponent, + ThemedListableObjectComponentLoaderComponent, CollectionListElementComponent, CommunityListElementComponent, CollectionGridElementComponent, diff --git a/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html b/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss b/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts new file mode 100644 index 0000000000..49d79a7cbd --- /dev/null +++ b/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { ListableObjectComponentLoaderComponent as BaseComponent } from 'src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component'; + +@Component({ + selector: 'ds-listable-object-component-loader', + // styleUrls: ['./listable-object-component-loader.component.scss'], + styleUrls: ['../../../../../../../app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss'], + // templateUrl: './listable-object-component-loader.component.html' + templateUrl: '../../../../../../../app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html' +}) + +export class ListableObjectComponentLoaderComponent extends BaseComponent { +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index 1ab61cbc42..619bf44979 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -86,6 +86,7 @@ import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { SearchFiltersComponent } from './app/shared/search/search-filters/search-filters.component'; import { SearchSidebarComponent } from './app/shared/search/search-sidebar/search-sidebar.component'; +import { ListableObjectComponentLoaderComponent } from './app/shared/object-collection/shared/listable-object/listable-object-component-loader.component'; const DECLARATIONS = [ FileSectionComponent, @@ -131,6 +132,7 @@ const DECLARATIONS = [ FeedbackComponent, SearchFiltersComponent, SearchSidebarComponent, + ListableObjectComponentLoaderComponent ]; @NgModule({ From ff98a9bcd8a24da67fd13c6d64e63b46f525adcf Mon Sep 17 00:00:00 2001 From: lotte Date: Mon, 23 Jan 2023 13:32:25 +0100 Subject: [PATCH 015/246] Fixed ThemedListableObjectComponentLoader --- .../themed-listable-object-component-loader.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts index d2c50e22c9..44836fe2fc 100644 --- a/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts @@ -7,12 +7,12 @@ import { Context } from '../../../../core/shared/context.model'; import { CollectionElementLinkType } from '../../collection-element-link.type'; /** - * Themed wrapper for SearchComponent + * Themed wrapper for ListableObjectComponentLoaderComponent */ @Component({ selector: 'ds-themed-listable-object-component-loader', styleUrls: [], - templateUrl: '../theme-support/themed.component.html', + templateUrl: '../../../theme-support/themed.component.html', }) export class ThemedListableObjectComponentLoaderComponent extends ThemedComponent { protected inAndOutputNames: (keyof ListableObjectComponentLoaderComponent & keyof this)[] = [ @@ -34,7 +34,7 @@ export class ThemedListableObjectComponentLoaderComponent extends ThemedComponen } protected importThemedComponent(themeName: string): Promise { - return import(`../../../themes/${themeName}/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component`); + return import(`../../../../../themes/${themeName}/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component`); } protected importUnthemedComponent(): Promise { From 4682507b25b918c99bb513cec3a5125e4f7df250 Mon Sep 17 00:00:00 2001 From: lotte Date: Mon, 23 Jan 2023 13:48:30 +0100 Subject: [PATCH 016/246] Fixed in/outputs that changed for themed components --- .../search-filters/themed-search-filters.component.ts | 5 ++++- .../search-sidebar/themed-search-sidebar.component.ts | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/app/shared/search/search-filters/themed-search-filters.component.ts b/src/app/shared/search/search-filters/themed-search-filters.component.ts index 7bf2d3d0ac..a9a9c10e51 100644 --- a/src/app/shared/search/search-filters/themed-search-filters.component.ts +++ b/src/app/shared/search/search-filters/themed-search-filters.component.ts @@ -2,6 +2,8 @@ import { Component, Input } from '@angular/core'; import { ThemedComponent } from '../../theme-support/themed.component'; import { SearchFiltersComponent } from './search-filters.component'; import { Observable } from 'rxjs/internal/Observable'; +import { RemoteData } from '../../../core/data/remote-data'; +import { SearchFilterConfig } from '../models/search-filter-config.model'; /** * Themed wrapper for SearchFiltersComponent @@ -17,9 +19,10 @@ export class ThemedSearchFiltersComponent extends ThemedComponent; + @Input() filters: Observable>; protected inAndOutputNames: (keyof SearchFiltersComponent & keyof this)[] = [ - 'currentConfiguration', 'currentScope', 'inPlaceSearch', 'refreshFilters']; + 'filters', 'currentConfiguration', 'currentScope', 'inPlaceSearch', 'refreshFilters']; protected getComponentName(): string { return 'SearchFiltersComponent'; diff --git a/src/app/shared/search/search-sidebar/themed-search-sidebar.component.ts b/src/app/shared/search/search-sidebar/themed-search-sidebar.component.ts index 470c947162..935f797532 100644 --- a/src/app/shared/search/search-sidebar/themed-search-sidebar.component.ts +++ b/src/app/shared/search/search-sidebar/themed-search-sidebar.component.ts @@ -5,7 +5,9 @@ import { SearchConfigurationOption } from '../search-switch-configuration/search import { SortOptions } from '../../../core/cache/models/sort-options.model'; import { ViewMode } from '../../../core/shared/view-mode.model'; import { PaginatedSearchOptions } from '../models/paginated-search-options.model'; -import { Observable } from 'rxjs'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { RemoteData } from '../../../core/data/remote-data'; +import { SearchFilterConfig } from '../models/search-filter-config.model'; /** * Themed wrapper for SearchSidebarComponent @@ -21,20 +23,21 @@ export class ThemedSearchSidebarComponent extends ThemedComponent>; @Input() resultCount; @Input() viewModeList: ViewMode[]; @Input() showViewModes = true; @Input() inPlaceSearch; @Input() searchOptions: PaginatedSearchOptions; @Input() sortOptionsList: SortOptions[]; - @Input() refreshFilters: Observable; + @Input() refreshFilters: BehaviorSubject; @Output() toggleSidebar = new EventEmitter(); @Output() changeConfiguration: EventEmitter = new EventEmitter(); @Output() changeViewMode: EventEmitter = new EventEmitter(); protected inAndOutputNames: (keyof SearchSidebarComponent & keyof this)[] = [ 'configuration', 'configurationList', 'currentScope', 'currentSortOption', - 'resultCount', 'viewModeList', 'showViewModes', 'inPlaceSearch', + 'resultCount', 'filters', 'viewModeList', 'showViewModes', 'inPlaceSearch', 'searchOptions', 'sortOptionsList', 'refreshFilters', 'toggleSidebar', 'changeConfiguration', 'changeViewMode']; protected getComponentName(): string { From 85562679a2f488983e18619859910f6071e73ada Mon Sep 17 00:00:00 2001 From: lotte Date: Mon, 23 Jan 2023 16:54:16 +0100 Subject: [PATCH 017/246] Refactored item list badges --- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...table-object-component-loader.component.ts | 25 ------ ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- .../object-list/badges/badges.component.html | 6 ++ .../object-list/badges/badges.component.scss | 0 .../badges/badges.component.spec.ts | 25 ++++++ .../object-list/badges/badges.component.ts | 11 +++ .../status-badge/status-badge.component.html | 6 ++ .../status-badge.component.spec.ts | 78 +++++++++++++++++++ .../status-badge/status-badge.component.ts | 41 ++++++++++ .../themed-status-badge.component.ts | 31 ++++++++ .../badges/themed-badges.component.ts | 32 ++++++++ .../type-badge/themed-type-badge.component.ts | 31 ++++++++ .../type-badge/type-badge.component.html | 4 +- .../type-badge/type-badge.component.spec.ts | 4 +- .../type-badge/type-badge.component.ts | 6 +- .../item-list-preview.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- src/app/shared/shared.module.ts | 13 +++- .../object-list/badges/badges.component.html | 0 .../object-list/badges/badges.component.scss | 0 .../object-list/badges/badges.component.ts | 11 +++ .../status-badge/status-badge.component.html | 0 .../status-badge/status-badge.component.scss | 0 .../status-badge/status-badge.component.ts | 11 +++ .../type-badge/type-badge.component.html | 0 .../type-badge/type-badge.component.scss | 0 .../badges/type-badge/type-badge.component.ts | 11 +++ src/themes/custom/theme.module.ts | 8 +- 44 files changed, 339 insertions(+), 53 deletions(-) create mode 100644 src/app/shared/object-list/badges/badges.component.html create mode 100644 src/app/shared/object-list/badges/badges.component.scss create mode 100644 src/app/shared/object-list/badges/badges.component.spec.ts create mode 100644 src/app/shared/object-list/badges/badges.component.ts create mode 100644 src/app/shared/object-list/badges/status-badge/status-badge.component.html create mode 100644 src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts create mode 100644 src/app/shared/object-list/badges/status-badge/status-badge.component.ts create mode 100644 src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts create mode 100644 src/app/shared/object-list/badges/themed-badges.component.ts create mode 100644 src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts rename src/app/shared/object-list/{ => badges}/type-badge/type-badge.component.html (66%) rename src/app/shared/object-list/{ => badges}/type-badge/type-badge.component.spec.ts (94%) rename src/app/shared/object-list/{ => badges}/type-badge/type-badge.component.ts (84%) create mode 100644 src/themes/custom/app/shared/object-list/badges/badges.component.html create mode 100644 src/themes/custom/app/shared/object-list/badges/badges.component.scss create mode 100644 src/themes/custom/app/shared/object-list/badges/badges.component.ts create mode 100644 src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.html create mode 100644 src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.scss create mode 100644 src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.ts create mode 100644 src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.html create mode 100644 src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.scss create mode 100644 src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.ts diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html index 028876b3d0..8ff2d2e47e 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html index 65ff75a731..cd040b224b 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html index 0c5824c6d6..12f55f63b9 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html index 6d88c9761b..a36acf74d1 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html @@ -1,4 +1,4 @@ - + + +
    - +

    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html index 680a9909bc..dfb32ec7ef 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html index 204f8fc8cb..ad3b71ff30 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html index fb0ad21b6e..de9743f15c 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    + - + diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index 8adbcbeec3..39183d7fc3 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -95,16 +95,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ @Output() contentChange = new EventEmitter(); - /** - * Whether or not the "Private" badge should be displayed for this listable object - */ - privateBadge = false; - - /** - * Whether or not the "Withdrawn" badge should be displayed for this listable object - */ - withdrawnBadge = false; - /** * Array to track all subscriptions and unsubscribe them onDestroy * @type {Array} @@ -160,8 +150,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges private instantiateComponent(object) { - this.initBadges(); - const component = this.getComponent(object.getRenderTypes(), this.viewMode, this.context); const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component); @@ -191,19 +179,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges } } - /** - * Initialize which badges should be visible in the listable component - */ - initBadges() { - let objectAsAny = this.object as any; - if (hasValue(objectAsAny.indexableObject)) { - objectAsAny = objectAsAny.indexableObject; - } - const objectExistsAndValidViewMode = hasValue(objectAsAny) && this.viewMode !== ViewMode.StandalonePage; - this.privateBadge = objectExistsAndValidViewMode && hasValue(objectAsAny.isDiscoverable) && !objectAsAny.isDiscoverable; - this.withdrawnBadge = objectExistsAndValidViewMode && hasValue(objectAsAny.isWithdrawn) && objectAsAny.isWithdrawn; - } - /** * Fetch the component depending on the item's entity type, view mode and context * @returns {GenericConstructor} diff --git a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html index 739fa6c7a8..24f2ad7c78 100644 --- a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html @@ -8,7 +8,7 @@
    - +

    {{dso.name}}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html index d8c253c8a9..d9405711e6 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html @@ -8,7 +8,7 @@
    - +

    {{dso.name}}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html index d2454b28e6..035e6041a6 100644 --- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html @@ -17,7 +17,7 @@
    - +

    diff --git a/src/app/shared/object-list/badges/badges.component.html b/src/app/shared/object-list/badges/badges.component.html new file mode 100644 index 0000000000..2a5704970c --- /dev/null +++ b/src/app/shared/object-list/badges/badges.component.html @@ -0,0 +1,6 @@ +
    + +
    +
    + +
    diff --git a/src/app/shared/object-list/badges/badges.component.scss b/src/app/shared/object-list/badges/badges.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/object-list/badges/badges.component.spec.ts b/src/app/shared/object-list/badges/badges.component.spec.ts new file mode 100644 index 0000000000..1ca24639f8 --- /dev/null +++ b/src/app/shared/object-list/badges/badges.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BadgesComponent } from './badges.component'; + +describe('BadgesComponent', () => { + let component: BadgesComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BadgesComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BadgesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/object-list/badges/badges.component.ts b/src/app/shared/object-list/badges/badges.component.ts new file mode 100644 index 0000000000..31baba1d2c --- /dev/null +++ b/src/app/shared/object-list/badges/badges.component.ts @@ -0,0 +1,11 @@ +import { Component, Input } from '@angular/core'; +import { DSpaceObject } from '../../../core/shared/dspace-object.model'; + +@Component({ + selector: 'ds-badges', + templateUrl: './badges.component.html', + styleUrls: ['./badges.component.scss'] +}) +export class BadgesComponent { + @Input() object: DSpaceObject; +} diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.html b/src/app/shared/object-list/badges/status-badge/status-badge.component.html new file mode 100644 index 0000000000..1f28aedf34 --- /dev/null +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.html @@ -0,0 +1,6 @@ + + {{ "item.badge.private" | translate }} + + + {{ "item.badge.withdrawn" | translate }} + diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts new file mode 100644 index 0000000000..09bc7ea585 --- /dev/null +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts @@ -0,0 +1,78 @@ +import { Item } from '../../../../core/shared/item.model'; +import { of as observableOf } from 'rxjs'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { TranslateModule } from '@ngx-translate/core'; +import { TruncatePipe } from '../../../utils/truncate.pipe'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { By } from '@angular/platform-browser'; +import { StatusBadgeComponent } from './status-badge.component'; + +let comp: StatusBadgeComponent; +let fixture: ComponentFixture; + +const type = 'authorOfPublication'; + +const mockItemWithEntityType = Object.assign(new Item(), { + bundles: observableOf({}), + metadata: { + 'dspace.entity.type': [ + { + language: 'en_US', + value: type + } + ] + } +}); + +const mockItemWithoutEntityType = Object.assign(new Item(), { + bundles: observableOf({}), + metadata: { + 'dc.title': [ + { + language: 'en_US', + value: 'This is just another title' + } + ] + } +}); + +describe('ItemTypeBadgeComponent', () => { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot()], + declarations: [StatusBadgeComponent, TruncatePipe], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(StatusBadgeComponent, { + set: { changeDetection: ChangeDetectionStrategy.Default } + }).compileComponents(); + })); + + beforeEach(waitForAsync(() => { + fixture = TestBed.createComponent(StatusBadgeComponent); + comp = fixture.componentInstance; + })); + + describe('When the item has an entity type', () => { + beforeEach(() => { + comp.object = mockItemWithEntityType; + fixture.detectChanges(); + }); + + it('should show the entity type badge', () => { + const badge = fixture.debugElement.query(By.css('span.badge')); + expect(badge.nativeElement.textContent).toContain(type.toLowerCase()); + }); + }); + + describe('When the item has no entity type', () => { + beforeEach(() => { + comp.object = mockItemWithoutEntityType; + fixture.detectChanges(); + }); + + it('should show an item badge', () => { + const badge = fixture.debugElement.query(By.css('span.badge')); + expect(badge.nativeElement.textContent).toContain('item'); + }); + }); +}); diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.ts b/src/app/shared/object-list/badges/status-badge/status-badge.component.ts new file mode 100644 index 0000000000..7f52741c51 --- /dev/null +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.ts @@ -0,0 +1,41 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { hasValue } from '../../../empty.util'; + +@Component({ + selector: 'ds-status-badge', + templateUrl: './status-badge.component.html' +}) +/** + * Component rendering the status of an item as a badge + */ +export class StatusBadgeComponent implements OnInit { + + /** + * The component used to retrieve the status from + */ + @Input() object: DSpaceObject; + + /** + * Whether or not the "Private" badge should be displayed for this listable object + */ + privateBadge = false; + + /** + * Whether or not the "Withdrawn" badge should be displayed for this listable object + */ + withdrawnBadge = false; + + /** + * Initialize which badges should be visible + */ + ngOnInit(): void { + let objectAsAny = this.object as any; + if (hasValue(objectAsAny.indexableObject)) { + objectAsAny = objectAsAny.indexableObject; + } + const objectExists = hasValue(objectAsAny); + this.privateBadge = objectExists && hasValue(objectAsAny.isDiscoverable) && !objectAsAny.isDiscoverable; + this.withdrawnBadge = objectExists && hasValue(objectAsAny.isWithdrawn) && objectAsAny.isWithdrawn; + } +} diff --git a/src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts b/src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts new file mode 100644 index 0000000000..d855fda555 --- /dev/null +++ b/src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts @@ -0,0 +1,31 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../theme-support/themed.component'; +import { StatusBadgeComponent } from './status-badge.component'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { TypeBadgeComponent } from '../type-badge/type-badge.component'; + +/** + * Themed wrapper for StatusBadgeComponent + */ +@Component({ + selector: 'ds-themed-status-badge', + styleUrls: [], + templateUrl: '../../../../shared/theme-support/themed.component.html', +}) +export class ThemedStatusBadgeComponent extends ThemedComponent { + @Input() object: DSpaceObject; + + protected inAndOutputNames: (keyof StatusBadgeComponent & keyof this)[] = ['object']; + + protected getComponentName(): string { + return 'StatusBadgeComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/object-list/badges/status-badge/status-badge.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./status-badge.component`); + } +} diff --git a/src/app/shared/object-list/badges/themed-badges.component.ts b/src/app/shared/object-list/badges/themed-badges.component.ts new file mode 100644 index 0000000000..8682e33e2e --- /dev/null +++ b/src/app/shared/object-list/badges/themed-badges.component.ts @@ -0,0 +1,32 @@ +import { Component, Input } from '@angular/core'; +import { BadgesComponent } from './badges.component'; +import { ThemedComponent } from '../../theme-support/themed.component'; +import { Observable } from 'rxjs/internal/Observable'; +import { SearchFiltersComponent } from '../../search/search-filters/search-filters.component'; +import { DSpaceObject } from '../../../core/shared/dspace-object.model'; + +/** + * Themed wrapper for BadgesComponent + */ +@Component({ + selector: 'ds-themed-badges', + styleUrls: [], + templateUrl: '../../../shared/theme-support/themed.component.html', +}) +export class ThemedBadgesComponent extends ThemedComponent { + @Input() object: DSpaceObject; + + protected inAndOutputNames: (keyof BadgesComponent & keyof this)[] = ['object']; + + protected getComponentName(): string { + return 'BadgesComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/shared/object-list/badges/badges.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./badges.component`); + } +} diff --git a/src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts b/src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts new file mode 100644 index 0000000000..58e56dbe88 --- /dev/null +++ b/src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts @@ -0,0 +1,31 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../theme-support/themed.component'; +import { TypeBadgeComponent } from './type-badge.component'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { BadgesComponent } from '../badges.component'; + +/** + * Themed wrapper for TypeBadgeComponent + */ +@Component({ + selector: 'ds-themed-type-badge', + styleUrls: [], + templateUrl: '../../../../shared/theme-support/themed.component.html', +}) +export class ThemedTypeBadgeComponent extends ThemedComponent { + @Input() object: DSpaceObject; + + protected inAndOutputNames: (keyof TypeBadgeComponent & keyof this)[] = ['object']; + + protected getComponentName(): string { + return 'TypeBadgeComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/object-list/badges/type-badge/type-badge.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./type-badge.component`); + } +} diff --git a/src/app/shared/object-list/type-badge/type-badge.component.html b/src/app/shared/object-list/badges/type-badge/type-badge.component.html similarity index 66% rename from src/app/shared/object-list/type-badge/type-badge.component.html rename to src/app/shared/object-list/badges/type-badge/type-badge.component.html index 0c2bd7544e..119702c375 100644 --- a/src/app/shared/object-list/type-badge/type-badge.component.html +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.html @@ -1,3 +1,3 @@ -
    + {{ typeMessage | translate }} -
    + diff --git a/src/app/shared/object-list/type-badge/type-badge.component.spec.ts b/src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts similarity index 94% rename from src/app/shared/object-list/type-badge/type-badge.component.spec.ts rename to src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts index 9a7e22c551..21c12ec372 100644 --- a/src/app/shared/object-list/type-badge/type-badge.component.spec.ts +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts @@ -1,8 +1,8 @@ -import { Item } from '../../../core/shared/item.model'; +import { Item } from '../../../../core/shared/item.model'; import { of as observableOf } from 'rxjs'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TranslateModule } from '@ngx-translate/core'; -import { TruncatePipe } from '../../utils/truncate.pipe'; +import { TruncatePipe } from '../../../utils/truncate.pipe'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { TypeBadgeComponent } from './type-badge.component'; diff --git a/src/app/shared/object-list/type-badge/type-badge.component.ts b/src/app/shared/object-list/badges/type-badge/type-badge.component.ts similarity index 84% rename from src/app/shared/object-list/type-badge/type-badge.component.ts rename to src/app/shared/object-list/badges/type-badge/type-badge.component.ts index 8e843af1e7..2fba2515a9 100644 --- a/src/app/shared/object-list/type-badge/type-badge.component.ts +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { hasValue, isEmpty } from '../../empty.util'; -import { getResourceTypeValueFor } from '../../../core/cache/object-cache.reducer'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { hasValue, isEmpty } from '../../../empty.util'; +import { getResourceTypeValueFor } from '../../../../core/cache/object-cache.reducer'; @Component({ selector: 'ds-type-badge', diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html index c518d39bd9..31f48475a6 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html @@ -2,7 +2,7 @@ - +

    diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html index c98003cd1d..739c16a341 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html index e0f0319ffc..8090fe13df 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index 8898632eb5..e6b9acfc6c 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -1,4 +1,4 @@ - + Date: Mon, 23 Jan 2023 18:08:59 +0100 Subject: [PATCH 018/246] 98819: Added StartsWithDateComponent & StartsWithTextComponent to custom folder --- .../date/starts-with-date.component.html | 0 .../date/starts-with-date.component.scss | 0 .../date/starts-with-date.component.ts | 16 ++++++++++++++++ .../text/starts-with-text.component.html | 0 .../text/starts-with-text.component.scss | 0 .../text/starts-with-text.component.ts | 16 ++++++++++++++++ src/themes/custom/entry-components.ts | 6 +++++- src/themes/custom/theme.module.ts | 6 +++++- 8 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/themes/custom/app/shared/starts-with/date/starts-with-date.component.html create mode 100644 src/themes/custom/app/shared/starts-with/date/starts-with-date.component.scss create mode 100644 src/themes/custom/app/shared/starts-with/date/starts-with-date.component.ts create mode 100644 src/themes/custom/app/shared/starts-with/text/starts-with-text.component.html create mode 100644 src/themes/custom/app/shared/starts-with/text/starts-with-text.component.scss create mode 100644 src/themes/custom/app/shared/starts-with/text/starts-with-text.component.ts diff --git a/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.html b/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.scss b/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.ts b/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.ts new file mode 100644 index 0000000000..ed7efb3ba6 --- /dev/null +++ b/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { renderStartsWithFor, StartsWithType } from '../../../../../../app/shared/starts-with/starts-with-decorator'; +import { + StartsWithDateComponent as BaseComponent +} from '../../../../../../app/shared/starts-with/date/starts-with-date.component'; + +@Component({ + selector: 'ds-starts-with-date', + // styleUrls: ['./starts-with-date.component.scss'], + styleUrls: ['../../../../../../app/shared/starts-with/date/starts-with-date.component.scss'], + // templateUrl: './starts-with-date.component.html', + templateUrl: '../../../../../../app/shared/starts-with/date/starts-with-date.component.html', +}) +@renderStartsWithFor(StartsWithType.date) +export class StartsWithDateComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.html b/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.scss b/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.ts b/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.ts new file mode 100644 index 0000000000..9c7a721230 --- /dev/null +++ b/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { renderStartsWithFor, StartsWithType } from '../../../../../../app/shared/starts-with/starts-with-decorator'; +import { + StartsWithTextComponent as BaseComponent +} from '../../../../../../app/shared/starts-with/text/starts-with-text.component'; + +@Component({ + selector: 'ds-starts-with-text', + // styleUrls: ['./starts-with-text.component.scss'], + styleUrls: ['../../../../../../app/shared/starts-with/text/starts-with-text.component.scss'], + // templateUrl: './starts-with-text.component.html', + templateUrl: '../../../../../../app/shared/starts-with/text/starts-with-text.component.html', +}) +@renderStartsWithFor(StartsWithType.text) +export class StartsWithTextComponent extends BaseComponent { +} diff --git a/src/themes/custom/entry-components.ts b/src/themes/custom/entry-components.ts index b518e4cc45..b70fa065f4 100644 --- a/src/themes/custom/entry-components.ts +++ b/src/themes/custom/entry-components.ts @@ -1,5 +1,9 @@ import { PublicationComponent } from './app/item-page/simple/item-types/publication/publication.component'; +import { StartsWithDateComponent } from './app/shared/starts-with/date/starts-with-date.component'; +import { StartsWithTextComponent } from './app/shared/starts-with/text/starts-with-text.component'; export const ENTRY_COMPONENTS = [ - PublicationComponent + PublicationComponent, + StartsWithDateComponent, + StartsWithTextComponent, ]; diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index dac941546b..9d2cccbc8c 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -79,6 +79,8 @@ import { HeaderComponent } from './app/header/header.component'; import { FooterComponent } from './app/footer/footer.component'; import { BreadcrumbsComponent } from './app/breadcrumbs/breadcrumbs.component'; import { HeaderNavbarWrapperComponent } from './app/header-nav-wrapper/header-navbar-wrapper.component'; +import { StartsWithDateComponent } from './app/shared/starts-with/date/starts-with-date.component'; +import { StartsWithTextComponent } from './app/shared/starts-with/text/starts-with-text.component'; const DECLARATIONS = [ HomePageComponent, @@ -119,7 +121,9 @@ const DECLARATIONS = [ HeaderComponent, NavbarComponent, HeaderNavbarWrapperComponent, - BreadcrumbsComponent + BreadcrumbsComponent, + StartsWithDateComponent, + StartsWithTextComponent, ]; @NgModule({ From d7b38b2a7871fbf9e4b8ad31d8afee8374928835 Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 08:24:37 +0100 Subject: [PATCH 019/246] Fixed issues with new badges --- ...min-search-result-list-element.component.html | 3 +-- ...stable-object-component-loader.component.html | 8 -------- ...listable-object-component-loader.component.ts | 16 +--------------- ...listable-object-component-loader.component.ts | 3 +-- 4 files changed, 3 insertions(+), 27 deletions(-) diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html index b34868f736..3bf756b9cd 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html @@ -2,6 +2,5 @@ [viewMode]="viewModes.ListElement" [index]="index" [linkType]="linkType" - [listID]="listID" - [hideBadges]="true"> + [listID]="listID"> diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html index 9ed4e9eaa8..58561f0277 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html @@ -1,9 +1 @@ -
    -
    - {{ "item.badge.private" | translate }} -
    -
    - {{ "item.badge.withdrawn" | translate }} -
    -
    diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index 39183d7fc3..168c696034 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -74,22 +74,11 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ @Input() value: string; - /** - * Whether or not informational badges (e.g. Private, Withdrawn) should be hidden - */ - @Input() hideBadges = false; - /** * Directive hook used to place the dynamic child component */ @ViewChild(ListableObjectDirective, {static: true}) listableObjectDirective: ListableObjectDirective; - /** - * View on the badges template, to be passed on to the loaded component (which will place the badges in the desired - * location, or on top if not specified) - */ - @ViewChild('badges', { static: true }) badges: ElementRef; - /** * Emit when the listable object has been reloaded. */ @@ -160,10 +149,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges this.compRef = viewContainerRef.createComponent( componentFactory, 0, - undefined, - [ - [this.badges.nativeElement], - ]); + undefined); this.connectInputsAndOutputs(); diff --git a/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts index 44836fe2fc..33f8df7030 100644 --- a/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts @@ -16,7 +16,7 @@ import { CollectionElementLinkType } from '../../collection-element-link.type'; }) export class ThemedListableObjectComponentLoaderComponent extends ThemedComponent { protected inAndOutputNames: (keyof ListableObjectComponentLoaderComponent & keyof this)[] = [ - 'object', 'index', 'viewMode', 'context', 'linkType', 'listID', 'linkType', 'showLabel', 'value', 'hideBadges', 'contentChange']; + 'object', 'index', 'viewMode', 'context', 'linkType', 'listID', 'linkType', 'showLabel', 'value', 'contentChange']; @Input() object: ListableObject; @Input() index: number; @@ -26,7 +26,6 @@ export class ThemedListableObjectComponentLoaderComponent extends ThemedComponen @Input() listID: string; @Input() showLabel = true; @Input() value: string; - @Input() hideBadges = false; @Output() contentChange = new EventEmitter(); protected getComponentName(): string { From 1f2897664a18a741fac1cd1a88c345e73bba0d7e Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 09:30:45 +0100 Subject: [PATCH 020/246] Fixing tests --- ...arch-result-grid-element.component.spec.ts | 5 +- ...top-level-community-list.component.spec.ts | 3 +- ...-object-component-loader.component.spec.ts | 58 ------------- .../object-list/badges/badges.component.html | 8 +- .../status-badge/status-badge.component.html | 8 +- .../status-badge.component.spec.ts | 87 +++++++++++-------- .../type-badge/type-badge.component.html | 4 +- .../item-list-preview.component.spec.ts | 4 +- .../search-form/search-form.component.spec.ts | 32 ++++--- 9 files changed, 84 insertions(+), 125 deletions(-) diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts index 2cb0413bbc..9a28fd745f 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts @@ -14,6 +14,8 @@ import { By } from '@angular/platform-browser'; import { RouterTestingModule } from '@angular/router/testing'; import { getCollectionEditRoute } from '../../../../../collection-page/collection-page-routing-paths'; import { LinkService } from '../../../../../core/cache/builders/link.service'; +import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; describe('CollectionAdminSearchResultGridElementComponent', () => { let component: CollectionAdminSearchResultGridElementComponent; @@ -45,7 +47,8 @@ describe('CollectionAdminSearchResultGridElementComponent', () => { providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: BitstreamDataService, useValue: {} }, - { provide: LinkService, useValue: linkService } + { provide: LinkService, useValue: linkService }, + { provide: ThemeService, useValue: getMockThemeService() }, ] }) .compileComponents(); diff --git a/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts b/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts index 00408e4696..c9e8f37ee9 100644 --- a/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts +++ b/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts @@ -26,7 +26,7 @@ import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; import { ThemeService } from '../../shared/theme-support/theme.service'; import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; -describe('TopLevelCommunityList Component', () => { +fdescribe('TopLevelCommunityList Component', () => { let comp: TopLevelCommunityListComponent; let fixture: ComponentFixture; let communityDataServiceStub: any; @@ -131,7 +131,6 @@ describe('TopLevelCommunityList Component', () => { { provide: SelectableListService, useValue: {} }, { provide: ThemeService, useValue: themeService }, ], - schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); })); diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts index edf0b3ea7c..4a63a256b6 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts @@ -72,64 +72,6 @@ describe('ListableObjectComponentLoaderComponent', () => { }); }); - describe('when the object is an item and viewMode is a list', () => { - beforeEach(() => { - comp.object = Object.assign(new Item()); - comp.viewMode = ViewMode.ListElement; - }); - - describe('when the item is not withdrawn', () => { - beforeEach(() => { - (comp.object as any).isWithdrawn = false; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should not show the withdrawn badge', () => { - const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); - expect(badge).toBeNull(); - }); - }); - - describe('when the item is withdrawn', () => { - beforeEach(() => { - (comp.object as any).isWithdrawn = true; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should show the withdrawn badge', () => { - const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); - expect(badge).not.toBeNull(); - }); - }); - - describe('when the item is not private', () => { - beforeEach(() => { - (comp.object as any).isDiscoverable = true; - comp.initBadges(); - fixture.detectChanges(); - }); - it('should not show the private badge', () => { - const badge = fixture.debugElement.query(By.css('div.private-badge')); - expect(badge).toBeNull(); - }); - }); - - describe('when the item is private', () => { - beforeEach(() => { - (comp.object as any).isDiscoverable = false; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should show the private badge', () => { - const badge = fixture.debugElement.query(By.css('div.private-badge')); - expect(badge).not.toBeNull(); - }); - }); - }); - describe('When a reloadedObject is emitted', () => { let listableComponent; let reloadedObject: any; diff --git a/src/app/shared/object-list/badges/badges.component.html b/src/app/shared/object-list/badges/badges.component.html index 2a5704970c..1e59ca3660 100644 --- a/src/app/shared/object-list/badges/badges.component.html +++ b/src/app/shared/object-list/badges/badges.component.html @@ -1,6 +1,2 @@ -
    - -
    -
    - -
    + + diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.html b/src/app/shared/object-list/badges/status-badge/status-badge.component.html index 1f28aedf34..c864f22afa 100644 --- a/src/app/shared/object-list/badges/status-badge/status-badge.component.html +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.html @@ -1,6 +1,6 @@ - +
    {{ "item.badge.private" | translate }} - - +
    +
    {{ "item.badge.withdrawn" | translate }} - +
    diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts index 09bc7ea585..4cfa0e2341 100644 --- a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts @@ -6,37 +6,17 @@ import { TruncatePipe } from '../../../utils/truncate.pipe'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { StatusBadgeComponent } from './status-badge.component'; +import { ViewMode } from '../../../../core/shared/view-mode.model'; let comp: StatusBadgeComponent; let fixture: ComponentFixture; -const type = 'authorOfPublication'; +let withdrawnItem = Object.assign(new Item(), { isWithdrawn: true }); +let notWithdrawnItem = Object.assign(new Item(), { isWithdrawn: false }); +let privateItem = Object.assign(new Item(), { isDiscoverable: false }); +let notPrivateItem = Object.assign(new Item(), { isDiscoverable: true }); -const mockItemWithEntityType = Object.assign(new Item(), { - bundles: observableOf({}), - metadata: { - 'dspace.entity.type': [ - { - language: 'en_US', - value: type - } - ] - } -}); - -const mockItemWithoutEntityType = Object.assign(new Item(), { - bundles: observableOf({}), - metadata: { - 'dc.title': [ - { - language: 'en_US', - value: 'This is just another title' - } - ] - } -}); - -describe('ItemTypeBadgeComponent', () => { +describe('ItemStatusBadgeComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot()], @@ -45,34 +25,69 @@ describe('ItemTypeBadgeComponent', () => { }).overrideComponent(StatusBadgeComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); + init(); })); + function init() { + withdrawnItem = Object.assign(new Item(), { isWithdrawn: true }); + notWithdrawnItem = Object.assign(new Item(), { isWithdrawn: false }); + privateItem = Object.assign(new Item(), { isDiscoverable: false }); + notPrivateItem = Object.assign(new Item(), { isDiscoverable: true }); + } beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(StatusBadgeComponent); comp = fixture.componentInstance; })); - describe('When the item has an entity type', () => { + + describe('when the item is not withdrawn', () => { beforeEach(() => { - comp.object = mockItemWithEntityType; + comp.object = notWithdrawnItem; + comp.ngOnInit(); fixture.detectChanges(); }); - it('should show the entity type badge', () => { - const badge = fixture.debugElement.query(By.css('span.badge')); - expect(badge.nativeElement.textContent).toContain(type.toLowerCase()); + it('should not show the withdrawn badge', () => { + const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); + expect(badge).toBeNull(); }); }); - describe('When the item has no entity type', () => { + describe('when the item is withdrawn', () => { beforeEach(() => { - comp.object = mockItemWithoutEntityType; + comp.object = withdrawnItem; + comp.ngOnInit(); fixture.detectChanges(); }); - it('should show an item badge', () => { - const badge = fixture.debugElement.query(By.css('span.badge')); - expect(badge.nativeElement.textContent).toContain('item'); + it('should show the withdrawn badge', () => { + const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); + expect(badge).not.toBeNull(); + }); + }); + + describe('when the item is not private', () => { + beforeEach(() => { + comp.object = notPrivateItem; + comp.ngOnInit(); + fixture.detectChanges(); + }); + it('should not show the private badge', () => { + const badge = fixture.debugElement.query(By.css('div.private-badge')); + expect(badge).toBeNull(); + }); + }); + + describe('when the item is private', () => { + beforeEach(() => { + comp.object = privateItem; + comp.ngOnInit(); + fixture.detectChanges(); + }); + + it('should show the private badge', () => { + const badge = fixture.debugElement.query(By.css('div.private-badge')); + expect(badge).not.toBeNull(); }); }); }); diff --git a/src/app/shared/object-list/badges/type-badge/type-badge.component.html b/src/app/shared/object-list/badges/type-badge/type-badge.component.html index 119702c375..0c2bd7544e 100644 --- a/src/app/shared/object-list/badges/type-badge/type-badge.component.html +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.html @@ -1,3 +1,3 @@ - +
    {{ typeMessage | translate }} - +
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts index 023b51a8dd..65147f17d4 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts @@ -154,8 +154,8 @@ describe('ItemListPreviewComponent', () => { fixture.detectChanges(); }); - it('should show the entity type span', () => { - const entityField = fixture.debugElement.query(By.css('ds-type-badge')); + it('should show the badges', () => { + const entityField = fixture.debugElement.query(By.css('ds-themed-badges')); expect(entityField).not.toBeNull(); }); }); diff --git a/src/app/shared/search-form/search-form.component.spec.ts b/src/app/shared/search-form/search-form.component.spec.ts index 20c9435eb4..f1c05d47df 100644 --- a/src/app/shared/search-form/search-form.component.spec.ts +++ b/src/app/shared/search-form/search-form.component.spec.ts @@ -36,7 +36,9 @@ describe('SearchFormComponent', () => { { provide: SearchConfigurationService, useValue: searchConfigService }, { provide: DSpaceObjectDataService, useValue: { findById: () => createSuccessfulRemoteDataObject$(undefined)} } ], - declarations: [SearchFormComponent] + declarations: [ + SearchFormComponent, + ] }).compileComponents(); })); @@ -47,21 +49,23 @@ describe('SearchFormComponent', () => { el = de.nativeElement; }); - it('should not display scopes when empty', () => { - fixture.detectChanges(); - const select = de.query(By.css('select')); - expect(select).toBeNull(); - }); - - it('should not display scopes when scopeSelectable is false', () => { - comp.scopeSelectable = false; - comp.scopes = objects; - comp.scope = objects[1].id; + it('should not display scopes when showScopeSelector is false', fakeAsync(() => { + comp.showScopeSelector = false; fixture.detectChanges(); - const select = de.query(By.css('select')); - expect(select).toBeNull(); - }); + tick(); + + expect(de.query(By.css('.scope-button'))).toBeFalsy(); + })); + + it('should display scopes when showScopeSelector is true', fakeAsync(() => { + comp.showScopeSelector = true; + + fixture.detectChanges(); + tick(); + + expect(de.query(By.css('.scope-button'))).toBeTruthy(); + })); it('should display set query value in input field', fakeAsync(() => { const testString = 'This is a test query'; From 906c26bbe4d816a9e34a77a238c8ef8fee524b0d Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 09:51:33 +0100 Subject: [PATCH 021/246] Revert "Made ListableObjectComponentLoaderComponent themeable" This reverts commit a4679ca7 --- ...-search-result-list-element.component.html | 4 +- ...admin-workflow-list-element.component.html | 4 +- .../item-delete/item-delete.component.html | 8 ++-- .../edit-relationship.component.html | 4 +- .../virtual-metadata.component.html | 4 +- .../item-page/simple/item-page.component.html | 2 +- .../related-items.component.html | 4 +- .../related-items.component.spec.ts | 2 +- .../shared/browse-by/browse-by.component.html | 2 +- .../dso-selector/dso-selector.component.html | 4 +- ...sting-relation-list-element.component.html | 2 +- .../dso-input-suggestions.component.html | 2 +- ...table-object-component-loader.component.ts | 42 ------------------- .../object-detail.component.html | 2 +- .../object-grid/object-grid.component.html | 2 +- .../item-metadata-list-element.component.html | 2 +- ...em-metadata-list-element.component.spec.ts | 2 +- .../object-list/object-list.component.html | 4 +- src/app/shared/shared.module.ts | 2 - ...ble-object-component-loader.component.html | 0 ...ble-object-component-loader.component.scss | 0 ...table-object-component-loader.component.ts | 13 ------ src/themes/custom/theme.module.ts | 2 - 23 files changed, 27 insertions(+), 86 deletions(-) delete mode 100644 src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html index 3bf756b9cd..991508335f 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html @@ -1,6 +1,6 @@ - + [listID]="listID"> diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html index 909882361a..192cc751f2 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html @@ -1,10 +1,10 @@
    {{ "admin.workflow.item.workflow" | translate }}
    - + [listID]="listID"> diff --git a/src/app/item-page/edit-item-page/item-delete/item-delete.component.html b/src/app/item-page/edit-item-page/item-delete/item-delete.component.html index fb8acb61f3..df50e13b48 100644 --- a/src/app/item-page/edit-item-page/item-delete/item-delete.component.html +++ b/src/app/item-page/edit-item-page/item-delete/item-delete.component.html @@ -31,11 +31,11 @@ class="d-flex flex-row"> - - +