#150 Intermediate commit

This commit is contained in:
Jonas Van Goolen
2017-11-02 13:43:02 +01:00
parent e7e129f80f
commit 67356efaab
21 changed files with 66 additions and 64 deletions

View File

@@ -2,7 +2,7 @@ import { Component, Input } from '@angular/core';
import { RemoteData } from '../../core/data/remote-data'; import { RemoteData } from '../../core/data/remote-data';
import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model';
import { fadeIn, fadeInOut } from '../../shared/animations/fade'; import { fadeIn, fadeInOut } from '../../shared/animations/fade';
import { SearchOptions } from '../search-options.model'; import { SearchOptions, ViewMode } from '../search-options.model';
import { SortOptions } from '../../core/cache/models/sort-options.model'; import { SortOptions } from '../../core/cache/models/sort-options.model';
import { SearchResult } from '../search-result.model'; import { SearchResult } from '../search-result.model';
@@ -23,4 +23,5 @@ export class SearchResultsComponent {
@Input() searchResults: RemoteData<Array<SearchResult<DSpaceObject>>>; @Input() searchResults: RemoteData<Array<SearchResult<DSpaceObject>>>;
@Input() searchConfig: SearchOptions; @Input() searchConfig: SearchOptions;
@Input() sortConfig: SortOptions; @Input() sortConfig: SortOptions;
@Input() viewMode: ViewMode;
} }

View File

@@ -0,0 +1,17 @@
import { GenericConstructor } from '../../core/shared/generic-constructor';
import { ListableObject } from './listable-object.model';
import { ViewMode } from '../../+search-page/search-options.model';
const dsoElementMap = new Map();
export function renderElementsFor(listable: GenericConstructor<ListableObject>, viewMode : ViewMode) {
return function decorator(objectElement: any) {
if (!objectElement) {
return;
}
dsoElementMap.set(listable+viewMode, objectElement);
};
}
export function rendersDSOType(listable: GenericConstructor<ListableObject>, viewMode : ViewMode) {
return dsoElementMap.get(listable+viewMode);
}

View File

@@ -2,7 +2,9 @@ import { Component, Inject } from '@angular/core';
import { Collection } from '../../core/shared/collection.model'; import { Collection } from '../../core/shared/collection.model';
import { ObjectGridElementComponent } from '../object-grid-element/object-grid-element.component'; import { ObjectGridElementComponent } from '../object-grid-element/object-grid-element.component';
import { gridElementFor } from '../grid-element-decorator'; import { renderElementsFor} from '../../object-collection/shared/dso-element-decorator';
import { ViewMode } from '../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-collection-grid-element', selector: 'ds-collection-grid-element',
@@ -10,5 +12,5 @@ import { gridElementFor } from '../grid-element-decorator';
templateUrl: './collection-grid-element.component.html' templateUrl: './collection-grid-element.component.html'
}) })
@gridElementFor(Collection) @renderElementsFor(Collection, ViewMode.Grid)
export class CollectionGridElementComponent extends ObjectGridElementComponent<Collection> {} export class CollectionGridElementComponent extends ObjectGridElementComponent<Collection> {}

View File

@@ -2,7 +2,8 @@ import { Component, Input, Inject } from '@angular/core';
import { Community } from '../../core/shared/community.model'; import { Community } from '../../core/shared/community.model';
import { ObjectGridElementComponent } from '../object-grid-element/object-grid-element.component'; import { ObjectGridElementComponent } from '../object-grid-element/object-grid-element.component';
import { gridElementFor} from '../grid-element-decorator'; import { renderElementsFor} from '../../object-collection/shared/dso-element-decorator';
import { ViewMode } from '../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-community-grid-element', selector: 'ds-community-grid-element',
@@ -10,5 +11,5 @@ import { gridElementFor} from '../grid-element-decorator';
templateUrl: './community-grid-element.component.html' templateUrl: './community-grid-element.component.html'
}) })
@gridElementFor(Community) @renderElementsFor(Community, ViewMode.Grid)
export class CommunityGridElementComponent extends ObjectGridElementComponent<Community> {} export class CommunityGridElementComponent extends ObjectGridElementComponent<Community> {}

