diff --git a/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts b/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts index 4a7cd9afb1..f55a7f0156 100644 --- a/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts +++ b/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts @@ -2,18 +2,24 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; -import { take } from 'rxjs/operators'; +import {flatMap, map, take} from 'rxjs/operators'; import { ComColDataService } from '../../../core/data/comcol-data.service'; import { CommunityDataService } from '../../../core/data/community-data.service'; import { RemoteData } from '../../../core/data/remote-data'; import { RouteService } from '../../../core/services/route.service'; import { Community } from '../../../core/shared/community.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { getSucceededRemoteData } from '../../../core/shared/operators'; +import { + getFirstSucceededRemoteDataPayload, + getRemoteDataPayload, + getSucceededRemoteData +} from '../../../core/shared/operators'; import { ResourceType } from '../../../core/shared/resource-type'; -import { hasValue, isNotEmpty, isNotUndefined } from '../../empty.util'; +import {hasValue, isEmpty, isNotEmpty, isNotUndefined} from '../../empty.util'; import { NotificationsService } from '../../notifications/notifications.service'; import { RequestParam } from '../../../core/cache/models/request-param.model'; +import {RequestService} from '../../../core/data/request.service'; +import {Collection} from '../../../core/shared/collection.model'; /** * Component representing the create page for communities and collections @@ -54,7 +60,8 @@ export class CreateComColPageComponent implements protected routeService: RouteService, protected router: Router, protected notificationsService: NotificationsService, - protected translate: TranslateService + protected translate: TranslateService, + protected requestService: RequestService ) { } @@ -76,25 +83,29 @@ export class CreateComColPageComponent implements const dso = event.dso; const uploader = event.uploader; - this.parentUUID$.pipe(take(1)).subscribe((uuid: string) => { + this.parentUUID$.pipe( + take(1), + flatMap((uuid: string) => { const params = uuid ? [new RequestParam('parent', uuid)] : []; - this.dsoDataService.create(dso, ...params) - .pipe(getSucceededRemoteData()) - .subscribe((dsoRD: RemoteData) => { - if (isNotUndefined(dsoRD)) { - this.newUUID = dsoRD.payload.uuid; - if (uploader.queue.length > 0) { - this.dsoDataService.getLogoEndpoint(this.newUUID).pipe(take(1)).subscribe((href: string) => { - uploader.options.url = href; - uploader.uploadAll(); - }); - } else { - this.navigateToNewPage(); - } - this.notificationsService.success(null, this.translate.get(this.type.value + '.create.notifications.success')); + return this.dsoDataService.create(dso, ...params) + .pipe(getFirstSucceededRemoteDataPayload() + ) + })) + .subscribe((dsoRD: TDomain) => { + if (isNotUndefined(dsoRD)) { + this.newUUID = dsoRD.uuid; + if (uploader.queue.length > 0) { + this.dsoDataService.getLogoEndpoint(this.newUUID).pipe(take(1)).subscribe((href: string) => { + uploader.options.url = href; + uploader.uploadAll(); + }); + } else { + this.navigateToNewPage(); } - }); - }); + this.refreshCache(dsoRD); + } + this.notificationsService.success(null, this.translate.get(this.type.value + '.create.notifications.success')); + }); } /** @@ -106,4 +117,21 @@ export class CreateComColPageComponent implements } } + private refreshCache(dso: TDomain) { + const parentCommunityUrl = this.parentCommunityUrl(dso as any); + if (!hasValue(parentCommunityUrl)) { + return; + } + this.dsoDataService.findByHref(parentCommunityUrl).pipe( + getSucceededRemoteData(), + getRemoteDataPayload(), + map((pc: TDomain) => isEmpty(pc) ? 'communities/search/top' : pc.id), + take(1) + ).subscribe((href: string) => this.requestService.removeByHrefSubstring(href)); + } + + private parentCommunityUrl(dso: Collection | Community) { + const parentCommunity = dso._links.parentCommunity; + return isNotEmpty(parentCommunity) ? parentCommunity.href : null; + } } diff --git a/src/app/shared/comcol-forms/delete-comcol-page/delete-comcol-page.component.ts b/src/app/shared/comcol-forms/delete-comcol-page/delete-comcol-page.component.ts index d07d7be032..29ec4f7b19 100644 --- a/src/app/shared/comcol-forms/delete-comcol-page/delete-comcol-page.component.ts +++ b/src/app/shared/comcol-forms/delete-comcol-page/delete-comcol-page.component.ts @@ -1,13 +1,18 @@ -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; -import { ActivatedRoute, Router } from '@angular/router'; -import { RemoteData } from '../../../core/data/remote-data'; -import { first, map } from 'rxjs/operators'; -import { DataService } from '../../../core/data/data.service'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { NotificationsService } from '../../notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; -import { RestResponse } from '../../../core/cache/response.models'; +import {Component, OnInit} from '@angular/core'; +import {Observable} from 'rxjs'; +import {ActivatedRoute, Router} from '@angular/router'; +import {RemoteData} from '../../../core/data/remote-data'; +import {first, map, take} from 'rxjs/operators'; +import {DataService} from '../../../core/data/data.service'; +import {DSpaceObject} from '../../../core/shared/dspace-object.model'; +import {NotificationsService} from '../../notifications/notifications.service'; +import {TranslateService} from '@ngx-translate/core'; +import {RestResponse} from '../../../core/cache/response.models'; +import {hasValue, isEmpty, isNotEmpty} from '../../empty.util'; +import {RequestService} from '../../../core/data/request.service'; +import {getRemoteDataPayload, getSucceededRemoteData} from '../../../core/shared/operators'; +import {Community} from '../../../core/shared/community.model'; +import {Collection} from '../../../core/shared/collection.model'; /** * Component representing the delete page for communities and collections @@ -31,7 +36,8 @@ export class DeleteComColPageComponent implements protected router: Router, protected route: ActivatedRoute, protected notifications: NotificationsService, - protected translate: TranslateService + protected translate: TranslateService, + protected requestService: RequestService ) { } @@ -50,6 +56,7 @@ export class DeleteComColPageComponent implements if (response.isSuccessful) { const successMessage = this.translate.instant((dso as any).type + '.delete.notification.success'); this.notifications.success(successMessage) + this.refreshCache(dso); } else { const errorMessage = this.translate.instant((dso as any).type + '.delete.notification.fail'); this.notifications.error(errorMessage) @@ -65,4 +72,22 @@ export class DeleteComColPageComponent implements onCancel(dso: TDomain) { this.router.navigate([this.frontendURL + '/' + dso.uuid + '/edit']); } + + private refreshCache(dso: TDomain) { + const parentCommunity = this.parentCommunityUrl(dso as any); + if (!hasValue(parentCommunity)) { + return; + } + this.dsoDataService.findByHref(parentCommunity).pipe( + getSucceededRemoteData(), + getRemoteDataPayload(), + map((pc: TDomain) => isEmpty(pc) ? 'communities/search/top' : pc.id ), + take(1) + ).subscribe((id: string) => this.requestService.removeByHrefSubstring(id)); + } + + private parentCommunityUrl(dso: Collection | Community): string { + const parentCommunity = dso._links.parentCommunity; + return isNotEmpty(parentCommunity) ? parentCommunity.href : null; + } }