diff --git a/src/app/+community-page/create-community-page/create-community-page.component.ts b/src/app/+community-page/create-community-page/create-community-page.component.ts index 04d5b8fd39..19e777a454 100644 --- a/src/app/+community-page/create-community-page/create-community-page.component.ts +++ b/src/app/+community-page/create-community-page/create-community-page.component.ts @@ -1,12 +1,8 @@ import { Component } from '@angular/core'; import { Community } from '../../core/shared/community.model'; -import { ComColDataService } from '../../core/data/comcol-data.service'; -import { NormalizedCommunity } from '../../core/cache/models/normalized-community.model'; import { CommunityDataService } from '../../core/data/community-data.service'; -import { ResponseCacheEntry } from '../../core/cache/response-cache.reducer'; -import { DSOSuccessResponse, ErrorResponse, RestResponse } from '../../core/cache/response-cache.models'; +import { ErrorResponse } from '../../core/cache/response-cache.models'; import { Observable } from 'rxjs/Observable'; -import { map } from 'rxjs/operators'; import { RouteService } from '../../shared/services/route.service'; import { Router } from '@angular/router'; import { RemoteData } from '../../core/data/remote-data'; diff --git a/src/app/core/data/data.service.ts b/src/app/core/data/data.service.ts index b3b69fdd54..d03891065b 100644 --- a/src/app/core/data/data.service.ts +++ b/src/app/core/data/data.service.ts @@ -18,20 +18,17 @@ import { } from './request.models'; import { RequestService } from './request.service'; import { NormalizedObject } from '../cache/models/normalized-object.model'; -import { distinctUntilChanged, map, share, withLatestFrom } from 'rxjs/operators'; +import { distinctUntilChanged, map, share, switchMap, withLatestFrom } from 'rxjs/operators'; import { configureRequest, filterSuccessfulResponses, - getRequestFromSelflink, getResponseFromSelflink } from '../shared/operators'; import { ResponseCacheEntry } from '../cache/response-cache.reducer'; import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service'; import { HttpHeaders } from '@angular/common/http'; -import { ErrorResponse, GenericSuccessResponse } from '../cache/response-cache.models'; -import { BrowseEntry } from '../shared/browse-entry.model'; +import { DSOSuccessResponse } from '../cache/response-cache.models'; import { AuthService } from '../auth/auth.service'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; export abstract class DataService { protected abstract responseCache: ResponseCacheService; @@ -130,18 +127,16 @@ export abstract class DataService ); const href$ = request$.pipe(map((request: RestRequest) => request.href)); - - const requestEntry$ = href$.pipe(getRequestFromSelflink(this.requestService)); const responseCache$ = href$.pipe(getResponseFromSelflink(this.responseCache)); - const payload$ = responseCache$.pipe( + const dsoHref$ = responseCache$.pipe( filterSuccessfulResponses(), map((entry: ResponseCacheEntry) => entry.response), - map((response: GenericSuccessResponse) => response.payload), + map((response: DSOSuccessResponse) => response.resourceSelfLinks[0]), distinctUntilChanged() ); - return this.rdbService.toRemoteDataObservable(requestEntry$, responseCache$, payload$); + return this.rdbService.buildSingle(dsoHref$); } public abstract buildCreateParams(dso: TDomain): Observable; diff --git a/src/app/core/data/dso-response-parsing.service.ts b/src/app/core/data/dso-response-parsing.service.ts index 9651eb3157..e2d930d88c 100644 --- a/src/app/core/data/dso-response-parsing.service.ts +++ b/src/app/core/data/dso-response-parsing.service.ts @@ -12,6 +12,7 @@ import { RestRequest } from './request.models'; import { ResponseParsingService } from './parsing.service'; import { BaseResponseParsingService } from './base-response-parsing.service'; +import { isNotEmpty } from '../../shared/empty.util'; @Injectable() export class DSOResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { @@ -27,8 +28,11 @@ export class DSOResponseParsingService extends BaseResponseParsingService implem parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { const processRequestDTO = this.process(data.payload, request.href); - const selfLinks = this.flattenSingleKeyObject(processRequestDTO).map((no) => no.self); - return new DSOSuccessResponse(selfLinks, data.statusCode, this.processPageInfo(data.payload)) + let selfLinks = []; + if (processRequestDTO !== undefined) { + selfLinks = this.flattenSingleKeyObject(processRequestDTO).map((no) => no.self); + } + return new DSOSuccessResponse(selfLinks, data.statusCode, (isNotEmpty(data.payload) ? this.processPageInfo(data.payload) : null)) } }