View File

@@ -29,7 +29,7 @@
.card{ .card{
margin-bottom: $card-block-margin-base *3; margin-bottom: $card-block-margin-base *3;
height: 98%; height: $card-height-percentage;
} }
.card-img-top ::ng-deep img .card-img-top ::ng-deep img

View File

@@ -1,16 +0,0 @@
import { GenericConstructor } from '../core/shared/generic-constructor';
import { ListableObject } from '../object-collection/shared/listable-object.model';
const gridElementMap = new Map();
export function gridElementFor(gridable: GenericConstructor<ListableObject>) {
return function decorator(objectElement: any) {
if (!objectElement) {
return;
}
gridElementMap.set(gridable, objectElement);
};
}
export function getGridElementFor(gridable: GenericConstructor<ListableObject>) {
return gridElementMap.get(gridable);
}

View File

@@ -1,8 +1,9 @@
import { Component, Input, Inject } from '@angular/core'; import { Component, Input, Inject } from '@angular/core';
import { Item } from '../../core/shared/item.model'; import { Item } from '../../core/shared/item.model';
import { gridElementFor } from '../grid-element-decorator'; import { renderElementsFor} from '../../object-collection/shared/dso-element-decorator';
import { ObjectGridElementComponent } from '../object-grid-element/object-grid-element.component'; import { ObjectGridElementComponent } from '../object-grid-element/object-grid-element.component';
import { ViewMode } from '../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-item-grid-element', selector: 'ds-item-grid-element',
@@ -10,5 +11,5 @@ import { ObjectGridElementComponent } from '../object-grid-element/object-grid-e
templateUrl: './item-grid-element.component.html' templateUrl: './item-grid-element.component.html'
}) })
@gridElementFor(Item) @renderElementsFor(Item, ViewMode.Grid)
export class ItemGridElementComponent extends ObjectGridElementComponent<Item> {} export class ItemGridElementComponent extends ObjectGridElementComponent<Item> {}

View File

@@ -1,9 +1,11 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { gridElementFor } from '../../grid-element-decorator'; import { renderElementsFor} from '../../../object-collection/shared/dso-element-decorator';
import { CollectionSearchResult } from './collection-search-result.model'; import { CollectionSearchResult } from './collection-search-result.model';
import { SearchResultGridElementComponent } from '../search-result-grid-element.component'; import { SearchResultGridElementComponent } from '../search-result-grid-element.component';
import { Collection } from '../../../core/shared/collection.model'; import { Collection } from '../../../core/shared/collection.model';
import { ViewMode } from '../../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-collection-search-result-grid-element', selector: 'ds-collection-search-result-grid-element',
@@ -11,5 +13,5 @@ import { Collection } from '../../../core/shared/collection.model';
templateUrl: 'collection-search-result-grid-element.component.html' templateUrl: 'collection-search-result-grid-element.component.html'
}) })
@gridElementFor(CollectionSearchResult) @renderElementsFor(CollectionSearchResult, ViewMode.Grid)
export class CollectionSearchResultGridElementComponent extends SearchResultGridElementComponent<CollectionSearchResult, Collection> {} export class CollectionSearchResultGridElementComponent extends SearchResultGridElementComponent<CollectionSearchResult, Collection> {}

View File

@@ -2,8 +2,9 @@ import { Component } from '@angular/core';
import { CommunitySearchResult } from './community-search-result.model'; import { CommunitySearchResult } from './community-search-result.model';
import { Community } from '../../../core/shared/community.model'; import { Community } from '../../../core/shared/community.model';
import { gridElementFor } from '../../grid-element-decorator'; import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
import { SearchResultGridElementComponent } from '../search-result-grid-element.component'; import { SearchResultGridElementComponent } from '../search-result-grid-element.component';
import { ViewMode } from '../../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-community-search-result-grid-element', selector: 'ds-community-search-result-grid-element',
@@ -11,7 +12,7 @@ import { SearchResultGridElementComponent } from '../search-result-grid-element.
templateUrl: 'community-search-result-grid-element.component.html' templateUrl: 'community-search-result-grid-element.component.html'
}) })
@gridElementFor(CommunitySearchResult) @renderElementsFor(CommunitySearchResult, ViewMode.Grid)
export class CommunitySearchResultGridElementComponent extends SearchResultGridElementComponent<CommunitySearchResult, Community> { export class CommunitySearchResultGridElementComponent extends SearchResultGridElementComponent<CommunitySearchResult, Community> {
} }

