From bd23785ff1c89d254196ab5b6b2df073bc0fa03b Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Thu, 20 Jun 2019 14:41:45 +0200 Subject: [PATCH] Correct handling of duplicates. --- .../Controllers/Assets/AssetsController.cs | 5 ++++- .../components/assets-list.component.ts | 19 ++++++++++++++++--- .../app/shared/services/assets.service.ts | 4 ++++ .../app/shared/state/asset-uploader.state.ts | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs b/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs index 1db6f0659..8f0f95fa2 100644 --- a/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs +++ b/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs @@ -179,7 +179,10 @@ namespace Squidex.Areas.Api.Controllers.Assets var command = new CreateAsset { File = assetFile }; - var response = await InvokeCommandAsync(app, command); + var context = await CommandBus.PublishAsync(command); + + var result = context.Result(); + var response = AssetDto.FromAsset(result.Asset, this, app, result.IsDuplicate); return CreatedAtAction(nameof(GetAsset), new { app, id = response.Id }, response); } diff --git a/src/Squidex/app/shared/components/assets-list.component.ts b/src/Squidex/app/shared/components/assets-list.component.ts index 4838ef066..a2d10af80 100644 --- a/src/Squidex/app/shared/components/assets-list.component.ts +++ b/src/Squidex/app/shared/components/assets-list.component.ts @@ -5,7 +5,7 @@ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. */ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core'; import { onErrorResumeNext } from 'rxjs/operators'; import { @@ -38,10 +38,23 @@ export class AssetsListComponent { @Output() public select = new EventEmitter(); + constructor( + private readonly changeDetector: ChangeDetectorRef + ) { + } + public add(file: File, asset: AssetDto) { - this.newFiles = this.newFiles.remove(file); + if (asset.isDuplicate) { + setTimeout(() => { + this.newFiles = this.newFiles.remove(file); - this.state.add(asset); + this.changeDetector.detectChanges(); + }, 2000); + } else { + this.newFiles = this.newFiles.remove(file); + + this.state.add(asset); + } } public search() { diff --git a/src/Squidex/app/shared/services/assets.service.ts b/src/Squidex/app/shared/services/assets.service.ts index 9e840e4cf..429c225e7 100644 --- a/src/Squidex/app/shared/services/assets.service.ts +++ b/src/Squidex/app/shared/services/assets.service.ts @@ -43,6 +43,10 @@ export class AssetDto { public readonly canUpdate: boolean; public readonly canUpload: boolean; + public get isDuplicate() { + return this._meta && this._meta['isDuplicate'] === 'true'; + } + public get contentUrl() { return this._links['content'].href; } diff --git a/src/Squidex/app/shared/state/asset-uploader.state.ts b/src/Squidex/app/shared/state/asset-uploader.state.ts index 04f35ec25..4b16ade66 100644 --- a/src/Squidex/app/shared/state/asset-uploader.state.ts +++ b/src/Squidex/app/shared/state/asset-uploader.state.ts @@ -75,7 +75,7 @@ export class AssetUploaderState extends State { const stream = this.assetsService.uploadFile(this.appName, file); return this.upload(stream, MathHelper.guid(), file, asset => { - if (asset._meta && asset._meta['isDuplicate'] === 'true') { + if (asset.isDuplicate) { this.dialogs.notifyError('Asset has already been uploaded.'); } else if (target) { target.add(asset);