diff --git a/backend/i18n/frontend_en.json b/backend/i18n/frontend_en.json index ced0c5b82..0a2c6655e 100644 --- a/backend/i18n/frontend_en.json +++ b/backend/i18n/frontend_en.json @@ -403,6 +403,7 @@ "contents.componentsNoSchema": "Add at least one schema to add components.", "contents.contentNotValid": "Content element not valid, please check the field with the red bar on the left in all languages (if localizable).", "contents.contentTab.editor": "Editor", + "contents.contentTab.inspect": "Inspect", "contents.contentTab.references": "References", "contents.contentTab.referencing": "Referencing", "contents.create": "New", @@ -425,6 +426,9 @@ "contents.draftStatus": "New Version", "contents.editPageTitle": "Edit Content", "contents.idPlaceholder": "Define a custom ID or leave empty to let Squidex generate one.", + "contents.inspectContent": "Content", + "contents.inspectData": "Data", + "contents.inspectFlatData": "Flat Data", "contents.invariantFieldDescription": "The '{fieldName}' field of the content item.", "contents.languageModeAll": "All Languages", "contents.languageModeSingle": "Single Language", diff --git a/backend/i18n/frontend_it.json b/backend/i18n/frontend_it.json index 5806e823b..e8ec3b583 100644 --- a/backend/i18n/frontend_it.json +++ b/backend/i18n/frontend_it.json @@ -403,6 +403,7 @@ "contents.componentsNoSchema": "Add at least one schema to add components.", "contents.contentNotValid": "Un elemento del contenuto non è valido, verifica il campo con la barra rossa per tutte le lingue impostate (se presenti).", "contents.contentTab.editor": "Editor", + "contents.contentTab.inspect": "Inspect", "contents.contentTab.references": "Collegato a", "contents.contentTab.referencing": "Collegato da", "contents.create": "Nuovo", @@ -425,6 +426,9 @@ "contents.draftStatus": "Nuova versione", "contents.editPageTitle": "Modifica contenuto", "contents.idPlaceholder": "Define a custom ID or leave empty to let Squidex generate one.", + "contents.inspectContent": "Content", + "contents.inspectData": "Data", + "contents.inspectFlatData": "Flat Data", "contents.invariantFieldDescription": "Il campo '{fieldName}' del contenuto.", "contents.languageModeAll": "Tutte le lingue", "contents.languageModeSingle": "Una sola lingua", diff --git a/backend/i18n/frontend_nl.json b/backend/i18n/frontend_nl.json index 000df8033..10bcb5e9d 100644 --- a/backend/i18n/frontend_nl.json +++ b/backend/i18n/frontend_nl.json @@ -403,6 +403,7 @@ "contents.componentsNoSchema": "Add at least one schema to add components.", "contents.contentNotValid": "Inhoudselement niet geldig, controleer het veld met de rode balk aan de linkerkant in alle talen (indien lokaliseerbaar).", "contents.contentTab.editor": "Editor", + "contents.contentTab.inspect": "Inspect", "contents.contentTab.references": "References", "contents.contentTab.referencing": "Referencing", "contents.create": "Nieuw", @@ -425,6 +426,9 @@ "contents.draftStatus": "Nieuwe versie", "contents.editPageTitle": "Inhoud bewerken", "contents.idPlaceholder": "Define a custom ID or leave empty to let Squidex generate one.", + "contents.inspectContent": "Content", + "contents.inspectData": "Data", + "contents.inspectFlatData": "Flat Data", "contents.invariantFieldDescription": "Het veld '{fieldName}' van het inhoudsitem.", "contents.languageModeAll": "Alle talen", "contents.languageModeSingle": "Enkele taal", diff --git a/backend/i18n/frontend_zh.json b/backend/i18n/frontend_zh.json index bf43a97c8..e1fc9eb9a 100644 --- a/backend/i18n/frontend_zh.json +++ b/backend/i18n/frontend_zh.json @@ -403,6 +403,7 @@ "contents.componentsNoSchema": "添加至少一个Schemas来添加组件。", "contents.contentNotValid": "内容元素无效,请用所有语言(如果可本地化)检查左侧带有红色条的字段。", "contents.contentTab.editor": "编辑器", + "contents.contentTab.inspect": "Inspect", "contents.contentTab.references": "参考资料", "contents.contentTab.referencing": "引用", "contents.create": "新建", @@ -425,6 +426,9 @@ "contents.draftStatus": "新版本", "contents.editPageTitle": "编辑内容", "contents.idPlaceholder": "Define a custom ID or leave empty to let Squidex generate one.", + "contents.inspectContent": "Content", + "contents.inspectData": "Data", + "contents.inspectFlatData": "Flat Data", "contents.invariantFieldDescription": "内容项的 '{fieldName}' 字段。", "contents.languageModeAll": "所有语言", "contents.languageModeSingle": "单一语言", diff --git a/backend/i18n/source/frontend_en.json b/backend/i18n/source/frontend_en.json index ced0c5b82..0a2c6655e 100644 --- a/backend/i18n/source/frontend_en.json +++ b/backend/i18n/source/frontend_en.json @@ -403,6 +403,7 @@ "contents.componentsNoSchema": "Add at least one schema to add components.", "contents.contentNotValid": "Content element not valid, please check the field with the red bar on the left in all languages (if localizable).", "contents.contentTab.editor": "Editor", + "contents.contentTab.inspect": "Inspect", "contents.contentTab.references": "References", "contents.contentTab.referencing": "Referencing", "contents.create": "New", @@ -425,6 +426,9 @@ "contents.draftStatus": "New Version", "contents.editPageTitle": "Edit Content", "contents.idPlaceholder": "Define a custom ID or leave empty to let Squidex generate one.", + "contents.inspectContent": "Content", + "contents.inspectData": "Data", + "contents.inspectFlatData": "Flat Data", "contents.invariantFieldDescription": "The '{fieldName}' field of the content item.", "contents.languageModeAll": "All Languages", "contents.languageModeSingle": "Single Language", diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs index 913b3aea8..6059e1345 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs @@ -203,10 +203,11 @@ namespace Squidex.Domain.Apps.Core.HandleRules return; } + var skipReason = SkipReason.None; + if (!triggerHandler.Trigger(typed, context)) { - jobs.Add(JobResult.ConditionDoesNotMatch); - return; + skipReason = SkipReason.ConditionDoesNotMatch; } await foreach (var enrichedEvent in triggerHandler.CreateEnrichedEventsAsync(typed, context, ct)) @@ -222,17 +223,12 @@ namespace Squidex.Domain.Apps.Core.HandleRules if (!triggerHandler.Trigger(enrichedEvent, context)) { - if (jobs.Count == 0) - { - jobs.Add(JobResult.ConditionDoesNotMatch); - } - - continue; + skipReason = SkipReason.ConditionDoesNotMatch; } var job = await CreateJobAsync(actionHandler, enrichedEvent, context, now); - jobs.Add(job); + jobs.Add(job with { SkipReason = skipReason }); } catch (Exception ex) { diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs index 2fe4af2e4..126eea198 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs @@ -411,6 +411,8 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { var context = Rule(); + var enrichedEvent = new EnrichedContentEvent { AppId = appId }; + var @event = Envelope.Create(new ContentCreated()); A.CallTo(() => ruleTriggerHandler.Handles(@event.Payload)) @@ -419,12 +421,13 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules A.CallTo(() => ruleTriggerHandler.Trigger(MatchPayload(@event), context)) .Returns(false); - var (_, _, reason) = await sut.CreateJobsAsync(@event, context).SingleAsync(); + A.CallTo(() => ruleTriggerHandler.CreateEnrichedEventsAsync(MatchPayload(@event), context, default)) + .Returns(new List { enrichedEvent }.ToAsyncEnumerable()); - Assert.Equal(SkipReason.ConditionDoesNotMatch, reason); + var (job, _, reason) = await sut.CreateJobsAsync(@event, context).SingleAsync(); - A.CallTo(() => ruleTriggerHandler.CreateEnrichedEventsAsync(A>._, A._, default)) - .MustNotHaveHappened(); + Assert.Equal(SkipReason.ConditionDoesNotMatch, reason); + Assert.NotNull(job); } [Fact] diff --git a/frontend/app-config/webpack.config.js b/frontend/app-config/webpack.config.js index a5e739e69..049aaba0a 100644 --- a/frontend/app-config/webpack.config.js +++ b/frontend/app-config/webpack.config.js @@ -53,7 +53,7 @@ module.exports = function calculateConfig(env) { const configFile = isTests ? 'tsconfig.spec.json' : 'tsconfig.app.json'; // eslint-disable-next-line no-console - console.log(`Use ${configFile}, Production: ${isProduction}`); + console.log(`Use ${configFile}, Production: ${!!isProduction}`); const config = { mode: isProduction ? 'production' : 'development', diff --git a/frontend/app/features/administration/guards/user-must-exist.guard.ts b/frontend/app/features/administration/guards/user-must-exist.guard.ts index 127af87b5..f5113a357 100644 --- a/frontend/app/features/administration/guards/user-must-exist.guard.ts +++ b/frontend/app/features/administration/guards/user-must-exist.guard.ts @@ -9,8 +9,7 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router'; import { UsersState } from '@app/features/administration/internal'; import { allParams } from '@app/framework'; -import { Observable } from 'rxjs'; -import { map, tap } from 'rxjs/operators'; +import { Observable, map, tap } from 'rxjs'; @Injectable() export class UserMustExistGuard implements CanActivate { diff --git a/frontend/app/features/content/declarations.ts b/frontend/app/features/content/declarations.ts index 8c7e14f86..c4b082b80 100644 --- a/frontend/app/features/content/declarations.ts +++ b/frontend/app/features/content/declarations.ts @@ -14,6 +14,7 @@ export * from './pages/content/editor/content-editor.component'; export * from './pages/content/editor/content-field.component'; export * from './pages/content/editor/content-section.component'; export * from './pages/content/editor/field-languages.component'; +export * from './pages/content/inspecting/content-inspection.component'; export * from './pages/content/references/content-references.component'; export * from './pages/contents/contents-filters-page.component'; export * from './pages/contents/contents-page.component'; diff --git a/frontend/app/features/content/module.ts b/frontend/app/features/content/module.ts index deba1a432..e5683a1c2 100644 --- a/frontend/app/features/content/module.ts +++ b/frontend/app/features/content/module.ts @@ -10,8 +10,7 @@ import { RouterModule, Routes } from '@angular/router'; import { CanDeactivateGuard, ContentMustExistGuard, LoadLanguagesGuard, LoadSchemasGuard, SchemaMustExistPublishedGuard, SchemaMustNotBeSingletonGuard, SqxFrameworkModule, SqxSharedModule } from '@app/shared'; import { ScrollingModule } from '@angular/cdk/scrolling'; import { ScrollingModule as ScrollingModuleExperimental } from '@angular/cdk-experimental/scrolling'; -import { ArrayEditorComponent, ArrayItemComponent, AssetsEditorComponent, CommentsPageComponent, ComponentComponent, ComponentSectionComponent, ContentComponent, ContentCreatorComponent, ContentEditorComponent, ContentEventComponent, ContentExtensionComponent, ContentFieldComponent, ContentHistoryPageComponent, ContentPageComponent, ContentReferencesComponent, ContentSectionComponent, ContentsFiltersPageComponent, ContentsPageComponent, CustomViewEditorComponent, DueTimeSelectorComponent, FieldEditorComponent, FieldLanguagesComponent, IFrameEditorComponent, PreviewButtonComponent, ReferenceItemComponent, ReferencesEditorComponent, SchemasPageComponent, SidebarPageComponent, StockPhotoEditorComponent } from './declarations'; -import { CalendarPageComponent } from './pages/calendar/calendar-page.component'; +import { ArrayEditorComponent, ArrayItemComponent, AssetsEditorComponent, CalendarPageComponent, CommentsPageComponent, ComponentComponent, ComponentSectionComponent, ContentComponent, ContentCreatorComponent, ContentEditorComponent, ContentEventComponent, ContentExtensionComponent, ContentFieldComponent, ContentHistoryPageComponent, ContentInspectionComponent, ContentPageComponent, ContentReferencesComponent, ContentSectionComponent, ContentsFiltersPageComponent, ContentsPageComponent, CustomViewEditorComponent, DueTimeSelectorComponent, FieldEditorComponent, FieldLanguagesComponent, IFrameEditorComponent, PreviewButtonComponent, ReferenceItemComponent, ReferencesEditorComponent, SchemasPageComponent, SidebarPageComponent, StockPhotoEditorComponent } from './declarations'; const routes: Routes = [ { @@ -95,14 +94,15 @@ const routes: Routes = [ CalendarPageComponent, CommentsPageComponent, ComponentComponent, - ContentCreatorComponent, ComponentSectionComponent, ContentComponent, + ContentCreatorComponent, ContentEditorComponent, ContentEventComponent, ContentExtensionComponent, ContentFieldComponent, ContentHistoryPageComponent, + ContentInspectionComponent, ContentPageComponent, ContentReferencesComponent, ContentSectionComponent, diff --git a/frontend/app/features/content/pages/content/content-page.component.html b/frontend/app/features/content/pages/content/content-page.component.html index 0d68850a1..7b365b182 100644 --- a/frontend/app/features/content/pages/content/content-page.component.html +++ b/frontend/app/features/content/pages/content/content-page.component.html @@ -17,12 +17,8 @@ - - - - - -