View File

@@ -1,9 +1,10 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { gridElementFor } from '../../grid-element-decorator'; import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
import { SearchResultGridElementComponent } from '../search-result-grid-element.component'; import { SearchResultGridElementComponent } from '../search-result-grid-element.component';
import { Item } from '../../../core/shared/item.model'; import { Item } from '../../../core/shared/item.model';
import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model';
import { ViewMode } from '../../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-item-search-result-grid-element', selector: 'ds-item-search-result-grid-element',
@@ -11,5 +12,5 @@ import { ItemSearchResult } from '../../../object-collection/shared/item-search-
templateUrl: 'item-search-result-grid-element.component.html' templateUrl: 'item-search-result-grid-element.component.html'
}) })
@gridElementFor(ItemSearchResult) @renderElementsFor(ItemSearchResult, ViewMode.Grid)
export class ItemSearchResultGridElementComponent extends SearchResultGridElementComponent<ItemSearchResult, Item> {} export class ItemSearchResultGridElementComponent extends SearchResultGridElementComponent<ItemSearchResult, Item> {}

View File

@@ -1,7 +1,8 @@
import { Component, Input, Injector, ReflectiveInjector, OnInit } from '@angular/core'; import { Component, Input, Injector, ReflectiveInjector, OnInit } from '@angular/core';
import { GenericConstructor } from '../../core/shared/generic-constructor'; import { GenericConstructor } from '../../core/shared/generic-constructor';
import { getGridElementFor } from '../grid-element-decorator'; import { rendersDSOType } from '../../object-collection/shared/dso-element-decorator';
import { ListableObject } from '../../object-collection/shared/listable-object.model'; import { ListableObject } from '../../object-collection/shared/listable-object.model';
import { ViewMode } from '../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-wrapper-grid-element', selector: 'ds-wrapper-grid-element',
@@ -22,6 +23,6 @@ export class WrapperGridElementComponent implements OnInit {
getGridElement(): string { getGridElement(): string {
const f: GenericConstructor<ListableObject> = this.object.constructor as GenericConstructor<ListableObject>; const f: GenericConstructor<ListableObject> = this.object.constructor as GenericConstructor<ListableObject>;
return getGridElementFor(f); return rendersDSOType(f, ViewMode.Grid);
} }
} }

View File

@@ -2,7 +2,8 @@ import { Component, Inject } from '@angular/core';
import { Collection } from '../../core/shared/collection.model'; import { Collection } from '../../core/shared/collection.model';
import { ObjectListElementComponent } from '../object-list-element/object-list-element.component'; import { ObjectListElementComponent } from '../object-list-element/object-list-element.component';
import { listElementFor } from '../list-element-decorator'; import { renderElementsFor } from '../../object-collection/shared/dso-element-decorator';
import { ViewMode } from '../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-collection-list-element', selector: 'ds-collection-list-element',
@@ -10,5 +11,5 @@ import { listElementFor } from '../list-element-decorator';
templateUrl: './collection-list-element.component.html' templateUrl: './collection-list-element.component.html'
}) })
@listElementFor(Collection) @renderElementsFor(Collection, ViewMode.List)
export class CollectionListElementComponent extends ObjectListElementComponent<Collection> {} export class CollectionListElementComponent extends ObjectListElementComponent<Collection> {}

View File

