diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-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
similarity index 96%
rename from src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.html
rename to src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html
index 125553054e..6bd69e8667 100644
--- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-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
@@ -15,7 +15,7 @@
-
+
diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.scss b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.scss
similarity index 100%
rename from src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.scss
rename to src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.scss
diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.spec.ts b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.spec.ts
similarity index 95%
rename from src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.spec.ts
rename to src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.spec.ts
index dd79b81427..32c2c3bed8 100644
--- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.spec.ts
+++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.spec.ts
@@ -23,7 +23,7 @@ import { ItemSearchResult } from '../../../../object-collection/shared/item-sear
import { createSuccessfulRemoteDataObject$ } from '../../../../remote-data.utils';
import { TruncatableService } from '../../../../truncatable/truncatable.service';
import { TruncatePipe } from '../../../../utils/truncate.pipe';
-import { PublicationSearchResultGridElementComponent } from './publication-search-result-grid-element.component';
+import { ItemSearchResultGridElementComponent } from './item-search-result-grid-element.component';
const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
mockItemWithMetadata.hitHighlights = {};
@@ -71,7 +71,7 @@ mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
}
});
-describe('PublicationGridElementComponent', getEntityGridElementTestComponent(PublicationSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['authors', 'date', 'abstract']));
+describe('ItemGridElementComponent', getEntityGridElementTestComponent(ItemSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['authors', 'date', 'abstract']));
/**
* Create test cases for a grid component of an entity.
diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.ts b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.ts
similarity index 71%
rename from src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.ts
rename to src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.ts
index c96e73d365..e729756452 100644
--- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component.ts
+++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.ts
@@ -9,13 +9,13 @@ import { ItemSearchResult } from '../../../../object-collection/shared/item-sear
@listableObjectComponent('PublicationSearchResult', ViewMode.GridElement)
@listableObjectComponent(ItemSearchResult, ViewMode.GridElement)
@Component({
- selector: 'ds-publication-search-result-grid-element',
- styleUrls: ['./publication-search-result-grid-element.component.scss'],
- templateUrl: './publication-search-result-grid-element.component.html',
+ selector: 'ds-item-search-result-grid-element',
+ styleUrls: ['./item-search-result-grid-element.component.scss'],
+ templateUrl: './item-search-result-grid-element.component.html',
animations: [focusShadow]
})
/**
* The component for displaying a grid element for an item search result of the type Publication
*/
-export class PublicationSearchResultGridElementComponent extends SearchResultGridElementComponent
{
+export class ItemSearchResultGridElementComponent extends SearchResultGridElementComponent {
}
diff --git a/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html
new file mode 100644
index 0000000000..3877e2f335
--- /dev/null
+++ b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html
@@ -0,0 +1 @@
+
diff --git a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.scss b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.scss
similarity index 100%
rename from src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.scss
rename to src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.scss
diff --git a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.spec.ts b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.spec.ts
similarity index 83%
rename from src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.spec.ts
rename to src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.spec.ts
index 85b964c083..6897b81f0a 100644
--- a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.spec.ts
+++ b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.spec.ts
@@ -1,7 +1,7 @@
import { async, TestBed } from '@angular/core/testing';
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { By } from '@angular/platform-browser';
-import { PublicationListElementComponent } from './publication-list-element.component';
+import { ItemListElementComponent } from './item-list-element.component';
import { Item } from '../../../../../core/shared/item.model';
import { TruncatePipe } from '../../../../utils/truncate.pipe';
import { TruncatableService } from '../../../../truncatable/truncatable.service';
@@ -43,7 +43,7 @@ const mockItem: Item = Object.assign(new Item(), {
}
});
-describe('PublicationListElementComponent', () => {
+describe('ItemListElementComponent', () => {
let comp;
let fixture;
@@ -53,18 +53,18 @@ describe('PublicationListElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
- declarations: [PublicationListElementComponent, TruncatePipe],
+ declarations: [ItemListElementComponent, TruncatePipe],
providers: [
{ provide: TruncatableService, useValue: truncatableServiceStub },
],
schemas: [NO_ERRORS_SCHEMA]
- }).overrideComponent(PublicationListElementComponent, {
+ }).overrideComponent(ItemListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
- fixture = TestBed.createComponent(PublicationListElementComponent);
+ fixture = TestBed.createComponent(ItemListElementComponent);
comp = fixture.componentInstance;
}));
@@ -75,7 +75,7 @@ describe('PublicationListElementComponent', () => {
});
it(`should contain a PublicationListElementComponent`, () => {
- const publicationListElement = fixture.debugElement.query(By.css(`ds-publication-search-result-list-element`));
+ const publicationListElement = fixture.debugElement.query(By.css(`ds-item-search-result-list-element`));
expect(publicationListElement).not.toBeNull();
});
});
diff --git a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.ts b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.ts
similarity index 72%
rename from src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.ts
rename to src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.ts
index 59d0249aef..a3bd2a1ce0 100644
--- a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.ts
+++ b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.ts
@@ -7,12 +7,12 @@ import { Item } from '../../../../../core/shared/item.model';
@listableObjectComponent('Publication', ViewMode.ListElement)
@listableObjectComponent(Item, ViewMode.ListElement)
@Component({
- selector: 'ds-publication-list-element',
- styleUrls: ['./publication-list-element.component.scss'],
- templateUrl: './publication-list-element.component.html'
+ selector: 'ds-item-list-element',
+ styleUrls: ['./item-list-element.component.scss'],
+ templateUrl: './item-list-element.component.html'
})
/**
* The component for displaying a list element for an item of the type Publication
*/
-export class PublicationListElementComponent extends AbstractListableElementComponent- {
+export class ItemListElementComponent extends AbstractListableElementComponent
- {
}
diff --git a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.html b/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.html
deleted file mode 100644
index dcebcfd56a..0000000000
--- a/src/app/shared/object-list/item-list-element/item-types/publication/publication-list-element.component.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/app/shared/object-list/item-type-badge/item-type-badge.component.html b/src/app/shared/object-list/item-type-badge/item-type-badge.component.html
deleted file mode 100644
index 947970b7e1..0000000000
--- a/src/app/shared/object-list/item-type-badge/item-type-badge.component.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- {{ type.toLowerCase() + '.listelement.badge' | translate }}
-
diff --git a/src/app/shared/object-list/item-type-badge/item-type-badge.component.ts b/src/app/shared/object-list/item-type-badge/item-type-badge.component.ts
deleted file mode 100644
index 88fe2d7f54..0000000000
--- a/src/app/shared/object-list/item-type-badge/item-type-badge.component.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Component, Input } from '@angular/core';
-import { DSpaceObject } from '../../../core/shared/dspace-object.model';
-
-@Component({
- selector: 'ds-item-type-badge',
- templateUrl: './item-type-badge.component.html'
-})
-/**
- * Component rendering the type of an item as a badge
- */
-export class ItemTypeBadgeComponent {
- /**
- * The component used to retrieve the type from
- */
- @Input() object: DSpaceObject;
-}
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 c2ca8acb2f..c518d39bd9 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/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 7d43a99e91..9aec785f08 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
@@ -155,7 +155,7 @@ describe('ItemListPreviewComponent', () => {
});
it('should show the entity type span', () => {
- const entityField = fixture.debugElement.query(By.css('ds-item-type-badge'));
+ const entityField = fixture.debugElement.query(By.css('ds-type-badge'));
expect(entityField).not.toBeNull();
});
});
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 3c787c47ce..1c081e2805 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,3 +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 32834fefee..08b02d123a 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,3 +1,4 @@
+
diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-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
similarity index 95%
rename from src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component.html
rename to src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html
index 1bc723200a..880f4393cd 100644
--- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-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 @@
-
+
;
+let publicationListElementComponent: ItemSearchResultListElementComponent;
+let fixture: ComponentFixture;
const mockItemWithMetadata: ItemSearchResult = Object.assign(new ItemSearchResult(), {
indexableObject:
@@ -64,22 +64,22 @@ const mockItemWithoutMetadata: ItemSearchResult = Object.assign(new ItemSearchRe
})
});
-describe('PublicationListElementComponent', () => {
+describe('ItemListElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
- declarations: [PublicationSearchResultListElementComponent, TruncatePipe],
+ declarations: [ItemSearchResultListElementComponent, TruncatePipe],
providers: [
{ provide: TruncatableService, useValue: {} }
],
schemas: [NO_ERRORS_SCHEMA]
- }).overrideComponent(PublicationSearchResultListElementComponent, {
+ }).overrideComponent(ItemSearchResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
- fixture = TestBed.createComponent(PublicationSearchResultListElementComponent);
+ fixture = TestBed.createComponent(ItemSearchResultListElementComponent);
publicationListElementComponent = fixture.componentInstance;
}));
diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component.ts b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts
similarity index 70%
rename from src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component.ts
rename to src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts
index 3e0db60b4c..b4b658cb96 100644
--- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component.ts
+++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts
@@ -8,12 +8,12 @@ import { Item } from '../../../../../../core/shared/item.model';
@listableObjectComponent('PublicationSearchResult', ViewMode.ListElement)
@listableObjectComponent(ItemSearchResult, ViewMode.ListElement)
@Component({
- selector: 'ds-publication-search-result-list-element',
- styleUrls: ['./publication-search-result-list-element.component.scss'],
- templateUrl: './publication-search-result-list-element.component.html'
+ selector: 'ds-item-search-result-list-element',
+ styleUrls: ['./item-search-result-list-element.component.scss'],
+ templateUrl: './item-search-result-list-element.component.html'
})
/**
* The component for displaying a list element for an item search result of the type Publication
*/
-export class PublicationSearchResultListElementComponent extends SearchResultListElementComponent {
+export class ItemSearchResultListElementComponent extends SearchResultListElementComponent {
}
diff --git a/src/app/shared/object-list/type-badge/type-badge.component.html b/src/app/shared/object-list/type-badge/type-badge.component.html
new file mode 100644
index 0000000000..18aeeb4bca
--- /dev/null
+++ b/src/app/shared/object-list/type-badge/type-badge.component.html
@@ -0,0 +1,3 @@
+
+ {{ typeMessage | translate }}
+
diff --git a/src/app/shared/object-list/item-type-badge/item-type-badge.component.spec.ts b/src/app/shared/object-list/type-badge/type-badge.component.spec.ts
similarity index 82%
rename from src/app/shared/object-list/item-type-badge/item-type-badge.component.spec.ts
rename to src/app/shared/object-list/type-badge/type-badge.component.spec.ts
index 1dad7afd7e..e516fe353e 100644
--- a/src/app/shared/object-list/item-type-badge/item-type-badge.component.spec.ts
+++ b/src/app/shared/object-list/type-badge/type-badge.component.spec.ts
@@ -4,11 +4,11 @@ import { async, ComponentFixture, TestBed } 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 { ItemTypeBadgeComponent } from './item-type-badge.component';
import { By } from '@angular/platform-browser';
+import { TypeBadgeComponent } from './type-badge.component';
-let comp: ItemTypeBadgeComponent;
-let fixture: ComponentFixture;
+let comp: TypeBadgeComponent;
+let fixture: ComponentFixture;
const type = 'authorOfPublication';
@@ -40,15 +40,15 @@ describe('ItemTypeBadgeComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [TranslateModule.forRoot()],
- declarations: [ItemTypeBadgeComponent, TruncatePipe],
+ declarations: [TypeBadgeComponent, TruncatePipe],
schemas: [NO_ERRORS_SCHEMA]
- }).overrideComponent(ItemTypeBadgeComponent, {
+ }).overrideComponent(TypeBadgeComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
- fixture = TestBed.createComponent(ItemTypeBadgeComponent);
+ fixture = TestBed.createComponent(TypeBadgeComponent);
comp = fixture.componentInstance;
}));
@@ -70,9 +70,9 @@ describe('ItemTypeBadgeComponent', () => {
fixture.detectChanges();
});
- it('should not show a badge', () => {
+ it('should show an item badge', () => {
const badge = fixture.debugElement.query(By.css('span.badge'));
- expect(badge).toBeNull();
+ expect(badge.nativeElement.textContent).toContain('item');
});
});
});
diff --git a/src/app/shared/object-list/type-badge/type-badge.component.ts b/src/app/shared/object-list/type-badge/type-badge.component.ts
new file mode 100644
index 0000000000..8e843af1e7
--- /dev/null
+++ b/src/app/shared/object-list/type-badge/type-badge.component.ts
@@ -0,0 +1,47 @@
+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';
+
+@Component({
+ selector: 'ds-type-badge',
+ templateUrl: './type-badge.component.html'
+})
+/**
+ * Component rendering the type of an item as a badge
+ */
+export class TypeBadgeComponent {
+
+ private _object: DSpaceObject;
+ private _typeMessage: string;
+
+ /**
+ * The component used to retrieve the type from
+ */
+ @Input() set object(object: DSpaceObject) {
+ this._object = object;
+
+ const renderTypes = this._object.getRenderTypes();
+ if (!isEmpty(renderTypes.length)) {
+ const renderType = renderTypes[0];
+ if (renderType instanceof Function) {
+ const resourceTypeValue = getResourceTypeValueFor(object.type);
+ if (hasValue(resourceTypeValue)) {
+ this._typeMessage = `${resourceTypeValue.toLowerCase()}.listelement.badge`;
+ } else {
+ this._typeMessage = `${renderType.name.toLowerCase()}.listelement.badge`;
+ }
+ } else {
+ this._typeMessage = `${renderType.toLowerCase()}.listelement.badge`;
+ }
+ }
+ }
+
+ get object(): DSpaceObject {
+ return this._object;
+ }
+
+ get typeMessage(): string {
+ return this._typeMessage;
+ }
+}
diff --git a/src/app/shared/resource-policies/create/resource-policy-create.component.spec.ts b/src/app/shared/resource-policies/create/resource-policy-create.component.spec.ts
index 1c41280bab..d7453fcf0e 100644
--- a/src/app/shared/resource-policies/create/resource-policy-create.component.spec.ts
+++ b/src/app/shared/resource-policies/create/resource-policy-create.component.spec.ts
@@ -152,29 +152,33 @@ describe('ResourcePolicyCreateComponent test suite', () => {
fixture.destroy();
});
- it('should init component properly', () => {
+ it('should init component properly', (done) => {
fixture.detectChanges();
expect(compAsAny.targetResourceUUID).toBe('itemUUID');
expect(compAsAny.targetResourceName).toBe('test item');
+ done();
});
- it('should redirect to authorizations page', () => {
+ it('should redirect to authorizations page', (done) => {
comp.redirectToAuthorizationsPage();
expect(compAsAny.router.navigate).toHaveBeenCalled();
+ done();
});
- it('should return true when is Processing', () => {
+ it('should return true when is Processing', (done) => {
compAsAny.processing$.next(true);
expect(comp.isProcessing()).toBeObservable(cold('a', {
a: true
}));
+ done();
});
- it('should return false when is not Processing', () => {
+ it('should return false when is not Processing', (done) => {
compAsAny.processing$.next(false);
expect(comp.isProcessing()).toBeObservable(cold('a', {
a: false
}));
+ done();
});
describe('when target type is group', () => {
diff --git a/src/app/shared/resource-policies/create/resource-policy-create.component.ts b/src/app/shared/resource-policies/create/resource-policy-create.component.ts
index 30bf0c9e56..104a5e592c 100644
--- a/src/app/shared/resource-policies/create/resource-policy-create.component.ts
+++ b/src/app/shared/resource-policies/create/resource-policy-create.component.ts
@@ -101,7 +101,9 @@ export class ResourcePolicyCreateComponent implements OnInit {
first((response: RemoteData) => !response.isResponsePending)
).subscribe((responseRD: RemoteData) => {
this.processing$.next(false);
- if (responseRD.hasSucceeded) {
+ // NOTE Currently due to a bug a successful 201 response has failed
+ // TODO review it when https://github.com/DSpace/dspace-angular/issues/739 is fixed
+ if (responseRD.hasSucceeded || responseRD.statusCode === 201) {
this.notificationsService.success(null, this.translate.get('resource-policies.create.page.success.content'));
this.redirectToAuthorizationsPage();
} else {
diff --git a/src/app/shared/resource-policies/edit/resource-policy-edit.component.spec.ts b/src/app/shared/resource-policies/edit/resource-policy-edit.component.spec.ts
index b124da0219..366f705fd6 100644
--- a/src/app/shared/resource-policies/edit/resource-policy-edit.component.spec.ts
+++ b/src/app/shared/resource-policies/edit/resource-policy-edit.component.spec.ts
@@ -137,28 +137,32 @@ describe('ResourcePolicyEditComponent test suite', () => {
fixture.destroy();
});
- it('should init component properly', () => {
+ it('should init component properly', (done) => {
fixture.detectChanges();
expect(compAsAny.resourcePolicy).toEqual(resourcePolicy);
+ done();
});
- it('should redirect to authorizations page', () => {
+ it('should redirect to authorizations page', (done) => {
comp.redirectToAuthorizationsPage();
expect(compAsAny.router.navigate).toHaveBeenCalled();
+ done();
});
- it('should return true when is Processing', () => {
+ it('should return true when is Processing', (done) => {
compAsAny.processing$.next(true);
expect(comp.isProcessing()).toBeObservable(cold('a', {
a: true
}));
+ done();
});
- it('should return false when is not Processing', () => {
+ it('should return false when is not Processing', (done) => {
compAsAny.processing$.next(false);
expect(comp.isProcessing()).toBeObservable(cold('a', {
a: false
}));
+ done();
});
describe('', () => {
diff --git a/src/app/shared/resource-policies/edit/resource-policy-edit.component.ts b/src/app/shared/resource-policies/edit/resource-policy-edit.component.ts
index b6d13a9b1f..a2dd957bb7 100644
--- a/src/app/shared/resource-policies/edit/resource-policy-edit.component.ts
+++ b/src/app/shared/resource-policies/edit/resource-policy-edit.component.ts
@@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { BehaviorSubject, Observable } from 'rxjs';
-import { first, map, take } from 'rxjs/operators';
+import { map, take } from 'rxjs/operators';
import { TranslateService } from '@ngx-translate/core';
import { ResourcePolicyService } from '../../../core/resource-policy/resource-policy.service';
@@ -12,6 +12,7 @@ import { ResourcePolicy } from '../../../core/resource-policy/models/resource-po
import { ResourcePolicyEvent } from '../form/resource-policy-form.component';
import { RESOURCE_POLICY } from '../../../core/resource-policy/models/resource-policy.resource-type';
import { ITEM_EDIT_AUTHORIZATIONS_PATH } from '../../../+item-page/edit-item-page/edit-item-page.routing-paths';
+import { getSucceededRemoteWithNotEmptyDataOrFailed } from '../../../core/shared/operators';
@Component({
selector: 'ds-resource-policy-edit',
@@ -88,10 +89,11 @@ export class ResourcePolicyEditComponent implements OnInit {
_links: this.resourcePolicy._links
});
this.resourcePolicyService.update(updatedObject).pipe(
- first((response: RemoteData) => !response.isResponsePending)
+ getSucceededRemoteWithNotEmptyDataOrFailed(),
+ take(1)
).subscribe((responseRD: RemoteData) => {
this.processing$.next(false);
- if (responseRD.hasSucceeded) {
+ if (responseRD && responseRD.hasSucceeded) {
this.notificationsService.success(null, this.translate.get('resource-policies.edit.page.success.content'));
this.redirectToAuthorizationsPage();
} else {
diff --git a/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.ts b/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.ts
index 9671b41ec4..7a20fd5ff0 100644
--- a/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.ts
+++ b/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.ts
@@ -1,9 +1,7 @@
import { Component, OnInit } from '@angular/core';
-
import { FilterType } from '../../../filter-type.model';
import { facetLoad, SearchFacetFilterComponent } from '../search-facet-filter/search-facet-filter.component';
import { renderFacetFor } from '../search-filter-type-decorator';
-import { FacetValue } from '../../../facet-value.model';
@Component({
selector: 'ds-search-authority-filter',
@@ -17,20 +15,4 @@ import { FacetValue } from '../../../facet-value.model';
*/
@renderFacetFor(FilterType.authority)
export class SearchAuthorityFilterComponent extends SearchFacetFilterComponent implements OnInit {
-
- /**
- * TODO to review after https://github.com/DSpace/dspace-angular/issues/368 is resolved
- * Retrieve facet value from search link
- */
- protected getFacetValue(facet: FacetValue): string {
- const search = facet._links.search.href;
- const hashes = search.slice(search.indexOf('?') + 1).split('&');
- const params = {};
- hashes.map((hash) => {
- const [key, val] = hash.split('=');
- params[key] = decodeURIComponent(val);
- });
-
- return params[this.filterConfig.paramName];
- }
}
diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.spec.ts b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.spec.ts
index 4f85411d85..ba6eceeede 100644
--- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.spec.ts
+++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.spec.ts
@@ -130,7 +130,7 @@ describe('SearchFacetOptionComponent', () => {
comp.addQueryParams = {};
(comp as any).updateAddParams(selectedValues);
expect(comp.addQueryParams).toEqual({
- [mockFilterConfig.paramName]: [value1, value.value],
+ [mockFilterConfig.paramName]: [`${value1},${operator}`, value.value + ',equals'],
page: 1
});
});
@@ -145,7 +145,7 @@ describe('SearchFacetOptionComponent', () => {
comp.addQueryParams = {};
(comp as any).updateAddParams(selectedValues);
expect(comp.addQueryParams).toEqual({
- [mockAuthorityFilterConfig.paramName]: [value1, `${value2},${operator}`],
+ [mockAuthorityFilterConfig.paramName]: [value1 + ',equals', `${value2},${operator}`],
page: 1
});
});
diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.ts b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.ts
index ca4ab10fc3..c6d7f4ac7c 100644
--- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.ts
+++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.ts
@@ -8,8 +8,8 @@ import { SearchService } from '../../../../../../core/shared/search/search.servi
import { SearchFilterService } from '../../../../../../core/shared/search/search-filter.service';
import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service';
import { hasValue } from '../../../../../empty.util';
-import { FilterType } from '../../../../filter-type.model';
import { currentPath } from '../../../../../utils/route.utils';
+import { getFacetValueForType } from '../../../../search.utils';
@Component({
selector: 'ds-search-facet-option',
@@ -102,7 +102,7 @@ export class SearchFacetOptionComponent implements OnInit, OnDestroy {
*/
private updateAddParams(selectedValues: FacetValue[]): void {
this.addQueryParams = {
- [this.filterConfig.paramName]: [...selectedValues.map((facetValue: FacetValue) => facetValue.label), this.getFacetValue()],
+ [this.filterConfig.paramName]: [...selectedValues.map((facetValue: FacetValue) => getFacetValueForType(facetValue, this.filterConfig)), this.getFacetValue()],
page: 1
};
}
@@ -112,19 +112,7 @@ export class SearchFacetOptionComponent implements OnInit, OnDestroy {
* Retrieve facet value related to facet type
*/
private getFacetValue(): string {
- if (this.filterConfig.type === FilterType.authority) {
- const search = this.filterValue._links.search.href;
- const hashes = search.slice(search.indexOf('?') + 1).split('&');
- const params = {};
- hashes.map((hash) => {
- const [key, val] = hash.split('=');
- params[key] = decodeURIComponent(val);
- });
-
- return params[this.filterConfig.paramName];
- } else {
- return this.filterValue.value;
- }
+ return getFacetValueForType(this.filterValue, this.filterConfig);
}
/**
diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.html b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.html
index a27a5d3d86..4bcfc02966 100644
--- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.html
+++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.html
@@ -3,6 +3,6 @@
[queryParams]="removeQueryParams" queryParamsHandling="merge">
- {{ 'search.filters.' + filterConfig.name + '.' + selectedValue.value | translate: {default: selectedValue.value} }}
+ {{ 'search.filters.' + filterConfig.name + '.' + selectedValue.value | translate: {default: selectedValue.label} }}
diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.ts b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.ts
index b085ef7bf5..159effe751 100644
--- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.ts
+++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.ts
@@ -7,8 +7,8 @@ import { SearchFilterService } from '../../../../../../core/shared/search/search
import { hasValue } from '../../../../../empty.util';
import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service';
import { FacetValue } from '../../../../facet-value.model';
-import { FilterType } from '../../../../filter-type.model';
import { currentPath } from '../../../../../utils/route.utils';
+import { getFacetValueForType } from '../../../../search.utils';
@Component({
selector: 'ds-search-facet-selected-option',
@@ -101,19 +101,7 @@ export class SearchFacetSelectedOptionComponent implements OnInit, OnDestroy {
* Retrieve facet value related to facet type
*/
private getFacetValue(facetValue: FacetValue): string {
- if (this.filterConfig.type === FilterType.authority) {
- const search = facetValue._links.search.href;
- const hashes = search.slice(search.indexOf('?') + 1).split('&');
- const params = {};
- hashes.map((hash) => {
- const [key, val] = hash.split('=');
- params[key] = decodeURIComponent(val);
- });
-
- return params[this.filterConfig.paramName];
- } else {
- return facetValue.value;
- }
+ return getFacetValueForType(facetValue, this.filterConfig);
}
/**
diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts b/src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts
index 9e35f346ce..385f2e9492 100644
--- a/src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts
+++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts
@@ -208,7 +208,7 @@ describe('SearchFacetFilterComponent', () => {
it('should call navigate on the router with the right searchlink and parameters', () => {
expect(router.navigate).toHaveBeenCalledWith(searchUrl.split('/'), {
- queryParams: { [mockFilterConfig.paramName]: [...selectedValues, testValue] },
+ queryParams: { [mockFilterConfig.paramName]: [...selectedValues.map((value) => `${value},equals`), testValue] },
queryParamsHandling: 'merge'
});
});
diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts b/src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts
index a3d899fbf9..1f38e700a2 100644
--- a/src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts
+++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts
@@ -25,6 +25,7 @@ import { InputSuggestion } from '../../../../input-suggestions/input-suggestions
import { SearchOptions } from '../../../search-options.model';
import { SEARCH_CONFIG_SERVICE } from '../../../../../+my-dspace-page/my-dspace-page.component';
import { currentPath } from '../../../../utils/route.utils';
+import { getFacetValueForType, stripOperatorFromFilterValue } from '../../../search.utils';
@Component({
selector: 'ds-search-facet-filter',
@@ -148,7 +149,7 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy {
if (hasValue(fValue)) {
return fValue;
}
- return Object.assign(new FacetValue(), { label: value, value: value });
+ return Object.assign(new FacetValue(), { label: stripOperatorFromFilterValue(value), value: value });
});
})
);
@@ -287,9 +288,7 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy {
return rd.payload.page.map((facet) => {
return {
displayValue: this.getDisplayValue(facet, data),
- value: this.getFacetValue(facet)
- };
- });
+ value: stripOperatorFromFilterValue(this.getFacetValue(facet))
}
));
}
@@ -303,7 +302,7 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy {
* Retrieve facet value
*/
protected getFacetValue(facet: FacetValue): string {
- return facet.value;
+ return getFacetValueForType(facet, this.filterConfig);
}
/**
diff --git a/src/app/shared/search/search-filters/search-filter/search-text-filter/search-text-filter.component.ts b/src/app/shared/search/search-filters/search-filter/search-text-filter/search-text-filter.component.ts
index 678cbbfdd5..b2b44ce219 100644
--- a/src/app/shared/search/search-filters/search-filter/search-text-filter/search-text-filter.component.ts
+++ b/src/app/shared/search/search-filters/search-filter/search-text-filter/search-text-filter.component.ts
@@ -5,6 +5,9 @@ import {
SearchFacetFilterComponent
} from '../search-facet-filter/search-facet-filter.component';
import { renderFacetFor } from '../search-filter-type-decorator';
+import {
+ addOperatorToFilterValue,
+} from '../../../search.utils';
/**
* This component renders a simple item page.
@@ -24,4 +27,12 @@ import { renderFacetFor } from '../search-filter-type-decorator';
*/
@renderFacetFor(FilterType.text)
export class SearchTextFilterComponent extends SearchFacetFilterComponent implements OnInit {
+ /**
+ * Submits a new active custom value to the filter from the input field
+ * Overwritten method from parent component, adds the "query" operator to the received data before passing it on
+ * @param data The string from the input field
+ */
+ onSubmit(data: any) {
+ super.onSubmit(addOperatorToFilterValue(data, 'query'));
+ }
}
diff --git a/src/app/shared/search/search-labels/search-labels.component.ts b/src/app/shared/search/search-labels/search-labels.component.ts
index 154b888269..2322c80acf 100644
--- a/src/app/shared/search/search-labels/search-labels.component.ts
+++ b/src/app/shared/search/search-labels/search-labels.component.ts
@@ -3,6 +3,8 @@ import { SEARCH_CONFIG_SERVICE } from '../../../+my-dspace-page/my-dspace-page.c
import { Observable } from 'rxjs';
import { Params, Router } from '@angular/router';
import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service';
+import { map } from 'rxjs/operators';
+import { stripOperatorFromFilterValue } from '../search.utils';
@Component({
selector: 'ds-search-labels',
@@ -30,6 +32,15 @@ export class SearchLabelsComponent {
constructor(
protected router: Router,
@Inject(SEARCH_CONFIG_SERVICE) public searchConfigService: SearchConfigurationService) {
- this.appliedFilters = this.searchConfigService.getCurrentFrontendFilters();
+ this.appliedFilters = this.searchConfigService.getCurrentFrontendFilters().pipe(
+ map((params) => {
+ const labels = {};
+ Object.keys(params)
+ .forEach((key) => {
+ labels[key] = [...params[key].map((value) => stripOperatorFromFilterValue(value))];
+ });
+ return labels;
+ })
+ );
}
}
diff --git a/src/app/shared/search/search.utils.spec.ts b/src/app/shared/search/search.utils.spec.ts
new file mode 100644
index 0000000000..a14085c2d3
--- /dev/null
+++ b/src/app/shared/search/search.utils.spec.ts
@@ -0,0 +1,52 @@
+import { FacetValue } from './facet-value.model';
+import { SearchFilterConfig } from './search-filter-config.model';
+import { addOperatorToFilterValue, getFacetValueForType, stripOperatorFromFilterValue } from './search.utils';
+
+describe('Search Utils', () => {
+ describe('getFacetValueForType', () => {
+ let facetValueWithSearchHref: FacetValue;
+ let facetValueWithoutSearchHref: FacetValue;
+ let searchFilterConfig: SearchFilterConfig;
+
+ beforeEach(() => {
+ facetValueWithSearchHref = Object.assign(new FacetValue(), {
+ value: 'Value with search href',
+ _links: {
+ search: {
+ href: 'rest/api/search?f.otherFacet=Other facet value,operator&f.facetName=Value with search href,operator'
+ }
+ }
+ });
+ facetValueWithoutSearchHref = Object.assign(new FacetValue(), {
+ value: 'Value without search href'
+ });
+ searchFilterConfig = Object.assign(new SearchFilterConfig(), {
+ name: 'facetName'
+ });
+ });
+
+ it('should retrieve the correct value from the search href', () => {
+ expect(getFacetValueForType(facetValueWithSearchHref, searchFilterConfig)).toEqual('Value with search href,operator');
+ });
+
+ it('should return the facet value with an equals operator by default', () => {
+ expect(getFacetValueForType(facetValueWithoutSearchHref, searchFilterConfig)).toEqual('Value without search href,equals');
+ });
+ });
+
+ describe('stripOperatorFromFilterValue', () => {
+ it('should strip the operator from the value', () => {
+ expect(stripOperatorFromFilterValue('value,operator')).toEqual('value');
+ });
+ });
+
+ describe('addOperatorToFilterValue', () => {
+ it('should add the operator to the value', () => {
+ expect(addOperatorToFilterValue('value', 'operator')).toEqual('value,operator');
+ });
+
+ it('shouldn\'t add the operator to the value if it already contains the operator', () => {
+ expect(addOperatorToFilterValue('value,operator', 'operator')).toEqual('value,operator');
+ });
+ });
+});
diff --git a/src/app/shared/search/search.utils.ts b/src/app/shared/search/search.utils.ts
new file mode 100644
index 0000000000..05a9711435
--- /dev/null
+++ b/src/app/shared/search/search.utils.ts
@@ -0,0 +1,44 @@
+import { FacetValue } from './facet-value.model';
+import { SearchFilterConfig } from './search-filter-config.model';
+import { isNotEmpty } from '../empty.util';
+
+/**
+ * Get a facet's value by matching its parameter in the search href, this will include the operator of the facet value
+ * If the {@link FacetValue} doesn't contain a search link, its raw value will be returned as a fallback
+ * @param facetValue
+ * @param searchFilterConfig
+ */
+export function getFacetValueForType(facetValue: FacetValue, searchFilterConfig: SearchFilterConfig): string {
+ const regex = new RegExp(`[?|&]${searchFilterConfig.paramName}=(${facetValue.value}[^&]*)`, 'g');
+ if (isNotEmpty(facetValue._links)) {
+ const values = regex.exec(facetValue._links.search.href);
+ if (isNotEmpty(values)) {
+ return values[1];
+ }
+ }
+ return addOperatorToFilterValue(facetValue.value, 'equals');
+}
+
+/**
+ * Strip the operator from a filter value
+ * Warning: This expects the value to end with an operator, otherwise it might strip unwanted content
+ * @param value
+ */
+export function stripOperatorFromFilterValue(value: string) {
+ if (value.lastIndexOf(',') > -1) {
+ return value.substring(0, value.lastIndexOf(','));
+ }
+ return value;
+}
+
+/**
+ * Add an operator to a string
+ * @param value
+ * @param operator
+ */
+export function addOperatorToFilterValue(value: string, operator: string) {
+ if (!value.endsWith(`,${operator}`)) {
+ return `${value},${operator}`;
+ }
+ return value;
+}
diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts
index 35a9260dae..78a6f476cd 100644
--- a/src/app/shared/shared.module.ts
+++ b/src/app/shared/shared.module.ts
@@ -20,7 +20,7 @@ import { ComcolRoleComponent } from './comcol-forms/edit-comcol-page/comcol-role
import { ConfirmationModalComponent } from './confirmation-modal/confirmation-modal.component';
import { ExportMetadataSelectorComponent } from './dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component';
import { FileDropzoneNoUploaderComponent } from './file-dropzone-no-uploader/file-dropzone-no-uploader.component';
-import { PublicationListElementComponent } from './object-list/item-list-element/item-types/publication/publication-list-element.component';
+import { ItemListElementComponent } from './object-list/item-list-element/item-types/item/item-list-element.component';
import { EnumKeysPipe } from './utils/enum-keys-pipe';
import { FileSizePipe } from './utils/file-size-pipe';
import { MetadataFieldValidator } from './utils/metadatafield-validator.directive';
@@ -158,13 +158,12 @@ import { ItemSelectComponent } from './object-select/item-select/item-select.com
import { CollectionSelectComponent } from './object-select/collection-select/collection-select.component';
import { FilterInputSuggestionsComponent } from './input-suggestions/filter-suggestions/filter-input-suggestions.component';
import { DsoInputSuggestionsComponent } from './input-suggestions/dso-input-suggestions/dso-input-suggestions.component';
-import { PublicationGridElementComponent } from './object-grid/item-grid-element/item-types/publication/publication-grid-element.component';
-import { ItemTypeBadgeComponent } from './object-list/item-type-badge/item-type-badge.component';
+import { ItemGridElementComponent } from './object-grid/item-grid-element/item-types/item/item-grid-element.component';
+import { TypeBadgeComponent } from './object-list/type-badge/type-badge.component';
import { MetadataRepresentationLoaderComponent } from './metadata-representation/metadata-representation-loader.component';
import { MetadataRepresentationDirective } from './metadata-representation/metadata-representation.directive';
import { ListableObjectComponentLoaderComponent } from './object-collection/shared/listable-object/listable-object-component-loader.component';
-import { PublicationSearchResultListElementComponent } from './object-list/search-result-list-element/item-search-result/item-types/publication/publication-search-result-list-element.component';
-import { PublicationSearchResultGridElementComponent } from './object-grid/search-result-grid-element/item-search-result/publication/publication-search-result-grid-element.component';
+import { ItemSearchResultListElementComponent } from './object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component';
import { ListableObjectDirective } from './object-collection/shared/listable-object/listable-object.directive';
import { SearchLabelComponent } from './search/search-labels/search-label/search-label.component';
import { ItemMetadataRepresentationListElementComponent } from './object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component';
@@ -216,6 +215,9 @@ import { AuthorizedCollectionSelectorComponent } from './dso-selector/dso-select
import { DsoPageEditButtonComponent } from './dso-page/dso-page-edit-button/dso-page-edit-button.component';
import { HoverClassDirective } from './hover-class.directive';
import { ValidationSuggestionsComponent } from './input-suggestions/validation-suggestions/validation-suggestions.component';
+import { ItemSearchResultGridElementComponent } from './object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component';
+import { ResourcePolicyEditComponent } from './resource-policies/edit/resource-policy-edit.component';
+import { ResourcePolicyCreateComponent } from './resource-policies/create/resource-policy-create.component';
const MODULES = [
// Do NOT include UniversalModule, HttpModule, or JsonpModule here
@@ -376,7 +378,7 @@ const COMPONENTS = [
BrowseByComponent,
AbstractTrackableComponent,
ComcolMetadataComponent,
- ItemTypeBadgeComponent,
+ TypeBadgeComponent,
BrowseByComponent,
AbstractTrackableComponent,
CustomSwitchComponent,
@@ -392,12 +394,14 @@ const COMPONENTS = [
LogInPasswordComponent,
LogInContainerComponent,
ItemVersionsComponent,
- PublicationSearchResultListElementComponent,
+ ItemSearchResultListElementComponent,
ItemVersionsNoticeComponent,
ModifyItemOverviewComponent,
ImpersonateNavbarComponent,
ResourcePoliciesComponent,
ResourcePolicyFormComponent,
+ ResourcePolicyEditComponent,
+ ResourcePolicyCreateComponent,
EpersonGroupListComponent,
EpersonSearchBoxComponent,
GroupSearchBoxComponent,
@@ -411,6 +415,11 @@ const COMPONENTS = [
PublicationListElementComponent,
SearchResultListElementComponent,
SearchResultGridElementComponent,
+ ItemListElementComponent,
+ ItemGridElementComponent,
+ ItemSearchResultListElementComponent,
+ ItemSearchResultGridElementComponent,
+ BrowseEntryListElementComponent,
SearchResultDetailElementComponent,
BrowseEntryListElementComponent,
PlainTextMetadataListElementComponent,
diff --git a/src/app/shared/utils/relation-query.utils.spec.ts b/src/app/shared/utils/relation-query.utils.spec.ts
index f70e904422..f40c331497 100644
--- a/src/app/shared/utils/relation-query.utils.spec.ts
+++ b/src/app/shared/utils/relation-query.utils.spec.ts
@@ -6,13 +6,13 @@ describe('Relation Query Utils', () => {
describe('getQueryByRelations', () => {
it('Should return the correct query based on relationtype and uuid', () => {
const result = getQueryByRelations(relationtype, itemUUID);
- expect(result).toEqual('query=relation.isAuthorOfPublication:a7939af0-36ad-430d-af09-7be8b0a4dadd');
+ expect(result).toEqual('query=relation.isAuthorOfPublication:"a7939af0-36ad-430d-af09-7be8b0a4dadd"');
});
});
describe('getFilterByRelation', () => {
it('Should return the correct query based on relationtype and uuid', () => {
const result = getFilterByRelation(relationtype, itemUUID);
- expect(result).toEqual('f.isAuthorOfPublication=a7939af0-36ad-430d-af09-7be8b0a4dadd');
+ expect(result).toEqual('f.isAuthorOfPublication=a7939af0-36ad-430d-af09-7be8b0a4dadd,equals');
});
});
});
diff --git a/src/app/shared/utils/relation-query.utils.ts b/src/app/shared/utils/relation-query.utils.ts
index 74f9e64cc9..13248c5a6b 100644
--- a/src/app/shared/utils/relation-query.utils.ts
+++ b/src/app/shared/utils/relation-query.utils.ts
@@ -5,7 +5,7 @@
* @returns {string} Query
*/
export function getQueryByRelations(relationType: string, itemUUID: string): string {
- return `query=relation.${relationType}:${itemUUID}`;
+ return `query=relation.${relationType}:"${itemUUID}"`;
}
/**
@@ -14,5 +14,5 @@ export function getQueryByRelations(relationType: string, itemUUID: string): str
* @param itemUUID The item's UUID
*/
export function getFilterByRelation(relationType: string, itemUUID: string): string {
- return `f.${relationType}=${itemUUID}`;
+ return `f.${relationType}=${itemUUID},equals`;
}
diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5
index 908ed25c47..cf2df7c9df 100644
--- a/src/assets/i18n/en.json5
+++ b/src/assets/i18n/en.json5
@@ -715,6 +715,10 @@
"collection.edit.tabs.curate.title": "Collection Edit - Curate",
+ "collection.edit.tabs.authorizations.head": "Authorizations",
+
+ "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations",
+
"collection.edit.tabs.metadata.head": "Edit Metadata",
"collection.edit.tabs.metadata.title": "Collection Edit - Metadata",
@@ -801,6 +805,10 @@
+ "collection.listelement.badge": "Collection",
+
+
+
"collection.page.browse.recent.head": "Recent Submissions",
"collection.page.browse.recent.empty": "No items to show",
@@ -902,6 +910,14 @@
"community.edit.tabs.roles.title": "Community Edit - Roles",
+ "community.edit.tabs.authorizations.head": "Authorizations",
+
+ "community.edit.tabs.authorizations.title": "Community Edit - Authorizations",
+
+
+
+ "community.listelement.badge": "Community",
+
"comcol-role.edit.no-group": "None",
@@ -1717,6 +1733,28 @@
+ "item.listelement.badge": "Item",
+
+ "item.page.description": "Description",
+
+ "item.page.edit": "Edit this item",
+
+ "item.page.journal-issn": "Journal ISSN",
+
+ "item.page.journal-title": "Journal Title",
+
+ "item.page.publisher": "Publisher",
+
+ "item.page.titleprefix": "Item: ",
+
+ "item.page.volume-title": "Volume Title",
+
+ "item.search.results.head": "Item Search Results",
+
+ "item.search.title": "DSpace Angular :: Item Search",
+
+
+
"item.page.abstract": "Abstract",
"item.page.author": "Authors",
@@ -2650,6 +2688,10 @@
"resource-policies.add.for.item": "Add a new Item policy",
+ "resource-policies.add.for.community": "Add a new Community policy",
+
+ "resource-policies.add.for.collection": "Add a new Collection policy",
+
"resource-policies.create.page.heading": "Create new resource policy for ",
"resource-policies.create.page.failure.content": "An error occurred while creating the resource policy.",
@@ -2732,6 +2774,10 @@
"resource-policies.table.headers.title.for.item": "Policies for Item",
+ "resource-policies.table.headers.title.for.community": "Policies for Community",
+
+ "resource-policies.table.headers.title.for.collection": "Policies for Collection",
+
"search.description": "",