From 4cc1f55272e0637538dde5c08a563b865cce8c6c Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 3 Oct 2019 17:50:48 +0200 Subject: [PATCH] 65272: EditItemTemplatePageComponent --- .../collection-page-routing.module.ts | 15 ++++++++++- .../collection-page.module.ts | 4 ++- .../edit-item-template-page.component.html | 2 ++ .../edit-item-template-page.component.ts | 25 +++++++++++++++++ .../item-template-page.resolver.ts | 27 +++++++++++++++++++ 5 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/app/+collection-page/edit-item-template-page/edit-item-template-page.component.html create mode 100644 src/app/+collection-page/edit-item-template-page/edit-item-template-page.component.ts create mode 100644 src/app/+collection-page/edit-item-template-page/item-template-page.resolver.ts diff --git a/src/app/+collection-page/collection-page-routing.module.ts b/src/app/+collection-page/collection-page-routing.module.ts index ad142e8fcf..2ad0346da5 100644 --- a/src/app/+collection-page/collection-page-routing.module.ts +++ b/src/app/+collection-page/collection-page-routing.module.ts @@ -9,6 +9,8 @@ import { CreateCollectionPageGuard } from './create-collection-page/create-colle import { DeleteCollectionPageComponent } from './delete-collection-page/delete-collection-page.component'; import { URLCombiner } from '../core/url-combiner/url-combiner'; import { getCollectionModulePath } from '../app-routing.module'; +import { EditItemTemplatePageComponent } from './edit-item-template-page/edit-item-template-page.component'; +import { ItemTemplatePageResolver } from './edit-item-template-page/item-template-page.resolver'; export const COLLECTION_PARENT_PARAMETER = 'parent'; @@ -26,6 +28,7 @@ export function getCollectionCreatePath() { const COLLECTION_CREATE_PATH = 'create'; const COLLECTION_EDIT_PATH = ':id/edit'; +const ITEMTEMPLATE_PATH = ':id/itemtemplate'; @NgModule({ imports: [ @@ -49,6 +52,15 @@ const COLLECTION_EDIT_PATH = ':id/edit'; dso: CollectionPageResolver } }, + { + path: ITEMTEMPLATE_PATH, + component: EditItemTemplatePageComponent, + canActivate: [AuthenticatedGuard], + resolve: { + collection: CollectionPageResolver, + item: ItemTemplatePageResolver + } + }, { path: ':id', component: CollectionPageComponent, @@ -61,7 +73,8 @@ const COLLECTION_EDIT_PATH = ':id/edit'; ], providers: [ CollectionPageResolver, - CreateCollectionPageGuard + CreateCollectionPageGuard, + ItemTemplatePageResolver ] }) export class CollectionPageRoutingModule { diff --git a/src/app/+collection-page/collection-page.module.ts b/src/app/+collection-page/collection-page.module.ts index f7059deda0..d9cc0b1b14 100644 --- a/src/app/+collection-page/collection-page.module.ts +++ b/src/app/+collection-page/collection-page.module.ts @@ -9,6 +9,7 @@ import { CreateCollectionPageComponent } from './create-collection-page/create-c import { CollectionFormComponent } from './collection-form/collection-form.component'; import { DeleteCollectionPageComponent } from './delete-collection-page/delete-collection-page.component'; import { SearchService } from '../+search-page/search-service/search.service'; +import { EditItemTemplatePageComponent } from './edit-item-template-page/edit-item-template-page.component'; @NgModule({ imports: [ @@ -20,7 +21,8 @@ import { SearchService } from '../+search-page/search-service/search.service'; CollectionPageComponent, CreateCollectionPageComponent, DeleteCollectionPageComponent, - CollectionFormComponent + CollectionFormComponent, + EditItemTemplatePageComponent ], exports: [ CollectionFormComponent diff --git a/src/app/+collection-page/edit-item-template-page/edit-item-template-page.component.html b/src/app/+collection-page/edit-item-template-page/edit-item-template-page.component.html new file mode 100644 index 0000000000..11c51c5a2c --- /dev/null +++ b/src/app/+collection-page/edit-item-template-page/edit-item-template-page.component.html @@ -0,0 +1,2 @@ + + diff --git a/src/app/+collection-page/edit-item-template-page/edit-item-template-page.component.ts b/src/app/+collection-page/edit-item-template-page/edit-item-template-page.component.ts new file mode 100644 index 0000000000..38ef0439b5 --- /dev/null +++ b/src/app/+collection-page/edit-item-template-page/edit-item-template-page.component.ts @@ -0,0 +1,25 @@ +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs/internal/Observable'; +import { RemoteData } from '../../core/data/remote-data'; +import { Collection } from '../../core/shared/collection.model'; +import { Item } from '../../core/shared/item.model'; +import { ActivatedRoute } from '@angular/router'; +import { first, map } from 'rxjs/operators'; + +@Component({ + selector: 'ds-edit-item-template-page', + templateUrl: './edit-item-template-page.component.html', +}) +export class EditItemTemplatePageComponent implements OnInit { + collectionRD$: Observable>; + itemRD$: Observable>; + + constructor(protected route: ActivatedRoute) { + } + + ngOnInit(): void { + this.collectionRD$ = this.route.parent.data.pipe(first(), map((data) => data.collection)); + this.itemRD$ = this.route.parent.data.pipe(first(), map((data) => data.item)); + } + +} diff --git a/src/app/+collection-page/edit-item-template-page/item-template-page.resolver.ts b/src/app/+collection-page/edit-item-template-page/item-template-page.resolver.ts new file mode 100644 index 0000000000..dc2b3dc209 --- /dev/null +++ b/src/app/+collection-page/edit-item-template-page/item-template-page.resolver.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { RemoteData } from '../../core/data/remote-data'; +import { Item } from '../../core/shared/item.model'; +import { ItemTemplateDataService } from '../../core/data/item-template-data.service'; +import { Observable } from 'rxjs/internal/Observable'; +import { find } from 'rxjs/operators'; +import { hasValue } from '../../shared/empty.util'; + +@Injectable() +export class ItemTemplatePageResolver implements Resolve> { + constructor(private itemTemplateService: ItemTemplateDataService) { + } + + /** + * Method for resolving a collection's template item based on the parameters in the current route + * @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot + * @param {RouterStateSnapshot} state The current RouterStateSnapshot + * @returns Observable<> Emits the found template item based on the parameters in the current route, + * or an error if something went wrong + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable> { + return this.itemTemplateService.findByCollectionID(route.params.id).pipe( + find((RD) => hasValue(RD.error) || RD.hasSucceeded), + ); + } +}