@@ -2,7 +2,8 @@ import { Component, Input, Inject } from '@angular/core';
import { Community } from '../../core/shared/community.model'; import { Community } from '../../core/shared/community.model';
import { ObjectListElementComponent } from '../object-list-element/object-list-element.component'; import { ObjectListElementComponent } from '../object-list-element/object-list-element.component';
import { listElementFor } from '../list-element-decorator'; import { renderElementsFor } from '../../object-collection/shared/dso-element-decorator';
import { ViewMode } from '../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-community-list-element', selector: 'ds-community-list-element',
@@ -10,5 +11,5 @@ import { listElementFor } from '../list-element-decorator';
templateUrl: './community-list-element.component.html' templateUrl: './community-list-element.component.html'
}) })
@listElementFor(Community) @renderElementsFor(Community, ViewMode.List)
export class CommunityListElementComponent extends ObjectListElementComponent<Community> {} export class CommunityListElementComponent extends ObjectListElementComponent<Community> {}

View File

@@ -2,7 +2,8 @@ import { Component, Input, Inject } from '@angular/core';
import { Item } from '../../core/shared/item.model'; import { Item } from '../../core/shared/item.model';
import { ObjectListElementComponent } from '../object-list-element/object-list-element.component'; import { ObjectListElementComponent } from '../object-list-element/object-list-element.component';
import { listElementFor } from '../list-element-decorator'; import { renderElementsFor } from '../../object-collection/shared/dso-element-decorator';
import { ViewMode } from '../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-item-list-element', selector: 'ds-item-list-element',
@@ -10,5 +11,5 @@ import { listElementFor } from '../list-element-decorator';
templateUrl: './item-list-element.component.html' templateUrl: './item-list-element.component.html'
}) })
@listElementFor(Item) @renderElementsFor(Item, ViewMode.List)
export class ItemListElementComponent extends ObjectListElementComponent<Item> {} export class ItemListElementComponent extends ObjectListElementComponent<Item> {}

View File

@@ -1,16 +0,0 @@
import { GenericConstructor } from '../core/shared/generic-constructor';
import { ListableObject } from '../object-collection/shared/listable-object.model';
const listElementMap = new Map();
export function listElementFor(listable: GenericConstructor<ListableObject>) {
return function decorator(objectElement: any) {
if (!objectElement) {
return;
}
listElementMap.set(listable, objectElement);
};
}
export function getListElementFor(listable: GenericConstructor<ListableObject>) {
return listElementMap.get(listable);
}

View File

@@ -12,7 +12,7 @@
(paginationChange)="onPaginationChange($event)"> (paginationChange)="onPaginationChange($event)">
<ul *ngIf="objects?.hasSucceeded"> <!--class="list-unstyled"--> <ul *ngIf="objects?.hasSucceeded"> <!--class="list-unstyled"-->
<li *ngFor="let object of objects?.payload"> <li *ngFor="let object of objects?.payload">
<ds-wrapper-list-element [object]="object"></ds-wrapper-list-element> <ds-wrapper-list-element [object]="object"></ds-wrapper-list-element>
</li> </li>
</ul> </ul>
</ds-pagination> </ds-pagination>

View File

@@ -1,9 +1,10 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { listElementFor } from '../../list-element-decorator'; import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
import { CollectionSearchResult } from './collection-search-result.model'; import { CollectionSearchResult } from './collection-search-result.model';
import { SearchResultListElementComponent } from '../search-result-list-element.component'; import { SearchResultListElementComponent } from '../search-result-list-element.component';
import { Collection } from '../../../core/shared/collection.model'; import { Collection } from '../../../core/shared/collection.model';
import { ViewMode } from '../../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-collection-search-result-list-element', selector: 'ds-collection-search-result-list-element',
@@ -11,5 +12,5 @@ import { Collection } from '../../../core/shared/collection.model';
templateUrl: 'collection-search-result-list-element.component.html' templateUrl: 'collection-search-result-list-element.component.html'
}) })
@listElementFor(CollectionSearchResult) @renderElementsFor(CollectionSearchResult, ViewMode.List)
export class CollectionSearchResultListElementComponent extends SearchResultListElementComponent<CollectionSearchResult, Collection> {} export class CollectionSearchResultListElementComponent extends SearchResultListElementComponent<CollectionSearchResult, Collection> {}

View File

