diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/EnrichedEvents/EnrichedAssetEventType.cs b/src/Squidex.Domain.Apps.Core.Operations/HandleRules/EnrichedEvents/EnrichedAssetEventType.cs index 0e66499b2..b4c3ebde0 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/EnrichedEvents/EnrichedAssetEventType.cs +++ b/src/Squidex.Domain.Apps.Core.Operations/HandleRules/EnrichedEvents/EnrichedAssetEventType.cs @@ -11,7 +11,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents { Created, Deleted, - Renamed, + Annotated, Updated } } \ No newline at end of file diff --git a/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/IAssetInfo.cs b/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/IAssetInfo.cs index aeeae13d6..9e7ff611d 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/IAssetInfo.cs +++ b/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/IAssetInfo.cs @@ -23,6 +23,6 @@ namespace Squidex.Domain.Apps.Core.ValidateContent string FileName { get; } - string FileNameSlug { get; } + string Slug { get; } } } diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetEntity.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetEntity.cs index 11073b902..8850ef500 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetEntity.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetEntity.cs @@ -40,7 +40,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets [BsonIgnoreIfDefault] [BsonElement] - public string FileNameSlug { get; set; } + public string Slug { get; set; } [BsonRequired] [BsonElement] diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs index a64cf8949..e203ac95d 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs @@ -46,7 +46,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets .Ascending(x => x.Tags) .Descending(x => x.LastModified)), new CreateIndexModel( - Index.Ascending(x => x.FileNameSlug)) + Index.Ascending(x => x.Slug)) }, ct); } @@ -107,7 +107,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets using (Profiler.TraceMethod()) { var assetEntity = - await Collection.Find(x => x.FileNameSlug == slug) + await Collection.Find(x => x.Slug == slug) .FirstOrDefaultAsync(); return assetEntity; diff --git a/src/Squidex.Domain.Apps.Entities/Assets/AssetChangedTriggerHandler.cs b/src/Squidex.Domain.Apps.Entities/Assets/AssetChangedTriggerHandler.cs index 7c23af11e..e7e9f0cf5 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/AssetChangedTriggerHandler.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/AssetChangedTriggerHandler.cs @@ -49,8 +49,8 @@ namespace Squidex.Domain.Apps.Entities.Assets case AssetCreated _: result.Type = EnrichedAssetEventType.Created; break; - case AssetRenamed _: - result.Type = EnrichedAssetEventType.Renamed; + case AssetAnnotated _: + result.Type = EnrichedAssetEventType.Annotated; break; case AssetUpdated _: result.Type = EnrichedAssetEventType.Updated; diff --git a/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs b/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs index 7ba5ea4ab..ec7b92db2 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs @@ -62,15 +62,6 @@ namespace Squidex.Domain.Apps.Entities.Assets return new AssetSavedResult(Version, Snapshot.FileVersion); }); - case TagAsset tagAsset: - return UpdateAsync(tagAsset, async c => - { - GuardAsset.CanTag(c); - - c.Tags = await NormalizeTagsAsync(Snapshot.AppId.Id, c.Tags); - - Tag(c); - }); case DeleteAsset deleteAsset: return UpdateAsync(deleteAsset, async c => { @@ -80,12 +71,17 @@ namespace Squidex.Domain.Apps.Entities.Assets Delete(c); }); - case RenameAsset renameAsset: - return UpdateAsync(renameAsset, c => + case AnnotateAsset annotateAsset: + return UpdateAsync(annotateAsset, async c => { - GuardAsset.CanRename(c, Snapshot.FileName); + GuardAsset.CanAnnotate(c, Snapshot.FileName, Snapshot.Slug); + + if (c.Tags != null) + { + c.Tags = await NormalizeTagsAsync(Snapshot.AppId.Id, c.Tags); + } - Rename(c); + Annotate(c); }); default: throw new NotSupportedException(); @@ -109,7 +105,8 @@ namespace Squidex.Domain.Apps.Entities.Assets MimeType = command.File.MimeType, PixelWidth = command.ImageInfo?.PixelWidth, PixelHeight = command.ImageInfo?.PixelHeight, - IsImage = command.ImageInfo != null + IsImage = command.ImageInfo != null, + Slug = command.File.FileName.ToAssetSlug() }); RaiseEvent(@event); @@ -137,14 +134,9 @@ namespace Squidex.Domain.Apps.Entities.Assets RaiseEvent(SimpleMapper.Map(command, new AssetDeleted { DeletedSize = Snapshot.TotalSize })); } - public void Rename(RenameAsset command) - { - RaiseEvent(SimpleMapper.Map(command, new AssetRenamed())); - } - - public void Tag(TagAsset command) + public void Annotate(AnnotateAsset command) { - RaiseEvent(SimpleMapper.Map(command, new AssetTagged())); + RaiseEvent(SimpleMapper.Map(command, new AssetAnnotated())); } private void RaiseEvent(AppEvent @event) diff --git a/src/Squidex.Domain.Apps.Entities/Assets/Commands/TagAsset.cs b/src/Squidex.Domain.Apps.Entities/Assets/Commands/AnnotateAsset.cs similarity index 78% rename from src/Squidex.Domain.Apps.Entities/Assets/Commands/TagAsset.cs rename to src/Squidex.Domain.Apps.Entities/Assets/Commands/AnnotateAsset.cs index 7ca591f53..4d9059168 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/Commands/TagAsset.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/Commands/AnnotateAsset.cs @@ -9,8 +9,12 @@ using System.Collections.Generic; namespace Squidex.Domain.Apps.Entities.Assets.Commands { - public sealed class TagAsset : AssetCommand + public sealed class AnnotateAsset : AssetCommand { + public string FileName { get; set; } + + public string Slug { get; set; } + public HashSet Tags { get; set; } } } diff --git a/src/Squidex.Domain.Apps.Entities/Assets/Commands/RenameAsset.cs b/src/Squidex.Domain.Apps.Entities/Assets/Commands/RenameAsset.cs deleted file mode 100644 index 65cba7f35..000000000 --- a/src/Squidex.Domain.Apps.Entities/Assets/Commands/RenameAsset.cs +++ /dev/null @@ -1,14 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -namespace Squidex.Domain.Apps.Entities.Assets.Commands -{ - public sealed class RenameAsset : AssetCommand - { - public string FileName { get; set; } - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Assets/Guards/GuardAsset.cs b/src/Squidex.Domain.Apps.Entities/Assets/Guards/GuardAsset.cs index 68d727f4c..4cf2fbfe9 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/Guards/GuardAsset.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/Guards/GuardAsset.cs @@ -12,21 +12,28 @@ namespace Squidex.Domain.Apps.Entities.Assets.Guards { public static class GuardAsset { - public static void CanRename(RenameAsset command, string oldName) + public static void CanAnnotate(AnnotateAsset command, string oldFileName, string oldSlug) { Guard.NotNull(command, nameof(command)); Validate.It(() => "Cannot rename asset.", e => { - if (string.IsNullOrWhiteSpace(command.FileName)) + if (string.IsNullOrWhiteSpace(command.FileName) && + string.IsNullOrWhiteSpace(command.Slug) && + command.Tags == null) { - e(Not.Defined("Name"), nameof(command.FileName)); + e("Either file name, slug or tags must be defined.", nameof(command.FileName), nameof(command.Slug), nameof(command.Tags)); } - if (string.Equals(command.FileName, oldName)) + if (!string.IsNullOrWhiteSpace(command.FileName) && string.Equals(command.FileName, oldFileName)) { e(Not.New("Asset", "name"), nameof(command.FileName)); } + + if (!string.IsNullOrWhiteSpace(command.Slug) && string.Equals(command.Slug, oldSlug)) + { + e(Not.New("Asset", "slug"), nameof(command.Slug)); + } }); } @@ -35,11 +42,6 @@ namespace Squidex.Domain.Apps.Entities.Assets.Guards Guard.NotNull(command, nameof(command)); } - public static void CanTag(TagAsset command) - { - Guard.NotNull(command, nameof(command)); - } - public static void CanUpdate(UpdateAsset command) { Guard.NotNull(command, nameof(command)); diff --git a/src/Squidex.Domain.Apps.Entities/Assets/State/AssetState.cs b/src/Squidex.Domain.Apps.Entities/Assets/State/AssetState.cs index d5503c1ec..2ea47f7ab 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/State/AssetState.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/State/AssetState.cs @@ -30,7 +30,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.State public string MimeType { get; set; } [DataMember] - public string FileNameSlug { get; set; } + public string Slug { get; set; } [DataMember] public long FileVersion { get; set; } @@ -66,7 +66,15 @@ namespace Squidex.Domain.Apps.Entities.Assets.State SimpleMapper.Map(@event, this); FileName = @event.FileName; - FileNameSlug = @event.FileName.ToAssetSlug(); + + if (string.IsNullOrWhiteSpace(@event.Slug)) + { + Slug = @event.FileName.ToAssetSlug(); + } + else + { + Slug = @event.Slug; + } TotalSize += @event.FileSize; } @@ -78,15 +86,22 @@ namespace Squidex.Domain.Apps.Entities.Assets.State TotalSize += @event.FileSize; } - protected void On(AssetRenamed @event) - { - FileName = @event.FileName; - FileNameSlug = @event.FileName.ToAssetSlug(); - } - - protected void On(AssetTagged @event) + protected void On(AssetAnnotated @event) { - Tags = @event.Tags; + if (!string.IsNullOrWhiteSpace(@event.FileName)) + { + FileName = @event.FileName; + } + + if (!string.IsNullOrWhiteSpace(@event.Slug)) + { + Slug = @event.Slug; + } + + if (@event.Tags != null) + { + Tags = @event.Tags; + } } protected void On(AssetDeleted @event) diff --git a/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/AssetGraphType.cs b/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/AssetGraphType.cs index 9275af29f..b5d470564 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/AssetGraphType.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/AssetGraphType.cs @@ -101,9 +101,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types AddField(new FieldType { - Name = "fileNameSlug", + Name = "slug", ResolvedType = AllTypes.NonNullString, - Resolver = Resolve(x => x.FileNameSlug), + Resolver = Resolve(x => x.Slug), Description = "The file name as slug." }); diff --git a/src/Squidex.Domain.Apps.Events/Assets/AssetTagged.cs b/src/Squidex.Domain.Apps.Events/Assets/AssetAnnotated.cs similarity index 75% rename from src/Squidex.Domain.Apps.Events/Assets/AssetTagged.cs rename to src/Squidex.Domain.Apps.Events/Assets/AssetAnnotated.cs index fb555b515..d2cec90a8 100644 --- a/src/Squidex.Domain.Apps.Events/Assets/AssetTagged.cs +++ b/src/Squidex.Domain.Apps.Events/Assets/AssetAnnotated.cs @@ -10,9 +10,13 @@ using Squidex.Infrastructure.EventSourcing; namespace Squidex.Domain.Apps.Events.Assets { - [EventType(nameof(AssetTagged))] - public sealed class AssetTagged : AssetEvent + [EventType(nameof(AssetAnnotated))] + public sealed class AssetAnnotated : AssetEvent { + public string FileName { get; set; } + + public string Slug { get; set; } + public HashSet Tags { get; set; } } } diff --git a/src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs b/src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs index 2266f7f2e..568c324e0 100644 --- a/src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs +++ b/src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs @@ -17,6 +17,8 @@ namespace Squidex.Domain.Apps.Events.Assets public string MimeType { get; set; } + public string Slug { get; set; } + public long FileVersion { get; set; } public long FileSize { get; set; } diff --git a/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs b/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs index 0d00940d3..041adcdde 100644 --- a/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs +++ b/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs @@ -237,7 +237,7 @@ namespace Squidex.Areas.Api.Controllers.Assets [AssetRequestSizeLimit] [ApiPermission(Permissions.AppAssetsUpdate)] [ApiCosts(1)] - public async Task PutAsset(string app, Guid id, [FromBody] UpdateAssetDto request) + public async Task PutAsset(string app, Guid id, [FromBody] AnnotateAssetDto request) { await CommandBus.PublishAsync(request.ToCommand(id)); diff --git a/src/Squidex/Areas/Api/Controllers/Assets/Models/UpdateAssetDto.cs b/src/Squidex/Areas/Api/Controllers/Assets/Models/AnnotateAssetDto.cs similarity index 75% rename from src/Squidex/Areas/Api/Controllers/Assets/Models/UpdateAssetDto.cs rename to src/Squidex/Areas/Api/Controllers/Assets/Models/AnnotateAssetDto.cs index 092ec196d..60c645d02 100644 --- a/src/Squidex/Areas/Api/Controllers/Assets/Models/UpdateAssetDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Assets/Models/AnnotateAssetDto.cs @@ -8,16 +8,22 @@ using System; using System.Collections.Generic; using Squidex.Domain.Apps.Entities.Assets.Commands; +using Squidex.Infrastructure.Reflection; namespace Squidex.Areas.Api.Controllers.Assets.Models { - public sealed class UpdateAssetDto + public sealed class AnnotateAssetDto { /// /// The new name of the asset. /// public string FileName { get; set; } + /// + /// The new slug of the asset. + /// + public string Slug { get; set; } + /// /// The new asset tags. /// @@ -25,14 +31,7 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models public AssetCommand ToCommand(Guid id) { - if (Tags != null) - { - return new TagAsset { AssetId = id, Tags = Tags }; - } - else - { - return new RenameAsset { AssetId = id, FileName = FileName }; - } + return SimpleMapper.Map(this, new AnnotateAsset { AssetId = id }); } } } diff --git a/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetCreatedDto.cs b/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetCreatedDto.cs index 428435d2a..0b1807312 100644 --- a/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetCreatedDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetCreatedDto.cs @@ -33,6 +33,12 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models [Required] public string FileName { get; set; } + /// + /// The slug. + /// + [Required] + public string Slug { get; set; } + /// /// The mime type. /// diff --git a/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetDto.cs b/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetDto.cs index 6c099c78f..e13b76993 100644 --- a/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetDto.cs @@ -30,10 +30,10 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models public string FileName { get; set; } /// - /// The file name as a slug. + /// The slug. /// [Required] - public string FileNameSlug { get; set; } + public string Slug { get; set; } /// /// The mime type. diff --git a/src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.html b/src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.html index 59a73c5e1..6664745ac 100644 --- a/src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.html +++ b/src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.html @@ -59,7 +59,7 @@ - + Error diff --git a/src/Squidex/app/features/apps/pages/apps-page.component.html b/src/Squidex/app/features/apps/pages/apps-page.component.html index 753c903af..7451b1e7b 100644 --- a/src/Squidex/app/features/apps/pages/apps-page.component.html +++ b/src/Squidex/app/features/apps/pages/apps-page.component.html @@ -95,18 +95,18 @@ + (complete)="addAppDialog.hide()"> + (close)="onboardingDialog.hide()"> + (close)="newsDialog.hide()"> \ No newline at end of file diff --git a/src/Squidex/app/features/apps/pages/news-dialog.component.html b/src/Squidex/app/features/apps/pages/news-dialog.component.html index ae21142e0..3b8e5dc4f 100644 --- a/src/Squidex/app/features/apps/pages/news-dialog.component.html +++ b/src/Squidex/app/features/apps/pages/news-dialog.component.html @@ -1,4 +1,4 @@ - + New Features diff --git a/src/Squidex/app/features/apps/pages/news-dialog.component.ts b/src/Squidex/app/features/apps/pages/news-dialog.component.ts index 2a924341e..01d0ce8d9 100644 --- a/src/Squidex/app/features/apps/pages/news-dialog.component.ts +++ b/src/Squidex/app/features/apps/pages/news-dialog.component.ts @@ -19,9 +19,9 @@ export class NewsDialogComponent { public features: FeatureDto[]; @Output() - public closed = new EventEmitter(); + public close = new EventEmitter(); - public close() { - this.closed.emit(); + public emitClose() { + this.close.emit(); } } \ No newline at end of file diff --git a/src/Squidex/app/features/apps/pages/onboarding-dialog.component.html b/src/Squidex/app/features/apps/pages/onboarding-dialog.component.html index 48f5725fc..d60e4716b 100644 --- a/src/Squidex/app/features/apps/pages/onboarding-dialog.component.html +++ b/src/Squidex/app/features/apps/pages/onboarding-dialog.component.html @@ -1,6 +1,6 @@ - Skip Tour + Skip Tour
diff --git a/src/Squidex/app/features/apps/pages/onboarding-dialog.component.ts b/src/Squidex/app/features/apps/pages/onboarding-dialog.component.ts index fa8bde035..9d2ea10f6 100644 --- a/src/Squidex/app/features/apps/pages/onboarding-dialog.component.ts +++ b/src/Squidex/app/features/apps/pages/onboarding-dialog.component.ts @@ -21,10 +21,10 @@ export class OnboardingDialogComponent { public step = 0; @Output() - public closed = new EventEmitter(); + public close = new EventEmitter(); - public close() { - this.closed.emit(); + public emitClose() { + this.close.emit(); } public next() { diff --git a/src/Squidex/app/features/assets/pages/assets-page.component.html b/src/Squidex/app/features/assets/pages/assets-page.component.html index 2e6170d44..79f324003 100644 --- a/src/Squidex/app/features/assets/pages/assets-page.component.html +++ b/src/Squidex/app/features/assets/pages/assets-page.component.html @@ -26,7 +26,7 @@
diff --git a/src/Squidex/app/features/content/pages/contents/contents-page.component.html b/src/Squidex/app/features/content/pages/contents/contents-page.component.html index e4da7203b..01c728105 100644 --- a/src/Squidex/app/features/content/pages/contents/contents-page.component.html +++ b/src/Squidex/app/features/content/pages/contents/contents-page.component.html @@ -22,10 +22,10 @@
+ (unpublishe)="unpublish(content)" + (publishe)="publish(content)" + (archive)="archive(content)" + (restore)="restore(content)" + (delete)="delete(content)" + (clone)="clone(content)"> diff --git a/src/Squidex/app/features/content/shared/array-editor.component.html b/src/Squidex/app/features/content/shared/array-editor.component.html index d4caa05a7..b78db6a95 100644 --- a/src/Squidex/app/features/content/shared/array-editor.component.html +++ b/src/Squidex/app/features/content/shared/array-editor.component.html @@ -1,6 +1,6 @@
+ (sqxSort)="sort($event)">
+ (move)="move(itemForm, $event)" + (clone)="addItem(itemForm)" + (remove)="removeItem(i)">
diff --git a/src/Squidex/app/features/content/shared/array-item.component.html b/src/Squidex/app/features/content/shared/array-item.component.html index 2283e2e54..658f6e19d 100644 --- a/src/Squidex/app/features/content/shared/array-item.component.html +++ b/src/Squidex/app/features/content/shared/array-item.component.html @@ -5,32 +5,32 @@ Item #{{index + 1}} - - - - - - - - diff --git a/src/Squidex/app/features/content/shared/array-item.component.ts b/src/Squidex/app/features/content/shared/array-item.component.ts index 666e63068..d6154dfbc 100644 --- a/src/Squidex/app/features/content/shared/array-item.component.ts +++ b/src/Squidex/app/features/content/shared/array-item.component.ts @@ -25,13 +25,13 @@ import { }) export class ArrayItemComponent implements OnChanges { @Output() - public removing = new EventEmitter(); + public remove = new EventEmitter(); @Output() - public moving = new EventEmitter(); + public move = new EventEmitter(); @Output() - public cloning = new EventEmitter(); + public clone = new EventEmitter(); @Output() public toggle = new EventEmitter(); @@ -77,19 +77,31 @@ export class ArrayItemComponent implements OnChanges { } } - public moveTop() { - this.moving.emit(0); + public emitToggle(value: boolean) { + this.toggle.emit(value); } - public moveUp() { - this.moving.emit(this.index - 1); + public emitClone() { + this.clone.emit(); } - public moveDown() { - this.moving.emit(this.index + 1); + public emitRemove() { + this.remove.emit(); } - public moveBottom() { - this.moving.emit(99999); + public emitMoveTop() { + this.move.emit(0); + } + + public emitMoveUp() { + this.move.emit(this.index - 1); + } + + public emitMoveDown() { + this.move.emit(this.index + 1); + } + + public emitMoveBottom() { + this.move.emit(99999); } } \ No newline at end of file diff --git a/src/Squidex/app/features/content/shared/assets-editor.component.html b/src/Squidex/app/features/content/shared/assets-editor.component.html index 030114620..22767f5bd 100644 --- a/src/Squidex/app/features/content/shared/assets-editor.component.html +++ b/src/Squidex/app/features/content/shared/assets-editor.component.html @@ -24,10 +24,10 @@
+ (faile)="removeLoadingAsset(file)" (load)="addAsset(file, $event)"> + (update)="notifyOthers($event)" (remove)="removeLoadedAsset($event)">
@@ -35,17 +35,19 @@
+ [isListView]="true" + (loadError)="removeLoadingAsset(file)" + (load)="addAsset(file, $event)">
+ (sqxSort)="sortAssets($event)">
+ (update)="notifyOthers($event)" (remove)="removeLoadedAsset($event)">
@@ -56,6 +58,6 @@ + (select)="selectAssets($event)"> \ No newline at end of file diff --git a/src/Squidex/app/features/content/shared/content-item.component.html b/src/Squidex/app/features/content/shared/content-item.component.html index 925663fb5..716014df4 100644 --- a/src/Squidex/app/features/content/shared/content-item.component.html +++ b/src/Squidex/app/features/content/shared/content-item.component.html @@ -54,26 +54,26 @@ - \ No newline at end of file diff --git a/src/Squidex/app/features/content/shared/content-item.component.ts b/src/Squidex/app/features/content/shared/content-item.component.ts index 606a027d3..f97f9baab 100644 --- a/src/Squidex/app/features/content/shared/content-item.component.ts +++ b/src/Squidex/app/features/content/shared/content-item.component.ts @@ -35,22 +35,22 @@ import { }) export class ContentItemComponent implements OnChanges { @Output() - public cloning = new EventEmitter(); + public clone = new EventEmitter(); @Output() - public deleting = new EventEmitter(); + public delete = new EventEmitter(); @Output() - public archiving = new EventEmitter(); + public archive = new EventEmitter(); @Output() - public restoring = new EventEmitter(); + public restore = new EventEmitter(); @Output() - public publishing = new EventEmitter(); + public publish = new EventEmitter(); @Output() - public unpublishing = new EventEmitter(); + public unpublish = new EventEmitter(); @Output() public selectedChange = new EventEmitter(); @@ -128,6 +128,30 @@ export class ContentItemComponent implements OnChanges { this.updateValues(); } + public emitDelete() { + this.delete.emit(); + } + + public emitPublish() { + this.publish.emit(); + } + + public emitUnpublish() { + this.unpublish.emit(); + } + + public emitArchive() { + this.archive.emit(); + } + + public emitRestore() { + this.unpublish.emit(); + } + + public emitClone() { + this.clone.emit(); + } + private updateValues() { this.values = []; diff --git a/src/Squidex/app/features/content/shared/contents-selector.component.html b/src/Squidex/app/features/content/shared/contents-selector.component.html index 6b57c596f..0a7cfc92e 100644 --- a/src/Squidex/app/features/content/shared/contents-selector.component.html +++ b/src/Squidex/app/features/content/shared/contents-selector.component.html @@ -1,4 +1,4 @@ - + Select contents @@ -13,7 +13,7 @@
@@ -68,7 +68,7 @@ - - + +
\ No newline at end of file diff --git a/src/Squidex/app/features/content/shared/contents-selector.component.ts b/src/Squidex/app/features/content/shared/contents-selector.component.ts index f88608fba..f753d22c5 100644 --- a/src/Squidex/app/features/content/shared/contents-selector.component.ts +++ b/src/Squidex/app/features/content/shared/contents-selector.component.ts @@ -35,7 +35,7 @@ export class ContentsSelectorComponent implements OnInit { public schema: SchemaDetailsDto; @Output() - public selected = new EventEmitter(); + public select = new EventEmitter(); public searchModal = new ModalModel(); @@ -75,12 +75,12 @@ export class ContentsSelectorComponent implements OnInit { return this.selectedItems[content.id]; } - public complete() { - this.selected.emit([]); + public emitComplete() { + this.select.emit([]); } - public select() { - this.selected.emit(Object.values(this.selectedItems)); + public emitSelect() { + this.select.emit(Object.values(this.selectedItems)); } public selectLanguage(language: LanguageDto) { diff --git a/src/Squidex/app/features/content/shared/due-time-selector.component.html b/src/Squidex/app/features/content/shared/due-time-selector.component.html index cbc420c11..6cee22404 100644 --- a/src/Squidex/app/features/content/shared/due-time-selector.component.html +++ b/src/Squidex/app/features/content/shared/due-time-selector.component.html @@ -1,4 +1,4 @@ - + {{dueTimeAction}} content item(s) diff --git a/src/Squidex/app/features/content/shared/references-editor.component.html b/src/Squidex/app/features/content/shared/references-editor.component.html index 83a7d5553..2ca51947a 100644 --- a/src/Squidex/app/features/content/shared/references-editor.component.html +++ b/src/Squidex/app/features/content/shared/references-editor.component.html @@ -8,7 +8,7 @@ + (sqxSort)="sort($event)"> + (delete)="remove(content)">
@@ -32,6 +32,6 @@ [language]="language" [languages]="languages" [schema]="snapshot.schema" - (selected)="select($event)"> + (select)="select($event)"> \ No newline at end of file diff --git a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html index 9c5b40f42..fbe0b104a 100644 --- a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html +++ b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html @@ -1,4 +1,4 @@ - + Edit Trigger @@ -92,17 +92,17 @@
- + - + - +
diff --git a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts index bfdb88f5e..5d493db2b 100644 --- a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts +++ b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts @@ -39,7 +39,7 @@ export class RuleWizardComponent implements OnInit { public step = 1; @Output() - public completed = new EventEmitter(); + public complete = new EventEmitter(); @Input() public ruleActions: { [name: string]: RuleElementDto }; @@ -75,8 +75,8 @@ export class RuleWizardComponent implements OnInit { } } - public complete() { - this.completed.emit(); + public emitComplete() { + this.complete.emit(); } public selectTriggerType(type: string) { @@ -122,7 +122,7 @@ export class RuleWizardComponent implements OnInit { this.rulesState.create(requestDto) .subscribe(() => { - this.complete(); + this.emitComplete(); this.actionForm.submitCompleted(); this.triggerForm.submitCompleted(); @@ -135,7 +135,7 @@ export class RuleWizardComponent implements OnInit { private updateTrigger() { this.rulesState.updateTrigger(this.rule, this.trigger) .subscribe(() => { - this.complete(); + this.emitComplete(); this.triggerForm.submitCompleted(); }, error => { @@ -146,7 +146,7 @@ export class RuleWizardComponent implements OnInit { private updateAction() { this.rulesState.updateAction(this.rule, this.action) .subscribe(() => { - this.complete(); + this.emitComplete(); this.actionForm.submitCompleted(); }, error => { diff --git a/src/Squidex/app/features/rules/pages/rules/rules-page.component.html b/src/Squidex/app/features/rules/pages/rules/rules-page.component.html index ba7e7a540..d6102c1be 100644 --- a/src/Squidex/app/features/rules/pages/rules/rules-page.component.html +++ b/src/Squidex/app/features/rules/pages/rules/rules-page.component.html @@ -70,7 +70,7 @@ [ruleActions]="ruleActions" [ruleTriggers]="ruleTriggers" [mode]="wizardMode" - (completed)="addRuleDialog.hide()"> + (complete)="addRuleDialog.hide()">
diff --git a/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.html b/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.html index ab56d064c..99b6d48b8 100644 --- a/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.html @@ -1,4 +1,4 @@ - + Add Nested Field @@ -91,7 +91,7 @@ - +
diff --git a/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts b/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts index 1562127b1..fb2471233 100644 --- a/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts @@ -38,7 +38,7 @@ export class FieldWizardComponent implements OnInit { public parent: RootFieldDto; @Output() - public completed = new EventEmitter(); + public complete = new EventEmitter(); public fieldTypes = fieldTypes; public field: FieldDto; @@ -62,8 +62,8 @@ export class FieldWizardComponent implements OnInit { } } - public complete() { - this.completed.emit(); + public emitComplete() { + this.complete.emit(); } public addField(addNew: boolean, edit: boolean) { @@ -85,7 +85,7 @@ export class FieldWizardComponent implements OnInit { this.isEditing = true; } else { - this.complete(); + this.emitComplete(); } }, error => { this.addFieldForm.submitFailed(error); @@ -110,7 +110,7 @@ export class FieldWizardComponent implements OnInit { if (addNew) { this.isEditing = false; } else { - this.complete(); + this.emitComplete(); } }, error => { this.editForm.submitFailed(error); diff --git a/src/Squidex/app/features/schemas/pages/schema/field.component.html b/src/Squidex/app/features/schemas/pages/schema/field.component.html index 03d3495c2..46ec4f82f 100644 --- a/src/Squidex/app/features/schemas/pages/schema/field.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/field.component.html @@ -107,7 +107,7 @@ -
+
@@ -125,7 +125,7 @@ + (complete)="addFieldDialog.hide()"> diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-edit-form.component.html b/src/Squidex/app/features/schemas/pages/schema/schema-edit-form.component.html index aecd08bd7..4fda1eae7 100644 --- a/src/Squidex/app/features/schemas/pages/schema/schema-edit-form.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/schema-edit-form.component.html @@ -1,5 +1,5 @@
- + Edit Schema @@ -29,7 +29,7 @@ - + diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-edit-form.component.ts b/src/Squidex/app/features/schemas/pages/schema/schema-edit-form.component.ts index 653216265..15148f23f 100644 --- a/src/Squidex/app/features/schemas/pages/schema/schema-edit-form.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/schema-edit-form.component.ts @@ -21,7 +21,7 @@ import { }) export class SchemaEditFormComponent implements OnInit { @Output() - public completed = new EventEmitter(); + public complete = new EventEmitter(); @Input() public schema: SchemaDetailsDto; @@ -38,8 +38,8 @@ export class SchemaEditFormComponent implements OnInit { this.editForm.load(this.schema.properties); } - public complete() { - this.completed.emit(); + public emitComplete() { + this.complete.emit(); } public saveSchema() { @@ -48,7 +48,7 @@ export class SchemaEditFormComponent implements OnInit { if (value) { this.schemasState.update(this.schema, value) .subscribe(() => { - this.complete(); + this.emitComplete(); }, error => { this.editForm.submitFailed(error); }); diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-page.component.html b/src/Squidex/app/features/schemas/pages/schema/schema-page.component.html index 3e1bbe227..69ccaa9fc 100644 --- a/src/Squidex/app/features/schemas/pages/schema/schema-page.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/schema-page.component.html @@ -69,7 +69,7 @@
+ (sqxSort)="sortFields($event)">
@@ -94,30 +94,30 @@ + (complete)="editSchemaDialog.hide()"> + (complete)="addFieldDialog.hide()"> + (complete)="configureScriptsDialog.hide()"> + (complete)="configurePreviewUrlsDialog.hide()"> - + Export Schema diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.html b/src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.html index de9a7f24e..1cb6487a4 100644 --- a/src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.html @@ -1,5 +1,5 @@ - + Preview Urls @@ -58,7 +58,7 @@ - + diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts b/src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts index 3cacef528..8522190d5 100644 --- a/src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts @@ -22,7 +22,7 @@ import { }) export class SchemaPreviewUrlsFormComponent implements OnInit { @Output() - public completed = new EventEmitter(); + public complete = new EventEmitter(); @Input() public schema: SchemaDetailsDto; @@ -41,8 +41,8 @@ export class SchemaPreviewUrlsFormComponent implements OnInit { this.editForm.load(this.schema.previewUrls); } - public complete() { - this.completed.emit(); + public emitComplete() { + this.complete.emit(); } public cancelAdd() { @@ -65,7 +65,7 @@ export class SchemaPreviewUrlsFormComponent implements OnInit { if (value) { this.schemasState.configurePreviewUrls(this.schema, value) .subscribe(() => { - this.complete(); + this.emitComplete(); }, error => { this.editForm.submitFailed(error); }); diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-scripts-form.component.html b/src/Squidex/app/features/schemas/pages/schema/schema-scripts-form.component.html index 74f2705aa..8ca7245d0 100644 --- a/src/Squidex/app/features/schemas/pages/schema/schema-scripts-form.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/schema-scripts-form.component.html @@ -1,5 +1,5 @@ - + Scripts @@ -23,7 +23,7 @@ - + diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-scripts-form.component.ts b/src/Squidex/app/features/schemas/pages/schema/schema-scripts-form.component.ts index ba545655a..25ea72bf5 100644 --- a/src/Squidex/app/features/schemas/pages/schema/schema-scripts-form.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/schema-scripts-form.component.ts @@ -21,7 +21,7 @@ import { }) export class SchemaScriptsFormComponent implements OnInit { @Output() - public completed = new EventEmitter(); + public complete = new EventEmitter(); @Input() public schema: SchemaDetailsDto; @@ -40,8 +40,8 @@ export class SchemaScriptsFormComponent implements OnInit { this.editForm.load(this.schema.scripts); } - public complete() { - this.completed.emit(); + public emitComplete() { + this.complete.emit(); } public selectField(field: string) { @@ -54,7 +54,7 @@ export class SchemaScriptsFormComponent implements OnInit { if (value) { this.schemasState.configureScripts(this.schema, value) .subscribe(() => { - this.complete(); + this.emitComplete(); }, error => { this.editForm.submitFailed(error); }); diff --git a/src/Squidex/app/features/schemas/pages/schemas/schema-form.component.html b/src/Squidex/app/features/schemas/pages/schemas/schema-form.component.html index 41a5a348c..aace70a40 100644 --- a/src/Squidex/app/features/schemas/pages/schemas/schema-form.component.html +++ b/src/Squidex/app/features/schemas/pages/schemas/schema-form.component.html @@ -1,5 +1,5 @@ - + Clone Schema @@ -84,7 +84,7 @@ - + diff --git a/src/Squidex/app/features/schemas/pages/schemas/schema-form.component.ts b/src/Squidex/app/features/schemas/pages/schemas/schema-form.component.ts index a11932317..fdac8d2fd 100644 --- a/src/Squidex/app/features/schemas/pages/schemas/schema-form.component.ts +++ b/src/Squidex/app/features/schemas/pages/schemas/schema-form.component.ts @@ -23,10 +23,10 @@ import { }) export class SchemaFormComponent implements OnInit { @Output() - public created = new EventEmitter(); + public complete = new EventEmitter(); @Output() - public cancelled = new EventEmitter(); + public cancel = new EventEmitter(); @Input() public import: any; @@ -55,12 +55,12 @@ export class SchemaFormComponent implements OnInit { return false; } - public complete(schema: SchemaDto) { - this.created.emit(schema); + public emitComplete(value: SchemaDto) { + this.complete.emit(value); } - public cancel() { - this.cancelled.emit(); + public emitCancel() { + this.cancel.emit(); } public createSchema() { @@ -71,7 +71,7 @@ export class SchemaFormComponent implements OnInit { this.schemasState.create(schemaDto) .subscribe(dto => { - this.complete(dto); + this.emitComplete(dto); }, error => { this.createForm.submitFailed(error); }); diff --git a/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html b/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html index 07341296a..3fb249b18 100644 --- a/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html +++ b/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html @@ -25,7 +25,7 @@ [name]="category" [schemas]="schemasState.schemas | async" [schemasFilter]="schemasFilter.valueChanges | async" - (removing)="removeCategory(category)"> + (remove)="removeCategory(category)"> @@ -36,8 +36,8 @@ + (cancel)="addSchemaDialog.hide()" + (create)="redirectSchema($event)"> diff --git a/src/Squidex/app/features/settings/pages/clients/client.component.html b/src/Squidex/app/features/settings/pages/clients/client.component.html index 476038fd9..9ebb54ab5 100644 --- a/src/Squidex/app/features/settings/pages/clients/client.component.html +++ b/src/Squidex/app/features/settings/pages/clients/client.component.html @@ -80,7 +80,7 @@
- + Connect diff --git a/src/Squidex/app/framework/angular/forms/tag-editor.component.ts b/src/Squidex/app/framework/angular/forms/tag-editor.component.ts index db787842b..210825dc0 100644 --- a/src/Squidex/app/framework/angular/forms/tag-editor.component.ts +++ b/src/Squidex/app/framework/angular/forms/tag-editor.component.ts @@ -91,6 +91,12 @@ interface State { changeDetection: ChangeDetectionStrategy.OnPush }) export class TagEditorComponent extends StatefulControlComponent implements AfterViewInit, OnInit { + @ViewChild('form') + public formElement: ElementRef; + + @ViewChild('input') + public inputElement: ElementRef; + @Input() public converter: Converter = new StringConverter(); @@ -118,11 +124,10 @@ export class TagEditorComponent extends StatefulControlComponent i @Input() public inputName = 'tag-editor'; - @ViewChild('form') - public formElement: ElementRef; - - @ViewChild('input') - public inputElement: ElementRef; + @Input() + public set disabled(value: boolean) { + this.setDisabledState(value); + } public addInput = new FormControl(); diff --git a/src/Squidex/app/framework/angular/modals/dialog-renderer.component.html b/src/Squidex/app/framework/angular/modals/dialog-renderer.component.html index 6e2782474..ee5960905 100644 --- a/src/Squidex/app/framework/angular/modals/dialog-renderer.component.html +++ b/src/Squidex/app/framework/angular/modals/dialog-renderer.component.html @@ -1,6 +1,6 @@ - + {{snapshot.dialogRequest?.title}} @@ -17,7 +17,7 @@
- +
diff --git a/src/Squidex/app/framework/angular/modals/modal-dialog.component.html b/src/Squidex/app/framework/angular/modals/modal-dialog.component.html index bf7383621..86afe1fc3 100644 --- a/src/Squidex/app/framework/angular/modals/modal-dialog.component.html +++ b/src/Squidex/app/framework/angular/modals/modal-dialog.component.html @@ -8,7 +8,7 @@ -
@@ -30,4 +30,4 @@
- \ No newline at end of file + \ No newline at end of file diff --git a/src/Squidex/app/framework/angular/modals/modal-dialog.component.ts b/src/Squidex/app/framework/angular/modals/modal-dialog.component.ts index e845e9bd2..d549ae62c 100644 --- a/src/Squidex/app/framework/angular/modals/modal-dialog.component.ts +++ b/src/Squidex/app/framework/angular/modals/modal-dialog.component.ts @@ -49,7 +49,7 @@ export class ModalDialogComponent extends StatefulComponent implements Af public contentClass = ''; @Output() - public closed = new EventEmitter(); + public close = new EventEmitter(); @ViewChild('tabsElement') public tabsElement: ElementRef; @@ -70,4 +70,8 @@ export class ModalDialogComponent extends StatefulComponent implements Af this.next(() => ({ hasTabs, hasFooter })); } + + public emitClose() { + this.close.emit(); + } } \ No newline at end of file diff --git a/src/Squidex/app/framework/angular/pager.component.html b/src/Squidex/app/framework/angular/pager.component.html index e54c52966..36b3a6e42 100644 --- a/src/Squidex/app/framework/angular/pager.component.html +++ b/src/Squidex/app/framework/angular/pager.component.html @@ -2,10 +2,10 @@ diff --git a/src/Squidex/app/framework/angular/pager.component.ts b/src/Squidex/app/framework/angular/pager.component.ts index c85eaf9cd..0be4db6ae 100644 --- a/src/Squidex/app/framework/angular/pager.component.ts +++ b/src/Squidex/app/framework/angular/pager.component.ts @@ -27,4 +27,12 @@ export class PagerComponent { @Input() public hideWhenButtonsDisabled = false; + + public emitNext() { + this.nextPage.emit(); + } + + public emitPrev() { + this.prevPage.emit(); + } } \ No newline at end of file diff --git a/src/Squidex/app/framework/angular/sorted.directive.ts b/src/Squidex/app/framework/angular/sorted.directive.ts index 4e15dc7e3..13127fc40 100644 --- a/src/Squidex/app/framework/angular/sorted.directive.ts +++ b/src/Squidex/app/framework/angular/sorted.directive.ts @@ -21,8 +21,8 @@ export class SortedDirective implements OnDestroy, OnInit { @Input('sqxSortModel') public sortModel: any[]; - @Output('sqxSorted') - public sorted = new EventEmitter(); + @Output('sqxSort') + public sort = new EventEmitter(); constructor( private readonly elementRef: ElementRef @@ -49,7 +49,7 @@ export class SortedDirective implements OnDestroy, OnInit { newModel.splice(event.oldIndex, 1); newModel.splice(event.newIndex, 0, item); - this.sorted.emit(newModel); + this.sort.emit(newModel); } }, diff --git a/src/Squidex/app/framework/state.ts b/src/Squidex/app/framework/state.ts index 4a911778d..c6d37da5b 100644 --- a/src/Squidex/app/framework/state.ts +++ b/src/Squidex/app/framework/state.ts @@ -98,7 +98,7 @@ export class Form { } export class Model { - protected clone(update: ((v: any) => object) | object): any { + protected clone(update: ((v: any) => object) | object, validOnly = false): any { let values: object; if (Types.isFunction(update)) { values = update(this); @@ -106,7 +106,17 @@ export class Model { values = update; } - const clone = Object.assign(Object.create(Object.getPrototypeOf(this)), this, values); + const clone = Object.assign(Object.create(Object.getPrototypeOf(this)), this); + + for (let key in values) { + if (values.hasOwnProperty(key)) { + let value = values[key]; + + if (value || validOnly) { + clone[key] = value; + } + } + } if (Types.isFunction(clone.onCloned)) { clone.onCloned(); diff --git a/src/Squidex/app/shared/components/app-form.component.html b/src/Squidex/app/shared/components/app-form.component.html index f8086c1c1..5412343e4 100644 --- a/src/Squidex/app/shared/components/app-form.component.html +++ b/src/Squidex/app/shared/components/app-form.component.html @@ -1,5 +1,5 @@ - + Create {{template}} Sample @@ -33,7 +33,7 @@ - + diff --git a/src/Squidex/app/shared/components/app-form.component.ts b/src/Squidex/app/shared/components/app-form.component.ts index 7ebd576ad..1b812a6c6 100644 --- a/src/Squidex/app/shared/components/app-form.component.ts +++ b/src/Squidex/app/shared/components/app-form.component.ts @@ -23,7 +23,7 @@ import { }) export class AppFormComponent { @Output() - public completed = new EventEmitter(); + public complete = new EventEmitter(); @Input() public template = ''; @@ -37,8 +37,8 @@ export class AppFormComponent { ) { } - public complete() { - this.completed.emit(); + public emitComplete() { + this.complete.emit(); } public createApp() { @@ -49,7 +49,7 @@ export class AppFormComponent { this.appsStore.create(request) .subscribe(() => { - this.complete(); + this.emitComplete(); }, error => { this.createForm.submitFailed(error); }); diff --git a/src/Squidex/app/shared/components/asset-dialog.component.html b/src/Squidex/app/shared/components/asset-dialog.component.html new file mode 100644 index 000000000..4f436aafc --- /dev/null +++ b/src/Squidex/app/shared/components/asset-dialog.component.html @@ -0,0 +1,40 @@ + + + + Update Asset + + + + + +
+ + + + + +
+ +
+ + + + + +
+ +
+ + + + + +
+
+ + + + + +
+ \ No newline at end of file diff --git a/src/Squidex/app/shared/components/asset-dialog.component.scss b/src/Squidex/app/shared/components/asset-dialog.component.scss new file mode 100644 index 000000000..fbb752506 --- /dev/null +++ b/src/Squidex/app/shared/components/asset-dialog.component.scss @@ -0,0 +1,2 @@ +@import '_vars'; +@import '_mixins'; \ No newline at end of file diff --git a/src/Squidex/app/shared/components/asset-dialog.component.ts b/src/Squidex/app/shared/components/asset-dialog.component.ts new file mode 100644 index 000000000..19a8f33a7 --- /dev/null +++ b/src/Squidex/app/shared/components/asset-dialog.component.ts @@ -0,0 +1,78 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { FormBuilder } from '@angular/forms'; + +import { + AnnotateAssetForm, + AppsState, + AssetDto, + AssetsService, + AuthService, + StatefulComponent +} from '@app/shared/internal'; + +@Component({ + selector: 'sqx-asset-dialog', + styleUrls: ['./asset-dialog.component.scss'], + templateUrl: './asset-dialog.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AssetDialogComponent extends StatefulComponent implements OnInit { + @Input() + public asset: AssetDto; + + @Input() + public allTags: string[]; + + @Output() + public cancel = new EventEmitter(); + + @Output() + public complete = new EventEmitter(); + + public annotateForm = new AnnotateAssetForm(this.formBuilder); + + constructor(changeDetector: ChangeDetectorRef, + private readonly appsState: AppsState, + private readonly assetsService: AssetsService, + private readonly authState: AuthService, + private readonly formBuilder: FormBuilder + ) { + super(changeDetector, { + isRenaming: false, + isTagging: false, + progress: 0 + }); + } + + public ngOnInit() { + this.annotateForm.load(this.asset); + } + + public emitCancel() { + this.cancel.emit(); + } + + public emitComplete(asset: AssetDto) { + this.complete.emit(asset); + } + + public annotateAsset() { + const value = this.annotateForm.submit(this.asset); + + if (value) { + this.assetsService.putAsset(this.appsState.appName, this.asset.id, value, this.asset.version) + .subscribe(dto => { + this.emitComplete(this.asset.annnotate(value, this.authState.user!.token, dto.version)); + }, error => { + this.annotateForm.submitFailed(error); + }); + } + } +} \ No newline at end of file diff --git a/src/Squidex/app/shared/components/asset.component.html b/src/Squidex/app/shared/components/asset.component.html index f8cd3a23a..c37b4b26c 100644 --- a/src/Squidex/app/shared/components/asset.component.html +++ b/src/Squidex/app/shared/components/asset.component.html @@ -1,5 +1,5 @@ -
+
@@ -17,14 +17,16 @@
@@ -53,28 +55,15 @@
Drop to update
-