@@ -1,9 +1,10 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { listElementFor } from '../../list-element-decorator'; import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
import { CommunitySearchResult } from './community-search-result.model'; import { CommunitySearchResult } from './community-search-result.model';
import { SearchResultListElementComponent } from '../search-result-list-element.component'; import { SearchResultListElementComponent } from '../search-result-list-element.component';
import { Community } from '../../../core/shared/community.model'; import { Community } from '../../../core/shared/community.model';
import { ViewMode } from '../../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-community-search-result-list-element', selector: 'ds-community-search-result-list-element',
@@ -11,7 +12,7 @@ import { Community } from '../../../core/shared/community.model';
templateUrl: 'community-search-result-list-element.component.html' templateUrl: 'community-search-result-list-element.component.html'
}) })
@listElementFor(CommunitySearchResult) @renderElementsFor(CommunitySearchResult, ViewMode.List)
export class CommunitySearchResultListElementComponent extends SearchResultListElementComponent<CommunitySearchResult, Community> { export class CommunitySearchResultListElementComponent extends SearchResultListElementComponent<CommunitySearchResult, Community> {
} }

View File

@@ -1,9 +1,10 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { listElementFor } from '../../list-element-decorator'; import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
import { SearchResultListElementComponent } from '../search-result-list-element.component'; import { SearchResultListElementComponent } from '../search-result-list-element.component';
import { Item } from '../../../core/shared/item.model'; import { Item } from '../../../core/shared/item.model';
import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model';
import { ViewMode } from '../../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-item-search-result-list-element', selector: 'ds-item-search-result-list-element',
@@ -11,5 +12,5 @@ import { ItemSearchResult } from '../../../object-collection/shared/item-search-
templateUrl: 'item-search-result-list-element.component.html' templateUrl: 'item-search-result-list-element.component.html'
}) })
@listElementFor(ItemSearchResult) @renderElementsFor(ItemSearchResult, ViewMode.List)
export class ItemSearchResultListElementComponent extends SearchResultListElementComponent<ItemSearchResult, Item> {} export class ItemSearchResultListElementComponent extends SearchResultListElementComponent<ItemSearchResult, Item> {}

View File

@@ -1,7 +1,8 @@
import { Component, Input, Injector, ReflectiveInjector, OnInit } from '@angular/core'; import { Component, Input, Injector, ReflectiveInjector, OnInit } from '@angular/core';
import { getListElementFor } from '../list-element-decorator' import { rendersDSOType } from '../../object-collection/shared/dso-element-decorator'
import { GenericConstructor } from '../../core/shared/generic-constructor'; import { GenericConstructor } from '../../core/shared/generic-constructor';
import { ListableObject } from '../../object-collection/shared/listable-object.model'; import { ListableObject } from '../../object-collection/shared/listable-object.model';
import { ViewMode } from '../../+search-page/search-options.model';
@Component({ @Component({
selector: 'ds-wrapper-list-element', selector: 'ds-wrapper-list-element',
@@ -17,11 +18,10 @@ export class WrapperListElementComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
this.objectInjector = ReflectiveInjector.resolveAndCreate( this.objectInjector = ReflectiveInjector.resolveAndCreate(
[{provide: 'objectElementProvider', useFactory: () => (this.object) }], this.injector); [{provide: 'objectElementProvider', useFactory: () => (this.object) }], this.injector);
} }
getListElement(): string { getListElement(): string {
const f: GenericConstructor<ListableObject> = this.object.constructor as GenericConstructor<ListableObject>; const f: GenericConstructor<ListableObject> = this.object.constructor as GenericConstructor<ListableObject>;
return getListElementFor(f); return rendersDSOType(f, ViewMode.List);
} }
} }

View File

@@ -1,3 +1,4 @@
$content-spacing: $spacer * 1.5; $content-spacing: $spacer * 1.5;
$button-height: $input-btn-padding-y * 2 + $input-btn-line-height + calculateRem($input-btn-border-width*2); $button-height: $input-btn-padding-y * 2 + $input-btn-line-height + calculateRem($input-btn-border-width*2);
$card-height-percentage:98%;